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>
22 #include <vlpi/entityType.h>
23 #include <tbb/spin_rw_mutex.h>
24 
25 class DtModelSetEntry;
26 class DtFilename;
27 class DtEntityType;
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() override;
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 DtEntityType&) const;
69  virtual DtModelSetEntry* findMatchingPattern(const DtEntityType&) 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  DtEntityType 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 DtEntityType& 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 DtEntityType&);
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 DtEntityType& nextAvailableSimulationObjectGroupObjectType() const;
124 
126  virtual const DtEntityType& 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) override;
137 
139  void copyList(const DtModelSet& orig);
141  void clear();
142 
143  virtual void writeSelf(std::string& fp, int i, bool writeUnspecified, const DtFilename& path) override;
144 
146  virtual void addCategoriesFrom(DtModelSetEntry*);
147 
148  virtual void updateNextSimulationObjectGroupObjectType(DtSimulationObjectGroupModelSetEntry*);
149  virtual void updateNextRandomizedObjectObjectType(DtModelSetEntry*);
150 
151  virtual void addIconListsToIconList(const DtModelSetEntry*, std::set<DtString>& iconLists) const;
152 
154  virtual void* remove(DtReaderWriter*, DtListItem*) override;
155 
156 protected:
160  std::set<DtString> myCategories;
161  typedef boost::unordered_map<DtString, DtModelSetEntry*> FastMap;
166 
168  typedef std::map<std::string, DtModelSetEntry*> EntriesByFile;
170  mutable tbb::spin_rw_mutex myLoadMutex;
171  mutable tbb::spin_rw_mutex myAddRemoveMutex;
172 };
173 
174 
175 inline int DtModelSet::version() const
176 {
177  return myVersion;
178 }
int version() const
Returns an entry given a unique ID.
Definition: modelSet.h:175
std::set< DtString > myCategories
Definition: modelSet.h:160
virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths &searchPaths, const DtVariableBindingsList &variableBindings) override=0
This method must be overridden by a subclass. Within this method, new instances of the DtReaderWriter...
tbb::spin_rw_mutex myAddRemoveMutex
Definition: modelSet.h:171
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:168
Definition: readerWriter.h:85
DtEntityType myNextSimulationObjectGroupObjectType
Definition: modelSet.h:163
Definition: readerWriterRegistry.h:39
EntriesByFile myEntriesByFile
Definition: modelSet.h:169
DtEntityType myNextRandomizedObjectObjectType
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:157
Definition: modelSetEntry.h:34
DtString myFilename
Definition: modelSet.h:157
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:170
FastMap myFastMap
Definition: modelSet.h:162
DtRwInt myVersion
Definition: modelSet.h:159
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:161
static DtModelSetCreatorFcn theModelSetCreatorFcn
Definition: modelSet.h:165
DtString myComment
Definition: modelSet.h:158
Definition: modelSet.h:35

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)