Program: bbtk
Module: $RCSfile: bbtkInterpreter.cxx,v $ $
Language: C++
- Date: $Date: 2008/04/08 06:59:30 $
- Version: $Revision: 1.58 $
+ Date: $Date: 2008/04/18 12:59:15 $
+ Version: $Revision: 1.60 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
namespace bbtk
{
- //Interpreter* Interpreter::mGlobalInterpreter = NULL;
+ //=======================================================================
+ Interpreter::Pointer Interpreter::New(const std::string& cpp_file)
+ {
+ bbtkDebugMessage("Kernel",9,"Interpreter::New()"<<std::endl);
+ return MakePointer(new Interpreter(cpp_file));
+ }
+ //=======================================================================
//=======================================================================
- /**
- *
- */
Interpreter::Interpreter(const std::string& cpp_file)
:
mUser(0),
mCommandLine(false),
mThrow(false)
{
-bufferNb =0;
+
+ bufferNb =0;
bbtk::MessageManager::RegisterMessageType("Echo","Level>0 : Prints the 'echo' commands of the user.\n\tLevel>1 : Prints the command being interpreted",1);
bbtk::MessageManager::RegisterMessageType("Interpreter","Messages of the interpreter",0);
bbtkDebugMessageInc("Interpreter",9,"Interpreter::Interpreter()" <<std::endl);
if (cpp_file.size()!=0)
{
- mExecuter = new bbtk::Transcriptor(cpp_file);
+ mExecuter = boost::static_pointer_cast<VirtualExec>(bbtk::Transcriptor::New(cpp_file));
}
else
{
- mExecuter = new bbtk::Executer();
+ mExecuter = boost::static_pointer_cast<VirtualExec>(bbtk::Executer::New());
}
- mExecuter->SetInterpreter(this);
+
+ // Lock this pointer or will auto-destruct !!
+ mExecuter->SetInterpreter(MakePointer(this,true));
// For the time being, comment out previous line, and
// uncomment next line to check Transcriptor
info.help = "Shows a graphical view of a bbtk pipeline.\n- BlackBoxName : name of the box to view. Default '.' : current box.\n- BlackBoxNameType : name of the type of box to view, ex : 'workspace')";
mCommandDict[info.keyword] = info;
+ info.keyword = "object";
+ info.argmin = 0;
+ info.argmax = 1;
+ info.code = cObject;
+ info.syntax = "object <object name>";
+ info.help = "Provides debug info on object <object name>";
+ mCommandDict[info.keyword] = info;
+
/*
info.keyword = "workspace";
info.argmin = 1;
*/
Interpreter::~Interpreter()
{
- bbtkDebugMessageInc("Interpreter",9,"Interpreter::~Interpreter()" <<std::endl);
- delete mExecuter;
-
- bbtkDebugDecTab("Interpreter",9);
+ bbtkDebugMessageInc("Interpreter",9,"==> Interpreter::~Interpreter()" <<std::endl);
+ mExecuter = VirtualExec::Pointer();
+ bbtkDebugMessageInc("Interpreter",9,"<== Interpreter::~Interpreter()" <<std::endl);
}
//=======================================================================
void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
{
bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretLine(\""<<line<<"\")"<<std::endl);
- bbtkMessage("Echo",2,"\""<<line<<"\""<<std::endl);
+ bbtkMessage("Echo",2,line<<std::endl);
std::vector<std::string> words;
SplitLine(line,words);
case cReset :
this->mExecuter->Reset();
+ mFileNameHistory.clear();
break;
case cInclude :
break;
case cQuit :
- delete mExecuter;
throw QuitException();
break;
+
+ case cObject :
+ if (words.size()==2) ObjectInfo(words[1]);
+ else ObjectInfo("");
+ break;
/* obsolete
case cWorkspace :
if (words.size() == 2)
void Interpreter::LoadScript( std::string fullPathScriptName,
std::string includeScriptName)
{
- Utilities::replace( fullPathScriptName , INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
-
- bool okScriptExist=false;
- int iStrScript,sizeVecStricpt=mFileName.size();
- for ( iStrScript=0;iStrScript<sizeVecStricpt;iStrScript++)
- {
- if (mFileName[iStrScript] == fullPathScriptName )
- {
- okScriptExist=true;
- } // if
- } // for
-
- if (find(mFileName.begin(),mFileName.end(),fullPathScriptName)!=mFileName.end())
-// if (okScriptExist==true)
+ Utilities::replace( fullPathScriptName ,
+ INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
+
+ if (find(mFileNameHistory.begin(),
+ mFileNameHistory.end(),
+ fullPathScriptName)!=mFileNameHistory.end())
{
- bbtkMessage("Interpreter",1,"file '"<<fullPathScriptName
- <<"' already open : I do not open it once more to prevent recursive inclusion"<<std::endl);
return;
}
mFile.push_back(s);
mFileName.push_back(fullPathScriptName);
+ mFileNameHistory.push_back(fullPathScriptName);
mIncludeFileName.push_back(includeScriptName);
mLine.push_back(0);
while (mFile.size() != 0)
{
CloseCurrentFile();
- /*
- mFile.back()->close();
- delete mFile.back();
- mFile.pop_back();
- bbtkDebugMessage("Interpreter",9,
- " Closing file '"<<mFileName.back()<<"'"<<std::endl);
- mFileName.pop_back();
- mIncludeFileName.pop_back();
- mLine.pop_back();
-*/
}
bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
<<std::endl);
// connected and can be adapted from a widget adaptor
// vector which stores the list of inputs of the box which must be connected
std::vector<std::string> in;
- Factory* F = mExecuter->GetFactory();
- if (F==0)
+
+ Factory::Pointer F = mExecuter->GetFactory();
+ /*
+ Package::Pointer user = F->GetPackage("user");
+ */
+ ComplexBlackBoxDescriptor::Pointer workspace = mExecuter->GetWorkspace();
+
+ if (workspace==0)
{
delete s;
- bbtkError("Interpreter::CreateGUI : could not access the executer factory");
+ bbtkError("Interpreter::CreateGUI : could not access the executer workspace");
}
- Package* user = F->GetPackage("user");
- ComplexBlackBoxDescriptor* workspace
- = (ComplexBlackBoxDescriptor*)user->GetBlackBoxMap().find("workspace")->second;
-
- BlackBox* box = workspace->GetPrototype()->bbGetBlackBox(boxname);
+
+
+ /*
+ (ComplexBlackBoxDescriptor::Pointer)(user->GetBlackBoxMap().find("workspace")->second.get());
+ */
+
+ BlackBox::Pointer box = workspace->GetPrototype()->bbGetBlackBox(boxname);
// BlackBox::InputConnectorMapType incm = box->bbGetInputConnectorMap();
int nb = 0;
BlackBox::InputConnectorMapType::iterator i;
if ( ( d->GetCreatorTypeInfo() == typeid(AtomicBlackBoxDescriptor)) ||
( d->GetCreatorTypeInfo() == typeid(WxBlackBoxDescriptor)) )
continue;
+ bool widok = true;
+ std::string widget,adaptor;
// try to find a widget adaptor
- std::string adaptor;
- if (F->FindWidgetAdaptor(DataInfo(typeid(Void),""),
+ if (F->FindWidgetAdaptor(DataInfo(d->GetTypeInfo(),""),
d->GetDataInfo(),
adaptor))
{
- // store the input name
- in.push_back(i->first);
// command to create the adaptor
(*s) << " new "<<adaptor<<" "<<i->first<<std::endl;
- // command to create the output
- (*s) << " output "<<i->first<<" "
- <<i->first<<".Out "<<i->first<<std::endl;
- // <<" Output of the widget which allows to set "
- //<i->first<<"'"<<std::endl;
// Sets the label of the widget adaptor to the name of the input
(*s) << " set "<<i->first<<".Label "<<i->first<<std::endl;
+ // Sets the initial value of the widget to the value of the input
+ (*s) << " set "<<i->first<<".In \" "
+ <<box->bbGetInputAsString(i->first)<<"\""
+ << std::endl;
+ // store the input name
+ in.push_back(i->first);
(*s) << " connect "<<i->first<<".Widget layout.Widget"<<in.size()<<std::endl;
+ //<i->first<<"'"<<std::endl;
(*s) << " connect "<<i->first<<".BoxChange change.In"<<in.size()<<std::endl;
}
+ // try to find a two pieces adaptor
+ else if (F->FindWidgetAdaptor2(DataInfo(d->GetTypeInfo(),""),
+ d->GetDataInfo(),
+ widget,adaptor) )
+ {
+ // command to create the widget
+ (*s) << " new "<<widget<<" "<<i->first<<"Widget"<<std::endl;
+ // command to create the adaptor
+ (*s) << " new "<<adaptor<<" "<<i->first<<std::endl;
+ // connect the two
+ (*s) << " connect "<<i->first<<"Widget.Out "
+ <<i->first<<".In"<<std::endl;
+ // Sets the label of the widget adaptor to the name of the input
+ (*s) << " set "<<i->first<<"Widget.Label "<<i->first<<std::endl;
+ // Sets the initial value of the widget to the value of the input
+ (*s) << " set "<<i->first<<"Widget.In \" "
+ <<box->bbGetInputAsString(i->first)<<"\""<< std::endl;
+ // store the input name
+ in.push_back(i->first);
+ (*s) << " connect "<<i->first<<"Widget.Widget layout.Widget"<<in.size()<<std::endl;
+ //<i->first<<"'"<<std::endl;
+ (*s) << " connect "<<i->first<<"Widget.BoxChange change.In"<<in.size()<<std::endl;
+
+ }
// try to find an adaptor from string
// If found then can create a text input which
// will be automatically adapted
d->GetDataInfo(),
adaptor))
{
- // store the input name
- in.push_back(i->first);
// command to create the adaptor
(*s) << " new InputText "<<i->first<<std::endl;
- // command to create the output
- (*s) << " output "<<i->first<<" "
- <<i->first<<".Out "<<i->first<<std::endl;
- // <<" Output of the widget which allows to set "
- //<i->first<<"'"<<std::endl;
// Sets the label of the widget adaptor to the name of the input
(*s) << " set "<<i->first<<".Title "<<i->first<<std::endl;
+ // Sets the initial value of the widget to the value of the input
+ (*s) << " set "<<i->first<<".In \" "
+ <<box->bbGetInputAsString(i->first)<<"\""<< std::endl;
+ // store the input name
+ in.push_back(i->first);
(*s) << " connect "<<i->first<<".Widget layout.Widget"<<in.size()<<std::endl;
+ //<i->first<<"'"<<std::endl;
(*s) << " connect "<<i->first<<".BoxChange change.In"<<in.size()<<std::endl;
- }
+ }
+ else
+ {
+ widok = false;
+ }
+ if (widok)
+ {
+ // command to create the output
+ (*s) << " output "<<i->first<<" "
+ <<i->first<<".Out "<<i->first<<std::endl;
+ // <<" Output of the widget which allows to set "
+
+ }
}
// Inputs for window properties
(*s) << " input WinTitle layout.WinTitle Title"<<std::endl;
}
//=======================================================================
+
+
+ //==========================================================================
+ void Interpreter::ObjectInfo(const std::string& name)
+ {
+ Object:: PrintObjectInfo(name);
+ }
+ //==========================================================================
+ //==========================================================================
+ std::string Interpreter::GetObjectName() const
+ {
+ return std::string("Interpreter");
+ }
+ //==========================================================================
+
+ //==========================================================================
+ std::string Interpreter::GetObjectInfo() const
+ {
+ std::stringstream i;
+ return i.str();
+ }
+ //==========================================================================
+
+ //==========================================================================
+size_t Interpreter::GetObjectSize() const
+{
+ size_t s = Superclass::GetObjectSize();
+ s += Interpreter::GetObjectInternalSize();
+ return s;
+ }
+ //==========================================================================
+ //==========================================================================
+size_t Interpreter::GetObjectInternalSize() const
+{
+ size_t s = sizeof(Interpreter);
+ return s;
+ }
+ //==========================================================================
+ //==========================================================================
+ size_t Interpreter::GetObjectRecursiveSize() const
+ {
+ size_t s = Superclass::GetObjectRecursiveSize();
+ s += Interpreter::GetObjectInternalSize();
+ s += mExecuter->GetObjectRecursiveSize();
+ return s;
+ }
+ //==========================================================================
}//namespace