Version: 8.3.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
outputParsers.hxx
Go to the documentation of this file.
1
// Copyright (C) 2006-2016 CEA/DEN, EDF R&D
2
//
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.
7
//
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.
12
//
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
16
//
17
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18
//
19
20
#ifndef _OUTPUTPARSERS_HXX_
21
#define _OUTPUTPARSERS_HXX_
22
23
#include "
nodeParsers.hxx
"
24
25
#include "
factory.hxx
"
26
27
#include "
DataNode.hxx
"
28
29
namespace
YACS
30
{
31
43
struct
outputdatatypeParser
:
parser
44
{
45
static
outputdatatypeParser
outputdataParser
;
46
47
virtual
void
onStart
(
const
XML_Char
* el,
const
XML_Char
** attr)
48
{
49
DEBTRACE
(
"outputdatatypeParser::onStart"
);
50
std::string element(el);
51
parser
* pp=&
parser::main_parser
;
52
SetUserDataAndPush
(pp);
53
pp->
init
();
54
pp->
pre
();
55
pp->
buildAttr
(attr);
56
}
57
virtual
void
onEnd
(
const
char
*el,
parser
* child)
58
{
59
}
60
virtual
void
buildAttr
(
const
XML_Char
** attr)
61
{
62
if
(!attr)
63
return
;
64
DEBTRACE
(
"outputdatatypeParser::buildAttr"
);
65
required
(
"name"
,attr);
66
required
(
"type"
,attr);
67
for
(
int
i
= 0; attr[
i
];
i
+= 2)
68
{
69
if
(std::string(attr[
i
]) ==
"name"
)
name
(attr[i+1]);
70
if
(std::string(attr[i]) ==
"type"
)
type
(attr[i+1]);
71
if
(std::string(attr[i]) ==
"ref"
)
ref
(attr[i+1]);
72
}
73
}
74
virtual
void
name
(
const
std::string&
name
)
75
{
76
DEBTRACE
(
"outputdatatypeParser::name"
);
77
_param
.
_name
=
name
;
78
}
79
virtual
void
type
(
const
std::string&
type
)
80
{
81
DEBTRACE
(
"outputdatatypeParser::type"
);
82
_param
.
_type
=
type
;
83
}
84
virtual
void
ref
(
const
std::string&
ref
)
85
{
86
_param
.
setProperty
(
"ref"
,ref);
87
}
88
89
virtual
void
pre
()
90
{
91
DEBTRACE
(
"outputdatatypeParser::pre"
);
92
_param
.
clear
();
93
}
94
virtual
myoutport
&
post
()
95
{
96
return
_param
;
97
}
98
myoutport
_param
;
99
};
100
113
template
<
class
T=ENGINE::DataNode*>
114
struct
outnodetypeParser
:
public
nodetypeParser
<T>
115
{
116
static
outnodetypeParser<T>
outnodeParser
;
117
virtual
void
onStart
(
const
XML_Char
* el,
const
XML_Char
** attr);
118
virtual
void
onEnd
(
const
char
*el,
parser
* child);
119
virtual
void
buildAttr
(
const
XML_Char
** attr);
120
virtual
void
pre
();
121
virtual
void
name
(
const
std::string&
name
);
122
virtual
void
kind
(
const
std::string&
kind
);
123
virtual
void
ref
(
const
std::string&
ref
);
124
virtual
void
create
();
125
virtual
void
parameter
(
myoutport
&
p
);
126
virtual
T
post
();
127
std::string
_name
;
128
std::string
_kind
;
129
std::string
_ref
;
130
};
131
132
template
<
class
T>
outnodetypeParser<T>
outnodetypeParser<T>::outnodeParser
;
133
134
135
template
<
class
T>
136
void
outnodetypeParser<T>::onStart
(
const
XML_Char
* el,
const
XML_Char
** attr)
137
{
138
DEBTRACE
(
"outnodetypeParser::onStart"
);
139
std::string element(el);
140
parser
* pp=&
parser::main_parser
;
141
if
(element ==
"parameter"
)pp=&
outputdatatypeParser::outputdataParser
;
142
if
(element ==
"property"
)pp=&
propertytypeParser::propertyParser
;
143
this->SetUserDataAndPush(pp);
144
pp->
init
();
145
pp->
pre
();
146
pp->
buildAttr
(attr);
147
}
148
149
template
<
class
T>
150
void
outnodetypeParser<T>::onEnd
(
const
char
*el,
parser
* child)
151
{
152
DEBTRACE
(
"outnodetypeParser::onEnd"
);
153
std::string element(el);
154
if
(element ==
"parameter"
)parameter(((
outputdatatypeParser
*)child)->post());
155
if
(element ==
"property"
)this->property(((
propertytypeParser
*)child)->post());
156
}
157
158
template
<
class
T>
159
void
outnodetypeParser<T>::buildAttr
(
const
XML_Char
** attr)
160
{
161
if
(!attr)
162
return
;
163
DEBTRACE
(
"outnodetypeParser::buildAttr"
);
164
this->required(
"name"
,attr);
165
for
(
int
i
= 0; attr[
i
];
i
+= 2)
166
{
167
if
(std::string(attr[
i
]) ==
"name"
)name(attr[i+1]);
168
if
(std::string(attr[i]) ==
"kind"
)kind(attr[i+1]);
169
if
(std::string(attr[i]) ==
"ref"
)
ref
(attr[i+1]);
170
}
171
create();
172
}
173
174
template
<
class
T>
175
void
outnodetypeParser<T>::pre
()
176
{
177
this->_node=0;
178
_kind=
""
;
179
_ref=
""
;
180
}
181
182
template
<
class
T>
183
void
outnodetypeParser<T>::name
(
const
std::string& name)
184
{
185
_name=name;
186
}
187
template
<
class
T>
188
void
outnodetypeParser<T>::kind
(
const
std::string& kind)
189
{
190
_kind=kind;
191
}
192
template
<
class
T>
193
void
outnodetypeParser<T>::ref
(
const
std::string&
ref
)
194
{
195
_ref=
ref
;
196
}
197
198
template
<
class
T>
199
void
outnodetypeParser<T>::create
()
200
{
201
this->_node =
theRuntime
->
createOutDataNode
(_kind,_name);
202
}
203
204
template
<
class
T>
205
void
outnodetypeParser<T>::parameter
(
myoutport
&
p
)
206
{
207
DEBTRACE
(
"outnodetypeParser::parameter"
);
208
if
(
currentProc
->
typeMap
.count(p.
_type
)==0)
209
{
210
//Check if the typecode is defined in the runtime
211
YACS::ENGINE::TypeCode
*
t
=
theRuntime
->
getTypeCode
(p.
_type
);
212
if
(t==0)
213
{
214
std::string msg=
"Unknown Type: "
;
215
msg=msg+p.
_type
+
" for node: "
+this->_node->getName()+
" port name: "
+p.
_name
;
216
this->logError(msg);
217
return
;
218
}
219
else
220
{
221
currentProc
->
typeMap
[p.
_type
]=
t
;
222
t->
incrRef
();
223
}
224
}
225
ENGINE::InputPort
*port = this->_node->edAddInputPort(p.
_name
,
currentProc
->
typeMap
[p.
_type
]);
226
this->_node->setData(port,p.
_props
[
"ref"
]);
227
}
228
229
template
<
class
T>
230
T
outnodetypeParser<T>::post
()
231
{
232
this->_node->setRef(_ref);
233
return
this->_node;
234
}
235
236
}
237
#endif
src
yacsloader
outputParsers.hxx
Copyright © 2006-2017 CEA/DEN, EDF R&D