VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
modelSet.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
16 
17 #include <readerWriter/rwList.h>
18 #include <readerWriter/rwInt.h>
19 #include <vlutil/vlString.h>
21 #include <boost/unordered_map.hpp>
23 #include <tbb/spin_rw_mutex.h>
24 
25 class DtModelSetEntry;
26 class DtFilename;
27 class DtObjectType;
29 
30 #define LATEST_MODEL_SET_VERSION 1
31 
32 class DtModelSet;
33 typedef DtModelSet* (*DtModelSetCreatorFcn)(const DtString&, DtReaderWriterRegistry* parentRegistry);
34 
36 {
37 public:
38 
40  DtModelSet();
41 
43  parentRegistry = nullptr);
44 
46  virtual ~DtModelSet();
47 
49  DtModelSet(const DtModelSet& orig,
50  DtReaderWriterRegistry* parentRegistry = NULL);
51 
53  virtual DtModelSet& operator=(const DtModelSet& orig);
54 
55  virtual DtModelSet* clone(DtReaderWriterRegistry* parentRegistry = nullptr);
56 
59  static DtModelSetCreatorFcn SetModelSetCreatorFcn(DtModelSetCreatorFcn);
60  static DtModelSetCreatorFcn ModelSetCreatorFcn();
61  static DtModelSet* Create(const DtString& name = "model-set", DtReaderWriterRegistry* parentRegistry = nullptr);
63 
65  virtual bool load(const DtFilename&, std::set<DtString>* iconLists = 0);
66  virtual bool save(const DtFilename&);
67 
68  virtual DtModelSetEntry* find(const DtObjectType&) const;
69  virtual DtModelSetEntry* findMatchingPattern(const DtObjectType&) const;
70  virtual DtModelSetEntry* findByUniqueID(const DtString&) const;
71  virtual DtModelSetEntry* findByLabel(const DtString&) const;
72 
75  virtual void add(DtModelSetEntry*);
76 
77  virtual void setComment(const DtString&);
78  virtual const DtString comment() const;
79 
80  static DtModelSet* create(const DtString&, DtReaderWriterRegistry* const parentRegistry = NULL);
81 
83  DtObjectType objectTypeFor(const DtString& label) const;
84 
87  virtual DtModelSetEntry* addModel(DtModelSetEntry*, bool clone = true);
88 
89  virtual void emptyList();
90 
93  virtual void entitiesForObjectType(const DtObjectType& o, std::list<DtString>& list) const;
94 
96 
97  int version() const;
98 
100  virtual DtString createUniqueID(const DtModelSetEntry*) const;
101  virtual DtString createUniqueID(const DtString&) const;
102 
104  virtual DtModelSetEntry* removeModel(const DtObjectType&);
105  virtual DtModelSetEntry* removeModel(const DtModelSetEntry* e);
106 
110  virtual void loadFromDataFiles(const std::string& directory, const SearchPaths& paths, std::set<DtString>* iconLists = 0, bool parallelLoad = false);
111 
114  virtual const std::set<DtString>& categories() const;
115 
117  virtual void loadEntityFiles(const std::string&, const SearchPaths& paths, std::set<DtString>* iconLists = 0, bool parallelLoad = false);
118 
120  virtual void loadSimulationObjectGroupFiles(const std::string&, std::set<DtString>* iconLists = 0);
121 
123  virtual const DtObjectType& nextAvailableSimulationObjectGroupObjectType() const;
124 
126  virtual const DtObjectType& nextAvailableRandomizedObjectObjectType() const;
127 
129  virtual DtSimulationObjectGroupModelSetEntry findSimulationObjectGroup(const DtString& sogName) const;
130  virtual void createEntriesFromFile(const DtFilename& entityFile, const SearchPaths& paths, std::set<DtString>* iconLists);
131 
132 protected:
135  virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
136  const DtVariableBindingsList& variableBindings);
137 
139  void copyList(const DtModelSet& orig);
141  void clear();
142 
143  virtual void writeSelf(std::string& fp, int i, bool writeUnspecified,
144  const DtFilename& path);
145 
147  virtual void addCategoriesFrom(DtModelSetEntry*);
148 
149  virtual void updateNextSimulationObjectGroupObjectType(DtSimulationObjectGroupModelSetEntry*);
150  virtual void updateNextRandomizedObjectObjectType(DtModelSetEntry*);
151 
152  virtual void addIconListsToIconList(const DtModelSetEntry*, std::set<DtString>& iconLists) const;
153 
155  virtual void* remove(DtReaderWriter*, DtListItem*);
156 
157 protected:
161  std::set<DtString> myCategories;
162  typedef boost::unordered_map<DtString, DtModelSetEntry*> FastMap;
167 
169  typedef std::map<std::string, DtModelSetEntry*> EntriesByFile;
171  mutable tbb::spin_rw_mutex myLoadMutex;
172  mutable tbb::spin_rw_mutex myAddRemoveMutex;
173 };
174 
175 
176 inline int DtModelSet::version() const
177 {
178  return myVersion;
179 }
int version() const
Returns an entry given a unique ID.
Definition: modelSet.h:176
std::set< DtString > myCategories
Definition: modelSet.h:161
tbb::spin_rw_mutex myAddRemoveMutex
Definition: modelSet.h:172
DtObjectType myNextRandomizedObjectObjectType
Definition: modelSet.h:165
A Readable, Writable version of DtList. This class cannot be used directly, but must be inherited to ...
Definition: rwList.h:26
#define DT_DLL_vrfobjparam
This file is used to determine how to build.
Definition: vrfobjparamDefines.h:28
std::map< std::string, DtModelSetEntry * > EntriesByFile
Only used when loading files.
Definition: modelSet.h:169
virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths &searchPaths, const DtVariableBindingsList &variableBindings)=0
This method must be overridden by a subclass. Within this method, new instances of the DtReaderWriter...
Definition: readerWriter.h:85
Definition: readerWriterRegistry.h:39
EntriesByFile myEntriesByFile
Definition: modelSet.h:170
DtObjectType myNextSimulationObjectGroupObjectType
Definition: modelSet.h:164
virtual void writeSelf(std::string &fp, int indentLevel=0, bool writeUnspecified=false, const DtFilename &path=DtFilename::nullFilename())
Called from putSelf, calls myRegistry.putSelf which in turn calls putSelf on each reader/writer in th...
Description: A model is a set of items that defines a model to create in the back-end from the front-...
Definition: simulationObjectGroupModelSetEntry.h:161
Definition: objectType.h:27
Definition: modelSetEntry.h:34
DtString myFilename
Definition: modelSet.h:158
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
Description: Readable, Writable int.
Definition: rwInt.h:25
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
virtual DtListItem * add(DtReaderWriter *data)
Add element to the end of the list. Returns the DtListItem envelope object that contains your new ele...
tbb::spin_rw_mutex myLoadMutex
Definition: modelSet.h:171
FastMap myFastMap
Definition: modelSet.h:163
DtRwInt myVersion
Definition: modelSet.h:160
DtModelSet *(* DtModelSetCreatorFcn)(const DtString &, DtReaderWriterRegistry *parentRegistry)
Definition: modelSet.h:33
const DtRwList & operator=(const DtRwList &orig)
Calls down to DtReaderWriter::operator=(). List elements are not copied.
boost::unordered_map< DtString, DtModelSetEntry * > FastMap
Definition: modelSet.h:162
static DtModelSetCreatorFcn theModelSetCreatorFcn
Definition: modelSet.h:166
DtString myComment
Definition: modelSet.h:159
Definition: modelSet.h:35

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)