1 #include "bbtkObject.h"
2 #include "bbtkMessageManager.h"
3 #include "bbtkPackage.h"
9 //=======================================================================
10 Object::ObjectListType Object::mgObjectList;
11 Object::ObjectListType Object::mgPackageList;
12 //=======================================================================
14 //=======================================================================
18 //=======================================================================
21 //=======================================================================
25 //=======================================================================
27 //=======================================================================
28 void Object::InsertInObjectList(Pointer p)
30 bbtkDebugMessage("object",9,"##> Object::InsertInObjectList(\""
31 <<p->GetObjectName()<<"\" ["<<p<<"])"<<std::endl);
32 boost::weak_ptr<Object> w(p);
33 mgObjectList.insert(w);
35 //=======================================================================
37 //=======================================================================
38 void Object::InsertInPackageList(Pointer p)
40 bbtkDebugMessage("object",9,"##> Object::InsertInPackageList(\""
41 <<p->GetObjectName()<<"\" ["<<p<<"])"<<std::endl);
42 boost::weak_ptr<Object> w(p);
43 mgPackageList.insert(w);
45 //=======================================================================
48 //=======================================================================
49 void Object::RemoveFromObjectList(WeakPointer p)
51 bbtkDebugMessage("object",9,"##> Object::RemoveFromObjectList()"
53 mgObjectList.erase(p);
56 //=======================================================================
59 //=======================================================================
60 std::string Object::GetObjectName() const
62 return std::string("**Unknown object**");
64 //=======================================================================
66 //=======================================================================
67 std::string Object::GetObjectInfo() const
69 return std::string("");
71 //=======================================================================
73 //=======================================================================
74 void Object::PrintObjectListInfo(const std::string& name)
78 << "=============== Living bbtk::Object pointers ========="<<std::endl;
83 ObjectListType::iterator i;
84 for (i = mgObjectList.begin();
85 i!=mgObjectList.end();
88 if (i->use_count() == 0)
94 Object::Pointer p(i->lock());
95 if (p->GetObjectName().find(name) != std::string::npos )
97 std::cout << n << "/" << mgObjectList.size() << " ";
99 m += p->GetObjectSize();
105 << "------------------------------------------------------"<<std::endl;
107 std::cout << " Total : "<<n<<" objects - "<<m<<" b"<<std::endl;
110 std::cout<<"* Note : "<<u
111 <<" object in list has 0 ref count, "
112 <<"i.e. destroyed without removing itself from the living objects list ! (this is just an implementation error not a memory leak)"<<std::endl;
116 std::cout<<"* Note : "<<u
117 <<" objects in list have 0 ref count, "
118 <<"i.e. destroyed without removing themselves from the living objects list ! (this is just an implementation error not a memory leak)"<<std::endl;
121 << "============ EO Living bbtk::Object pointers ========="<<std::endl;
124 //=======================================================================
127 //=======================================================================
128 void Object::PrintObjectInfo(const std::string& name)
131 ObjectListType::iterator i;
132 for (i = mgObjectList.begin();
133 i!=mgObjectList.end();
137 if (i->use_count() == 0) continue;
138 Object::Pointer p(i->lock());
139 if (p->GetObjectName().find(name) != std::string::npos )
141 std::cout << n << "/" << mgObjectList.size() << " ";
146 //=======================================================================
148 //=======================================================================
149 void Object::PrintObjectInfo(const Object::Pointer& p)
151 std::cout << "* [" << p << "] \t"
152 << p.use_count()-1 << " r \t"
153 << p->GetObjectRecursiveSize() << " ("
154 << p->GetObjectSize() << ") b \t"
155 << p->GetObjectName()
157 std::cout << p->GetObjectInfo();
159 //=======================================================================
161 //=======================================================================
163 void Object::Deleter::operator() (Object* p)
165 std::string name = p->GetObjectName();
166 #ifdef BBTK_COMPILE_DEBUG_MESSAGES
167 void* adr = (void*)p;
168 bbtkDebugMessage("object",1,"##> Object::Deleter : deleting \""
169 <<name<<"\" ["<<adr<<"]"<<std::endl);
171 Object::RemoveFromObjectList(mPointer);
173 bbtkDebugMessage("object",2,"<## Object::Deleter : \""<<name<<"\" ["
174 <<adr<<"] deleted"<<std::endl);
176 //=======================================================================
181 //=======================================================================
182 void Object::ReleasePackages()
184 bbtkDebugMessage("object",1,"##> Object::ReleasePackages()"<<std::endl);
185 // Release package pointers
186 ObjectListType::iterator i;
187 for (i = mgPackageList.begin();
188 i!= mgPackageList.end();
191 if (i->use_count() != 0)
193 bbtkDebugMessage("object",1,"##> Releasing package '"<<
194 i->lock()->GetThisPointer<Package>()->GetName()
196 // Object::Pointer p(i->lock());
197 Package::WeakPointer w(i->lock()->GetThisPointer<Package>());
200 if (p->GetObjectName().find(name) != std::string::npos )
202 std::cout << n << "/" << mgObjectList.size() << " ";
204 m += p->GetObjectSize();
212 //=======================================================================
217 //=======================================================================
218 bool StaticInitTime::PrintObjectListInfo = false;
219 //=======================================================================
220 //=======================================================================
221 StaticInitTime::StaticInitTime()
224 //=======================================================================
225 //=======================================================================
226 StaticInitTime::~StaticInitTime()
228 Object::ReleasePackages();
230 if (PrintObjectListInfo)
232 std::cout << std::endl
233 << "************************** main ended *******************"
234 << std::endl << std::endl;
235 Object::PrintObjectListInfo("");
237 if (Object::GetObjectsCount()>0)
239 std::cout << std::endl;
240 std::cout << "**************************** WARNING *************************"
242 std::cout << "**** "<< Object::GetObjectsCount()
243 <<" bbtk objects still alive after main ended"<<std::endl;
244 if (!PrintObjectListInfo)
248 <<"Rerun bbi with -D option or put 'debug -D' in bbs file"
251 <<"to view the objects list "
254 std::cout << "**************************************************************"
260 //=======================================================================
261 //=======================================================================
262 // The static instance
263 static StaticInitTime i;
264 //=======================================================================