Files
core/PdfReader/Src/Hash.h
Ilya.Kirillov 65d72ae4ec Убраны лишние файлы. Все файлы сконвертированы в UTF8.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62550 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-21 00:02:55 +03:00

87 lines
2.3 KiB
C++

#ifndef _PDF_READER_HASH_H
#define _PDF_READER_HASH_H
namespace PdfReader
{
class StringExt;
struct THashBucket;
struct THashIter;
//------------------------------------------------------------------------
// CHash
//------------------------------------------------------------------------
class CHash
{
public:
CHash(bool bDeleteKeys = false);
~CHash();
void Add(StringExt *seKey, void *pValue);
void Add(StringExt *seKey, int nValue);
void Replace(StringExt *seKey, void *pValue);
void Replace(StringExt *seKey, int nValue);
void *Lookup(StringExt *seKey);
void *Lookup(char *sKey);
int LookupInt(StringExt *seKey);
int LookupInt(char *sKey);
void *Remove(StringExt *seKey);
void *Remove(char *seKey);
int RemoveInt(StringExt *seKey);
int RemoveInt(char *sKey);
int GetLength()
{
return m_nLength;
}
void StartIter(THashIter **ppIter);
bool GetNext(THashIter **ppIter, StringExt **pseKey, void **ppValue);
bool GetNext(THashIter **ppIter, StringExt **pseKey, int *pnValue);
void DeleteIter(THashIter **ppIter);
private:
void Expand();
THashBucket *Find(StringExt *seKey, int *pnHashIndex);
THashBucket *Find(char *sKey, int *pnHashIndex);
int Hash(StringExt *seKey);
int Hash(char *sKey);
private:
bool m_bDeleteKeys; // Будем ли удалять имена? set if key strings should be deleted
int m_nBucketsCount; // Количество наборов
int m_nLength; // Количество вхождений
THashBucket **m_ppTable;
};
#define DeleteCHash(hash, T) \
do \
{ \
CHash *_hash = (hash); \
{ \
THashIter *_iter; \
StringExt *_key; \
void *_p; \
_hash->StartIter(&_iter); \
while (_hash->GetNext(&_iter, &_key, &_p)) \
{ \
delete (T*)_p; \
} \
delete _hash; \
} \
} while(0);
}
#endif // _PDF_READER_HASH_H