39 #include "BESDefinitionStorageList.h"
40 #include "BESDefinitionStorage.h"
41 #include "BESDefine.h"
46 BESDefinitionStorageList::BESDefinitionStorageList() :
51 BESDefinitionStorageList::~BESDefinitionStorageList()
53 BESDefinitionStorageList::persistence_list *pl = _first;
55 if (pl->_persistence_obj) {
56 delete pl->_persistence_obj;
58 BESDefinitionStorageList::persistence_list *next = pl->_next;
80 _first =
new BESDefinitionStorageList::persistence_list;
81 _first->_persistence_obj = cp;
82 _first->_reference = 1;
87 BESDefinitionStorageList::persistence_list *pl = _first;
89 while (done ==
false) {
90 if (pl->_persistence_obj->get_name() != cp->
get_name()) {
95 pl->_next =
new BESDefinitionStorageList::persistence_list;
96 pl->_next->_persistence_obj = cp;
97 pl->_next->_reference = 1;
123 BESDefinitionStorageList::persistence_list *pl = _first;
126 while (done ==
false) {
128 if (pl->_persistence_obj && pl->_persistence_obj->get_name() == persist_name) {
158 BESDefinitionStorageList::persistence_list *pl = _first;
159 BESDefinitionStorageList::persistence_list *last = 0;
162 while (done ==
false) {
164 if (pl->_persistence_obj && pl->_persistence_obj->get_name() == persist_name) {
168 if (!pl->_reference) {
170 _first = _first->_next;
173 if (!last)
throw BESInternalError(
"ContainerStorageList last is null", __FILE__, __LINE__);
174 last->_next = pl->_next;
176 delete pl->_persistence_obj;
206 BESDefinitionStorageList::persistence_list *pl = _first;
208 while (done ==
false) {
210 if (persist_name == pl->_persistence_obj->get_name()) {
211 ret = pl->_persistence_obj;
239 BESDefinitionStorageList::persistence_list *pl = _first;
241 while (done ==
false) {
243 ret_def = pl->_persistence_obj->look_for(def_name);
274 BESDefinitionStorageList::persistence_list *pl = _first;
282 std::map<string, string> props;
283 props[
"name"] = pl->_persistence_obj->get_name();
284 info.begin_tag(
"store", &props);
285 pl->_persistence_obj->show_definitions(info);
286 info.end_tag(
"store");
292 BESDefinitionStorageList::TheList()
294 if (_instance == 0) {
309 strm << BESIndent::LMarg <<
"BESDefinitionStorageList::dump - (" << (
void *)
this <<
")" << endl;
312 strm << BESIndent::LMarg <<
"registered definition storage:" << endl;
314 BESDefinitionStorageList::persistence_list *pl = _first;
316 pl->_persistence_obj->dump(strm);
319 BESIndent::UnIndent();
322 strm << BESIndent::LMarg <<
"registered definition storage: none" << endl;
324 BESIndent::UnIndent();
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