• Main Page
  • Data Structures
  • Files
  • File List

var.h

00001 #ifndef DBALLE_CPP_VAR_H
00002 #define DBALLE_CPP_VAR_H
00003 
00004 #include <dballe/core/var.h>
00005 
00006 #include <dballe++/error.h>
00007 
00008 namespace dballe {
00009 
00013 class Varinfo
00014 {
00015     dba_varinfo m_info;
00016     
00017 public:
00018     Varinfo(dba_varinfo info) : m_info(info) {}
00019     Varinfo(dba_varcode code);
00020 
00022     dba_varcode var() const { return m_info->var; }
00024     const char* desc() const { return m_info->desc; }
00026     const char* unit() const { return m_info->unit; }
00029     int scale() const { return m_info->scale; }
00032     int ref() const { return m_info->ref; }
00035     int len() const { return m_info->len; }
00038     int bit_ref() const { return m_info->bit_ref; }
00041     int bit_len() const { return m_info->bit_len; }
00043     bool is_string() const { return m_info->is_string != 0; }
00045     int imin() const { return m_info->imin; }
00047     int imax() const { return m_info->imax; }
00049     double dmin() const { return m_info->dmin; }
00051     double dmax() const { return m_info->dmax; }
00052 
00053     dba_varinfo raw() const { return m_info; }
00054 
00056     static Varinfo create(dba_varcode code);
00057 };
00058 
00062 class Var
00063 {
00064     dba_var m_var;
00065 
00066 public:
00068     Var(dba_var var) : m_var(var) {}
00069 
00071     static Var clone(dba_var var);
00072 
00074     Var(const Var& var)
00075     {
00076         checked(dba_var_copy(var.var(), &m_var));
00077     }
00079     Var(dba_varcode code)
00080     {
00081         checked(dba_var_create_local(code, &m_var));
00082     }
00084     Var(Varinfo info)
00085     {
00086         checked(dba_var_create(info.raw(), &m_var));
00087     }
00089     Var(dba_varcode code, int val)
00090     {
00091         Varinfo info(code);
00092         checked(dba_var_createi(info.raw(), val, &m_var));
00093     }
00095     Var(Varinfo info, int val)
00096     {
00097         checked(dba_var_createi(info.raw(), val, &m_var));
00098     }
00100     Var(dba_varcode code, double val)
00101     {
00102         Varinfo info(code);
00103         checked(dba_var_created(info.raw(), val, &m_var));
00104     }
00106     Var(Varinfo info, double val)
00107     {
00108         checked(dba_var_created(info.raw(), val, &m_var));
00109     }
00111     Var(dba_varcode code, const char* val)
00112     {
00113         Varinfo info(code);
00114         checked(dba_var_createc(info.raw(), val, &m_var));
00115     }
00117     Var(Varinfo info, const char* val)
00118     {
00119         checked(dba_var_createc(info.raw(), val, &m_var));
00120     }
00122     Var(dba_varcode code, const std::string& val)
00123     {
00124         Varinfo info(code);
00125         checked(dba_var_createc(info.raw(), val.c_str(), &m_var));
00126     }
00128     Var(Varinfo info, const std::string& val)
00129     {
00130         checked(dba_var_createc(info.raw(), val.c_str(), &m_var));
00131     }
00132     ~Var()
00133     {
00134         if (m_var)
00135             dba_var_delete(m_var);
00136     }
00137 
00139     Var& operator=(const Var& var)
00140     {
00141         dba_var_delete(m_var);
00142         m_var = 0;
00143         checked(dba_var_copy(var.var(), &m_var));
00144         return *this;
00145     }
00146 
00148     bool operator==(int val) const { return enqi() == val; }
00150     bool operator==(double val) const { return enqd() == val; }
00152     bool operator==(const char* val) const;
00154     bool operator==(const std::string& val) const { return enqs() == val; }
00156     bool operator==(const Var& var) const { return dba_var_equals(m_var, var.m_var) == 1; }
00157 
00159     Var copy() const
00160     {
00161         dba_var res;
00162         checked(dba_var_copy(m_var, &res));
00163         return Var(res);
00164     }
00165 
00167     bool equals(const Var& var) const
00168     {
00169         return dba_var_equals(m_var, var.var()) == 1;
00170     }
00171 
00173     int enqi() const
00174     {
00175         int res;
00176         checked(dba_var_enqi(m_var, &res));
00177         return res;
00178     }
00180     double enqd() const
00181     {
00182         double res;
00183         checked(dba_var_enqd(m_var, &res));
00184         return res;
00185     }
00187     const char* enqc() const
00188     {
00189         const char* res;
00190         checked(dba_var_enqc(m_var, &res));
00191         return res;
00192     }
00194     std::string enqs() const
00195     {
00196         const char* res;
00197         checked(dba_var_enqc(m_var, &res));
00198         return res;
00199     }
00200 
00202     void set(int val)
00203     {
00204         checked(dba_var_seti(m_var, val));
00205     }
00207     void set(double val)
00208     {
00209         checked(dba_var_setd(m_var, val));
00210     }
00212     void set(const char* val)
00213     {
00214         checked(dba_var_setc(m_var, val));
00215     }
00217     void set(const std::string& val)
00218     {
00219         checked(dba_var_setc(m_var, val.c_str()));
00220     }
00221 
00223     bool isset() const
00224     {
00225         return dba_var_value(m_var) != NULL;
00226     }
00227 
00229     void unset()
00230     {
00231         checked(dba_var_unset(m_var));
00232     }
00233 
00235     dba_varcode code() const
00236     {
00237         return dba_var_code(m_var);
00238     }
00239     
00241     Varinfo info() const
00242     {
00243         return Varinfo(dba_var_info(m_var));
00244     }
00245 
00247     std::string format(const std::string& nullValue = "(undef)") const
00248     {
00249         if (dba_var_value(m_var) == NULL)
00250             return nullValue;
00251         else if (dba_var_info(m_var)->is_string)
00252             return dba_var_value(m_var);
00253         else
00254         {
00255             dba_varinfo info = dba_var_info(m_var);
00256             char buf[20];
00257             snprintf(buf, 20, "%.*f", info->scale > 0 ? info->scale : 0, enqd());
00258             return buf;
00259         }
00260     }
00261     
00263     const char* raw() const
00264     {
00265         return dba_var_value(m_var);
00266     }
00267 
00269     const dba_var var() const
00270     {
00271         return m_var;
00272     }
00274     dba_var var()
00275     {
00276         return m_var;
00277     }
00278 };
00279 
00280 }
00281 
00282 #endif

Generated on Wed Dec 8 2010 18:13:31 for dballe++ by  doxygen 1.7.2