00001 #ifndef _WINC_VARSPEC
00002 #define _WINC_VARSPEC
00003
00004 #include <WXP/Date.h>
00005 #include <WXP/ForeTime.h>
00006 #include <WXP/Level.h>
00007 #include <WXP/String.h>
00008 #include <WXP/Timezone.h>
00009 #include <WXP/VarName.h>
00010 #include <WXP/Variable.h>
00011
00012 namespace WXP {
00013 class VarSpec {
00014 int type;
00015 int source;
00016 bool abs;
00017 int plot;
00018 ForeTime fore;
00019 Level level;
00020 Variable var;
00021 char format[100];
00022 VarName vname;
00023
00024 int initResrc();
00025 public:
00026 static const int format_len = 100;
00027
00028 VarSpec();
00029 VarSpec( const char *str );
00030 int init();
00031
00032 int set( const char *str );
00033 int set( VarSpec &vs );
00034
00036 inline int setType( int t ){ type = t; return 1; };
00038 inline int getType(){ return type; };
00039
00041 inline int setPlot( int t ){ plot = t; return 1; };
00043 inline int getPlot(){ return plot; };
00044
00045 inline int setFore( const char *str ){ return fore.set( str ); };
00046 inline int set( ForeTime &rfore ){ fore = rfore; return 1; };
00047 inline int get( ForeTime &rfore ){ rfore = fore; return 1; };
00048 inline ForeTime getFore(){ return fore; };
00049 inline int getForeType(){ return fore.getType(); };
00050 inline float getForeHour(){ return fore.getHour(); };
00051 inline int getForeSecs(){ return fore.getSecs(); };
00052 inline int getForeString( String &str ){ return fore.toString( str ); };
00053 inline bool isForeSet(){ return fore.isSet(); };
00054
00055 inline int setLevel( const char *str ){ return level.set( str ); };
00056 inline int set( Level &rlevel ){ level = rlevel; return 1; };
00057 inline int get( Level &rlevel ){ rlevel = level; return 1; };
00058 inline int getLevelType1(){ return level.getType1(); };
00059 inline Level getLevel(){ return level; };
00060 inline int getLevelString( String &str ){ return level.toString( str ); };
00061 inline bool isLevelSet(){ return level.isSet(); };
00062
00063 int setVar( int ind, const char *unit );
00064 int setVar( const char *abbr, const char *unit );
00065 int setVar( const char *str );
00066 int set( Variable &rvar );
00067 inline int get( Variable &rvar ){ rvar = var; return 1; };
00068 inline Variable getVar(){ return var; };
00069
00070 inline int setUnits( const char *str ){ return var.setUnits( str ); };
00071 inline const char *getUnits(){ return var.getUnits(); };
00072
00073 int setFormat( const char *str );
00074 inline const char *getFormat(){ return format; };
00075
00076 inline int getForeCode(){ return fore.toCode(); };
00077 inline int getLevelTypeCode(){ return level.toTypeCode(); };
00078 inline int getLevelCode(){ return level.toLevelCode(); };
00079 inline int getVarCode(){ return var.toIndCode(); };
00080 inline int getVarType(){ return var.getType(); };
00081 inline int getVarInd(){ return var.getInd(); };
00082 inline const char *getVarAbbr(){ return var.getAbbr(); };
00083
00084 int decode( const char *str );
00085 int toString( String &str );
00086
00087 inline int toForeLabel( String &str ){ return fore.toString( str ); };
00088 inline int toLevelLabel( String &str ){ return level.toString( str ); };
00089 inline int toVarLabel( String &str ){ return var.toString( str ); };
00090 inline int toVarAbbr( String &str ){ return var.toAbbrCode( str ); };
00091
00092 int toInfoLabel( String &str );
00093 int toDateLabel( Date &date, Timezone &tz, const char *src, String &str );
00094 int toDateLabel( Date &date, const char *src, String &str );
00095
00096 int update( VarSpec &v1 );
00097 int update( ForeTime &ft, Level &lev );
00098 int update( ForeTime &ft );
00099 int update( Level &lev );
00100 inline int printFore(){ return fore.print(); };
00101 inline int printLevel(){ return level.print(); };
00102 inline int printVar(){ return var.print(); };
00103 int printDetails();
00104 int print();
00105
00106 enum Type { NONE, PARAM, VECT, GROUP, FUNC, MISC };
00107 enum Plot { DEF, PLOT, DATA, CONTOUR, VECTOR, MAP, PANEL };
00108
00109 static int update( VarSpec &v1, VarSpec &v2 );
00110
00111 friend class VarList;
00112 };
00113 }
00114 #endif