00001
00026 #ifndef INC_MI32_LONGLIST_H
00027 #define INC_MI32_LONGLIST_H
00028
00029 #ifndef INC_MI32_SIMPLEAR_H
00030 #include <mi32/simplear.h>
00031 #endif
00032
00033 #ifndef GENERATING_DOXYGEN_OUTPUT
00034 class UNSIGNEDSET;
00035 #endif
00036
00037
00043 struct LONGLIST {
00044 LONGLIST ();
00045 ~LONGLIST ();
00046
00048 void Clear ();
00049
00050 void Free ();
00051 ERRVALUE Add (INT32 value);
00052 ERRVALUE AddUnique (INT32 value);
00053 ERRVALUE SetBits (const UNSIGNEDSET& set);
00054 ERRVALUE AddWithFlag (INT32 value, UINT8 flag);
00055 ERRVALUE AddUniqueWithFlag (INT32 value, UINT8 flag);
00056 ERRVALUE Remove (INT32 value);
00057 bool CheckIn (INT32 value) const;
00058 bool GetNext (INT32 *ip, INT32*valp) const;
00059 bool GetFirst (INT32 *ip, INT32*valp) const;
00060 bool GetLast (INT32*valp) const;
00061 INT32 GetList (INT32** listp) const;
00062 ERRVALUE GetList (SIMPLE_ARRAY<INT32>& List) const;
00063 UINT8 GetFlags (INT32 Index) const { return m_flags[Index]; }
00064 INT32 GetValue (INT32 Index) const { return m_List[Index]; }
00065
00066 bool HasFlags (
00067 ) const { return (!m_UseBits && m_flags != 0); }
00068
00069 bool IsSorted (
00070 ) const { return m_sorted; }
00071
00072 void SetUseBits (
00073 bool val = true
00074 ) { m_UseBits = val; }
00075
00076 void SetUserData (
00077 INT32 val
00078 ) { m_UserData = val; }
00079
00080 INT32 GetNumItems (
00081 ) const { return m_num; }
00082
00083 INT32 GetUserData (
00084 ) const { return m_UserData; }
00085
00086 ERRVALUE Sort (
00087 int (*cmpfunc)(INT32, INT32, void*) = 0,
00088 void* cmpdata = 0
00089 );
00090
00095 void SetSorted (
00096 bool val = true
00097 ) {
00098 m_sorted = val;
00099 }
00100
00101 private:
00102 #ifndef GENERATING_DOXYGEN_OUTPUT
00103
00104 INT32 m_NumAlloc;
00105 INT32 m_num;
00106 INT32 *m_List;
00107 UINT8 *m_flags;
00108 bool m_sorted;
00109 bool m_UseBits;
00110 INT32 m_UserData;
00111
00112 static int HeapSortCompare(INT32, INT32, void*);
00113 static int HeapSortSwap(INT32, INT32, void*);
00114
00115 #endif
00116 };
00117
00118 #endif // INC_MI32_LONGLIST_H