bbtk::BlackBox::Deleter Struct Reference

#include <bbtkBlackBox.h>

Inheritance diagram for bbtk::BlackBox::Deleter:

Inheritance graph
[legend]
Collaboration diagram for bbtk::BlackBox::Deleter:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 Deleter ()
int Delete (Object *p)
virtual void operator() (Object *p)
 Objects deleter.

Public Attributes

WeakPointer mPointer


Detailed Description

Black box objects have a special deleter which must take care of releasing the descriptor AFTER** the box is deleted (Releasing it in the destructor may cause dl close and crash) Black box deleter 1) Calls the user overloadable bbDelete method 2) Releases the box descriptor

Definition at line 599 of file bbtkBlackBox.h.


Constructor & Destructor Documentation

bbtk::BlackBox::Deleter::Deleter (  ) 

Reimplemented from bbtk::Object::Deleter.

Definition at line 57 of file bbtkBlackBox.cxx.

00058   {
00059   }


Member Function Documentation

int bbtk::BlackBox::Deleter::Delete ( Object p  )  [virtual]

Reimplemented from bbtk::Object::Deleter.

Definition at line 63 of file bbtkBlackBox.cxx.

References bbtk::BlackBox::bbDelete(), bbtk::BlackBox::bbGetDescriptor(), bbtkDebugMessage, bbtkInternalError, bbtk::Object::GetObjectName(), and bbtk::Package::ReleaseBlackBoxDescriptor().

00064   {
00065     BlackBox* b = dynamic_cast<BlackBox*>(p);
00066     if (!b)
00067       {
00068         bbtkInternalError("BlackBox::Deleter::Delete("<<p->GetObjectName()
00069                           <<"["<<p<<"]) : "
00070                           <<"dynamic cast to BlackBox* failed !");
00071       }
00072     std::string name = p->GetObjectName();//b->bbGetNameWithParent();
00073     bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\")"<<std::endl);
00074 
00075 
00076     BlackBoxDescriptor::WeakPointer desc = b->bbGetDescriptor();
00077     bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : deleting black box"<<std::endl);
00078     
00079     int refs = b->bbDelete();
00080 
00081     bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : releasing descriptor"<<std::endl);
00082     
00083     if (!desc.expired()) 
00084       {
00085         Package::WeakPointer pack = desc.lock()->GetPackage();
00086         if (!pack.expired()) 
00087           {
00088             Package::ReleaseBlackBoxDescriptor(pack,desc);
00089           }
00090         else 
00091           {
00092             bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : descriptor package expired (was not held by a package and the box was the last instance)"<<std::endl);
00093           }
00094       }
00095     else
00096       {
00097         bbtkDebugMessage("object",2,"##> BlackBox::Deleter(\""<<name<<"\") : descriptor expired : nothing to do (was not held by a package or the box is a complex black box prototype)"<<std::endl);
00098       }
00099     bbtkDebugMessage("object",2,"<## BlackBox::Deleter(\""<<name<<"\")"<<std::endl);
00100     return refs;
00101   }

Here is the call graph for this function:

void bbtk::Object::Deleter::operator() ( Object p  )  [virtual, inherited]

Objects deleter.

Definition at line 194 of file bbtkObject.cxx.

References bbtkDebugMessage, bbtkWarning, bbtk::Object::Deleter::Delete(), bbtk::Object::GetObjectName(), bbtk::Object::Deleter::mPointer, and bbtk::Object::RemoveFromObjectList().

00195   {
00196     std::string name = p->GetObjectName();
00197 #ifdef BBTK_COMPILE_DEBUG_MESSAGES
00198     void* adr = (void*)p;
00199     bbtkDebugMessage("object",1,"##> Object::Deleter : deleting \""
00200                      <<name<<"\" ["<<adr<<"]"<<std::endl);
00201 #endif
00202     int remaining = this->Delete(p);
00203     if (remaining == 0)
00204       {
00205         Object::RemoveFromObjectList(mPointer);
00206         bbtkDebugMessage("object",2,"<## Object::Deleter : \""<<name<<"\" ["
00207                          <<adr<<"] deleted"<<std::endl);
00208       }
00209     else
00210       {
00211         bbtkWarning("##### Object::Deleter \""<<name<<"\" failed !!! "
00212                     << remaining << " reference(s) still around..."
00213                     <<std::endl); 
00214       }
00215   }

Here is the call graph for this function:


Member Data Documentation

Definition at line 84 of file bbtkObject.h.

Referenced by bbtk::Object::Deleter::operator()().


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

Generated on Thu May 31 14:14:03 2012 for BBTK by  doxygen 1.5.7.1