/*************************************************************************/ /* File : CKSynchroObject.h */ /* Author : Romain Sididris */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef CKSYNCOBJECT_H #define CKSYNCOBJECT_H "$Id:$" #include "CKObject.h" #include "CKObjectArray.h" /************************************************* Name: CKSynchroObject Summary: Class managing a rendez-vous mechanism Remarks: + Synchro Object are used in the Interface to create a Rendez-vous mechanism. Objects register themselves as arrived to a rendez-vous and ask for the permission to pass, this permission is granted when the specified number of object have arrived. + This class is mainly used by the corresponding parameter type CKPGUID_SYNCHRO. + The class id of CKSynchroObject is CKCID_SYNCHRO See also: *************************************************/ class CKSynchroObject : public CKObject { public : void Reset(); //------------------------------------------- // Rendez Vous void SetRendezVousNumberOfWaiters(int waiters); int GetRendezVousNumberOfWaiters(); CKBOOL CanIPassRendezVous(CKBeObject *asker); int GetRendezVousNumberOfArrivedObjects(); CKBeObject* GetRendezVousArrivedObject(int pos); //------------------------------------------------------------------- #ifdef DOCJETDUMMY // Docjet secret macro #else CKSynchroObject(CKContext *Context,CKSTRING name=NULL); virtual ~CKSynchroObject(); virtual CK_CLASSID GetClassID(); virtual CKStateChunk* Save(CKFile *file,CKDWORD flags); virtual CKERROR Load(CKStateChunk *chunk,CKFile* file); virtual void CheckPostDeletion(); virtual int GetMemoryOccupation(); virtual CKBOOL IsObjectUsed(CKObject* obj,CK_CLASSID cid); //-------------------------------------------- // Class Registering static CKSTRING GetClassName(); static int GetDependenciesCount(int mode); static CKSTRING GetDependencies(int i,int mode); static void Register(); static CKSynchroObject* CreateInstance(CKContext *Context); static void ReleaseInstance(CKContext* iContext,CKSynchroObject*); static CK_CLASSID m_ClassID; protected : int m_MaxWaiters; CKObjectArray m_Arrived; CKObjectArray m_Passed; #endif // Docjet secret macro }; /************************************************* Name: CKCriticalSectionObject Summary: Class managing a critical section mechanism Remarks: + A CriticalSection enables objects to acces resources using behaviors without risks of being executed concurrently. An object ask for the right to use a section through EnterCriticalSection and warm that is has finished with LeaveCriticalSection + This class is mainly used by the corresponding parameter type CKPGUID_CRITICALSECTION. + The class id of CKCriticalSectionObject is CKCID_CRITICALSECTION See also: *************************************************/ class CKCriticalSectionObject : public CKObject { public : void Reset(); CKBOOL EnterCriticalSection(CKBeObject *asker); CKBOOL LeaveCriticalSection(CKBeObject *asker); //------------------------------------------------------------------- #ifdef DOCJETDUMMY // Docjet secret macro #else CKCriticalSectionObject(CKContext *Context,CKSTRING name=NULL); virtual ~CKCriticalSectionObject(); virtual CK_CLASSID GetClassID(); virtual CKStateChunk* Save(CKFile *file,CKDWORD flags); virtual CKERROR Load(CKStateChunk *chunk,CKFile* file); virtual void CheckPostDeletion(); virtual int GetMemoryOccupation(); virtual CKBOOL IsObjectUsed(CKObject* obj,CK_CLASSID cid); //-------------------------------------------- // Class Registering static CKSTRING GetClassName(); static int GetDependenciesCount(int mode); static CKSTRING GetDependencies(int i,int mode); static void Register(); static CKCriticalSectionObject* CreateInstance(CKContext *Context); static void ReleaseInstance(CKContext* iContext,CKCriticalSectionObject*); static CK_CLASSID m_ClassID; protected : CK_ID m_ObjectInSection; #endif // Docjet secret macro }; /************************************************* Name: CKStateObject Summary: Class managing a global state mechanism Remarks: + A StateObject describes a global state variable that can be TRUE if EnterState is called or FALSE is ExitState is called. This variable is identified by a name and can be checked through IsStateActive. + This class is mainly used by the corresponding parameter type CKPGUID_STATE. + The class id of CKStateObject is CKCID_STATE See also: *************************************************/ class CKStateObject : public CKObject { public : //----------------------------------- // Event CKBOOL IsStateActive(); void EnterState(); void LeaveState(); //------------------------------------------------------------------- #ifdef DOCJETDUMMY // Docjet secret macro #else CKStateObject(CKContext *Context,CKSTRING name=NULL); virtual ~CKStateObject(); virtual CK_CLASSID GetClassID(); virtual CKStateChunk* Save(CKFile *file,CKDWORD flags); virtual CKERROR Load(CKStateChunk *chunk,CKFile* file); virtual int GetMemoryOccupation(); //-------------------------------------------- // Class Registering static CKSTRING GetClassName(); static int GetDependenciesCount(int mode); static CKSTRING GetDependencies(int i,int mode); static void Register(); static CKStateObject* CreateInstance(CKContext *Context); static void ReleaseInstance(CKContext* iContext,CKStateObject*); static CK_CLASSID m_ClassID; protected : CKBOOL m_Event; #endif // Docjet secret macro }; #endif