// Copyright (C) 2005 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.
//

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

// hello_type
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
operator() (::xsd::cxx::parser::traverser< _xsd_greeting, char >& greeting, ::xsd::cxx::parser::traverser< _xsd_name, char >& name)
{
  this->_xsd_greeting_ = &greeting;
  this->_xsd_name_ = &name;
}


// hello_type::greeting
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
greeting (::xsd::cxx::parser::traverser< _xsd_greeting, char >& greeting)
{
  this->_xsd_greeting_ = &greeting;
}


// hello_type::name
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
name (::xsd::cxx::parser::traverser< _xsd_name, char >& name)
{
  this->_xsd_name_ = &name;
}


// hello_type
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
_start_element (::std::basic_string< char > const& ns, ::std::basic_string< char > const& n)
{
  if (n == "greeting" && ns.empty ())
  {
    if (::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_start_element_ (ns, n, _xsd_greeting_)) _xsd_greeting_->pre ();
  }

  else if (n == "name" && ns.empty ())
  {
    if (::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_start_element_ (ns, n, _xsd_name_)) _xsd_name_->pre ();
  }

  else 
  {
    ::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_start_element (ns, n);
  }
}

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
_end_element (::std::basic_string< char > const& ns, ::std::basic_string< char > const& n)
{
  if (n == "greeting" && ns.empty ())
  {
    if (::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_end_element_ (ns, n)) greeting (_xsd_greeting_->post ());
  }

  else if (n == "name" && ns.empty ())
  {
    if (::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_end_element_ (ns, n)) name (_xsd_name_->post ());
  }

  else 
  {
    ::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_end_element (ns, n);
  }
}

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
_attribute (::std::basic_string< char > const& ns, ::std::basic_string< char > const& n, ::std::basic_string< char > const& v)
{
  {
    ::xsd::cxx::parser::traverser< _xsd_hello_type, char >::_attribute (ns, n, v);
  }
}


// hello_type::greeting
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
greeting (_xsd_greeting const&)
{
}

// hello_type::name
//

template < typename _xsd_hello_type, typename _xsd_greeting, typename _xsd_name >
void hello_type< _xsd_hello_type, _xsd_greeting, _xsd_name >::
name (_xsd_name const&)
{
}

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

