// file : xsd/cxx/tree/parsing/decimal.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef XSD_CXX_TREE_PARSING_DECIMAL_HXX #define XSD_CXX_TREE_PARSING_DECIMAL_HXX #include #include #include #include #include // xml::transcode #include // text_content #include namespace xsd { namespace cxx { namespace tree { template struct traits { typedef double type; static type create (const xercesc::DOMElement& e, flags f, container* c); static type create (const xercesc::DOMAttr& a, flags f, container* c); static type create (const std::basic_string& s, const xercesc::DOMElement*, flags, container*); }; template double traits:: create (const xercesc::DOMElement& e, flags f, container* c) { return create (text_content (e), 0, f, c); } template double traits:: create (const xercesc::DOMAttr& a, flags f, container* c) { return create (xml::transcode (a.getValue ()), 0, f, c); } template double traits:: create (const std::basic_string& s, const xercesc::DOMElement*, flags, container*) { // This type cannot have whitespaces in its values. As result we // don't need to waste time collapsing whitespaces. All we need to // do is trim the string representation which can be done without // copying. // ro_string tmp (s); trim (tmp); zc_istream is (tmp); is.imbue (std::locale::classic ()); type t; is >> t; return t; } } } } #endif // XSD_CXX_TREE_PARSING_DECIMAL_HXX