45#include "BESDefinitionStorageList.h"
46#include "BESDefinitionStorage.h"
51static std::once_flag d_euc_init_once;
53BESDefinitionStorageList::BESDefinitionStorageList() :
58BESDefinitionStorageList::~BESDefinitionStorageList()
60 BESDefinitionStorageList::persistence_list *pl = _first;
62 if (pl->_persistence_obj) {
63 delete pl->_persistence_obj;
65 BESDefinitionStorageList::persistence_list *next = pl->_next;
85 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
89 _first =
new BESDefinitionStorageList::persistence_list;
90 _first->_persistence_obj = cp;
91 _first->_reference = 1;
96 BESDefinitionStorageList::persistence_list *pl = _first;
98 while (done ==
false) {
99 if (pl->_persistence_obj->get_name() != cp->
get_name()) {
104 pl->_next =
new BESDefinitionStorageList::persistence_list;
105 pl->_next->_persistence_obj = cp;
106 pl->_next->_reference = 1;
107 pl->_next->_next = 0;
131 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
134 BESDefinitionStorageList::persistence_list *pl = _first;
137 while (done ==
false) {
139 if (pl->_persistence_obj && pl->_persistence_obj->get_name() == persist_name) {
168 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
171 BESDefinitionStorageList::persistence_list *pl = _first;
172 BESDefinitionStorageList::persistence_list *last = 0;
175 while (done ==
false) {
177 if (pl->_persistence_obj && pl->_persistence_obj->get_name() == persist_name) {
181 if (!pl->_reference) {
183 _first = _first->_next;
186 if (!last)
throw BESInternalError(
"ContainerStorageList last is null", __FILE__, __LINE__);
187 last->_next = pl->_next;
189 delete pl->_persistence_obj;
218 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
221 BESDefinitionStorageList::persistence_list *pl = _first;
223 while (done ==
false) {
225 if (persist_name == pl->_persistence_obj->get_name()) {
226 ret = pl->_persistence_obj;
253 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
256 BESDefinitionStorageList::persistence_list *pl = _first;
258 while (done ==
false) {
260 ret_def = pl->_persistence_obj->look_for(def_name);
291 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
293 BESDefinitionStorageList::persistence_list *pl = _first;
301 std::map<string, string> props;
302 props[
"name"] = pl->_persistence_obj->get_name();
303 info.begin_tag(
"store", &props);
304 pl->_persistence_obj->show_definitions(info);
305 info.end_tag(
"store");
319 std::lock_guard<std::recursive_mutex> lock_me(d_cache_lock_mutex);
321 strm << BESIndent::LMarg <<
"BESDefinitionStorageList::dump - (" << (
void *)
this <<
")" << endl;
324 strm << BESIndent::LMarg <<
"registered definition storage:" << endl;
326 BESDefinitionStorageList::persistence_list *pl = _first;
328 pl->_persistence_obj->dump(strm);
331 BESIndent::UnIndent();
334 strm << BESIndent::LMarg <<
"registered definition storage: none" << endl;
336 BESIndent::UnIndent();
340BESDefinitionStorageList::TheList()
342 std::call_once(d_euc_init_once,BESDefinitionStorageList::initialize_instance);
346void BESDefinitionStorageList::initialize_instance() {
349 atexit(delete_instance);
353void BESDefinitionStorageList::delete_instance() {
Provides a mechanism for accessing definitions from different definition stores registered with this ...
virtual BESDefinitionStorage * find_persistence(const std::string &persist_name)
find the persistence store with the given name
virtual bool add_persistence(BESDefinitionStorage *p)
Add a persistent store to the list.
virtual BESDefine * look_for(const std::string &def_name)
look for the specified definition in the list of defintion stores.
virtual bool deref_persistence(const std::string &persist_name)
de-reference a persistent store in the list
virtual bool ref_persistence(const std::string &persist_name)
reference a persistent store in the list
virtual void dump(std::ostream &strm) const
dumps information about this object
virtual void show_definitions(BESInfo &info)
show information for each definition in each persistence store
provides persistent storage for a specific view of different containers including contraints and aggr...
virtual const std::string & get_name() const
retrieve the name of this persistent store
informational response object
exception thrown if internal error encountered