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
00031 # include <xercesc/sax/SAXException.hpp>
00032
00033 # include <vaucanson/misc/usual_macros.hh>
00034 # include <vaucanson/xml/xml_converter.hh>
00035 # include <vaucanson/xml/parsers.hh>
00036
00037 namespace vcsn
00038 {
00039 namespace xml
00040 {
00041 XML::XML(const std::string& name, bool use_label_node)
00042 : name_(name), use_label_node_(use_label_node), check_(true)
00043 {
00044 XML::inst_ += 1;
00045 if (XML::inst_ == 1)
00046 xercesc::XMLPlatformUtils::Initialize();
00047 }
00048
00049 XML::~XML()
00050 {
00051 XML::inst_ -= 1;
00052 if (!XML::inst_)
00053 xercesc::XMLPlatformUtils::Terminate();
00054 }
00055
00056 XML::XML(const XML& old)
00057 : name_(old.name_),
00058 use_label_node_(old.use_label_node_),
00059 check_(old.check_)
00060 {
00061 XML::inst_ += 1;
00062 }
00063
00064 void
00065 XML::check(bool check)
00066 {
00067 check_ = check;
00068 }
00069
00070 template<typename Saver, typename Conv>
00071 void XML::operator()(std::ostream& out, const Saver& s,
00072 const Conv&) const
00073 {
00074 typedef typename Saver::automaton_t automaton_t;
00075
00076 xml_converter<automaton_t> xc(use_label_node_);
00077 xc.save(s.automaton(), out, name_);
00078 }
00079
00080 template <typename Loader>
00081 void
00082 XML::operator()(std::istream& in, Loader& l)
00083 {
00084
00085 typedef typename Loader::automaton_t automaton_t;
00086 AutParser<automaton_t>* parser = new AutParser<automaton_t>(l.automaton(), check_);
00087 parser->parse(in);
00088
00089
00090
00091 }
00092
00093 int XML::inst_ = 0;
00094 }
00095 }
00096
00097 #endif // ! VCSN_XML_XML_HXX