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 Saver, typename Conv>
00050 void XML::operator()(std::ostream& out,
00051 const Saver& s,
00052 const Conv&) const
00053 {
00054 typedef typename Saver::automaton_t automaton_t;
00055 AutPrinter<automaton_t>* printer = new AutPrinter<automaton_t>(s.automaton(), name_);
00056 printer->print(out);
00057 delete printer;
00058 }
00059
00060 template <typename Loader>
00061 void
00062 XML::operator()(std::istream& in,
00063 Loader& l,
00064 bool check)
00065 {
00066 typedef typename Loader::automaton_t automaton_t;
00067 AutParser<automaton_t>* parser = new AutParser<automaton_t>(l.automaton(), check);
00068 parser->parse(in);
00069 delete parser;
00070 }
00071
00072 int XML::inst_ = 0;
00073 }
00074 }
00075
00076 #endif // ! VCSN_XML_XML_HXX