IWAVEBASE 1.0

parser.h

Go to the documentation of this file.
00001 #ifndef __PARSER_H_
00002 #define __PARSER_H_
00003 
00004 #include "std_cpp_includes.hh"
00005 #include "except.hh"
00006 #include "utils.h"
00007 #include "iwave_fopen.h"
00008 
00009 typedef struct s_WORD {
00010   char * str;
00011 } WORD;
00012 
00013 typedef struct s_KEYVAL {
00014   WORD * key;
00015   WORD * val;
00016 } KEYVAL;
00017 
00018 typedef struct s_PSLINK {
00019   KEYVAL * pair;
00020   struct s_PSLINK * prev;
00021   struct s_PSLINK * next;
00022 } PSLINK;
00023 
00024 typedef struct s_PARARRAY {
00025   PSLINK * list;
00026 } PARARRAY;
00027 
00028 WORD * word_new();
00029 void word_delete(WORD ** w);
00030 void word_reset(WORD * w);
00031 int word_assign(WORD * w, const char * str, int len);
00032 int word_whitechar(char c);
00033 int word_copy(WORD * tgt, WORD src);
00034 int word_read(WORD * w, char ** src);
00035 
00036 KEYVAL * kv_new();
00037 void kv_delete(KEYVAL ** pair);
00038 void kv_reset(KEYVAL * pair);
00039 int kv_check(KEYVAL src);
00040 int kv_copy(KEYVAL * tgt, KEYVAL src);
00041 int kv_read(KEYVAL * kv, char ** src);
00042 void kv_print(KEYVAL kv);
00043 void kv_fprint(KEYVAL kv, FILE * f);
00044 
00045 PSLINK * pslink_new();
00046 void pslink_delete(PSLINK ** p);
00047 void pslink_setnull(PSLINK ** p);
00048 int pslink_front(PSLINK ** p);
00049 int pslink_back(PSLINK ** p);
00050 int pslink_read(PSLINK ** p, char ** str);
00051 int pslink_findfirst(PSLINK * par, WORD skey, WORD * sval);
00052 int pslink_findlast(PSLINK * par, WORD skey, WORD * sval);
00053 int pslink_setfirst(PSLINK ** par, WORD skey, WORD sval);
00054 int pslink_setlast(PSLINK ** par, WORD skey, WORD sval);
00055 
00056 /*----------------------------------------------------------------------------*/
00063 PARARRAY * ps_new();
00064 /*----------------------------------------------------------------------------*/
00069 void ps_delete(PARARRAY ** p);
00070 /*----------------------------------------------------------------------------*/
00076 int ps_setnull(PARARRAY *parr);
00087 int ps_printall(PARARRAY parr, FILE *stream);
00088 
00089 /*----------------------------------------------------------------------------*/
00097 int ps_createfp(PARARRAY *parr, FILE * fp);
00098 
00099 /*----------------------------------------------------------------------------*/
00110 int ps_createfile_fproto(PARARRAY *parr, 
00111              FILE ** stream,  
00112              const char * proto,
00113              const char *filename);
00114 
00115 /*----------------------------------------------------------------------------*/
00122 int ps_createfile(PARARRAY *parr, const char *filename);
00132 int ps_createargs(PARARRAY *parr, int argc, char **argv);
00133 
00134 /*----------------------------------------------------------------------------*/
00141 int ps_copy(PARARRAY ** tgt, PARARRAY src);
00142 
00145 /*----------------------------------------------------------------------------*/
00161 int ps_ffcstring(PARARRAY parr, const char *key, char **p);
00162 int ps_ffchar(PARARRAY parr, const char *key, char *p);
00163 int ps_ffshort(PARARRAY parr, const char *key, short *p);
00164 int ps_ffint(PARARRAY parr, const char *key, int *p);
00165 int ps_fflong(PARARRAY parr, const char *key, long *p);
00166 int ps_ffushort(PARARRAY parr, const char *key, unsigned short *p);
00167 int ps_ffuint(PARARRAY parr, const char *key, unsigned int *p);
00168 int ps_ffulong(PARARRAY parr, const char *key, unsigned long *p);
00169 int ps_fffloat(PARARRAY parr, const char *key, float *p);
00170 int ps_ffdouble(PARARRAY parr, const char *key, double *p);
00171 int ps_ffreal(PARARRAY parr, const char *key, ireal *p);
00173 /*----------------------------------------------------------------------------*/
00189 int ps_flcstring(PARARRAY parr, const char *key, char **p);
00190 int ps_flchar(PARARRAY parr, const char *key, char *p);
00191 int ps_flshort(PARARRAY parr, const char *key, short *p);
00192 int ps_flint(PARARRAY parr, const char *key, int *p);
00193 int ps_fllong(PARARRAY parr, const char *key, long *p);
00194 int ps_flushort(PARARRAY parr, const char *key, unsigned short *p);
00195 int ps_fluint(PARARRAY parr, const char *key, unsigned int *p);
00196 int ps_flulong(PARARRAY parr, const char *key, unsigned long *p);
00197 int ps_flfloat(PARARRAY parr, const char *key, float *p);
00198 int ps_fldouble(PARARRAY parr, const char *key, double *p);
00199 int ps_flreal(PARARRAY parr, const char *key, ireal *p);
00202 /*----------------------------------------------------------------------------*/
00215 int ps_sfcstring(PARARRAY parr, const char *key, const char *val);
00216 int ps_sfchar(PARARRAY parr, const char *key, char p);
00217 int ps_sfshort(PARARRAY parr, const char *key, short p);
00218 int ps_sfint(PARARRAY parr, const char *key, int p);
00219 int ps_sflong(PARARRAY parr, const char *key, long p);
00220 int ps_sfushort(PARARRAY parr, const char *key, unsigned short p);
00221 int ps_sfuint(PARARRAY parr, const char *key, unsigned int p);
00222 int ps_sfulong(PARARRAY parr, const char *key, unsigned long p);
00223 int ps_sffloat(PARARRAY parr, const char *key, float p);
00224 int ps_sfdouble(PARARRAY parr, const char *key, double p);
00225 int ps_sfreal(PARARRAY parr, const char *key, ireal p);
00228 /*----------------------------------------------------------------------------*/
00241 int ps_slcstring(PARARRAY parr, const char *key, const char *val);
00242 int ps_slchar(PARARRAY parr, const char *key, char p);
00243 int ps_slshort(PARARRAY parr, const char *key, short p);
00244 int ps_slint(PARARRAY parr, const char *key, int p);
00245 int ps_sllong(PARARRAY parr, const char *key, long p);
00246 int ps_slushort(PARARRAY parr, const char *key, unsigned short p);
00247 int ps_sluint(PARARRAY parr, const char *key, unsigned int p);
00248 int ps_slulong(PARARRAY parr, const char *key, unsigned long p);
00249 int ps_slfloat(PARARRAY parr, const char *key, float p);
00250 int ps_sldouble(PARARRAY parr, const char *key, double p);
00251 int ps_slreal(PARARRAY parr, const char *key, ireal p);
00254 /*----------------------------------------------------------------------------*/
00258 namespace RVL {
00259   bool parse(PARARRAY const & par, std::string name, string & val);
00260   bool parse(PARARRAY const & par, std::string name, char & val);
00261   bool parse(PARARRAY const & par, std::string name, short & val);
00262   bool parse(PARARRAY const & par, std::string name, int & val);
00263   bool parse(PARARRAY const & par, std::string name, long & val);
00264   bool parse(PARARRAY const & par, std::string name, unsigned short & val);
00265   bool parse(PARARRAY const & par, std::string name, unsigned int & val);
00266   bool parse(PARARRAY const & par, std::string name, unsigned long & val);
00267   bool parse(PARARRAY const & par, std::string name, float & val);
00268   bool parse(PARARRAY const & par, std::string name, double & val);
00269   bool parse(PARARRAY const & par, std::string name, bool & val);
00270 
00272   template<typename T> T valparse(PARARRAY const & par, std::string name, T def) {
00273     T val;
00274     if (!parse(par,name,val)) val=def;
00275     return val;
00276   }
00278   template<typename T> T valparse(PARARRAY const & par, std::string name) {
00279     T val;
00280     if (!parse(par,name,val)) {
00281       RVLException e;
00282       e<<"Error: parse_except\n";
00283       e<<"  failed to parse key = "<<name<<"\n";
00284       throw e;
00285     }
00286     return val;
00287   }
00288 
00289 }
00290 
00291 #endif
 All Classes Namespaces Files Functions Variables Typedefs Defines