00001
00002
00003
00004
00005
00008
00009 #ifndef subscriptionListFile_H_
00010 #define subscriptionListFile_H_
00011
00012 #include "lgrSim.h"
00013 #include "virtualConstructor.h"
00014 #include <vector>
00015 #include <map>
00016 #include <vl/region.h>
00017 #include <mtl/envValue.h>
00018
00019 class DtString;
00020
00021 namespace MAKLogger
00022 {
00026 class DT_DLL_LGRSIM DtSubscriptionListFile
00027 {
00028 public:
00029 class DimensionDesc;
00030 class ExtentDesc;
00031 class AttributeDesc;
00032 class RegionDesc;
00033 typedef std::set<RegionDesc> RegionDescSet;
00034
00035 public:
00037 DT_VIRTUAL_CTR(DtSubscriptionListFile,())
00038
00039
00040 virtual ~DtSubscriptionListFile();
00041
00044 virtual bool defaultObjectClassExists() const;
00045
00048 virtual bool defaultInteractionClassExists() const;
00049
00052 virtual std::set<DtString> objectClasses() const;
00053
00056 virtual void setObjectClassList(const std::vector<DtString>& list);
00057
00060 virtual std::set<DtString> interactionClasses() const;
00061
00064 virtual void setInteractionClassList(const std::vector<DtString>& list);
00065
00068 virtual void setRegionDescSet(const DtString& name, const DtSubscriptionListFile::RegionDescSet& desc);
00069
00073 virtual bool getRegionDescSet(const DtString& descName, DtSubscriptionListFile::RegionDescSet& regionDesc) const;
00074
00077 virtual bool regionDescSetExists(const DtString& descName) const;
00078
00084 virtual bool addObject(const DtString& name, const DtString& regionSetName);
00085
00088 virtual void removeObject(const DtString& name);
00089
00094 virtual bool addInteractionClass(const DtString& className, const DtString& regionSetName);
00095
00098 virtual void removeInteractionClass(const DtString& className);
00099
00102 virtual const DtString* regionDescSetNameForObjectClass(const DtString& className) const;
00103
00106 virtual const DtString* regionDescSetNameForInteractionClass(const DtString& className) const;
00107
00110 virtual const DtSubscriptionListFile::RegionDescSet* regionDescSetForObjectClass(const DtString& className,
00111 bool ignoreDefaults=false) const;
00112
00115 virtual const DtSubscriptionListFile::RegionDescSet* regionDescSetForInteractionClass(const DtString& className, bool ignoreDefaults=false) const;
00116
00121 virtual unsigned int getRegionSetForObject(DtExerciseConn* exconn,
00122 const DtString& name, DtDDMRegionSet& regionSet, bool cacheRegions=true) const;
00123
00128 virtual unsigned int getRegionSetForInteractionClass(DtExerciseConn* exconn,
00129 const DtString& className, DtDDMRegionSet& regionSet, bool cacheRegions=true ) const;
00130
00132 virtual void clearRegions();
00133
00137 virtual bool readFromFile(const DtString& filename);
00138
00142 virtual bool writeToFile(const DtString& filename) const;
00143
00146 virtual const DtString& defaultRegionSetNameObjectClassKey() const;
00147
00150 virtual const DtString& defaultRegionSetNameInteractionClassKey() const;
00151
00157 virtual DtSubscriptionListFile diffSubscriptionList(const DtSubscriptionListFile& newsublist,
00158 std::set<DtString>& modifiedObjectClasses,
00159 std::set<DtString>& modifiedInteractionClasses);
00160
00161 protected:
00162
00165 virtual const DtString* regionDescSetNameForClassName(
00166 const std::map<DtString, DtString>& classNameToDescNameMap, const DtString& defaultName,
00167 const DtString& className) const;
00168
00171 virtual const DtSubscriptionListFile::RegionDescSet* regionDescSetForClassName(
00172 const std::map<DtString, DtString>& classNameToDescNameMap, const DtString& defaultName,
00173 const DtString& className, bool ignoreDefaults=false) const;
00174
00178 virtual DtDDMRegionSP createRegion(DtExerciseConn* exconn,
00179 const DtSubscriptionListFile::RegionDesc& regionDescriptor) const;
00180
00185 virtual unsigned int getRegionSet(DtExerciseConn* exconn,
00186 const DtSubscriptionListFile::RegionDescSet& regionDescSet, DtDDMRegionSet& regionSet,
00187 bool cacheRegions=true) const;
00188
00192 virtual bool readRegion(DtEnvironment& env, DtEnvValueSP region, RegionDesc& regionDescriptor);
00193
00197 virtual bool readAttribute(DtEnvironment& env, DtEnvValueSP attribute, AttributeDesc& attrributeDescriptor);
00198
00202 virtual bool readExtent(DtEnvironment& env, DtEnvValueSP extent, ExtentDesc& extentDescriptor);
00203
00207 virtual bool readDimension(DtEnvironment& env, DtEnvValueSP dimension, DimensionDesc& dimimensionDescriptor);
00208
00212 virtual bool readBound(DtEnvironment& env, DtEnvValueSP dimension, const DtString& boundName, unsigned long& value);
00213
00218 virtual bool readRegionSet(DtEnvironment& env, const std::map<DtString,
00219 RegionDesc>& regionmap, DtEnvValueSP regionset,
00220 DtString& regionsetname, RegionDescSet& regdescset);
00221
00227 virtual bool readClassRegion(DtEnvironment& env, DtEnvValueSP classRegion, DtString& regionSetName, DtString* className=0);
00228
00230 virtual void collectRegions(std::map<RegionDesc, DtString>& regionsToWrite) const;
00231
00233 virtual void addRegionsToEnv(std::map<RegionDesc, DtString>& regionsToWrite, DtEnvironment& env) const;
00234
00236 void addRegionSetsToEnv(std::map<RegionDesc, DtString>& regionsToWrite, DtEnvironment& env) const;
00237
00239 void addObjectClassesToEnv(DtEnvironment& env) const;
00240
00242 virtual void addInteractionClassesToEnv(DtEnvironment& env) const;
00243
00244
00245 public:
00246 class DT_DLL_LGRSIM DimensionDesc {
00247 public:
00248 DtString name;
00249 unsigned long lower;
00250 unsigned long upper;
00251
00252 DimensionDesc() : lower(), upper()
00253 {
00254
00255 }
00256 ~DimensionDesc();
00257
00260 bool operator<(const DimensionDesc other) const;
00261
00262 bool operator==(const DimensionDesc other) const;
00263 bool operator!=(const DimensionDesc other) const;
00264
00265 int serialize(char* buffer, int maxsize) const;
00266 int deserialize(const char* buffer);
00267 };
00268
00269 class DT_DLL_LGRSIM ExtentDesc {
00270 public:
00271 std::set<DimensionDesc> dimensions;
00272
00273 ~ExtentDesc();
00274
00277 bool operator<(const ExtentDesc other) const;
00278
00279 bool operator==(const ExtentDesc other) const;
00280 bool operator!=(const ExtentDesc other) const;
00281
00282 int serialize(char* buffer, int maxsize) const;
00283 int deserialize(const char* buffer);
00284 };
00285
00286 class DT_DLL_LGRSIM AttributeDesc {
00287 public:
00288 DtString className;
00289 DtString attrName;
00290
00293 bool operator<(const AttributeDesc other) const;
00294
00295 bool operator==(const AttributeDesc other) const;
00296 bool operator!=(const AttributeDesc other) const;
00297
00298 int serialize(char* buffer, int maxsize) const;
00299 int deserialize(const char* buffer);
00300 };
00301 typedef std::set<AttributeDesc> AttributeDescSet;
00302
00303 class DT_DLL_LGRSIM RegionDesc {
00304 public:
00305 DtString space;
00306 std::set<ExtentDesc> extents;
00307 std::map<DtString, AttributeDescSet> attributes;
00308
00309 DtString name;
00310 unsigned long regionToken;
00311
00312 RegionDesc() : regionToken() {}
00313 ~RegionDesc();
00314
00318 bool operator<(const RegionDesc other) const;
00319
00320 bool operator==(const RegionDesc other) const;
00321
00322 int serialize(char* buffer, int maxsize) const;
00323 int deserialize(const char* buffer);
00324 };
00325
00326 protected:
00328 std::map<DtString, RegionDescSet> myRegionDescSetMap;
00329
00331 mutable std::map<DtString, DtDDMRegionSP> myRegions;
00332
00334 std::map<DtString, DtString> myObjectToRegionSetMap;
00335
00337 std::map<DtString, DtString> myInteractionClassToRegionSetMap;
00338
00340 DtString myDefaultRegionSetNameObjectClassKey;
00341
00343 DtString myDefaultRegionSetNameInteractionClassKey;
00344
00345 };
00346 }
00347
00348 #endif