// Copyright (c) 2005-2014 Code Synthesis Tools CC
//
// This program was generated by CodeSynthesis XSD, an XML Schema to
// C++ data binding compiler.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
// In addition, as a special exception, Code Synthesis Tools CC gives
// permission to link this program with the Xerces-C++ library (or with
// modified versions of Xerces-C++ that use the same license as Xerces-C++),
// and distribute linked combinations including the two. You must obey
// the GNU General Public License version 2 in all respects for all of
// the code used other than Xerces-C++. If you modify this copy of the
// program, you may extend this exception to your version of the program,
// but you are not obligated to do so. If you do not wish to do so, delete
// this exception statement from your version.
//
// Furthermore, Code Synthesis Tools CC makes a special exception for
// the Free/Libre and Open Source Software (FLOSS) which is described
// in the accompanying FLOSSE file.
//

#ifndef CXX_WORK_XSD_4_0_0_XSD_TESTS_CXX_TREE_FLOAT_TEST_HXX
#define CXX_WORK_XSD_4_0_0_XSD_TESTS_CXX_TREE_FLOAT_TEST_HXX

#ifndef XSD_USE_CHAR
#define XSD_USE_CHAR
#endif

#ifndef XSD_CXX_TREE_USE_CHAR
#define XSD_CXX_TREE_USE_CHAR
#endif

// Begin prologue.
//
//
// End prologue.

#include <xsd/cxx/config.hxx>

#if (XSD_INT_VERSION != 4000000L)
#error XSD runtime version mismatch
#endif

#include <xsd/cxx/pre.hxx>

#include <xsd/cxx/xml/char-utf8.hxx>

#include <xsd/cxx/tree/exceptions.hxx>
#include <xsd/cxx/tree/elements.hxx>
#include <xsd/cxx/tree/types.hxx>

#include <xsd/cxx/xml/error-handler.hxx>

#include <xsd/cxx/xml/dom/auto-ptr.hxx>

#include <xsd/cxx/tree/parsing.hxx>
#include <xsd/cxx/tree/parsing/byte.hxx>
#include <xsd/cxx/tree/parsing/unsigned-byte.hxx>
#include <xsd/cxx/tree/parsing/short.hxx>
#include <xsd/cxx/tree/parsing/unsigned-short.hxx>
#include <xsd/cxx/tree/parsing/int.hxx>
#include <xsd/cxx/tree/parsing/unsigned-int.hxx>
#include <xsd/cxx/tree/parsing/long.hxx>
#include <xsd/cxx/tree/parsing/unsigned-long.hxx>
#include <xsd/cxx/tree/parsing/boolean.hxx>
#include <xsd/cxx/tree/parsing/float.hxx>
#include <xsd/cxx/tree/parsing/double.hxx>
#include <xsd/cxx/tree/parsing/decimal.hxx>

#include <xsd/cxx/xml/dom/serialization-header.hxx>
#include <xsd/cxx/tree/serialization.hxx>
#include <xsd/cxx/tree/serialization/byte.hxx>
#include <xsd/cxx/tree/serialization/unsigned-byte.hxx>
#include <xsd/cxx/tree/serialization/short.hxx>
#include <xsd/cxx/tree/serialization/unsigned-short.hxx>
#include <xsd/cxx/tree/serialization/int.hxx>
#include <xsd/cxx/tree/serialization/unsigned-int.hxx>
#include <xsd/cxx/tree/serialization/long.hxx>
#include <xsd/cxx/tree/serialization/unsigned-long.hxx>
#include <xsd/cxx/tree/serialization/boolean.hxx>
#include <xsd/cxx/tree/serialization/float.hxx>
#include <xsd/cxx/tree/serialization/double.hxx>
#include <xsd/cxx/tree/serialization/decimal.hxx>

namespace xml_schema
{
  // anyType and anySimpleType.
  //
  typedef ::xsd::cxx::tree::type type;
  typedef ::xsd::cxx::tree::simple_type< char, type > simple_type;
  typedef ::xsd::cxx::tree::type container;

  // 8-bit
  //
  typedef signed char byte;
  typedef unsigned char unsigned_byte;

  // 16-bit
  //
  typedef short short_;
  typedef unsigned short unsigned_short;

  // 32-bit
  //
  typedef int int_;
  typedef unsigned int unsigned_int;

  // 64-bit
  //
  typedef long long long_;
  typedef unsigned long long unsigned_long;

  // Supposed to be arbitrary-length integral types.
  //
  typedef long long integer;
  typedef long long non_positive_integer;
  typedef unsigned long long non_negative_integer;
  typedef unsigned long long positive_integer;
  typedef long long negative_integer;

  // Boolean.
  //
  typedef bool boolean;

  // Floating-point types.
  //
  typedef float float_;
  typedef double double_;
  typedef double decimal;

  // String types.
  //
  typedef ::xsd::cxx::tree::string< char, simple_type > string;
  typedef ::xsd::cxx::tree::normalized_string< char, string > normalized_string;
  typedef ::xsd::cxx::tree::token< char, normalized_string > token;
  typedef ::xsd::cxx::tree::name< char, token > name;
  typedef ::xsd::cxx::tree::nmtoken< char, token > nmtoken;
  typedef ::xsd::cxx::tree::nmtokens< char, simple_type, nmtoken > nmtokens;
  typedef ::xsd::cxx::tree::ncname< char, name > ncname;
  typedef ::xsd::cxx::tree::language< char, token > language;

  // ID/IDREF.
  //
  typedef ::xsd::cxx::tree::id< char, ncname > id;
  typedef ::xsd::cxx::tree::idref< char, ncname, type > idref;
  typedef ::xsd::cxx::tree::idrefs< char, simple_type, idref > idrefs;

  // URI.
  //
  typedef ::xsd::cxx::tree::uri< char, simple_type > uri;

  // Qualified name.
  //
  typedef ::xsd::cxx::tree::qname< char, simple_type, uri, ncname > qname;

  // Binary.
  //
  typedef ::xsd::cxx::tree::buffer< char > buffer;
  typedef ::xsd::cxx::tree::base64_binary< char, simple_type > base64_binary;
  typedef ::xsd::cxx::tree::hex_binary< char, simple_type > hex_binary;

  // Date/time.
  //
  typedef ::xsd::cxx::tree::time_zone time_zone;
  typedef ::xsd::cxx::tree::date< char, simple_type > date;
  typedef ::xsd::cxx::tree::date_time< char, simple_type > date_time;
  typedef ::xsd::cxx::tree::duration< char, simple_type > duration;
  typedef ::xsd::cxx::tree::gday< char, simple_type > gday;
  typedef ::xsd::cxx::tree::gmonth< char, simple_type > gmonth;
  typedef ::xsd::cxx::tree::gmonth_day< char, simple_type > gmonth_day;
  typedef ::xsd::cxx::tree::gyear< char, simple_type > gyear;
  typedef ::xsd::cxx::tree::gyear_month< char, simple_type > gyear_month;
  typedef ::xsd::cxx::tree::time< char, simple_type > time;

  // Entity.
  //
  typedef ::xsd::cxx::tree::entity< char, ncname > entity;
  typedef ::xsd::cxx::tree::entities< char, simple_type, entity > entities;

  typedef ::xsd::cxx::tree::content_order content_order;
  // Namespace information and list stream. Used in
  // serialization functions.
  //
  typedef ::xsd::cxx::xml::dom::namespace_info< char > namespace_info;
  typedef ::xsd::cxx::xml::dom::namespace_infomap< char > namespace_infomap;
  typedef ::xsd::cxx::tree::list_stream< char > list_stream;
  typedef ::xsd::cxx::tree::as_double< double_ > as_double;
  typedef ::xsd::cxx::tree::as_decimal< decimal > as_decimal;
  typedef ::xsd::cxx::tree::facet facet;

  // Flags and properties.
  //
  typedef ::xsd::cxx::tree::flags flags;
  typedef ::xsd::cxx::tree::properties< char > properties;

  // Parsing/serialization diagnostics.
  //
  typedef ::xsd::cxx::tree::severity severity;
  typedef ::xsd::cxx::tree::error< char > error;
  typedef ::xsd::cxx::tree::diagnostics< char > diagnostics;

  // Exceptions.
  //
  typedef ::xsd::cxx::tree::exception< char > exception;
  typedef ::xsd::cxx::tree::bounds< char > bounds;
  typedef ::xsd::cxx::tree::duplicate_id< char > duplicate_id;
  typedef ::xsd::cxx::tree::parsing< char > parsing;
  typedef ::xsd::cxx::tree::expected_element< char > expected_element;
  typedef ::xsd::cxx::tree::unexpected_element< char > unexpected_element;
  typedef ::xsd::cxx::tree::expected_attribute< char > expected_attribute;
  typedef ::xsd::cxx::tree::unexpected_enumerator< char > unexpected_enumerator;
  typedef ::xsd::cxx::tree::expected_text_content< char > expected_text_content;
  typedef ::xsd::cxx::tree::no_prefix_mapping< char > no_prefix_mapping;
  typedef ::xsd::cxx::tree::serialization< char > serialization;

  // Error handler callback interface.
  //
  typedef ::xsd::cxx::xml::error_handler< char > error_handler;

  // DOM interaction.
  //
  namespace dom
  {
    // Automatic pointer for DOMDocument.
    //
    using ::xsd::cxx::xml::dom::auto_ptr;

#ifndef XSD_CXX_TREE_TREE_NODE_KEY__XML_SCHEMA
#define XSD_CXX_TREE_TREE_NODE_KEY__XML_SCHEMA
    // DOM user data key for back pointers to tree nodes.
    //
    const XMLCh* const tree_node_key = ::xsd::cxx::tree::user_data_keys::node;
#endif
  }
}

// Forward declarations.
//
namespace test
{
  class float_list;
  class double_list;
  class decimal_list;
  class base_simple;
  class simple;
  class base_complex;
  class complex;
  class type;
}


#include <memory>    // ::std::auto_ptr
#include <limits>    // std::numeric_limits
#include <algorithm> // std::binary_search

#include <xsd/cxx/xml/char-utf8.hxx>

#include <xsd/cxx/tree/exceptions.hxx>
#include <xsd/cxx/tree/elements.hxx>
#include <xsd/cxx/tree/containers.hxx>
#include <xsd/cxx/tree/list.hxx>

#include <xsd/cxx/xml/dom/parsing-header.hxx>

#ifndef XSD_DONT_INCLUDE_INLINE
#define XSD_DONT_INCLUDE_INLINE

#undef XSD_DONT_INCLUDE_INLINE
#else

#endif // XSD_DONT_INCLUDE_INLINE

namespace test
{
  class float_list: public ::xml_schema::simple_type,
    public ::xsd::cxx::tree::list< ::xml_schema::float_, char >
  {
    public:
    float_list ();

    float_list (size_type n, const ::xml_schema::float_& x);

    template < typename I >
    float_list (const I& begin, const I& end)
    : ::xsd::cxx::tree::list< ::xml_schema::float_, char > (begin, end, this)
    {
    }

    float_list (const ::xercesc::DOMElement& e,
                ::xml_schema::flags f = 0,
                ::xml_schema::container* c = 0);

    float_list (const ::xercesc::DOMAttr& a,
                ::xml_schema::flags f = 0,
                ::xml_schema::container* c = 0);

    float_list (const ::std::string& s,
                const ::xercesc::DOMElement* e,
                ::xml_schema::flags f = 0,
                ::xml_schema::container* c = 0);

    float_list (const float_list& x,
                ::xml_schema::flags f = 0,
                ::xml_schema::container* c = 0);

    virtual float_list*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~float_list ();
  };

  class double_list: public ::xml_schema::simple_type,
    public ::xsd::cxx::tree::list< ::xml_schema::double_, char, ::xsd::cxx::tree::schema_type::double_ >
  {
    public:
    double_list ();

    double_list (size_type n, const ::xml_schema::double_& x);

    template < typename I >
    double_list (const I& begin, const I& end)
    : ::xsd::cxx::tree::list< ::xml_schema::double_, char, ::xsd::cxx::tree::schema_type::double_ > (begin, end, this)
    {
    }

    double_list (const ::xercesc::DOMElement& e,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    double_list (const ::xercesc::DOMAttr& a,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    double_list (const ::std::string& s,
                 const ::xercesc::DOMElement* e,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    double_list (const double_list& x,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    virtual double_list*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~double_list ();
  };

  class decimal_list: public ::xml_schema::simple_type,
    public ::xsd::cxx::tree::list< ::xml_schema::decimal, char, ::xsd::cxx::tree::schema_type::decimal >
  {
    public:
    decimal_list ();

    decimal_list (size_type n, const ::xml_schema::decimal& x);

    template < typename I >
    decimal_list (const I& begin, const I& end)
    : ::xsd::cxx::tree::list< ::xml_schema::decimal, char, ::xsd::cxx::tree::schema_type::decimal > (begin, end, this)
    {
    }

    decimal_list (const ::xercesc::DOMElement& e,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    decimal_list (const ::xercesc::DOMAttr& a,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    decimal_list (const ::std::string& s,
                  const ::xercesc::DOMElement* e,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    decimal_list (const decimal_list& x,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    virtual decimal_list*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~decimal_list ();
  };

  class base_simple: public ::xsd::cxx::tree::fundamental_base< ::xml_schema::decimal, char, ::xml_schema::simple_type, ::xsd::cxx::tree::schema_type::decimal >
  {
    public:
    // Constructors.
    //
    base_simple (const ::xml_schema::decimal&);

    base_simple (const ::xercesc::DOMElement& e,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    base_simple (const ::xercesc::DOMAttr& a,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    base_simple (const ::std::string& s,
                 const ::xercesc::DOMElement* e,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    base_simple (const base_simple& x,
                 ::xml_schema::flags f = 0,
                 ::xml_schema::container* c = 0);

    virtual base_simple*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~base_simple ();
  };

  class simple: public ::test::base_simple
  {
    public:
    // Constructors.
    //
    simple (const ::xml_schema::decimal&);

    simple (const ::xercesc::DOMElement& e,
            ::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0);

    simple (const ::xercesc::DOMAttr& a,
            ::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0);

    simple (const ::std::string& s,
            const ::xercesc::DOMElement* e,
            ::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0);

    simple (const simple& x,
            ::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0);

    virtual simple*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~simple ();
  };

  class base_complex: public ::xsd::cxx::tree::fundamental_base< ::xml_schema::decimal, char, ::xml_schema::simple_type, ::xsd::cxx::tree::schema_type::decimal >
  {
    public:
    // x
    //
    typedef ::xml_schema::int_ x_type;
    typedef ::xsd::cxx::tree::optional< x_type > x_optional;
    typedef ::xsd::cxx::tree::traits< x_type, char > x_traits;

    const x_optional&
    x () const;

    x_optional&
    x ();

    void
    x (const x_type& x);

    void
    x (const x_optional& x);

    // Constructors.
    //
    base_complex (const ::xml_schema::decimal&);

    base_complex (const ::xercesc::DOMElement& e,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    base_complex (const base_complex& x,
                  ::xml_schema::flags f = 0,
                  ::xml_schema::container* c = 0);

    virtual base_complex*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    base_complex&
    operator= (const base_complex& x);

    virtual 
    ~base_complex ();

    // Implementation.
    //
    protected:
    void
    parse (::xsd::cxx::xml::dom::parser< char >&,
           ::xml_schema::flags);

    protected:
    x_optional x_;
  };

  class complex: public ::test::base_complex
  {
    public:
    // Constructors.
    //
    complex (const ::xml_schema::decimal&);

    complex (const ::xercesc::DOMElement& e,
             ::xml_schema::flags f = 0,
             ::xml_schema::container* c = 0);

    complex (const complex& x,
             ::xml_schema::flags f = 0,
             ::xml_schema::container* c = 0);

    virtual complex*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    virtual 
    ~complex ();
  };

  class type: public ::xml_schema::type
  {
    public:
    // float
    //
    typedef ::xml_schema::float_ float_type;
    typedef ::xsd::cxx::tree::sequence< float_type > float_sequence;
    typedef float_sequence::iterator float_iterator;
    typedef float_sequence::const_iterator float_const_iterator;
    typedef ::xsd::cxx::tree::traits< float_type, char > float_traits;

    const float_sequence&
    float_ () const;

    float_sequence&
    float_ ();

    void
    float_ (const float_sequence& s);

    // float-list
    //
    typedef ::test::float_list float_list_type;
    typedef ::xsd::cxx::tree::traits< float_list_type, char > float_list_traits;

    const float_list_type&
    float_list () const;

    float_list_type&
    float_list ();

    void
    float_list (const float_list_type& x);

    void
    float_list (::std::auto_ptr< float_list_type > p);

    // double
    //
    typedef ::xml_schema::double_ double_type;
    typedef ::xsd::cxx::tree::sequence< double_type > double_sequence;
    typedef double_sequence::iterator double_iterator;
    typedef double_sequence::const_iterator double_const_iterator;
    typedef ::xsd::cxx::tree::traits< double_type, char, ::xsd::cxx::tree::schema_type::double_ > double_traits;

    const double_sequence&
    double_ () const;

    double_sequence&
    double_ ();

    void
    double_ (const double_sequence& s);

    // double-list
    //
    typedef ::test::double_list double_list_type;
    typedef ::xsd::cxx::tree::traits< double_list_type, char > double_list_traits;

    const double_list_type&
    double_list () const;

    double_list_type&
    double_list ();

    void
    double_list (const double_list_type& x);

    void
    double_list (::std::auto_ptr< double_list_type > p);

    // decimal
    //
    typedef ::xml_schema::decimal decimal_type;
    typedef ::xsd::cxx::tree::sequence< decimal_type > decimal_sequence;
    typedef decimal_sequence::iterator decimal_iterator;
    typedef decimal_sequence::const_iterator decimal_const_iterator;
    typedef ::xsd::cxx::tree::traits< decimal_type, char, ::xsd::cxx::tree::schema_type::decimal > decimal_traits;

    const decimal_sequence&
    decimal () const;

    decimal_sequence&
    decimal ();

    void
    decimal (const decimal_sequence& s);

    // decimal-list
    //
    typedef ::test::decimal_list decimal_list_type;
    typedef ::xsd::cxx::tree::traits< decimal_list_type, char > decimal_list_traits;

    const decimal_list_type&
    decimal_list () const;

    decimal_list_type&
    decimal_list ();

    void
    decimal_list (const decimal_list_type& x);

    void
    decimal_list (::std::auto_ptr< decimal_list_type > p);

    // simple
    //
    typedef ::test::simple simple_type;
    typedef ::xsd::cxx::tree::sequence< simple_type > simple_sequence;
    typedef simple_sequence::iterator simple_iterator;
    typedef simple_sequence::const_iterator simple_const_iterator;
    typedef ::xsd::cxx::tree::traits< simple_type, char > simple_traits;

    const simple_sequence&
    simple () const;

    simple_sequence&
    simple ();

    void
    simple (const simple_sequence& s);

    // complex
    //
    typedef ::test::complex complex_type;
    typedef ::xsd::cxx::tree::sequence< complex_type > complex_sequence;
    typedef complex_sequence::iterator complex_iterator;
    typedef complex_sequence::const_iterator complex_const_iterator;
    typedef ::xsd::cxx::tree::traits< complex_type, char > complex_traits;

    const complex_sequence&
    complex () const;

    complex_sequence&
    complex ();

    void
    complex (const complex_sequence& s);

    // f
    //
    typedef ::xml_schema::float_ f_type;
    typedef ::xsd::cxx::tree::traits< f_type, char > f_traits;

    const f_type&
    f () const;

    f_type&
    f ();

    void
    f (const f_type& x);

    static f_type
    f_default_value ();

    // do
    //
    typedef ::xml_schema::double_ do_type;
    typedef ::xsd::cxx::tree::traits< do_type, char, ::xsd::cxx::tree::schema_type::double_ > do_traits;

    const do_type&
    do_ () const;

    do_type&
    do_ ();

    void
    do_ (const do_type& x);

    static do_type
    do_default_value ();

    // de
    //
    typedef ::xml_schema::decimal de_type;
    typedef ::xsd::cxx::tree::traits< de_type, char, ::xsd::cxx::tree::schema_type::decimal > de_traits;

    const de_type&
    de () const;

    de_type&
    de ();

    void
    de (const de_type& x);

    static de_type
    de_default_value ();

    // s
    //
    typedef ::test::simple s_type;
    typedef ::xsd::cxx::tree::optional< s_type > s_optional;
    typedef ::xsd::cxx::tree::traits< s_type, char > s_traits;

    const s_optional&
    s () const;

    s_optional&
    s ();

    void
    s (const s_type& x);

    void
    s (const s_optional& x);

    void
    s (::std::auto_ptr< s_type > p);

    // Constructors.
    //
    type (const float_list_type&,
          const double_list_type&,
          const decimal_list_type&);

    type (const ::xercesc::DOMElement& e,
          ::xml_schema::flags f = 0,
          ::xml_schema::container* c = 0);

    type (const type& x,
          ::xml_schema::flags f = 0,
          ::xml_schema::container* c = 0);

    virtual type*
    _clone (::xml_schema::flags f = 0,
            ::xml_schema::container* c = 0) const;

    type&
    operator= (const type& x);

    virtual 
    ~type ();

    // Implementation.
    //
    protected:
    void
    parse (::xsd::cxx::xml::dom::parser< char >&,
           ::xml_schema::flags);

    protected:
    float_sequence float__;
    ::xsd::cxx::tree::one< float_list_type > float_list_;
    double_sequence double__;
    ::xsd::cxx::tree::one< double_list_type > double_list_;
    decimal_sequence decimal_;
    ::xsd::cxx::tree::one< decimal_list_type > decimal_list_;
    simple_sequence simple_;
    complex_sequence complex_;
    ::xsd::cxx::tree::one< f_type > f_;
    ::xsd::cxx::tree::one< do_type > do__;
    ::xsd::cxx::tree::one< de_type > de_;
    s_optional s_;
  };
}

#ifndef XSD_DONT_INCLUDE_INLINE

#endif // XSD_DONT_INCLUDE_INLINE

#include <iosfwd>

#include <xercesc/sax/InputSource.hpp>
#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMErrorHandler.hpp>

namespace test
{
  // Parse a URI or a local file.
  //

  ::std::auto_ptr< ::test::type >
  root (const ::std::string& uri,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (const ::std::string& uri,
        ::xml_schema::error_handler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (const ::std::string& uri,
        ::xercesc::DOMErrorHandler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse std::istream.
  //

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        ::xml_schema::error_handler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        ::xercesc::DOMErrorHandler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        const ::std::string& id,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        const ::std::string& id,
        ::xml_schema::error_handler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::std::istream& is,
        const ::std::string& id,
        ::xercesc::DOMErrorHandler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::InputSource.
  //

  ::std::auto_ptr< ::test::type >
  root (::xercesc::InputSource& is,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::xercesc::InputSource& is,
        ::xml_schema::error_handler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::xercesc::InputSource& is,
        ::xercesc::DOMErrorHandler& eh,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::DOMDocument.
  //

  ::std::auto_ptr< ::test::type >
  root (const ::xercesc::DOMDocument& d,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::test::type >
  root (::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument > d,
        ::xml_schema::flags f = 0,
        const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse a URI or a local file.
  //

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (const ::std::string& uri,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (const ::std::string& uri,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (const ::std::string& uri,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse std::istream.
  //

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           const ::std::string& id,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           const ::std::string& id,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::std::istream& is,
           const ::std::string& id,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::InputSource.
  //

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::xercesc::InputSource& is,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::xercesc::InputSource& is,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::xercesc::InputSource& is,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::DOMDocument.
  //

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (const ::xercesc::DOMDocument& d,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::double_ >
  double_ (::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument > d,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse a URI or a local file.
  //

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (const ::std::string& uri,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (const ::std::string& uri,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (const ::std::string& uri,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse std::istream.
  //

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           const ::std::string& id,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           const ::std::string& id,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::std::istream& is,
           const ::std::string& id,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::InputSource.
  //

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::xercesc::InputSource& is,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::xercesc::InputSource& is,
           ::xml_schema::error_handler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::xercesc::InputSource& is,
           ::xercesc::DOMErrorHandler& eh,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  // Parse xercesc::DOMDocument.
  //

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (const ::xercesc::DOMDocument& d,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());

  ::std::auto_ptr< ::xml_schema::decimal >
  decimal (::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument > d,
           ::xml_schema::flags f = 0,
           const ::xml_schema::properties& p = ::xml_schema::properties ());
}

#include <iosfwd>

#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMErrorHandler.hpp>
#include <xercesc/framework/XMLFormatter.hpp>

#include <xsd/cxx/xml/dom/auto-ptr.hxx>

namespace test
{
  void
  operator<< (::xercesc::DOMElement&, const float_list&);

  void
  operator<< (::xercesc::DOMAttr&, const float_list&);

  void
  operator<< (::xml_schema::list_stream&,
              const float_list&);

  void
  operator<< (::xercesc::DOMElement&, const double_list&);

  void
  operator<< (::xercesc::DOMAttr&, const double_list&);

  void
  operator<< (::xml_schema::list_stream&,
              const double_list&);

  void
  operator<< (::xercesc::DOMElement&, const decimal_list&);

  void
  operator<< (::xercesc::DOMAttr&, const decimal_list&);

  void
  operator<< (::xml_schema::list_stream&,
              const decimal_list&);

  void
  operator<< (::xercesc::DOMElement&, const base_simple&);

  void
  operator<< (::xercesc::DOMAttr&, const base_simple&);

  void
  operator<< (::xml_schema::list_stream&,
              const base_simple&);

  void
  operator<< (::xercesc::DOMElement&, const simple&);

  void
  operator<< (::xercesc::DOMAttr&, const simple&);

  void
  operator<< (::xml_schema::list_stream&,
              const simple&);

  void
  operator<< (::xercesc::DOMElement&, const base_complex&);

  void
  operator<< (::xercesc::DOMElement&, const complex&);

  void
  operator<< (::xercesc::DOMElement&, const type&);

  // Serialize to std::ostream.
  //

  void
  root (::std::ostream& os,
        const ::test::type& x, 
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  void
  root (::std::ostream& os,
        const ::test::type& x, 
        ::xml_schema::error_handler& eh,
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  void
  root (::std::ostream& os,
        const ::test::type& x, 
        ::xercesc::DOMErrorHandler& eh,
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  // Serialize to xercesc::XMLFormatTarget.
  //

  void
  root (::xercesc::XMLFormatTarget& ft,
        const ::test::type& x, 
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  void
  root (::xercesc::XMLFormatTarget& ft,
        const ::test::type& x, 
        ::xml_schema::error_handler& eh,
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  void
  root (::xercesc::XMLFormatTarget& ft,
        const ::test::type& x, 
        ::xercesc::DOMErrorHandler& eh,
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        const ::std::string& e = "UTF-8",
        ::xml_schema::flags f = 0);

  // Serialize to an existing xercesc::DOMDocument.
  //

  void
  root (::xercesc::DOMDocument& d,
        const ::test::type& x,
        ::xml_schema::flags f = 0);

  // Serialize to a new xercesc::DOMDocument.
  //

  ::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument >
  root (const ::test::type& x, 
        const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
        ::xml_schema::flags f = 0);

  // Serialize to std::ostream.
  //

  void
  double_ (::std::ostream& os,
           const ::xml_schema::double_& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  double_ (::std::ostream& os,
           const ::xml_schema::double_& x, 
           ::xml_schema::error_handler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  double_ (::std::ostream& os,
           const ::xml_schema::double_& x, 
           ::xercesc::DOMErrorHandler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  // Serialize to xercesc::XMLFormatTarget.
  //

  void
  double_ (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::double_& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  double_ (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::double_& x, 
           ::xml_schema::error_handler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  double_ (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::double_& x, 
           ::xercesc::DOMErrorHandler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  // Serialize to an existing xercesc::DOMDocument.
  //

  void
  double_ (::xercesc::DOMDocument& d,
           const ::xml_schema::double_& x,
           ::xml_schema::flags f = 0);

  // Serialize to a new xercesc::DOMDocument.
  //

  ::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument >
  double_ (const ::xml_schema::double_& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           ::xml_schema::flags f = 0);

  // Serialize to std::ostream.
  //

  void
  decimal (::std::ostream& os,
           const ::xml_schema::decimal& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  decimal (::std::ostream& os,
           const ::xml_schema::decimal& x, 
           ::xml_schema::error_handler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  decimal (::std::ostream& os,
           const ::xml_schema::decimal& x, 
           ::xercesc::DOMErrorHandler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  // Serialize to xercesc::XMLFormatTarget.
  //

  void
  decimal (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::decimal& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  decimal (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::decimal& x, 
           ::xml_schema::error_handler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  void
  decimal (::xercesc::XMLFormatTarget& ft,
           const ::xml_schema::decimal& x, 
           ::xercesc::DOMErrorHandler& eh,
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           const ::std::string& e = "UTF-8",
           ::xml_schema::flags f = 0);

  // Serialize to an existing xercesc::DOMDocument.
  //

  void
  decimal (::xercesc::DOMDocument& d,
           const ::xml_schema::decimal& x,
           ::xml_schema::flags f = 0);

  // Serialize to a new xercesc::DOMDocument.
  //

  ::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument >
  decimal (const ::xml_schema::decimal& x, 
           const ::xml_schema::namespace_infomap& m = ::xml_schema::namespace_infomap (),
           ::xml_schema::flags f = 0);
}

#ifndef XSD_DONT_INCLUDE_INLINE
#include "test.ixx"
#endif // XSD_DONT_INCLUDE_INLINE

#include <xsd/cxx/post.hxx>

// Begin epilogue.
//
//
// End epilogue.

#endif // CXX_WORK_XSD_4_0_0_XSD_TESTS_CXX_TREE_FLOAT_TEST_HXX
