#if !defined(_ENUMMAP_HPP)
#include <alma/Enumtcl/enum_par.hpp>
template<typename enum_type, typename val_type>
class enum_map_traits : public std::map<enum_type,EnumPar<val_type> > {
static std::string typeName_;
static std::string enumerationDesc_;
static std::string order_;
static std::string xsdBaseType_;
static std::map<enum_type,EnumPar<val_type> > m_;
template<typename type, typename val_type>
class enum_map_traiter : public std::map<type,EnumPar<val_type> >, std::map<type,EnumPar<val_type> >::iterator
static std::string typeName_;
static std::string enumerationDesc_;
static std::string order_;
static std::string xsdBaseType_;
static std::set<std::string> enumMemberSet(){
typename std::map<enum_type,EnumPar<val_type> >::iterator it, itb(m_.begin()), ite(m_.end());
for(it=itb; it!=ite; ++it)s.insert(it->second.str());
static std::vector<std::string> enumMemberList(){
std::vector<std::string> v;
typename std::map<enum_type,EnumPar<val_type> >::iterator it, itb(m_.begin()), ite(m_.end());
for(it=itb; it!=ite; ++it)v.push_back(it->second.str());
static std::vector<val_type> enumValues(){
typename std::map<enum_type,EnumPar<val_type> >::iterator it, itb(m_.begin()), ite(m_.end());
for(it=itb; it!=ite; ++it)v.push_back(it->second.val());
static unsigned int enumNum(){
static std::map<type,EnumPar<val_type> > m_;
int fromStringToInt(std::string s){
std::map<enum_type,EnumPar<val_type> >::iterator it, itb(m_.begin()), ite(m_.end());
if(it->second.str()==s)return (int) it->first;