// 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 SCENE_DESCRIPTION_PIMPL_H
#define SCENE_DESCRIPTION_PIMPL_H

#include <xsde/cxx/pre.hxx>

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

#ifndef XSDE_OMIT_PAGGR
#  define XSDE_OMIT_PAGGR
#  define SCENE_DESCRIPTION_PIMPL_H_CLEAR_OMIT_PAGGR
#endif

#include "SceneDescription-pskel.h"

#include <xsde/cxx/stack.hxx>

class Vector_pimpl: public Vector_pskel
{
  public:
  virtual void
  pre ();

  // Attributes.
  //
  virtual void
  X (float);

  virtual void
  Y (float);

  virtual void
  Z (float);

  virtual ::Vector
  post_Vector ();

  public:
  struct Vector_pimpl_state
  {
    ::Vector Vector_;
  };

  Vector_pimpl_state Vector_pimpl_state_;
};

class Color_pimpl: public Color_pskel
{
  public:
  virtual void
  pre ();

  // Attributes.
  //
  virtual void
  R (float);

  virtual void
  G (float);

  virtual void
  B (float);

  virtual ::Color
  post_Color ();

  public:
  struct Color_pimpl_state
  {
    ::Color Color_;
  };

  Color_pimpl_state Color_pimpl_state_;
};

class BlockType_pimpl: public BlockType_pskel
{
  public:
  virtual void
  pre ();

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

  virtual void
  Size (const ::Vector&);

  virtual void
  Location (const ::Vector&);

  virtual void
  Color (const ::Color&);

  virtual void
  Value (long);

  virtual ::BlockType
  post_BlockType ();

  public:
  struct BlockType_pimpl_state
  {
    ::BlockType BlockType_;
  };

  BlockType_pimpl_state BlockType_pimpl_state_;
};

class GroupReferenceType_pimpl: public GroupReferenceType_pskel
{
  public:
  virtual void
  pre ();

  // Elements.
  //
  virtual void
  Location (const ::Vector&);

  virtual void
  Color (const ::Color&);

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

  virtual ::GroupReferenceType
  post_GroupReferenceType ();

  public:
  struct GroupReferenceType_pimpl_state
  {
    ::GroupReferenceType GroupReferenceType_;
  };

  GroupReferenceType_pimpl_state GroupReferenceType_pimpl_state_;
};

class GroupType_pimpl: public GroupType_pskel
{
  public:
  GroupType_pimpl (bool = false);

  ~GroupType_pimpl ();

  virtual void
  _reset ();

  virtual void
  pre ();

  // Attributes.
  //
  virtual void
  id (const ::std::string&);

  // Elements.
  //
  virtual void
  choice_arm (choice_arm_tag);

  virtual void
  Block (const ::BlockType&);

  virtual void
  GroupReference (const ::GroupReferenceType&);

  virtual ::GroupType*
  post_GroupType ();

  public:
  void
  pre_impl (::GroupType*);

  public:
  struct GroupType_pimpl_state
  {
    ::GroupType* GroupType_;
    ::GroupType::choice_type* choice_;
  };

  GroupType_pimpl_state GroupType_pimpl_state_;
  bool GroupType_pimpl_base_;
};

class SceneDescriptionType_pimpl: public SceneDescriptionType_pskel
{
  public:
  SceneDescriptionType_pimpl (bool = false);

  ~SceneDescriptionType_pimpl ();

  virtual void
  _reset ();

  virtual void
  pre ();

  // Elements.
  //
  virtual void
  Group (::GroupType*);

  virtual void
  Base (const ::BlockType&);

  virtual void
  GroupReference (const ::GroupReferenceType&);

  virtual ::SceneDescriptionType*
  post_SceneDescriptionType ();

  public:
  void
  pre_impl (::SceneDescriptionType*);

  public:
  struct SceneDescriptionType_pimpl_state
  {
    ::SceneDescriptionType* SceneDescriptionType_;
  };

  SceneDescriptionType_pimpl_state SceneDescriptionType_pimpl_state_;
  bool SceneDescriptionType_pimpl_base_;
};

#ifdef SCENE_DESCRIPTION_PIMPL_H_CLEAR_OMIT_PAGGR
#  undef XSDE_OMIT_PAGGR
#endif

#ifndef XSDE_OMIT_PAGGR

// Parser aggregate for the SceneDescription element.
//
class SceneDescription_paggr
{
  public:
  SceneDescription_paggr ();

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

  ::SceneDescriptionType*
  post ()
  {
    return this->SceneDescriptionType_p_.post_SceneDescriptionType ();
  }

  ::SceneDescriptionType_pimpl&
  root_parser ()
  {
    return this->SceneDescriptionType_p_;
  }

  static const char*
  root_name ();

  static const char*
  root_namespace ();

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

  public:
  ::Vector_pimpl Vector_p_;
  ::xml_schema::id_pimpl id_p_;
  ::xml_schema::float_pimpl float_p_;
  ::Color_pimpl Color_p_;
  ::BlockType_pimpl BlockType_p_;
  ::GroupType_pimpl GroupType_p_;
  ::GroupReferenceType_pimpl GroupReferenceType_p_;
  ::SceneDescriptionType_pimpl SceneDescriptionType_p_;
  ::xml_schema::idref_pimpl idref_p_;
  ::xml_schema::integer_pimpl integer_p_;
};

#endif // XSDE_OMIT_PAGGR

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

#include <xsde/cxx/post.hxx>

#endif // SCENE_DESCRIPTION_PIMPL_H
