// Copyright (c) 2005-2011 Code Synthesis Tools CC
//
// This program was generated by CodeSynthesis XSD/e, an XML Schema
// to C++ data binding compiler for embedded systems.
//
// 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
//
//

#ifndef WEAPON_DESCRIPTION_PIMPL_H
#define WEAPON_DESCRIPTION_PIMPL_H

#include <xsde/cxx/pre.hxx>

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

#ifndef XSDE_OMIT_PAGGR
#  define XSDE_OMIT_PAGGR
#  define WEAPON_DESCRIPTION_PIMPL_H_CLEAR_OMIT_PAGGR
#endif

#include "WeaponDescription-pskel.h"

#include <xsde/cxx/stack.hxx>

class WeaponTypeEnum_pimpl: public WeaponTypeEnum_pskel
{
  public:
  WeaponTypeEnum_pimpl ();

  virtual void
  pre ();

  virtual void
  _characters (const ::xsde::cxx::ro_string&);

  virtual void
  _post ();

  virtual ::WeaponTypeEnum
  post_WeaponTypeEnum ();

  public:
  struct WeaponTypeEnum_pimpl_state
  {
    ::std::string str_;
  };

  WeaponTypeEnum_pimpl_state WeaponTypeEnum_pimpl_state_;
};

class RangeType_pimpl: public RangeType_pskel
{
  public:
  virtual void
  pre ();

  // Elements.
  //
  virtual void
  Initial (float);

  virtual void
  Up (float);

  virtual void
  Down (float);

  virtual ::RangeType
  post_RangeType ();

  public:
  struct RangeType_pimpl_state
  {
    ::RangeType RangeType_;
  };

  RangeType_pimpl_state RangeType_pimpl_state_;
};

class WeaponDescriptionType_pimpl: public WeaponDescriptionType_pskel
{
  public:
  virtual void
  pre ();

  // Elements.
  //
  virtual void
  WeaponType (const ::WeaponTypeEnum&);

  virtual void
  Icon (const ::std::string&);

  virtual void
  Mass (const ::RangeType&);

  virtual void
  Speed (const ::RangeType&);

  virtual void
  ProjectileCount (const ::RangeType&);

  virtual ::WeaponDescriptionType
  post_WeaponDescriptionType ();

  public:
  struct WeaponDescriptionType_pimpl_state
  {
    ::WeaponDescriptionType WeaponDescriptionType_;
  };

  WeaponDescriptionType_pimpl_state WeaponDescriptionType_pimpl_state_;
};

#ifdef WEAPON_DESCRIPTION_PIMPL_H_CLEAR_OMIT_PAGGR
#  undef XSDE_OMIT_PAGGR
#endif

#ifndef XSDE_OMIT_PAGGR

// Parser aggregate for the WeaponDescription element.
//
class WeaponDescription_paggr
{
  public:
  WeaponDescription_paggr ();

  void
  pre ()
  {
    this->WeaponDescriptionType_p_.pre ();
  }

  ::WeaponDescriptionType
  post ()
  {
    return this->WeaponDescriptionType_p_.post_WeaponDescriptionType ();
  }

  ::WeaponDescriptionType_pimpl&
  root_parser ()
  {
    return this->WeaponDescriptionType_p_;
  }

  static const char*
  root_name ();

  static const char*
  root_namespace ();

  void
  reset ()
  {
    this->WeaponDescriptionType_p_._reset ();
  }

  public:
  ::WeaponTypeEnum_pimpl WeaponTypeEnum_p_;
  ::RangeType_pimpl RangeType_p_;
  ::xml_schema::float_pimpl float_p_;
  ::xml_schema::string_pimpl string_p_;
  ::WeaponDescriptionType_pimpl WeaponDescriptionType_p_;
};

#endif // XSDE_OMIT_PAGGR

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

#include <xsde/cxx/post.hxx>

#endif // WEAPON_DESCRIPTION_PIMPL_H
