// Copyright (C) 2005-2006 Code Synthesis Tools CC
//
// This program was generated by XML Schema Definition Compiler (XSD)
//
// 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.
//
// In addition, 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 HELLO_HXX
#define HELLO_HXX

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

#include <xsd/cxx/pre.hxx>

// Forward declarations.
//
class hello_type;
struct _xsd_hello_type
{
  typedef ::hello_type type;
};


#ifndef XSD_USE_CHAR
#define XSD_USE_CHAR
#endif

#ifndef XSD_CXX_TREE_USE_CHAR
#define XSD_CXX_TREE_USE_CHAR
#endif

#include <memory> // std::auto_ptr

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

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

namespace xml_schema
{
  // anyType and anySimpleType.
  //
  typedef ::xsd::cxx::tree::type type;
  typedef ::xsd::cxx::tree::simple_type simple_type;

  // 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 integer non_positive_integer;
  typedef integer non_negative_integer;
  typedef integer positive_integer;
  typedef integer negative_integer;

  // Boolean.
  //
  typedef bool boolean;

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

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

  // Qualified name.
  //
  typedef ::xsd::cxx::tree::qname< char > qname;

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

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

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

  // Date/time.
  //
  typedef ::xsd::cxx::tree::date< char > date;
  typedef ::xsd::cxx::tree::date_time< char > date_time;
  typedef ::xsd::cxx::tree::duration< char > duration;
  typedef ::xsd::cxx::tree::day< char > day;
  typedef ::xsd::cxx::tree::month< char > month;
  typedef ::xsd::cxx::tree::month_day< char > month_day;
  typedef ::xsd::cxx::tree::year< char > year;
  typedef ::xsd::cxx::tree::year_month< char > year_month;
  typedef ::xsd::cxx::tree::time< char > time;

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

  // Exceptions.
  //
  typedef ::xsd::cxx::tree::exception< char > exception;
  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::no_type_info< char > no_type_info;
  typedef ::xsd::cxx::tree::not_derived< char > not_derived;
  typedef ::xsd::cxx::tree::duplicate_id< char > duplicate_id;
  typedef ::xsd::cxx::tree::serialization< char > serialization;
  typedef ::xsd::cxx::tree::no_namespace_mapping< char > no_namespace_mapping;
  typedef ::xsd::cxx::tree::no_prefix_mapping< char > no_prefix_mapping;
  typedef ::xsd::cxx::tree::xsi_already_in_use< char > xsi_already_in_use;
  typedef ::xsd::cxx::tree::bounds< char > bounds;

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

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

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

class hello_type : public ::xsd::cxx::tree::type
{
  public:

  struct _xsd_hello_type
  {
    typedef ::xsd::cxx::tree::type base_;
    typedef ::xsd::cxx::tree::type member_;
    typedef ::xsd::cxx::tree::traits< base_ > traits_;
  };

  // greeting
  // 
  protected:
  struct _xsd_greeting
  {
    typedef ::xml_schema::string type_;
    typedef ::xsd::cxx::tree::traits< type_ > traits_;
  };

  public:
  struct greeting
  {
    typedef _xsd_greeting::type_ type;
  };

  greeting::type const&
  greeting () const;

  greeting::type&
  greeting ();

  void
  greeting (greeting::type const&);

  void
  greeting (::std::auto_ptr< greeting::type >);

  // name
  // 
  protected:
  struct _xsd_name
  {
    typedef ::xml_schema::string type_;
    typedef ::xsd::cxx::tree::traits< type_ > traits_;
    typedef ::xsd::cxx::tree::sequence< type_ > container_;
    typedef container_::iterator iterator_;
    typedef container_::const_iterator const_iterator_;
  };

  public:
  struct name
  {
    typedef _xsd_name::type_ type;
    typedef _xsd_name::container_ container;
    typedef _xsd_name::iterator_ iterator;
    typedef _xsd_name::const_iterator_ const_iterator;
  };

  name::container const&
  name () const;

  name::container&
  name ();

  void
  name (name::container const&);

  // Constructors.
  //
  public:
  hello_type (greeting::type const&);

  hello_type (::xsd::cxx::xml::dom::element< char > const&,
              ::xsd::cxx::tree::flags,
              ::xsd::cxx::tree::type*);

  hello_type (hello_type const&,
              ::xsd::cxx::tree::flags = 0,
              ::xsd::cxx::tree::type* = 0);

  virtual hello_type*
  _clone (::xsd::cxx::tree::flags = 0,
          ::xsd::cxx::tree::type* = 0) const;

  // Implementation.
  //
  private:
  ::xsd::cxx::tree::one_functor< _xsd_greeting::type_ > _xsd_greeting_;
  ::xsd::cxx::tree::sequence_functor< _xsd_name::type_ > _xsd_name_;
};

#include <iosfwd>

// Read from a URI or a local file.
//

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::basic_string< char > const&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::basic_string< char > const&,
       ::xsd::cxx::xml::error_handler< char >&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::basic_string< char > const&,
       ::xercesc::DOMErrorHandler&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());


// Read from std::istream.
//

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::xsd::cxx::xml::error_handler< char >&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::xercesc::DOMErrorHandler&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());


::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::std::basic_string< char > const& id,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::std::basic_string< char > const& id,
       ::xsd::cxx::xml::error_handler< char >&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::std::istream&,
       ::std::basic_string< char > const& id,
       ::xercesc::DOMErrorHandler&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());


// Read from InputSource.
//

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::xercesc::DOMInputSource const&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::xercesc::DOMInputSource const&,
       ::xsd::cxx::xml::error_handler< char >&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::xercesc::DOMInputSource const&,
       ::xercesc::DOMErrorHandler&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());


// Read from DOM.
//

::std::auto_ptr< ::_xsd_hello_type::type >
hello (::xercesc::DOMDocument const&,
       ::xsd::cxx::tree::flags = 0,
       ::xsd::cxx::tree::properties< char > const& = ::xsd::cxx::tree::properties< char > ());


#include <xsd/cxx/post.hxx>

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

#endif // HELLO_HXX
