mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-14 20:24:39 +08:00
88 lines
2.3 KiB
C++
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 */
|