00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef SHAREDOBJECTC_H
00027 #define SHAREDOBJECTC_H
00028
00029
00030 #include <stdio.h>
00031 #include <fstream>
00032 #include "oaw/misc/kettec.h"
00033 #include "oaw/misc/arrayc.h"
00034 #include "objectc.h"
00035
00036 class ObjectI;
00037
00038
00039 #include "../oawconfig.h"
00040
00041 OAW_BEGIN_NAMESPACE
00042
00043 class OAW_DLLMAPPING SharedObjectI{
00044 public:
00045 virtual void SignAsUser(ObjectI*)=0;
00046 virtual void UnsignAsUser(ObjectI*)=0;
00047 };
00048
00049 class OAW_DLLMAPPING SharedObjectC : public virtual SharedObjectI, public virtual ObjectI
00050 {
00051 public:
00052 SharedObjectC();
00053 virtual ~SharedObjectC();
00054
00055 void* operator new(size_t);
00056
00057 void* operator new(size_t nSize, const char* lpszFileName, int nLine);
00058 void operator delete(void* p, const char* lpszFileName, int nLine);
00059
00060 inline void SetRootUser(ObjectI* pObj){m_rootUser = pObj;}
00061 void operator delete(void*);
00062 void SignAsListener(ObjectI*);
00063 void UnsignAsListener(ObjectI*);
00064 void SignAsUser(ObjectI*);
00065 void UnsignAsUser(ObjectI*);
00066 int CreatedWithNew(){return m_cwn;}
00067 virtual void GarbageCollection(){}
00068 virtual short RootIsLinkedAsAUser(ArrayC<SharedObjectC*>&);
00069 void SendMessageToUser(void*,int);
00070 protected:
00071 void SendDestroyMsgToListener();
00072 void SendDestroyMsgToUser();
00073 inline void ResetSearchFlag(){m_searchFlag=0;}
00074 private:
00075 ArrayC<ObjectI*> m_users;
00076 ArrayC<long> m_usersRefCount;
00077 KetteC<ObjectI*> m_listener;
00078 int m_cwn;
00079 static int m_cwntmp;
00080 ObjectI* m_rootUser;
00081 short m_searchFlag;
00082 short m_rootIsUser;
00083 };
00084
00085
00086 OAW_END_NAMESPACE
00087
00088
00089 #endif
00090
00092
00093
00094
00095
00096
00097
00098
00099