]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkComplexBlackBoxDescriptor.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkComplexBlackBoxDescriptor.cxx
index 8485061fde7bdf29ca43926ac542e9eab36905cc..679557533a763c58d095c50de67622675c931cf8 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkComplexBlackBoxDescriptor.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/02/07 11:06:37 $
-  Version:   $Revision: 1.7 $
+  Date:      $Date: 2008/04/09 11:16:57 $
+  Version:   $Revision: 1.14 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -33,12 +33,14 @@ namespace bbtk
   //=======================================================================
   /// Default ctor
   ComplexBlackBoxDescriptor::ComplexBlackBoxDescriptor(const std::string& name)
-    : BlackBoxDescriptor()
+    : BlackBoxDescriptor(),
+      mFactory(0)
   {
     bbtkDebugMessageInc("Kernel",9,"ComplexBlackBoxDescriptor::ComplexBlackBoxDescriptor(\""<<name<<"\")"<<std::endl);
     SetTypeName(name);
     AddToCategory("complex box");
     mPrototype = new ComplexBlackBox(name+std::string("Prototype"),this);
+    // this->Reference();
     bbtkDebugDecTab("Kernel",9);
   }
   //=======================================================================
@@ -49,14 +51,22 @@ namespace bbtk
   /// Default dtor
   ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor()
   {
-    bbtkDebugMessageInc("Kernel",9,"ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor(\""<<GetTypeName()<<"\")"<<std::endl);
+    bbtkDebugMessageInc("Kernel",1,"ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor(\""<<GetTypeName()<<"\")"<<std::endl);
 
     delete mPrototype;
 
-    bbtkDebugDecTab("Kernel",9);
+    bbtkDebugMessage("Kernel",1,"EO ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor(\""<<GetTypeName()<<"\")"<<std::endl);
+   bbtkDebugDecTab("Kernel",1);
   }
   //=======================================================================
 
+  //=========================================================================
+  /// Check
+  void ComplexBlackBoxDescriptor::Check(bool recursive) const
+  {
+    mPrototype->Check(recursive);
+  }
+  //=========================================================================
 
   //=======================================================================
   /// Creates an instance of name <name> of the ComplexBlackBox of which this is the descriptor 
@@ -87,6 +97,11 @@ namespace bbtk
                        <<type<<"\",\""<<name<<"\") ["
                        <<GetTypeName()<<"]"<<std::endl);
     
+    // 
+    if (mFactory == 0) 
+      { 
+       bbtkError("ComplexBlackBoxDescriptor::Add : no factory set");
+      }
     
     // Verify that a box with the same name does not exist already
     if ( mPrototype->bbUnsafeGetBlackBox( name ) ) 
@@ -94,7 +109,7 @@ namespace bbtk
        bbtkError("a black box \""<<name<<"\" already exists");
       }
     // ok : create new one
-    mPrototype->bbAddBlackBox ( /*mFactory->Create*/ NewBlackBox(type,name) );
+    mPrototype->bbAddBlackBox ( mFactory->NewBlackBox(type,name) );
 
     bbtkDebugDecTab("Kernel",5);
   }
@@ -135,6 +150,13 @@ namespace bbtk
                        <<to<<"\",\""<<input
                        <<"\") ["
                        <<GetTypeName()<<"]"<<std::endl);
+  // 
+    if (mFactory == 0) 
+      { 
+       bbtkError("ComplexBlackBoxDescriptor::Connect : no factory set");
+      }
+    
+
   // Verify that a box with the same name does not exist already
     BlackBox* bbfrom = mPrototype->bbGetBlackBox( from );
     if ( !bbfrom ) 
@@ -147,7 +169,7 @@ namespace bbtk
        bbtkError("the black box \""<<to<<"\" does not exist");
       }
     
-    Connection* c = /*mFactory->*/ NewConnection( bbfrom, output, bbto, input );
+    Connection* c = mFactory->NewConnection( bbfrom, output, bbto, input );
 
     mPrototype->bbAddConnection(c);
 
@@ -182,13 +204,16 @@ namespace bbtk
                  <<input<<"\"");
       }
     
+    const BlackBoxInputDescriptor* d = 
+      bb->bbGetDescriptor()->GetInputDescriptor(input);
     AddInputDescriptor ( new ComplexBlackBoxInputDescriptor 
                         ( typeid(ComplexBlackBoxDescriptor),
                           name,
                           help,
+                          d->GetNature(),
                           box,
                           input,
-                          bb->bbGetInputType(input)));
+                          d->GetTypeInfo()));
     
     
     bbtkDebugDecTab("Kernel",5);
@@ -221,13 +246,16 @@ namespace bbtk
                  <<output<<"\"");
       }
     
+    const BlackBoxOutputDescriptor* d = 
+      bb->bbGetDescriptor()->GetOutputDescriptor(output);
     AddOutputDescriptor ( new ComplexBlackBoxOutputDescriptor 
                          ( typeid(ComplexBlackBoxDescriptor),
                            name,
                            help,
+                           d->GetNature(),
                            box,
                            output,
-                           bb->bbGetOutputType(output)));
+                           d->GetTypeInfo()));
     
     
     bbtkDebugDecTab("Kernel",5);
@@ -286,8 +314,12 @@ namespace bbtk
     std::string author = GetAuthor();
     Utilities::html_format(author);
     
-    std::string category = GetCategory();
-    Utilities::html_format(category);
+    std::vector<std::string> categories;
+    // Split the category string 
+    std::string delimiters = ";,";
+    Utilities::SplitString(GetCategory(),
+                          delimiters,categories);
+
         
     (s) << "<p><TABLE cellspacing=0  cellpadding=3>\n";
     (s) << "<TR><TD style='vertical-align: top;'><b> Description </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'> " 
@@ -296,14 +328,20 @@ namespace bbtk
     (s) << "<TR><TD style='vertical-align: top;'><b> Author(s) </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'>  " 
         << author << "</TD></TR>\n";
 
-    (s) << "<TR><TD style='vertical-align: top;'><b> Category(s) </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'>  " 
-        << category << "</TD></TR>\n";      
-
+    (s) << "<TR><TD style='vertical-align: top;'><b> Category(s) </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'>  ";
+    std::vector<std::string>::iterator ci;
+    for (ci=categories.begin(); ci!=categories.end(); ++ci)
+      {
+        s << "<a href=\"../index-category.html#"<< *ci <<"\">" << *ci 
+         << "</a>&nbsp;\n";
+      }
+    s << "</TD></TR>\n";      
     std::string inc = GetScriptFileName();
     if (inc.size()>0) 
       {
-    (s) << "<TR><TD style='vertical-align: top;'><b> To use it </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'> include " 
-      << inc << "</TD></TR>\n";
+       s << "<TR><TD style='vertical-align: top;'><b> To use it </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'> include ";
+       s << inc << "&nbsp;&nbsp;<a href=\"../../../bbs/"<<inc<<"\">[source]</a>";
+       s << "</TD></TR>\n";
        
       }
     
@@ -311,7 +349,7 @@ namespace bbtk
        
     if (B.size()) 
     {
-          (s) << "<TR><TD style='vertical-align: top;'><b> Dependencies </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'>  ";
+          (s) << "<TR><TD style='vertical-align: top;'><b> Uses </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'>  ";
 
           std::set<BlackBoxDescriptor*> pdeps;
           ComplexBlackBox::BlackBoxMapType::const_iterator b;
@@ -437,12 +475,15 @@ namespace bbtk
     InputDescriptorMapType::const_iterator i;
     unsigned int namelmax = 0;
     unsigned int typelmax = 0;
+    unsigned int natlmax = 0;
     for ( i = mInput.begin();  i != mInput.end(); ++i ) 
     {
           if (i->second->GetName().size()>namelmax) 
             namelmax = i->second->GetName().size();
           if (i->second->GetTypeName().size()>typelmax) 
             typelmax = i->second->GetTypeName().size();
+          if (i->second->GetNature().size()>natlmax) 
+            natlmax = i->second->GetNature().size();
     }
     OutputDescriptorMapType::const_iterator o;
     if (full) 
@@ -453,6 +494,8 @@ namespace bbtk
               namelmax = o->second->GetName().size();
            if (o->second->GetTypeName().size()>typelmax) 
               typelmax = o->second->GetTypeName().size();
+          if (o->second->GetNature().size()>natlmax) 
+            natlmax = o->second->GetNature().size();
           }
     }
     //
@@ -465,10 +508,14 @@ namespace bbtk
           std::string type(i->second->GetTypeName());
           type += ">";
           type.append(1+typelmax-type.size(),' ');
+          std::string nature(i->second->GetNature());
+          nature += "]";
+          nature.append(1+natlmax-nature.size(),' ');
           bbtkMessage("Help",1,
-                   "    '"<<name
-                   <<" <"<<type
-                   <<" : "<<i->second->GetDescription()<<std::endl);
+                      "    '"<<name
+                      <<" <"<<type
+                      <<" ["<<nature
+                      <<" : "<<i->second->GetDescription()<<std::endl);
     }
     if (full) 
     {
@@ -484,9 +531,13 @@ namespace bbtk
             std::string type(o->second->GetTypeName());
             type += ">";
             type.append(1+typelmax-type.size(),' ');
+            std::string nature(o->second->GetNature());
+            nature += "]";
+            nature.append(1+natlmax-nature.size(),' ');
             bbtkMessage("Help",1,
-                        "    '"<<name
+                      "    '"<<name
                         <<" <"<<type
+                        <<" ["<<nature
                         <<" : "<<o->second->GetDescription()<<std::endl);
           }
     }
@@ -515,4 +566,5 @@ namespace bbtk
 
 
 
+
 }