00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef HxDefaultObjectManager_h
00010 #define HxDefaultObjectManager_h
00011
00012 #include "HxDataObjectManager.h"
00013 #include <list>
00014 #include <map>
00015
00016
00023 class HxDefaultDataObjectManager : public HxDataObjectManager
00024 {
00025 public:
00027 HxDefaultDataObjectManager();
00028
00033 HxDefaultDataObjectManager(const char* repId,
00034 const char* objName);
00035
00037 virtual ~HxDefaultDataObjectManager();
00038
00039 virtual void objectCreated(const PortableServer::ObjectId& oid);
00040 virtual void objectUsed(const PortableServer::ObjectId& oid);
00041 virtual void objectAccessed(const PortableServer::ObjectId& oid);
00042 virtual void objectDeleted(const PortableServer::ObjectId& oid);
00043
00044 virtual void setTotalLimit(HxString unit, int value);
00045 virtual int getTotalLimit(HxString unit);
00046 virtual void setObjectLimit(HxString unit, int value);
00047 virtual int getObjectLimit(HxString unit);
00048 virtual int getUsed(HxString unit);
00049
00050 virtual void getUnitList(HxStringListBackInserter slPtr);
00051
00052 protected:
00053
00054 HxString _objName;
00055 int _totalObjLimit;
00056 int _usedObjects;
00057
00062 struct HxDefaultObjectInfo
00063 {
00064
00065 PortableServer::ObjectId oid;
00066 };
00068 virtual HxDefaultObjectInfo* createObjectInfo();
00069
00074 virtual void setObjectInfo(
00075 PortableServer::Servant servant,
00076 HxDefaultObjectInfo* info);
00077
00083 virtual void updateObjectInfo(
00084 PortableServer::Servant servant,
00085 HxDefaultObjectInfo* info);
00086
00087
00088
00089
00090 virtual void removeObjectInfo(HxDefaultObjectInfo* info);
00091
00092
00093
00094
00095 virtual bool objectExceedsLimit(HxDefaultObjectInfo* info);
00096
00097
00098
00099
00100 virtual bool limitExceeded();
00101
00102
00103
00104
00105
00106 virtual bool objectCanGrow();
00107
00108 private:
00109
00110 void checkLimit();
00111
00112 struct lessOID : std::binary_function<PortableServer::ObjectId, PortableServer::ObjectId, bool>
00113 {
00114 bool operator()(const PortableServer::ObjectId& x, const PortableServer::ObjectId& y) const;
00115 };
00116
00117 typedef std::list<HxDefaultObjectInfo*> List;
00118 typedef std::map<PortableServer::ObjectId, List::iterator, lessOID> Map;
00119
00120 Map _map;
00121 List _list;
00122
00123 PortableServer::POA_var _dataPOA;
00124 };
00125
00126 #endif //HxDefaultObjectManager_h
00127