51 #ifndef __EST_TNAMEDENUM_H__
52 #define __EST_TNAMEDENUM_H__
58 #include "EST_String.h"
59 #include "EST_rw_status.h"
61 #define NAMED_ENUM_MAX_SYNONYMS (10)
69 template<
class ENUM,
class VAL,
class INFO>
73 VAL values[NAMED_ENUM_MAX_SYNONYMS];
88 virtual int eq_vals(VAL v1, VAL v2)
const {
return v1 == v2; };
91 void initialise(
const void *defs);
92 void initialise(
const void *defs, ENUM (*conv)(
const char *));
93 void initialise(
void) {ndefinitions=0; definitions=NULL;};
94 void initialise(ENUM unknown_e, VAL unknown_v) {initialise(); p_unknown_enum=unknown_e; p_unknown_value = unknown_v;};
101 {initialise((
const void *)defs); };
103 {initialise((
const void *)defs, conv); };
108 ENUM token(VAL value)
const;
109 ENUM token(
int n)
const {
return nth_token(n); }
110 ENUM nth_token(
int n)
const;
111 VAL value(ENUM token,
int n=0)
const;
112 INFO &info(ENUM token)
const;
114 ENUM unknown_enum(
void)
const {
return p_unknown_enum;};
115 VAL unknown_value(
void)
const {
return p_unknown_value;};
116 int valid(ENUM token)
const {
return !eq_vals(value(token),p_unknown_value); };
126 int eq_vals(
const char *v1,
const char *v2)
const {
return strcmp(v1,v2) ==0; };
130 {this->initialise((
const void *)defs); };
132 {this->initialise((
const void *)defs, conv); };
133 const char *name(ENUM tok,
int n=0)
const {
return this->value(tok,n); };
142 {this->initialise((
const void *)defs);};
144 {this->initialise((
const void *)defs, conv);};
154 {this->initialise(undef_e, undef_n);};
156 {this->initialise((
const void *)defs);};
158 {this->initialise((
const void *)defs, conv);};
160 EST_read_status load(
EST_String name) {
return priv_load(name, NULL); };
162 EST_write_status save(
EST_String name,
char quote=
'"')
const {
return priv_save(name, NULL, quote); };
163 EST_write_status save(
EST_String name,
EST_TNamedEnum &definitive,
char quote=
'"')
const {
return priv_save(name, &definitive, quote); };
167 #include "instantiate/EST_TNamedEnumI.h"