00001 #ifndef __RIPC_PRIMITIVE_H__ 00002 #define __RIPC_PRIMITIVE_H__ 00003 00004 #include "RIPCObject.h" 00005 00006 class RIPCSession; 00007 00013 class RIPC_DLL_ENTRY RIPCPrimitive { 00014 public: 00018 enum RIPCPrimitiveType { 00019 RIPC_MUTEX, 00020 RIPC_EVENT, 00021 RIPC_SEMAPHORE, 00022 RIPC_BARRIER, 00023 RIPC_LOCK, 00024 RIPC_SHARED_MEMORY, 00025 RIPC_QUEUE 00026 }; 00027 00028 enum RIPCRanks { 00029 DEFAULT_RANK = 0 00030 }; 00031 00036 virtual RIPCPrimitiveType getType() = 0; 00037 00042 char const* getTypeName(); 00043 00050 virtual char const* getName() = 0; 00051 00059 virtual bool alreadyExists() = 0; 00060 00066 void waitFor() { 00067 priorityWait(DEFAULT_RANK); 00068 } 00069 00077 bool waitFor(unsigned timeout) { 00078 return priorityWait(DEFAULT_RANK, timeout); 00079 } 00080 00089 virtual void priorityWait(int rank) = 0; 00090 00102 virtual bool priorityWait(int rank, unsigned timeout) = 0; 00103 00109 virtual void reset() = 0; 00110 00115 virtual void close() = 0; 00116 00121 virtual void* allocate(size_t size); 00122 00127 virtual void deallocate(void* obj, size_t size=0); 00128 00129 static void deallocator(RIPCObject const& objDesc); 00130 00131 virtual ~RIPCPrimitive() {} 00132 }; 00133 00134 #endif 00135