00001
00002
00003
00004
00005
00008
00009 #ifndef _ROKU_INCLUDE_CASCADE_INTERPROCESS_CASCADESHAREDLIST_H
00010 #define _ROKU_INCLUDE_CASCADE_INTERPROCESS_CASCADESHAREDLIST_H
00011
00012 #include <cascade/CascadeObject.h>
00013
00034 class CascadeSharedList : public CascadeObject
00035 {
00036 public:
00037 CascadeSharedList();
00041 virtual ~CascadeSharedList();
00045
00046 public:
00047 enum {
00048 kMaxHeaderSize = 0xF000,
00049 kMaxEntrySize = 0xF000,
00050 kMaxEntries = 0xF000
00051 };
00052
00053 public:
00054 bool Open(const char * pName, u16 nHeaderSize, u16 nEntrySize, u16 nMaxEntries, bool bCreateIfNecessary);
00088 bool Close();
00105 bool MapLock();
00113 bool Unlock();
00122 public:
00123
00124 typedef void Entry;
00133 bool InsertAtHead(void * pData);
00142 bool AddToTail(void * pData);
00151 bool Insert(void * pData, Entry * pEntryToInsertBefore);
00164 u16 GetNumEntries();
00175 u16 GetMaxEntries();
00180 u16 GetNumEntriesWatermark();
00186 Entry * GetFirstEntry();
00191 Entry * GetLastEntry();
00196 Entry * GetNextEntry(Entry * pEntry);
00203 Entry * GetPrevEntry(Entry * pEntry);
00210 int GetEntryPID(Entry * pEntry);
00216 void ResetEntryPID(Entry * pEntry, int nPID);
00222 bool IsStalePIDEntry(Entry * pEntry);
00230 bool MoveEntry(Entry * pEntry, Entry * pEntryToMoveBefore);
00238 bool MoveEntryToHead(Entry * pEntry);
00245 bool MoveEntryToTail(Entry * pEntry);
00252 bool RemoveEntry(Entry * pEntry);
00260 void PurgeDeadPIDEntries();
00265 void * GetListHeader();
00276 typedef bool (EnumProc)(Entry * pEnry, void * pClientData);
00287 bool Enumerate(EnumProc * pEnumProc, void * pClientData);
00299 bool PIDPurgeEnumerate(EnumProc * pEnumProc, void * pClientData);
00313
00314 private:
00315 void * m_pSharedListInternal;
00316 };
00317
00318 #endif // #ifndef _ROKU_INCLUDE_CASCADE_INTERPROCESS_CASCADESHAREDLIST_H
00319
00321
00323
00324
00325
00326
00327