mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-09 06:07:05 -06:00
98 lines
2.1 KiB
C++
Executable File
98 lines
2.1 KiB
C++
Executable File
// ItemIDListUtils.h
|
|
|
|
#pragma once
|
|
|
|
#ifndef __ITEMIDLISTUTILS_H
|
|
#define __ITEMIDLISTUTILS_H
|
|
|
|
#include "Common/Types.h"
|
|
|
|
/////////////////////////////
|
|
// It is not for shell using
|
|
// It's for internal using only
|
|
// since it uses CoTaskMemFree instead SHGetMalloc
|
|
|
|
namespace NItemIDList {
|
|
|
|
LPITEMIDLIST GetNextItem(LPCITEMIDLIST anIDList);
|
|
UINT32 GetSize(LPCITEMIDLIST anIDList);
|
|
LPITEMIDLIST GetLastItem(LPCITEMIDLIST anIDList);
|
|
|
|
class CHolder
|
|
{
|
|
LPITEMIDLIST m_Object;
|
|
public:
|
|
CHolder(): m_Object(NULL) {}
|
|
CHolder(const CHolder& anItemIDList);
|
|
~CHolder() { Free(); }
|
|
void Attach(LPITEMIDLIST anObject)
|
|
{
|
|
if (m_Object != NULL)
|
|
Free();
|
|
m_Object = anObject;
|
|
}
|
|
LPITEMIDLIST Detach()
|
|
{
|
|
LPITEMIDLIST anObject = m_Object;
|
|
m_Object = NULL;
|
|
return anObject;
|
|
}
|
|
void Free();
|
|
bool Create(UINT16 aPureSize);
|
|
operator LPITEMIDLIST() { return m_Object;}
|
|
operator LPCITEMIDLIST() const { return m_Object;}
|
|
LPITEMIDLIST* operator&() { return &m_Object; }
|
|
LPITEMIDLIST operator->() { return m_Object; }
|
|
|
|
CHolder& operator=(LPCITEMIDLIST anObject);
|
|
CHolder& operator=(const CHolder &anObject);
|
|
};
|
|
|
|
}
|
|
|
|
class CItemIDListManager
|
|
{
|
|
public:
|
|
CItemIDListManager();
|
|
~CItemIDListManager();
|
|
public:
|
|
LPITEMIDLIST Create(UINT16 aPureSize);
|
|
void Delete(LPITEMIDLIST anIDList);
|
|
LPITEMIDLIST Copy(LPCITEMIDLIST anIDListSrc);
|
|
// CZipIDData* GetDataPointer(LPCITEMIDLIST anIDList);
|
|
LPITEMIDLIST Concatenate(LPCITEMIDLIST anIDList1, LPCITEMIDLIST anIDList2);
|
|
private:
|
|
LPMALLOC m_pMalloc;
|
|
};
|
|
|
|
class CShellItemIDList
|
|
{
|
|
CItemIDListManager *m_Manager;
|
|
LPITEMIDLIST m_Object;
|
|
public:
|
|
CShellItemIDList(CItemIDListManager *aManager):
|
|
m_Manager(aManager),
|
|
m_Object(NULL) {}
|
|
bool Create(UINT16 aPureSize)
|
|
{
|
|
Free();
|
|
m_Object = m_Manager->Create(aPureSize);
|
|
return (m_Object != NULL);
|
|
}
|
|
~CShellItemIDList() { Free(); }
|
|
void Free()
|
|
{
|
|
if(m_Object != NULL)
|
|
m_Manager->Delete(m_Object);
|
|
m_Object = NULL;
|
|
}
|
|
void Attach(LPITEMIDLIST anObject)
|
|
{
|
|
Free();
|
|
m_Object = anObject;
|
|
}
|
|
operator LPITEMIDLIST() { return m_Object;}
|
|
LPITEMIDLIST* operator&() { return &m_Object; }
|
|
};
|
|
|
|
#endif |