LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
storagemanager.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/base/id.h"
4 #include "cad/base/cadentity.h"
5 #include "cad/meta/layer.h"
8 #include <map>
10 
11 namespace lc {
15  class Layer;
17  public:
18  virtual void insertEntity(entity::CADEntity_CSPtr) = 0;
20  virtual void removeEntity(entity::CADEntity_CSPtr) = 0;
21  virtual entity::CADEntity_CSPtr entityByID(ID_DATATYPE id) const = 0;
22  virtual EntityContainer<entity::CADEntity_CSPtr> entitiesByLayer(Layer_CSPtr layer) const = 0;
23 
24  virtual EntityContainer<entity::CADEntity_CSPtr> entitiesByBlock(Block_CSPtr block) const = 0;
25 
32  virtual Layer_CSPtr layerByName(const std::string& layerName) const = 0;
33 
40  virtual DxfLinePatternByValue_CSPtr linePatternByName(const std::string& linePatternName) const = 0;
45  virtual std::map<std::string, Layer_CSPtr> allLayers() const = 0;
46 
53 
58  virtual void addDocumentMetaType(DocumentMetaType_CSPtr dmt) = 0;
59 
64  virtual void removeDocumentMetaType(DocumentMetaType_CSPtr dmt) = 0;
65 
69  virtual void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) = 0;
70 
71  virtual std::map<std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive>
72  allMetaTypes() const = 0;
73 
78  virtual void optimise() = 0;
79 
80 
81  template <typename T>
82  const std::shared_ptr<const T> metaDataTypeByName(const std::string & name) const {
83  std::string n = T::LCMETANAME();
84  auto r = _metaDataTypeByName(T::LCMETANAME() + "_" + name);
85  // What do we do when we don't have a meta data set??
86  if (r!=nullptr) {
87  std::string myid = r->id();
88  auto dp = std::dynamic_pointer_cast<const T>(r);
89  return dp;
90  }
91  return nullptr;
92  };
93 
94  template <typename T>
95  const std::vector<std::shared_ptr<const T>> metaTypes() const {
96  auto metaTypes = allMetaTypes();
97  std::vector<std::shared_ptr<T>> matches;
98 
99  for(auto metaType : metaTypes) {
100  auto castedMetaType = std::dynamic_pointer_cast<T>(metaType.second);
101  if(castedMetaType) {
102  matches.push_back(castedMetaType);
103  }
104  }
105 
106  return matches;
107  };
108 
109  private:
110  virtual DocumentMetaType_CSPtr _metaDataTypeByName(const std::string& id) const {
111  return nullptr;
112  }
113  };
114 
115  DECLARE_SHORT_SHARED_PTR(StorageManager)
116 }
virtual void insertEntityContainer(const EntityContainer< entity::CADEntity_CSPtr > &)=0
#define ID_DATATYPE
Definition: id.h:7
virtual std::map< std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive > allMetaTypes() const =0
virtual DxfLinePatternByValue_CSPtr linePatternByName(const std::string &linePatternName) const =0
DxfLinePattern Return a line pattern by name from the document.
virtual EntityContainer< entity::CADEntity_CSPtr > entitiesByLayer(Layer_CSPtr layer) const =0
virtual Layer_CSPtr layerByName(const std::string &layerName) const =0
layer Return a single document layer
virtual void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt)=0
remove document meta type
DECLARE_SHORT_SHARED_PTR(Document)
const std::shared_ptr< const T > metaDataTypeByName(const std::string &name) const
Definition: cadentity.h:12
virtual std::map< std::string, Layer_CSPtr > allLayers() const =0
Returns all the layers present in the document.
virtual entity::CADEntity_CSPtr entityByID(ID_DATATYPE id) const =0
virtual DocumentMetaType_CSPtr _metaDataTypeByName(const std::string &id) const
const std::vector< std::shared_ptr< const T > > metaTypes() const
virtual void insertEntity(entity::CADEntity_CSPtr)=0
virtual void removeDocumentMetaType(DocumentMetaType_CSPtr dmt)=0
remove a document meta type from the document
virtual void optimise()=0
optimise the underlaying data store. Run this at a regular base, for example after each task ...
virtual EntityContainer< entity::CADEntity_CSPtr > entitiesByBlock(Block_CSPtr block) const =0
virtual void removeEntity(entity::CADEntity_CSPtr)=0
virtual EntityContainer< entity::CADEntity_CSPtr > & entityContainer()=0
entityContainer return a copy of all entities managed within the storage manager
virtual void addDocumentMetaType(DocumentMetaType_CSPtr dmt)=0
add a document meta type