00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_XML_HXX
00019 # define VCSN_XML_XML_HXX
00020
00021 # include <vaucanson/xml/parsers.hh>
00022 # include <vaucanson/xml/printers.hh>
00023
00024 namespace vcsn
00025 {
00026 namespace xml
00027 {
00028 XML::XML(const std::string& name)
00029 : name_(name)
00030 {
00031 XML::inst_ += 1;
00032 if (XML::inst_ == 1)
00033 xercesc::XMLPlatformUtils::Initialize();
00034 }
00035
00036 XML::~XML()
00037 {
00038 XML::inst_ -= 1;
00039 if (!XML::inst_)
00040 xercesc::XMLPlatformUtils::Terminate();
00041 }
00042
00043 XML::XML(const XML& old)
00044 : name_(old.name_)
00045 {
00046 XML::inst_ += 1;
00047 }
00048
00049 template <typename Auto, typename T, typename Format, typename Conv>
00050 void XML::operator()(std::ostream& out,
00051 const vcsn::tools::automaton_saver_<Auto, T, Format>& s,
00052 const Conv&) const
00053 {
00054 AutPrinter<Auto>* printer = new AutPrinter<Auto>(s.automaton(), name_);
00055 printer->print(out);
00056 delete printer;
00057 }
00058
00059 template <typename RE, typename T, typename Format, typename Conv>
00060 void XML::operator()(std::ostream& out,
00061 const vcsn::tools::regexp_saver_<RE, T, Format>& s,
00062 const Conv&) const
00063 {
00064 RegExpPrinter<RE>* printer = new RegExpPrinter<RE>(s.rat_exp(), name_);
00065 printer->print(out);
00066 delete printer;
00067 }
00068
00069 template <typename Auto, typename T, typename Format>
00070 void
00071 XML::operator()(std::istream& in,
00072 vcsn::tools::automaton_loader_<Auto, T, Format>& l,
00073 bool check)
00074 {
00075 AutParser<Auto>* parser = new AutParser<Auto>(l.automaton(), check);
00076 parser->parse(in);
00077 delete parser;
00078 }
00079
00080 template <typename RE, typename T, typename Format>
00081 void
00082 XML::operator()(std::istream& in,
00083 vcsn::tools::regexp_loader_<RE, T, Format>& l,
00084 bool check)
00085 {
00086 RegExpParser<RE>* parser = new RegExpParser<RE>(l.rat_exp(), check);
00087 parser->parse(in);
00088 delete parser;
00089 }
00090
00091
00092 int XML::inst_ = 0;
00093 }
00094 }
00095
00096 #endif // ! VCSN_XML_XML_HXX