mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 05:24:10 +08:00
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62550 954022d7-b5bf-4e40-9824-e11837661b57
87 lines
2.3 KiB
C++
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
|