00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_XML_EXP_VISITOR_HH
00019 # define VCSN_XML_XML_EXP_VISITOR_HH
00020
00029 # include <xercesc/dom/DOM.hpp>
00030 # include <xercesc/util/XMLString.hpp>
00031 # include <xercesc/util/PlatformUtils.hpp>
00032 # include <vaucanson/misc/usual_macros.hh>
00033 # include <string>
00034 # include <cstddef>
00035
00036 # include <vaucanson/algebra/implementation/series/rat/nodes.hh>
00037 # include <vaucanson/algebra/implementation/series/rat/exp.hh>
00038
00039
00040 namespace vcsn {
00041
00042 namespace rat {
00043
00044 template<typename M_, typename W_>
00045 class XmlExpVisitor : public ConstNodeVisitor<M_, W_>
00046 {
00047 public:
00048 XmlExpVisitor(xercesc::DOMDocument* doc, const char* node_name);
00049
00050 virtual void
00051 product(const Node<M_, W_>* left_, const Node<M_, W_>* right_);
00052
00053 virtual void
00054 sum(const Node<M_, W_>* left_, const Node<M_, W_>* right_);
00055
00056 virtual void
00057 star(const Node<M_, W_>* node);
00058
00059 virtual void
00060 left_weight(const W_&, const Node<M_, W_>* node);
00061
00062 virtual void
00063 right_weight(const W_&, const Node<M_, W_>* node);
00064
00065 virtual void
00066 constant(const M_& m);
00067
00068 virtual void zero();
00069
00070 virtual void one();
00071
00072 xercesc::DOMElement* get() const;
00073
00074 xercesc::DOMDocument* set(xercesc::DOMDocument* v);
00075
00076 protected:
00077 void sum_or_product(const Node<M_, W_>* left_, const Node<M_, W_>* right_);
00078 void weight_or_star(const Node<M_, W_>* node);
00079 template <typename T>
00080 void set_weight(const T& w, xercesc::DOMElement* node);
00081 template <typename S, typename T>
00082 void set_weight(const rat::exp<S, T>& w, xercesc::DOMElement* node);
00083
00084 protected:
00085 xercesc::DOMDocument* doc_;
00086 xercesc::DOMElement* label_;
00087 xercesc::DOMElement* current_;
00088 };
00089
00090 }
00091
00092 }
00093
00094 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00095 # include <vaucanson/xml/xml_exp_visitor.hxx>
00096 # endif // VCSN_USE_INTERFACE_ONLY
00097
00098 #endif // ! VCSN_XML_XML_EXP_VISITOR_HH