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 int ps_printall(PARARRAY parr, ostream & stream);
00089 
00090 /*----------------------------------------------------------------------------*/
00098 int ps_createfp(PARARRAY *parr, FILE * fp);
00099 
00100 /*----------------------------------------------------------------------------*/
00111 int ps_createfile_fproto(PARARRAY *parr, 
00112              FILE ** stream,  
00113              const char * proto,
00114              const char *filename);
00115 
00116 /*----------------------------------------------------------------------------*/
00123 int ps_createfile(PARARRAY *parr, const char *filename);
00133 int ps_createargs(PARARRAY *parr, int argc, char **argv);
00134 
00135 /*----------------------------------------------------------------------------*/
00142 int ps_copy(PARARRAY ** tgt, PARARRAY src);
00143 
00146 /*----------------------------------------------------------------------------*/
00162 int ps_ffcstring(PARARRAY parr, const char *key, char **p);
00163 int ps_ffchar(PARARRAY parr, const char *key, char *p);
00164 int ps_ffshort(PARARRAY parr, const char *key, short *p);
00165 int ps_ffint(PARARRAY parr, const char *key, int *p);
00166 int ps_fflong(PARARRAY parr, const char *key, long *p);
00167 int ps_ffushort(PARARRAY parr, const char *key, unsigned short *p);
00168 int ps_ffuint(PARARRAY parr, const char *key, unsigned int *p);
00169 int ps_ffulong(PARARRAY parr, const char *key, unsigned long *p);
00170 int ps_fffloat(PARARRAY parr, const char *key, float *p);
00171 int ps_ffdouble(PARARRAY parr, const char *key, double *p);
00172 int ps_ffreal(PARARRAY parr, const char *key, ireal *p);
00174 /*----------------------------------------------------------------------------*/
00190 int ps_flcstring(PARARRAY parr, const char *key, char **p);
00191 int ps_flchar(PARARRAY parr, const char *key, char *p);
00192 int ps_flshort(PARARRAY parr, const char *key, short *p);
00193 int ps_flint(PARARRAY parr, const char *key, int *p);
00194 int ps_fllong(PARARRAY parr, const char *key, long *p);
00195 int ps_flushort(PARARRAY parr, const char *key, unsigned short *p);
00196 int ps_fluint(PARARRAY parr, const char *key, unsigned int *p);
00197 int ps_flulong(PARARRAY parr, const char *key, unsigned long *p);
00198 int ps_flfloat(PARARRAY parr, const char *key, float *p);
00199 int ps_fldouble(PARARRAY parr, const char *key, double *p);
00200 int ps_flreal(PARARRAY parr, const char *key, ireal *p);
00203 /*----------------------------------------------------------------------------*/
00216 int ps_sfcstring(PARARRAY parr, const char *key, const char *val);
00217 int ps_sfchar(PARARRAY parr, const char *key, char p);
00218 int ps_sfshort(PARARRAY parr, const char *key, short p);
00219 int ps_sfint(PARARRAY parr, const char *key, int p);
00220 int ps_sflong(PARARRAY parr, const char *key, long p);
00221 int ps_sfushort(PARARRAY parr, const char *key, unsigned short p);
00222 int ps_sfuint(PARARRAY parr, const char *key, unsigned int p);
00223 int ps_sfulong(PARARRAY parr, const char *key, unsigned long p);
00224 int ps_sffloat(PARARRAY parr, const char *key, float p);
00225 int ps_sfdouble(PARARRAY parr, const char *key, double p);
00226 int ps_sfreal(PARARRAY parr, const char *key, ireal p);
00229 /*----------------------------------------------------------------------------*/
00242 int ps_slcstring(PARARRAY parr, const char *key, const char *val);
00243 int ps_slchar(PARARRAY parr, const char *key, char p);
00244 int ps_slshort(PARARRAY parr, const char *key, short p);
00245 int ps_slint(PARARRAY parr, const char *key, int p);
00246 int ps_sllong(PARARRAY parr, const char *key, long p);
00247 int ps_slushort(PARARRAY parr, const char *key, unsigned short p);
00248 int ps_sluint(PARARRAY parr, const char *key, unsigned int p);
00249 int ps_slulong(PARARRAY parr, const char *key, unsigned long p);
00250 int ps_slfloat(PARARRAY parr, const char *key, float p);
00251 int ps_sldouble(PARARRAY parr, const char *key, double p);
00252 int ps_slreal(PARARRAY parr, const char *key, ireal p);
00255 /*----------------------------------------------------------------------------*/
00259 namespace RVL {
00260   bool parse(PARARRAY const & par, std::string name, string & val);
00261   bool parse(PARARRAY const & par, std::string name, char & val);
00262   bool parse(PARARRAY const & par, std::string name, short & val);
00263   bool parse(PARARRAY const & par, std::string name, int & val);
00264   bool parse(PARARRAY const & par, std::string name, long & val);
00265   bool parse(PARARRAY const & par, std::string name, unsigned short & val);
00266   bool parse(PARARRAY const & par, std::string name, unsigned int & val);
00267   bool parse(PARARRAY const & par, std::string name, unsigned long & val);
00268   bool parse(PARARRAY const & par, std::string name, float & val);
00269   bool parse(PARARRAY const & par, std::string name, double & val);
00270   bool parse(PARARRAY const & par, std::string name, bool & val);
00271 
00273   template<typename T> T valparse(PARARRAY const & par, std::string name, T def) {
00274     T val;
00275     if (!parse(par,name,val)) val=def;
00276     return val;
00277   }
00279   template<typename T> T valparse(PARARRAY const & par, std::string name) {
00280     T val;
00281     if (!parse(par,name,val)) {
00282       RVLException e;
00283       e<<"Error: parse_except\n";
00284       e<<"  failed to parse key = "<<name<<"\n";
00285       throw e;
00286     }
00287     return val;
00288   }
00289 
00290 }
00291 
00292 #endif

Generated on 5 Jan 2017 for IWAVEBASE by  doxygen 1.4.7