Files
core/ASCOfficePDFReader/List.h

88 lines
2.3 KiB
C++

#ifndef _LIST_H
#define _LIST_H
//------------------------------------------------------------------------
// CList
//------------------------------------------------------------------------
class CList
{
public:
// Ñîçäàåì ïóñòîé ñïèñîê.
CList();
// Ñîçäàåì ïóñòîé ñïèñîê ñ ñ âûäåëåííîé ïàìÿòüþ ïîä <nSize> ýëåìåíòîâ.
CList(int nSize);
// Äåñòðóêòîð.
~CList();
int GetLength()
{
return m_nCount;
}
// Âîçâðàùàåò <nIndex>Ûé ýëåìåíò.
// Åñëè 0 <= nIndex < m_nCount, âîçâðàùàåò NULL.
void *GetByIndex(int nIndex)
{
if ( nIndex < 0 || nIndex >= m_nCount )
return NULL;
return m_ppData[ nIndex ];
}
// Äîáàâëÿåì ýëåìåíò â îêíåö ñïèñêà.
void Append(void *pItem);
// Äîáàâëÿåì äðóãîé ñïèñîê â êîíåö äàííîãî.
void Append(CList *pList);
// Âñòàâëÿåì ýëåìåíò íà ìåñòî <nIndex>.
// Åñëè !(0 <= nIndex <= m_nCount), íè÷åãî íå äåëàåì.
void Insert(int nIndex, void *pItem);
// Óäàëÿåì èç ñïèñêà è âîçâðàùàåì ññûëêó íà ýëåìåíò.
// Åñëè !(0 <= nIndex <= m_nCount), íè÷åãî íå äåëàåì.
void *Delete(int nIndex);
// Ñîðòèðóåì ñïèñîê, â ñîîòâåòñòâèè ñ äàííîé ôóíêöèåé
// ñðàíâåíèÿ.
void Sort(int (*CompareFunc)( const void *pItem1, const void *pItem2 ) );
// Åñëè m_nIncreament > 0, òîãäà ïðè ðàñøèðåíèè ñïèñêà ðîâíî
// m_nIncreament ýëåìåíòîâ áóäåò äîáàâëÿòüñÿ. Åñëè m_nIncreament <= 0,
// òîãäà ñïèñîê áóäåì óäâàèâàòü ïðè ðàñøèðåíèè.
void SetAllocationIncreament(int nIncreament)
{
m_nIncreament = nIncreament;
}
private:
void Expand();
void Shrink();
private:
void **m_ppData; // ñïèñîê ýëåìåíòîâ
int m_nItemSize; // ðàçìåð äàííûõ â ìàññèâå
int m_nCount; // êîëè÷åñòîâ ýëåìåíòîâ â ñïèñêå
int m_nIncreament; // íà ñêîëüêî áóäåì óâåëè÷èâàòü ñïèñîê
};
#define DeleteCList(list, T) \
do { \
CList *_list = (list); \
{ \
int _i; \
for (_i = 0; _i < _list->GetLength(); ++_i) { \
delete (T*)_list->GetByIndex(_i); \
} \
delete _list; \
} \
} while (0)
#endif /* _LIST_H */