1 // Created on: 1993-01-22
2 // Created by: Gilles DEBARBOUILLE
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <Dynamic_DynamicInstance.ixx>
18 #include <Dynamic_Parameter.hxx>
19 #include <Dynamic_IntegerParameter.hxx>
20 #include <Dynamic_RealParameter.hxx>
21 #include <Dynamic_StringParameter.hxx>
22 #include <Dynamic_InstanceParameter.hxx>
23 #include <Dynamic_Method.hxx>
24 #include <Dynamic_CompiledMethod.hxx>
25 #include <Dynamic_InterpretedMethod.hxx>
26 #include <Dynamic_SequenceOfMethods.hxx>
27 #include <Standard_CString.hxx>
28 #include <TCollection_AsciiString.hxx>
30 //=======================================================================
31 //function : Dynamic_DynamicInstance
33 //=======================================================================
35 Dynamic_DynamicInstance::Dynamic_DynamicInstance()
39 //=======================================================================
40 //function : Parameter
42 //=======================================================================
44 void Dynamic_DynamicInstance::Parameter
45 (const Handle(Dynamic_DynamicInstance)& aninstance) const
47 Handle(Dynamic_ParameterNode) parameternode = thefirstparameternode;
49 while(!parameternode.IsNull())
51 aninstance->Parameter(parameternode->Object());
52 parameternode = parameternode->Next();
56 //=======================================================================
57 //function : Parameter
59 //=======================================================================
61 void Dynamic_DynamicInstance::Parameter(const Handle(Dynamic_Parameter)& aparameter)
63 Handle(Dynamic_ParameterNode) parameternode = new Dynamic_ParameterNode(aparameter);
64 parameternode->Next(thefirstparameternode);
65 thefirstparameternode = parameternode;
68 //=======================================================================
69 //function : Parameter
71 //=======================================================================
73 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
74 const Standard_Integer avalue) const
76 Handle(Dynamic_IntegerParameter) parameter =
77 Handle(Dynamic_IntegerParameter)::DownCast(Parameter(aparameter));
78 parameter->Value(avalue);
81 //=======================================================================
82 //function : Parameter
84 //=======================================================================
86 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
87 const Standard_Real avalue) const
89 Handle(Dynamic_RealParameter) parameter =
90 Handle(Dynamic_RealParameter)::DownCast(Parameter(aparameter));
91 parameter->Value(avalue);
94 //=======================================================================
95 //function : Parameter
97 //=======================================================================
99 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
100 const Standard_CString avalue) const
102 Handle(Dynamic_StringParameter) parameter =
103 Handle(Dynamic_StringParameter)::DownCast(Parameter(aparameter));
104 parameter->Value(avalue);
107 //=======================================================================
108 //function : Parameter
110 //=======================================================================
112 void Dynamic_DynamicInstance::Parameter
113 (const Standard_CString aparameter,
114 const Handle(Dynamic_DynamicInstance)& avalue) const
116 Handle(Dynamic_InstanceParameter) parameter =
117 Handle(Dynamic_InstanceParameter)::DownCast(Parameter(aparameter));
118 parameter->Value(avalue);
121 //=======================================================================
122 //function : Parameter
124 //=======================================================================
126 Handle(Dynamic_Parameter) Dynamic_DynamicInstance::Parameter
127 (const Standard_CString aparameter) const
129 Handle(Dynamic_Parameter) parameter;
130 Handle(Dynamic_ParameterNode) parameternode = thefirstparameternode;
132 while(!parameternode.IsNull())
134 TCollection_AsciiString aStr(aparameter);
135 parameter = parameternode->Object();
136 if(parameter->Name() == aStr) return parameter;
137 parameternode = parameternode->Next();
142 //=======================================================================
145 //=======================================================================
147 void Dynamic_DynamicInstance::Class(const Handle(Dynamic_DynamicClass)& aclass)
149 thedynamicclass = aclass;
152 //=======================================================================
155 //=======================================================================
157 //extern source(Standard_Integer argc, char** argv);
159 void Dynamic_DynamicInstance::Execute(const Standard_CString amethod) const
161 Handle(Dynamic_Method) method = thedynamicclass->Method(amethod);
163 if(method->IsKind(STANDARD_TYPE(Dynamic_CompiledMethod)))
165 Handle(Dynamic_DynamicInstance) me(this) ;
166 Handle(Dynamic_CompiledMethod) method_1 = Handle(Dynamic_CompiledMethod)::DownCast(method);
167 typedef void (*function)(const Handle(Dynamic_DynamicInstance)&);
169 // ((function)((*(Handle(Dynamic_CompiledMethod)*)&method)->Function().ToCString()))(me);
170 ((function)(method_1->Function().ToCString()))(me);
174 /* Standard_Integer argc = 2;
177 argv[1] = (*(Handle(Dynamic_InterpretedMethod)*)&method)->Function();