2 #ifndef _PORTPARSERS_HXX_
3 #define _PORTPARSERS_HXX_
5 #include "parserBase.hxx"
6 #include "propertyParsers.hxx"
13 /*! \brief Class for Inport parser.
15 * This class is a base class for other inport parsers
19 <xsd:complexType name="InPortType">
21 <xsd:element name="property" type="PropertyType" minOccurs="0"/>
23 <xsd:attribute name="name" type="xsd:string" use="required"/>
24 <xsd:attribute name="type" type="xsd:string" use="required"/>
29 template <class T=myinport>
30 struct inporttypeParser: parser
32 static inporttypeParser<T> inportParser;
33 virtual void onStart(const XML_Char* el, const XML_Char** attr);
34 virtual void onEnd(const char *el,parser* child);
35 virtual void buildAttr(const XML_Char** attr);
37 virtual void name(const std::string& name);
38 virtual void type(const std::string& type);
39 virtual void property (const myprop& prop);
45 /*! \brief Class for Outport parser.
47 * This class is also used for OutputDataStream Port
48 * same XML schema as inporttypeParser
50 template <class T=myoutport>
51 struct outporttypeParser:public inporttypeParser<T>
53 static outporttypeParser<T> outportParser;
56 template <class T> inporttypeParser<T> inporttypeParser<T>::inportParser;
57 template <class T> outporttypeParser<T> outporttypeParser<T>::outportParser;
60 void inporttypeParser<T>::onStart(const XML_Char* el, const XML_Char** attr)
62 std::string element(el);
63 parser* pp=&parser::main_parser;
64 if(element == "property")pp=&propertytypeParser::propertyParser;
65 this->SetUserDataAndPush(pp);
71 void inporttypeParser<T>::onEnd(const char *el,parser* child)
73 std::string element(el);
74 if(element == "property")property(((propertytypeParser*)child)->post());
77 void inporttypeParser<T>::buildAttr(const XML_Char** attr)
79 required("name",attr);
80 required("type",attr);
81 for (int i = 0; attr[i]; i += 2)
83 if(std::string(attr[i]) == "name")name(attr[i+1]);
84 if(std::string(attr[i]) == "type")type(attr[i+1]);
88 void inporttypeParser<T>::pre ()
95 void inporttypeParser<T>::name(const std::string& name)
100 void inporttypeParser<T>::type(const std::string& type)
105 void inporttypeParser<T>::property (const myprop& prop)
107 DEBTRACE( "property_set: " << prop._name << prop._value )
108 _port.setProperty(prop._name,prop._value);
111 T& inporttypeParser<T>::post()