1 // Copyright (C) 2006-2015 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "YACSlibEngineExport.hxx"
24 #include "ConversionException.hxx"
37 YACSLIBENGINE_EXPORT Runtime* getRuntime() throw(Exception);
53 class ServiceInlineNode;
54 class ComponentInstance;
62 class InputDataStreamPort;
63 class OutputDataStreamPort;
67 class YACSLIBENGINE_EXPORT Runtime
69 friend Runtime* getRuntime() throw(Exception);
71 virtual void init() { }
72 virtual void fini() { }
74 virtual Catalog* loadCatalog(const std::string& sourceKind,const std::string& path);
75 virtual InlineFuncNode* createFuncNode(const std::string& kind,const std::string& name);
76 virtual InlineNode* createScriptNode(const std::string& kind,const std::string& name);
78 virtual ServiceNode* createRefNode(const std::string& kind,const std::string& name);
79 virtual ServiceNode* createCompoNode(const std::string& kind,const std::string& name);
80 virtual ServiceInlineNode *createSInlineNode(const std::string& kind, const std::string& name);
81 virtual DataNode* createInDataNode(const std::string& kind,const std::string& name);
82 virtual DataNode* createOutDataNode(const std::string& kind,const std::string& name);
84 virtual ComponentInstance* createComponentInstance(const std::string& name,
85 const std::string& kind="");
86 virtual Container *createContainer(const std::string& kind="");
87 virtual Proc* createProc(const std::string& name);
88 virtual Bloc* createBloc(const std::string& name);
89 virtual WhileLoop* createWhileLoop(const std::string& name);
90 virtual ForLoop* createForLoop(const std::string& name);
91 virtual ForEachLoop* createForEachLoop(const std::string& name,TypeCode * type);
92 virtual OptimizerLoop* createOptimizerLoop(const std::string& name,const std::string& algLib,
93 const std::string& factoryName,bool algInitOnFile,
94 const std::string& kind="", Proc * procForTypes = NULL);
95 virtual Switch* createSwitch(const std::string& name);
97 virtual TypeCode * createInterfaceTc(const std::string& id, const std::string& name,
98 std::list<TypeCodeObjref *> ltc);
99 virtual TypeCode * createSequenceTc(const std::string& id, const std::string& name, TypeCode *content);
100 virtual TypeCodeStruct * createStructTc(const std::string& id, const std::string& name);
102 virtual InputPort* createInputPort(const std::string& name,
103 const std::string& impl,
105 TypeCode * type) = 0;
107 virtual OutputPort* createOutputPort(const std::string& name,
108 const std::string& impl,
110 TypeCode * type) = 0;
112 virtual InputDataStreamPort* createInputDataStreamPort(const std::string& name,
115 virtual OutputDataStreamPort* createOutputDataStreamPort(const std::string& name,
119 virtual InputPort* adapt(InputPort* source, const std::string& impl, TypeCode * type,
120 bool init=false) throw (ConversionException) = 0;
122 virtual InputPort* adapt(InPropertyPort* source,
123 const std::string& impl,
125 bool init=false) throw (ConversionException) = 0;
127 virtual void* convertNeutral(TypeCode * type, Any *data);
128 virtual std::string convertNeutralAsString(TypeCode * type, Any *data);
130 virtual void removeRuntime();
133 static const char RUNTIME_ENGINE_INTERACTION_IMPL_NAME[];
134 static YACS::ENGINE::TypeCode *_tc_double;
135 static YACS::ENGINE::TypeCode *_tc_int;
136 static YACS::ENGINE::TypeCode *_tc_bool;
137 static YACS::ENGINE::TypeCode *_tc_string;
138 static YACS::ENGINE::TypeCode *_tc_file;
139 static YACS::ENGINE::TypeCode *_tc_stringpair;
140 static YACS::ENGINE::TypeCode *_tc_propvec;
141 virtual void setCatalogLoaderFactory(const std::string& name, CatalogLoader* factory);
142 std::map<std::string,CatalogLoader*> _catalogLoaderFactoryMap;
143 Catalog* getBuiltinCatalog();
144 virtual void addCatalog(Catalog* catalog);
145 virtual TypeCode* getTypeCode(const std::string& name);
148 static Runtime* _singleton;
150 std::set<std::string> _setOfImplementation;
151 Catalog* _builtinCatalog;
152 std::vector<Catalog*> _catalogs;