51 #include "EST_String.h"
52 #include "EST_error.h"
53 #include "EST_Contents.h"
54 #include "EST_Val_defs.h"
56 typedef const char *val_type;
58 extern val_type val_unset;
59 extern val_type val_int;
60 extern val_type val_float;
61 extern val_type val_string;
79 const int to_int()
const;
80 const float to_flt()
const;
96 {t=val_int; v.ival=i;}
100 {t=val_float; v.fval=f;}
103 EST_Val(
const double d) {t=val_float; v.fval=d;}
111 EST_Val(
const char *s) : t(val_string), sval(s) {};
126 const val_type
type(
void)
const
131 {
if (t==val_int)
return v.ival;
return to_int();}
134 const int I(
void)
const
139 {
if (t==val_float)
return v.fval;
return to_flt();}
142 const float F(
void)
const
147 {
if (t!=val_string) to_str();
return sval;}
163 const void *internal_ptr(
void)
const
164 {
return v.pval->get_contents(); }
199 {
if (t != a.t)
return (1==0);
200 else if (t == val_string)
return (sval == a.sval);
201 else if (t == val_int)
return (v.ival == a.v.ival);
202 else if (t == val_float)
return (v.fval == a.v.fval);
203 else return (internal_ptr() == a.internal_ptr()); }
237 operator int()
const {
return Int(); }
239 operator float()
const {
return Float(); }
245 {
if (a.
type() == val_unset) s <<
"[VAL unset]" ;
246 else if (a.
type() == val_int) s << a.v.ival;
247 else if (a.
type() == val_float) s << a.v.fval;
248 else if (a.
type() == val_string) s << a.sval;
249 else s <<
"[PVAL " << a.
type() <<
"]";
259 inline int Int(
const EST_Val &v) {
return v.
Int(); }
261 inline float Float(
const EST_Val &v) {
return v.
Float(); }