Program: bbtk
Module: $RCSfile: bbtkComplexBlackBoxDescriptor.cxx,v $
Language: C++
- Date: $Date: 2008/02/05 12:16:55 $
- Version: $Revision: 1.3 $
+ 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
//=======================================================================
/// Default ctor
ComplexBlackBoxDescriptor::ComplexBlackBoxDescriptor(const std::string& name)
- : BlackBoxDescriptor()
+ : BlackBoxDescriptor(),
+ mFactory(0)
{
- bbtkDebugMessageInc("Core",9,"ComplexBlackBoxDescriptor::ComplexBlackBoxDescriptor(\""<<name<<"\")"<<std::endl);
+ bbtkDebugMessageInc("Kernel",9,"ComplexBlackBoxDescriptor::ComplexBlackBoxDescriptor(\""<<name<<"\")"<<std::endl);
SetTypeName(name);
+ AddToCategory("complex box");
mPrototype = new ComplexBlackBox(name+std::string("Prototype"),this);
- bbtkDebugDecTab("Core",9);
+ // this->Reference();
+ bbtkDebugDecTab("Kernel",9);
}
//=======================================================================
/// Default dtor
ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor()
{
- bbtkDebugMessageInc("Core",9,"ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor(\""<<GetTypeName()<<"\")"<<std::endl);
+ bbtkDebugMessageInc("Kernel",1,"ComplexBlackBoxDescriptor::~ComplexBlackBoxDescriptor(\""<<GetTypeName()<<"\")"<<std::endl);
delete mPrototype;
- bbtkDebugDecTab("Core",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
BlackBox* ComplexBlackBoxDescriptor::CreateInstance(const std::string& name)
{
//bbtkError("ComplexBlackBoxDescriptor::CreateInstance not implemented");
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::CreateInstance(\""
<<name<<"\") ["
<<GetTypeName()<<"]"<<std::endl);
return mPrototype->bbClone(name);
- bbtkDebugDecTab("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
//=======================================================================
const std::string& name
)
{
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::Add(\""
<<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 ) )
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("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
//=======================================================================
/// Adds a black box to the execution list
void ComplexBlackBoxDescriptor::AddToExecutionList ( const std::string& box)
{
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::AddToExecutionList(\""
<<box<<"\" ["
<<GetTypeName()<<"]"<<std::endl);
// ok
mPrototype->bbAddToExecutionList ( box );
- bbtkDebugDecTab("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
const std::string& input
)
{
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::Connect(\""
<<from<<"\",\""<<output<<"\",\""
<<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 )
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);
- bbtkDebugDecTab("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
//=======================================================================
const std::string& input,
const std::string& help)
{
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::DefineInput(\""
<<name<<"\",\""<<box<<"\",\""
<<input<<"\",\""<<help
<<input<<"\"");
}
- AddInputDescriptor ( new ComplexBlackBoxInputDescriptor ( name,
- help,
- box,
- input,
- bb->bbGetInputType(input)));
-
+ const BlackBoxInputDescriptor* d =
+ bb->bbGetDescriptor()->GetInputDescriptor(input);
+ AddInputDescriptor ( new ComplexBlackBoxInputDescriptor
+ ( typeid(ComplexBlackBoxDescriptor),
+ name,
+ help,
+ d->GetNature(),
+ box,
+ input,
+ d->GetTypeInfo()));
+
- bbtkDebugDecTab("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
//=======================================================================
const std::string& output,
const std::string& help)
{
- bbtkDebugMessageInc("Core",5,
+ bbtkDebugMessageInc("Kernel",5,
"ComplexBlackBoxDescriptor::DefineOutput(\""
<<name<<"\",\""<<box<<"\",\""
<<output<<"\",\""<<help
<<output<<"\"");
}
+ const BlackBoxOutputDescriptor* d =
+ bb->bbGetDescriptor()->GetOutputDescriptor(output);
AddOutputDescriptor ( new ComplexBlackBoxOutputDescriptor
- ( name,
+ ( typeid(ComplexBlackBoxDescriptor),
+ name,
help,
+ d->GetNature(),
box,
output,
- bb->bbGetOutputType(output)));
+ d->GetTypeInfo()));
- bbtkDebugDecTab("Core",5);
+ bbtkDebugDecTab("Kernel",5);
}
//=======================================================================
int detail, int level,
const std::string& output_dir, bool relative_link)
{
- bbtkDebugMessageInc("Core",9,
+ bbtkDebugMessageInc("Kernel",9,
"ComplexBlackBoxDescriptor::InsertHtmlHelp() ["
<<GetTypeName()<<"]"<<std::endl);
std::string descr = GetDescription();
- //Utilities::html_format(descr);
+ Utilities::html_format(descr);
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;'> "
(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> \n";
+ }
+ s << "</TD></TR>\n";
std::string inc = GetScriptFileName();
if (inc.size()>0)
{
- (s) << "<TR><TD style='vertical-align: top;'><b> Include </b></TD><TD style='vertical-align: top;'> : </TD><TD style='vertical-align: top;'> "
- << 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 << " <a href=\"../../../bbs/"<<inc<<"\">[source]</a>";
+ s << "</TD></TR>\n";
}
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;
Utilities::html_format(type);
std::string descr(in->second->GetDescription());
- //Utilities::html_format(descr);
+ Utilities::html_format(descr);
(s) << "<TR><TD style='vertical-align: top;'><B><PRE> "<<name<<" </PRE></B></TD>"
<< "<TD style='vertical-align: top;'><I><PRE> "<<type<<" </PRE></I></TD>"
Utilities::html_format(type);
std::string descr(o->second->GetDescription());
- //Utilities::html_format(descr);
+ Utilities::html_format(descr);
(s) << "<TR><TD style='vertical-align: top;'><B><PRE> "<<name<<" </PRE></B></TD>"
<< "<TD style='vertical-align: top;'><I><PRE> "<<type<<" </PRE></I></TD>"
//------------
// End
- bbtkDebugDecTab("Core",9);
+ bbtkDebugDecTab("Kernel",9);
}
//=========================================================================
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)
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();
}
}
//
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)
{
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);
}
}
+
}