00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __C_OBJECTBUFFER_H__
00016 #define __C_OBJECTBUFFER_H__
00017
00018
00019 #include <lDefs.h>
00020 #include <lTypes.h>
00021 #include <lExceptions.h>
00022
00023 extern DLL_External class ObjectBuffer ObjectCache;
00024
00025 class DLL_External ObjectBuffer
00026 {
00027 #ifdef POLITE_TEST_FRIEND
00028 friend POLITE_TEST_FRIEND;
00029 #endif // POLITE_TEST_FRIEND
00030
00031 friend class Connection;
00032 friend class Database;
00033 friend class RefBase;
00034
00035 protected:
00036 bool _Initialised;
00037 bool _ResetForUpdateFlags;
00038
00039
00040
00041 unsigned long int _Requests;
00042
00043 unsigned long int _Hits;
00044
00045 unsigned short _Strategies;
00046 class BufferItem *_LastAccessedItem;
00047 class BufferItem *_Structure[MAX_CONNECTION][HASH_TABLE_SIZE];
00048 unsigned long _ObjectsInBuffer;
00049
00050 unsigned long _GarbageCollector();
00051
00052 unsigned int _Hash(const char *values) const;
00053 class BufferItem * _FindItem(const class RefBase &DbPtr);
00054
00055 bool _RemoveConnection (int ConHandle);
00056
00057
00058 bool RemoveConnection (int ConHandle);
00059
00060
00061
00062 bool UpdateConnection (int ConHandle);
00063
00064
00065 public:
00066 ObjectBuffer();
00067
00068 ~ObjectBuffer();
00069
00070 bool Init(
00071 const enum LockingStrategy aLockingStrategy,
00072 const enum UpdatingStrategy anUpdateStrategy,
00073 const enum WaitingStrategy aWaitingStrategy
00074 );
00075
00076 class Object *IsInMemory(
00077 const class RefBase &DbPtr
00078 );
00079
00080
00081
00082
00083
00084 bool RegisterObject(
00085 const class RefBase &DbPtr,
00086 const class Object *const MemPtr
00087 );
00088
00089
00090
00091 bool RemoveObject(
00092 class Object *MemPtr,
00093 const class Connection * const DbCon);
00094
00095
00096
00097 bool RemoveObject(const class RefBase &DbPtr);
00098
00099
00100
00101
00102 bool UpdateAll();
00103 bool UpdateAll(const class Connection *const DbC);
00104 bool UpdateAll(const class Database *const DB);
00105
00106
00107 bool RemoveAll();
00108 bool RemoveAll(const class Connection *const DbC);
00109 bool RemoveAll(const class Database *const DB);
00110
00111
00112
00113 virtual enum UpdatingStrategy CurrentUpdatingStrategy() const
00114
00115 {
00116 return (enum UpdatingStrategy)(_Strategies & US_MASK);
00117 };
00118 virtual bool SetUpdatingStrategy(enum UpdatingStrategy anUpdateStrategy);
00119 virtual enum WaitingStrategy CurrentWaitingStrategy() const
00120 {
00121 return (enum WaitingStrategy)(_Strategies & WS_MASK);
00122 };
00123 virtual bool SetWaitingStrategy(enum WaitingStrategy aWaitingStrategy);
00124 virtual enum LockingStrategy CurrentLockingStrategy() const
00125 {
00126 return (enum LockingStrategy)(_Strategies & LS_MASK);
00127 };
00128 virtual bool SetLockingStrategy(enum LockingStrategy aLockingStrategy);
00129 virtual enum ReadingStrategy CurrentReadingStrategy() const
00130 {
00131 return (enum ReadingStrategy)(_Strategies & RS_MASK);
00132 };
00133 virtual bool SetReadingStrategy(enum ReadingStrategy aReadingStrategy);
00134
00135 protected:
00136 bool _RemoveAll();
00137 bool _RemoveAll(const class Connection *const DbC);
00138 bool _RemoveAll(const class Database *const DB);
00139
00140 public:
00141
00142
00143
00144
00145
00146 bool RemoveAllMemoryLocks();
00147 bool RemoveAllMemoryLocks(class Database &DB);
00148 bool RemoveAllMemoryLocks(class Connection &DbConn);
00149
00150 Object *GetReferencedObject(
00151 const class RefBase &DbPtr
00152 );
00153
00154
00155
00156
00157
00158
00159
00160 };
00161
00162 #endif //__C_OBJECTBUFFER_H__