]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkPackage.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkPackage.cxx
index c50abbd2c82d6f58699bbf5ff4767dd55288d607..b24272152df64d0fa61b3a7d90c45efe5289823e 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkPackage.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/04/08 06:59:30 $
-  Version:   $Revision: 1.11 $
+  Date:      $Date: 2008/04/09 11:16:57 $
+  Version:   $Revision: 1.12 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See doc/license.txt or
@@ -78,7 +78,7 @@ namespace bbtk
          i!=mBlackBoxMap.end();
        ++i) 
      {
-        delete i->second;
+       i->second->UnReference();
      } 
     // Adaptors are also stored in the black box map : hence already deleted
     /*
@@ -174,6 +174,8 @@ namespace bbtk
   }
   //==========================================================================
 
+
+
   //==========================================================================
   /// Returns true is the package contains 
   /// an adaptor of input type <typein> and 
@@ -187,9 +189,10 @@ namespace bbtk
                        ">::FindWidgetAdaptor("
                        <<typein<<","
                        <<typeout<<")"<<bbtkendl);
-    
+   
     AdaptorKey key(typein,typeout,
                   BlackBoxDescriptor::DEFAULT_WIDGET_ADAPTOR);
+    // First try to find a single widget adaptor
     AdaptorMapType::const_iterator i = mAdaptorMap.find(key);
     if (i == mAdaptorMap.end())  
       {
@@ -241,7 +244,16 @@ namespace bbtk
   {
     bbtkDebugMessageInc("Kernel",8,"Package<"<<GetName()<<">::RegisterBlackBox(\""<<d->GetTypeName()<<"\")"<<std::endl);
     
+    BlackBoxMapType::iterator i = mBlackBoxMap.find(d->GetTypeName());
+    if (i!=mBlackBoxMap.end())
+      {
+       bbtkWarning("Package<"<<GetName()<<"> : Trying to register box type <"
+                   <<d->GetTypeName()<<"> which is already in the package");
+       return false;
+      }
+
     mBlackBoxMap[d->GetTypeName()] = d;
+    d->Reference();
     d->SetPackage(this);
     
     // If it is a default adaptor, also register it in the adaptors map
@@ -253,7 +265,7 @@ namespace bbtk
        TypeInfo typeout = d->GetOutputDescriptor("Out")->GetTypeInfo();
        DataInfo infoin(typein,d->GetInputDescriptor("In")->GetNature());
        DataInfo infoout(typeout,d->GetOutputDescriptor("Out")->GetNature());
-       bbtkDebugMessage("Kernel",8,"LG Adaptor "<<infoin<<" to "<<infoout 
+       bbtkDebugMessage("Kernel",9,"Adaptor "<<infoin<<" to "<<infoout 
                         <<" - kind="<<d->GetKind()<<std::endl);  
 
        AdaptorKey key(infoin,infoout,d->GetKind());
@@ -266,11 +278,14 @@ namespace bbtk
        // If already an adaptor registered : error
        else 
          {
-           bbtkError("Package <"<<GetName()<<
-                     "> : trying to register black box <"
-                     <<d->GetTypeName()
-                     <<"> as default adaptor but there is already a default adaptor registered (<"
-                     <<i->second->GetTypeName()<<">)");
+           if (i->second->GetTypeName() != d->GetTypeName()) 
+             {
+               bbtkError("Package <"<<GetName()<<
+                         "> : trying to register black box <"
+                         <<d->GetTypeName()
+                         <<"> as default adaptor but there is already a default adaptor registered (<"
+                         <<i->second->GetTypeName()<<">)");
+             }
          }
       }
     
@@ -280,6 +295,22 @@ namespace bbtk
   }
   //==========================================================================
   
+  //===================================================================
+  void Package::CheckBoxes() const
+  {
+    bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this
+               <<" ["<<GetName()<<"]"<<std::endl);
+    BlackBoxMapType::const_iterator i;
+    for (i=mBlackBoxMap.begin();
+        i!=mBlackBoxMap.end();
+        ++i) 
+      {
+       i->second->Check(true);
+      }
+    bbtkMessage("Debug",1,"****** Checking Package "<<(void*)this
+               <<" ["<<GetName()<<"] ... OK"<<std::endl);
+  }
+  //===================================================================
 
   //==========================================================================
   /// UnRegisters a black box descriptor from the package
@@ -294,6 +325,7 @@ namespace bbtk
        bbtkError("UnRegister : The package <"<<GetName()<<"> does not contains the black box <"<<name<<">");
      }
     mBlackBoxMap.erase(i);
+
     // Is it also in the adaptors map ?
     /*
     AdaptorMapType::iterator j = mAdaptorMap.find(name);
@@ -302,6 +334,9 @@ namespace bbtk
          mAdaptorMap.erase(j);
       }
     */    
+
+    i->second->UnReference();
+
     bbtkDebugDecTab("Kernel",8);    
   }
   //==========================================================================