LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
storagemanagerimpl.cpp
Go to the documentation of this file.
1 #include "storagemanagerimpl.h"
2 
3 using namespace lc;
4 
6 
7 }
8 
10 
11 }
12 
13 void StorageManagerImpl::insertEntity(entity::CADEntity_CSPtr entity) {
14  if (entity->block() != nullptr) {
15  auto it = _blocksEntities.find(entity->block()->name());
16 
17  if (it == _blocksEntities.end()) {
19  ec.insert(entity);
20  _blocksEntities.insert(std::pair<std::string, EntityContainer<entity::CADEntity_CSPtr>>(
21  entity->block()->name(),
22  ec
23  ));
24  }
25  else {
26  it->second.insert(entity);
27  }
28  }
29  else {
30  _entities.insert(entity);
31  }
32 }
33 
34 void StorageManagerImpl::removeEntity(entity::CADEntity_CSPtr entity) {
35  _entities.remove(entity);
36 }
37 
39  _entities.combine(entities);
40  // TODO add metadata types where they do not exists
41 }
42 
43 entity::CADEntity_CSPtr StorageManagerImpl::entityByID(ID_DATATYPE id) const {
44  return _entities.entityByID(id);
45 }
46 
48  return _entities.entitiesByLayer(layer);
49 }
50 
51 Layer_CSPtr StorageManagerImpl::layerByName(const std::string& layerName) const {
52  return metaDataTypeByName<Layer>(layerName);
53 }
54 
55 DxfLinePatternByValue_CSPtr StorageManagerImpl::linePatternByName(const std::string& linePatternName) const {
56  return metaDataTypeByName<DxfLinePatternByValue>(linePatternName);
57 }
58 
59 std::map<std::string, Layer_CSPtr> StorageManagerImpl::allLayers() const {
60  std::map<std::string, Layer_CSPtr> data;
61  for (auto& iter : _documentMetaData) {
62  Layer_CSPtr layer = std::dynamic_pointer_cast<const Layer>(iter.second);
63  if (layer != nullptr) {
64  data.emplace(std::make_pair(layer->name(), layer));
65  }
66  }
67 
68  return data;
69 }
70 
72  return _entities;
73 }
74 
77  for (auto ec : _blocksEntities) {
78  ec.second.optimise();
79  }
80 }
81 
82 
83 void StorageManagerImpl::addDocumentMetaType(DocumentMetaType_CSPtr dmt) {
84  _documentMetaData.emplace(std::make_pair(dmt->id(), dmt));
85 }
86 
87 
88 void StorageManagerImpl::removeDocumentMetaType(DocumentMetaType_CSPtr dmt) {
89  _documentMetaData.erase(dmt->id());
90 }
91 
92 
93 void StorageManagerImpl::replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) {
94  if (oldDmt->id() == newDmt->id()) {
95  _documentMetaData.erase(oldDmt->id());
96  _documentMetaData.emplace(std::make_pair(newDmt->id(), newDmt));
97  } else {
98  // LOG4CXX_DEBUG(logger, "Layer names are not equal, no replacement was performed");
99  }
100 }
101 
102 std::map<std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive>
104  return _documentMetaData;
105 }
106 
107 DocumentMetaType_CSPtr StorageManagerImpl::_metaDataTypeByName(const std::string& id) const {
108  auto search = _documentMetaData.find(id);
109  if (search != _documentMetaData.end()) {
110  return search->second;
111  }
112  return nullptr;
113 }
114 
116  try {
117  return _blocksEntities.at(block->name());
118  }
119  catch (std::out_of_range& e) {
121  }
122 }
DocumentMetaType_CSPtr _metaDataTypeByName(const std::string &id) const override
DxfLinePatternByValue_CSPtr linePatternByName(const std::string &linePatternName) const override
returns line pattern By Name
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
void insertEntity(entity::CADEntity_CSPtr) override
insertEntity
EntityContainer< entity::CADEntity_CSPtr > _entities
#define ID_DATATYPE
Definition: id.h:7
Layer_CSPtr layerByName(const std::string &layerName) const override
returns layer By Name
std::map< std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive > allMetaTypes() const override
EntityContainer entitiesByLayer(const Layer_CSPtr layer) const
findEntitiesByLayer Return a entities container with all entities from a specific layer ...
std::map< std::string, Layer_CSPtr > allLayers() const override
return all Layers
void optimise() override
optimise the quadtree
void optimise()
optimise this container
void removeDocumentMetaType(DocumentMetaType_CSPtr dmt) override
remove a document meta type from the document
void remove(CT entity)
remove an Entity from the document.
Definition: cadentity.h:12
EntityContainer< entity::CADEntity_CSPtr > & entityContainer() override
returns entity Container
void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) override
remove document meta type
lc::EntityContainer< entity::CADEntity_CSPtr > entitiesByBlock(Block_CSPtr block) const override
lc::EntityContainer< entity::CADEntity_CSPtr > entitiesByLayer(const Layer_CSPtr layer) const override
Returns entities By Layer.
entity::CADEntity_CSPtr entityByID(ID_DATATYPE id) const override
return entity By ID
void addDocumentMetaType(DocumentMetaType_CSPtr dmt) override
add a document meta type
void insertEntityContainer(const EntityContainer< entity::CADEntity_CSPtr > &) override
insertEntityContainer
std::map< std::string, lc::EntityContainer< entity::CADEntity_CSPtr > > _blocksEntities
StorageManagerImpl()
Entity manager implementor.
void removeEntity(entity::CADEntity_CSPtr) override
remove Entity from the container
void combine(const EntityContainer &entities)
Add all entities to this container Any entity that already exists will get replaced.
void insert(CT entity)
add an entity to the EntityContainer If the entity already exists, it will be replaced ...
CT entityByID(ID_DATATYPE id) const
entityByID return a entity by it's id, return's a empty shared ptr when not found ...