#ifndef H_CORAL_PRIMITIVEPROPERTIES
#define H_CORAL_PRIMITIVEPROPERTIES
// This file is part of the Coral project.
// Please read the copyright notice in the LICENSE file.

#include <coral/coral.h>

#include <vector>
#include <string>

#include <coral/core/ElementDefinition.h>

namespace coral {

     class EXPORTFWD_coral Slot;
     class EXPORTFWD_coral Element;
     class EXPORTFWD_coral Atom;

     class EXPORT_coral DatatypeDefinition: public AbstractElementDefinition {
     public:
	  DatatypeDefinition(Package* metamodel, const char* name);
	  virtual ~DatatypeDefinition() throw ();
#ifndef SWIG
	  virtual bool isDatatypeDefinition() const throw () { return true; }
	  virtual Atom* newAtom();
	  virtual std::string __str__() const;
#endif
     };

     class EXPORT_coral EnumerationDefinition: public DatatypeDefinition {
     private:
	  std::vector<std::string> descriptions;
     public:
	  EnumerationDefinition(Package*, const char* name);
	  virtual ~EnumerationDefinition() throw ();
	  void __addEnum__(const char*) throw ();
	  std::string getDescription(int i) const throw ();
	  int getIndexByDescription(const char*) const throw ();
	  int size() const throw () { return this->descriptions.size(); }
#ifndef SWIG
	  virtual Atom* newAtom();
	  virtual bool isEnumerationDefinition() const throw () { return true; }
	  virtual std::string __str__() const;
#endif
     };

}

#endif

