1 #ifndef _RHEOLEF_PERSISTENT_TABLE_H
2 #define _RHEOLEF_PERSISTENT_TABLE_H
77 #include "rheolef/smart_pointer.h"
78 #include <unordered_map>
86 static A
load (
const std::string&
name);
102 using base =
typename A::base;
103 using rep =
typename base::handled_type;
104 auto iter = get_loaded_map().find (
name);
105 if (iter != get_loaded_map().end()) {
106 verbose() && std::cerr <<
"persistent_table: \""<<
name<<
"\" reused from table" << std::endl;
108 a.base::operator= (base((*iter).second,
typename base::internal()));
111 verbose() && std::cerr <<
"persistent_table: \""<<
name<<
"\" created" << std::endl;
112 rep* ptr = rep::make_ptr (
name);
114 a.base::operator= (ptr);
115 get_loaded_map().insert (std::make_pair(
name,
a.base::get_count()));
122 size_t status_erased = get_loaded_map().erase (
name);
123 verbose() && std::cerr <<
"persistent_table: \""<<
name<<
"\" destroyed and erased from table" << std::endl;
145 #ifdef _RHEOLEF_PERSISTENT_TABLE_EXAMPLE
147 #include "rheolef/persistent_table.h"
154 A_rep (
const string& name1) : _name(name1) { }
156 string name()
const {
return _name; }
157 static A_rep* make_ptr (
const string&
name) {
return new A_rep (
name); }
166 A (
const string&
name =
"");
167 string name()
const {
return base::data().name(); }
170 A::A (
const string&
name)
174 if (
name ==
"")
return;
195 #endif // _RHEOLEF_PERSISTENT_TABLE_EXAMPLE
196 #endif // _RHEOLEF_PERSISTENT_TABLE_H