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
i!=mBlackBoxMap.end();
++i)
{
- delete i->second;
+ i->second->UnReference();
}
// Adaptors are also stored in the black box map : hence already deleted
/*
}
//==========================================================================
+
+
//==========================================================================
/// Returns true is the package contains
/// an adaptor of input type <typein> and
">::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())
{
{
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
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());
// 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()<<">)");
+ }
}
}
}
//==========================================================================
+ //===================================================================
+ 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
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);
mAdaptorMap.erase(j);
}
*/
+
+ i->second->UnReference();
+
bbtkDebugDecTab("Kernel",8);
}
//==========================================================================