1 // Copyright (C) 2006-2021 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() ;
54 class ServiceInlineNode;
55 class ComponentInstance;
63 class InputDataStreamPort;
64 class OutputDataStreamPort;
68 class YACSLIBENGINE_EXPORT Runtime
70 friend Runtime* getRuntime() ;
72 virtual void init() { }
73 virtual void fini() { }
74 virtual std::vector< std::pair<std::string,int> > getCatalogOfComputeNodes() const = 0;
75 virtual Catalog* loadCatalog(const std::string& sourceKind,const std::string& path);
76 virtual InlineFuncNode* createFuncNode(const std::string& kind,const std::string& name);
77 virtual InlineNode* createScriptNode(const std::string& kind,const std::string& name);
79 virtual ServiceNode* createRefNode(const std::string& kind,const std::string& name);
80 virtual ServiceNode* createCompoNode(const std::string& kind,const std::string& name);
81 virtual ServiceInlineNode *createSInlineNode(const std::string& kind, const std::string& name);
82 virtual DataNode* createInDataNode(const std::string& kind,const std::string& name);
83 virtual DataNode* createOutDataNode(const std::string& kind,const std::string& name);
85 virtual ComponentInstance* createComponentInstance(const std::string& name,
86 const std::string& kind="");
87 virtual Container *createContainer(const std::string& kind="");
88 virtual Proc* createProc(const std::string& name);
89 virtual Bloc* createBloc(const std::string& name);
90 virtual WhileLoop* createWhileLoop(const std::string& name);
91 virtual ForLoop* createForLoop(const std::string& name);
92 virtual ForEachLoop* createForEachLoop(const std::string& name,TypeCode * type);
93 virtual ForEachLoopDyn* createForEachLoopDyn(const std::string& name,TypeCode * type);
94 virtual OptimizerLoop* createOptimizerLoop(const std::string& name,const std::string& algLib,
95 const std::string& factoryName,bool algInitOnFile,
96 const std::string& kind="", Proc * procForTypes = NULL);
97 virtual Switch* createSwitch(const std::string& name);
99 virtual TypeCode * createInterfaceTc(const std::string& id, const std::string& name,
100 std::list<TypeCodeObjref *> ltc);
101 virtual TypeCode * createSequenceTc(const std::string& id, const std::string& name, TypeCode *content);
102 virtual TypeCodeStruct * createStructTc(const std::string& id, const std::string& name);
104 virtual InputPort* createInputPort(const std::string& name,
105 const std::string& impl,
107 TypeCode * type) = 0;
109 virtual OutputPort* createOutputPort(const std::string& name,
110 const std::string& impl,
112 TypeCode * type) = 0;
114 virtual InputDataStreamPort* createInputDataStreamPort(const std::string& name,
117 virtual OutputDataStreamPort* createOutputDataStreamPort(const std::string& name,
121 virtual InputPort* adapt(InputPort* source, const std::string& impl, TypeCode * type,
122 bool init=false) = 0;
124 virtual InputPort* adapt(InPropertyPort* source,
125 const std::string& impl,
127 bool init=false) = 0;
129 virtual void* convertNeutral(TypeCode * type, Any *data);
130 virtual std::string convertNeutralAsString(TypeCode * type, Any *data);
132 virtual void removeRuntime();
135 static const char RUNTIME_ENGINE_INTERACTION_IMPL_NAME[];
136 static YACS::ENGINE::TypeCode *_tc_double;
137 static YACS::ENGINE::TypeCode *_tc_int;
138 static YACS::ENGINE::TypeCode *_tc_bool;
139 static YACS::ENGINE::TypeCode *_tc_string;
140 static YACS::ENGINE::TypeCode *_tc_file;
141 static YACS::ENGINE::TypeCode *_tc_stringpair;
142 static YACS::ENGINE::TypeCode *_tc_propvec;
143 virtual void setCatalogLoaderFactory(const std::string& name, CatalogLoader* factory);
144 std::map<std::string,CatalogLoader*> _catalogLoaderFactoryMap;
145 Catalog* getBuiltinCatalog();
146 virtual void addCatalog(Catalog* catalog);
147 virtual TypeCode* getTypeCode(const std::string& name);
150 static Runtime* _singleton;
152 std::set<std::string> _setOfImplementation;
153 Catalog* _builtinCatalog;
154 std::vector<Catalog*> _catalogs;