#ifndef __RVL_IWAVE_PARSER #define __RVL_IWAVE_PARSER #include "usempi.h" #include "parser.h" #include "parserdecl.hh" namespace RVL { template bool parse(PARARRAY & par, std::string name, T & val) { return false; } template<> bool parse(PARARRAY & par, std::string name, string & val) { char * p; int res=ps_flcstring(par,name.c_str(),&p); if (!res) { val=p; userfree_(p); return true; } cerr<<"parser: failed on key="< bool parse(PARARRAY & par, std::string name, char & val) { return !ps_flchar(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, short & val) { return !ps_flshort(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, int & val) { return !ps_flint(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, long & val) { return !ps_fllong(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, unsigned short & val) { return !ps_flushort(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, unsigned int & val) { return !ps_fluint(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, unsigned long & val) { return !ps_flulong(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, float & val) { return !ps_flfloat(par,name.c_str(),&val); } template<> bool parse(PARARRAY & par, std::string name, double & val) { return !ps_fldouble(par,name.c_str(),&val); } /** throws exception if returns false */ template void parse_except(PARARRAY & par, std::string name, T & val) { if (!parse(par,name,val)) { RVLException e; e<<"Error: parse_except\n"; e<<" failed to parse key = "<