d03450c44ed02d199d42867610ff7a25bc71c740
[occt.git] / src / Dynamic / Dynamic_DynamicInstance.cxx
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
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
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>
29
30 //=======================================================================
31 //function : Dynamic_DynamicInstance
32 //purpose  : 
33 //=======================================================================
34
35 Dynamic_DynamicInstance::Dynamic_DynamicInstance()
36 {
37 }
38
39 //=======================================================================
40 //function : Parameter
41 //purpose  : 
42 //=======================================================================
43
44 void Dynamic_DynamicInstance::Parameter
45   (const Handle(Dynamic_DynamicInstance)& aninstance) const
46 {
47   Handle(Dynamic_ParameterNode) parameternode = thefirstparameternode;
48
49   while(!parameternode.IsNull())
50     {
51       aninstance->Parameter(parameternode->Object());
52       parameternode = parameternode->Next();
53     }
54 }
55
56 //=======================================================================
57 //function : Parameter
58 //purpose  : 
59 //=======================================================================
60
61 void Dynamic_DynamicInstance::Parameter(const Handle(Dynamic_Parameter)& aparameter)
62 {
63   Handle(Dynamic_ParameterNode) parameternode = new Dynamic_ParameterNode(aparameter);
64   parameternode->Next(thefirstparameternode);
65   thefirstparameternode = parameternode;
66 }
67
68 //=======================================================================
69 //function : Parameter
70 //purpose  : 
71 //=======================================================================
72
73 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
74                                         const Standard_Integer avalue) const
75 {
76   Handle(Dynamic_IntegerParameter) parameter =
77     Handle(Dynamic_IntegerParameter)::DownCast(Parameter(aparameter));
78   parameter->Value(avalue);
79 }
80
81 //=======================================================================
82 //function : Parameter
83 //purpose  : 
84 //=======================================================================
85
86 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
87                                         const Standard_Real avalue) const
88 {
89   Handle(Dynamic_RealParameter) parameter =
90     Handle(Dynamic_RealParameter)::DownCast(Parameter(aparameter));
91   parameter->Value(avalue);
92 }
93
94 //=======================================================================
95 //function : Parameter
96 //purpose  : 
97 //=======================================================================
98
99 void Dynamic_DynamicInstance::Parameter(const Standard_CString aparameter,
100                                         const Standard_CString avalue) const
101 {
102   Handle(Dynamic_StringParameter) parameter =
103     Handle(Dynamic_StringParameter)::DownCast(Parameter(aparameter));
104   parameter->Value(avalue);
105 }
106
107 //=======================================================================
108 //function : Parameter
109 //purpose  : 
110 //=======================================================================
111
112 void Dynamic_DynamicInstance::Parameter
113   (const Standard_CString aparameter,
114    const Handle(Dynamic_DynamicInstance)& avalue) const
115 {
116   Handle(Dynamic_InstanceParameter) parameter =
117     Handle(Dynamic_InstanceParameter)::DownCast(Parameter(aparameter));
118   parameter->Value(avalue);
119 }
120
121 //=======================================================================
122 //function : Parameter
123 //purpose  : 
124 //=======================================================================
125
126 Handle(Dynamic_Parameter) Dynamic_DynamicInstance::Parameter
127        (const Standard_CString aparameter) const
128 {
129   Handle(Dynamic_Parameter) parameter;
130   Handle(Dynamic_ParameterNode) parameternode = thefirstparameternode;
131
132   while(!parameternode.IsNull())
133     {
134       TCollection_AsciiString aStr(aparameter);
135       parameter = parameternode->Object();
136       if(parameter->Name() == aStr) return parameter;
137       parameternode = parameternode->Next();
138     }
139   return parameter;
140 }
141
142 //=======================================================================
143 //function : Class
144 //purpose  : 
145 //=======================================================================
146
147 void Dynamic_DynamicInstance::Class(const Handle(Dynamic_DynamicClass)& aclass)
148 {
149   thedynamicclass = aclass;
150 }
151
152 //=======================================================================
153 //function : Execute
154 //purpose  : 
155 //=======================================================================
156
157 //extern source(Standard_Integer argc, char** argv);
158
159 void Dynamic_DynamicInstance::Execute(const Standard_CString amethod) const
160 {
161   Handle(Dynamic_Method) method = thedynamicclass->Method(amethod);
162
163   if(method->IsKind(STANDARD_TYPE(Dynamic_CompiledMethod)))
164     {
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)&);
168       
169 //      ((function)((*(Handle_Dynamic_CompiledMethod*)&method)->Function().ToCString()))(me);
170       ((function)(method_1->Function().ToCString()))(me);
171     }
172   else
173     {
174 /*      Standard_Integer argc = 2;
175       char* argv[2];
176       argv[0] = "source";
177       argv[1] = (*(Handle_Dynamic_InterpretedMethod*)&method)->Function();
178       source(argc,argv);*/
179     }
180 }
181