IWAVEBASE 1.0
|
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