LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::StorageManagerImpl Class Reference

#include <storagemanagerimpl.h>

Inheritance diagram for lc::StorageManagerImpl:
Collaboration diagram for lc::StorageManagerImpl:

Public Member Functions

 StorageManagerImpl ()
 Entity manager implementor. More...
 
virtual ~StorageManagerImpl ()
 
void insertEntity (entity::CADEntity_CSPtr) override
 insertEntity More...
 
void removeEntity (entity::CADEntity_CSPtr) override
 remove Entity from the container More...
 
void insertEntityContainer (const EntityContainer< entity::CADEntity_CSPtr > &) override
 insertEntityContainer More...
 
entity::CADEntity_CSPtr entityByID (ID_DATATYPE id) const override
 return entity By ID More...
 
lc::EntityContainer
< entity::CADEntity_CSPtr > 
entitiesByLayer (const Layer_CSPtr layer) const override
 Returns entities By Layer. More...
 
Layer_CSPtr layerByName (const std::string &layerName) const override
 returns layer By Name More...
 
DxfLinePatternByValue_CSPtr linePatternByName (const std::string &linePatternName) const override
 returns line pattern By Name More...
 
std::map< std::string,
Layer_CSPtr > 
allLayers () const override
 return all Layers More...
 
EntityContainer
< entity::CADEntity_CSPtr > & 
entityContainer () override
 returns entity Container More...
 
void addDocumentMetaType (DocumentMetaType_CSPtr dmt) override
 add a document meta type More...
 
void removeDocumentMetaType (DocumentMetaType_CSPtr dmt) override
 remove a document meta type from the document More...
 
void replaceDocumentMetaType (DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) override
 remove document meta type More...
 
std::map< std::string,
DocumentMetaType_CSPtr,
lc::StringHelper::cmpCaseInsensetive
allMetaTypes () const override
 
lc::EntityContainer
< entity::CADEntity_CSPtr > 
entitiesByBlock (Block_CSPtr block) const override
 
void optimise () override
 optimise the quadtree More...
 
- Public Member Functions inherited from lc::StorageManager
template<typename T >
const std::shared_ptr< const T > metaDataTypeByName (const std::string &name) const
 
template<typename T >
const std::vector
< std::shared_ptr< const T > > 
metaTypes () const
 

Private Member Functions

DocumentMetaType_CSPtr _metaDataTypeByName (const std::string &id) const override
 

Private Attributes

EntityContainer
< entity::CADEntity_CSPtr > 
_entities
 
std::map< std::string,
DocumentMetaType_CSPtr,
StringHelper::cmpCaseInsensetive
_documentMetaData
 
std::map< std::string,
lc::EntityContainer
< entity::CADEntity_CSPtr > > 
_blocksEntities
 

Detailed Description

A default storage manager for document's. The data will be cerated in memory and will be lost when the application terminates

Parameters
document

Definition at line 28 of file storagemanagerimpl.h.

Constructor & Destructor Documentation

StorageManagerImpl::StorageManagerImpl ( )

Entity manager implementor.

Parameters
document

Definition at line 5 of file storagemanagerimpl.cpp.

5  : StorageManager() {
6 
7 }
StorageManagerImpl::~StorageManagerImpl ( )
virtual

Definition at line 9 of file storagemanagerimpl.cpp.

9  {
10 
11 }

Member Function Documentation

DocumentMetaType_CSPtr StorageManagerImpl::_metaDataTypeByName ( const std::string &  id) const
overrideprivatevirtual

Reimplemented from lc::StorageManager.

Definition at line 107 of file storagemanagerimpl.cpp.

107  {
108  auto search = _documentMetaData.find(id);
109  if (search != _documentMetaData.end()) {
110  return search->second;
111  }
112  return nullptr;
113 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
void StorageManagerImpl::addDocumentMetaType ( DocumentMetaType_CSPtr  dmt)
overridevirtual

add a document meta type

Parameters
layerlayer to be added.

Implements lc::StorageManager.

Definition at line 83 of file storagemanagerimpl.cpp.

83  {
84  _documentMetaData.emplace(std::make_pair(dmt->id(), dmt));
85 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
std::map< std::string, Layer_CSPtr > StorageManagerImpl::allLayers ( ) const
overridevirtual

return all Layers

Returns
map<string, Layer_CSPtr>

Implements lc::StorageManager.

Definition at line 59 of file storagemanagerimpl.cpp.

59  {
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 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > StorageManagerImpl::allMetaTypes ( ) const
overridevirtual

Implements lc::StorageManager.

Definition at line 103 of file storagemanagerimpl.cpp.

103  {
104  return _documentMetaData;
105 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
EntityContainer< entity::CADEntity_CSPtr > StorageManagerImpl::entitiesByBlock ( Block_CSPtr  block) const
overridevirtual

Implements lc::StorageManager.

Definition at line 115 of file storagemanagerimpl.cpp.

115  {
116  try {
117  return _blocksEntities.at(block->name());
118  }
119  catch (std::out_of_range& e) {
121  }
122 }
std::map< std::string, lc::EntityContainer< entity::CADEntity_CSPtr > > _blocksEntities
EntityContainer< entity::CADEntity_CSPtr > StorageManagerImpl::entitiesByLayer ( const Layer_CSPtr  layer) const
overridevirtual

Returns entities By Layer.

Parameters
layer
Returns
EntityContainer<entity::CADEntity_CSPtr> entities on layer use entityContainer()->entitiesByLayer()

Implements lc::StorageManager.

Definition at line 47 of file storagemanagerimpl.cpp.

47  {
48  return _entities.entitiesByLayer(layer);
49 }
EntityContainer< entity::CADEntity_CSPtr > _entities
EntityContainer entitiesByLayer(const Layer_CSPtr layer) const
findEntitiesByLayer Return a entities container with all entities from a specific layer ...
entity::CADEntity_CSPtr StorageManagerImpl::entityByID ( ID_DATATYPE  id) const
overridevirtual

return entity By ID

Parameters
id
Returns
entity::CADEntity_CSPtr entity

Implements lc::StorageManager.

Definition at line 43 of file storagemanagerimpl.cpp.

43  {
44  return _entities.entityByID(id);
45 }
EntityContainer< entity::CADEntity_CSPtr > _entities
CT entityByID(ID_DATATYPE id) const
entityByID return a entity by it's id, return's a empty shared ptr when not found ...
EntityContainer< entity::CADEntity_CSPtr > & StorageManagerImpl::entityContainer ( )
overridevirtual

returns entity Container

Returns
entityContainer<entity::CADEntity_CSPtr>

Implements lc::StorageManager.

Definition at line 71 of file storagemanagerimpl.cpp.

71  {
72  return _entities;
73 }
EntityContainer< entity::CADEntity_CSPtr > _entities
void StorageManagerImpl::insertEntity ( entity::CADEntity_CSPtr  entity)
overridevirtual

insertEntity

Parameters
entity::CADEntity_CSPtr

Implements lc::StorageManager.

Definition at line 13 of file storagemanagerimpl.cpp.

13  {
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 }
EntityContainer< entity::CADEntity_CSPtr > _entities
std::map< std::string, lc::EntityContainer< entity::CADEntity_CSPtr > > _blocksEntities
void insert(CT entity)
add an entity to the EntityContainer If the entity already exists, it will be replaced ...
void StorageManagerImpl::insertEntityContainer ( const EntityContainer< entity::CADEntity_CSPtr > &  entities)
overridevirtual

insertEntityContainer

Parameters
EntityContainer<entity::CADEntity_CSPtr>

Implements lc::StorageManager.

Definition at line 38 of file storagemanagerimpl.cpp.

38  {
39  _entities.combine(entities);
40  // TODO add metadata types where they do not exists
41 }
EntityContainer< entity::CADEntity_CSPtr > _entities
void combine(const EntityContainer &entities)
Add all entities to this container Any entity that already exists will get replaced.
Layer_CSPtr StorageManagerImpl::layerByName ( const std::string &  layerName) const
overridevirtual

returns layer By Name

Parameters
layerName
Returns
Layer_CSPtr layer

Implements lc::StorageManager.

Definition at line 51 of file storagemanagerimpl.cpp.

51  {
52  return metaDataTypeByName<Layer>(layerName);
53 }
DxfLinePatternByValue_CSPtr StorageManagerImpl::linePatternByName ( const std::string &  linePatternName) const
overridevirtual

returns line pattern By Name

Parameters
string&linePatternName
Returns
DxfLinePattern_CSPtr layer

Implements lc::StorageManager.

Definition at line 55 of file storagemanagerimpl.cpp.

55  {
56  return metaDataTypeByName<DxfLinePatternByValue>(linePatternName);
57 }
void StorageManagerImpl::optimise ( )
overridevirtual

optimise the quadtree

Implements lc::StorageManager.

Definition at line 75 of file storagemanagerimpl.cpp.

75  {
77  for (auto ec : _blocksEntities) {
78  ec.second.optimise();
79  }
80 }
EntityContainer< entity::CADEntity_CSPtr > _entities
void optimise()
optimise this container
std::map< std::string, lc::EntityContainer< entity::CADEntity_CSPtr > > _blocksEntities
void StorageManagerImpl::removeDocumentMetaType ( DocumentMetaType_CSPtr  dmt)
overridevirtual

remove a document meta type from the document

Parameters
layerlayer to be added.

Implements lc::StorageManager.

Definition at line 88 of file storagemanagerimpl.cpp.

88  {
89  _documentMetaData.erase(dmt->id());
90 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData
void StorageManagerImpl::removeEntity ( entity::CADEntity_CSPtr  entity)
overridevirtual

remove Entity from the container

Parameters
entity::CADEntity_CSPtr

Implements lc::StorageManager.

Definition at line 34 of file storagemanagerimpl.cpp.

34  {
35  _entities.remove(entity);
36 }
EntityContainer< entity::CADEntity_CSPtr > _entities
void remove(CT entity)
remove an Entity from the document.
void StorageManagerImpl::replaceDocumentMetaType ( DocumentMetaType_CSPtr  oldDmt,
DocumentMetaType_CSPtr  newDmt 
)
overridevirtual

remove document meta type

Implements lc::StorageManager.

Definition at line 93 of file storagemanagerimpl.cpp.

93  {
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 }
std::map< std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive > _documentMetaData

Member Data Documentation

std::map<std::string, lc::EntityContainer<entity::CADEntity_CSPtr> > lc::StorageManagerImpl::_blocksEntities
private

Definition at line 129 of file storagemanagerimpl.h.

std::map<std::string, DocumentMetaType_CSPtr, StringHelper::cmpCaseInsensetive> lc::StorageManagerImpl::_documentMetaData
private

Definition at line 128 of file storagemanagerimpl.h.

EntityContainer<entity::CADEntity_CSPtr> lc::StorageManagerImpl::_entities
private

Definition at line 127 of file storagemanagerimpl.h.


The documentation for this class was generated from the following files: