]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
=== MAJOR RELEASE ====
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index febbd934840929bd6dc0002b8ca00ab0d83bd772..ede613aae17a55c7142de17f212c98ed20d9a02e 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/04/09 11:16:57 $
-  Version:   $Revision: 1.59 $
+  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
@@ -291,6 +297,14 @@ bufferNb =0;
     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;
@@ -314,10 +328,9 @@ bufferNb =0;
    */
   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);
   }
   //=======================================================================
 
@@ -828,9 +841,13 @@ void Interpreter::InterpretLine( const std::string& line, bool &insideComment )
         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) 
@@ -1881,17 +1898,25 @@ void  Interpreter::NewGUI(const std::string& boxname,
   // 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;
@@ -1919,7 +1944,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
          // 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 \""
+         (*s) << "  set "<<i->first<<".In \" "
               <<box->bbGetInputAsString(i->first)<<"\""
               << std::endl;
          // store the input name
@@ -1943,7 +1968,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
          // 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 \""
+         (*s) << "  set "<<i->first<<"Widget.In \" "
               <<box->bbGetInputAsString(i->first)<<"\""<< std::endl;
          // store the input name
          in.push_back(i->first);
@@ -1964,7 +1989,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
          // 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 \""
+         (*s) << "  set "<<i->first<<".In \" "
               <<box->bbGetInputAsString(i->first)<<"\""<< std::endl;
          // store the input name
          in.push_back(i->first);
@@ -2014,6 +2039,53 @@ void  Interpreter::NewGUI(const std::string& boxname,
 }
 //=======================================================================
 
+
+
+ //==========================================================================
+  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