libdballe 4.0.18
record.h
Go to the documentation of this file.
00001 /*
00002  * DB-ALLe - Archive for punctual meteorological data
00003  *
00004  * Copyright (C) 2005,2008  ARPA-SIM <urpsim@smr.arpa.emr.it>
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
00018  *
00019  * Author: Enrico Zini <enrico@enricozini.com>
00020  */
00021 
00022 #ifndef DBA_RECORD_H
00023 #define DBA_RECORD_H
00024 
00025 #ifdef  __cplusplus
00026 extern "C" {
00027 #endif
00028 
00034 #include <dballe/core/error.h>
00035 #include <dballe/core/var.h>
00036 
00040 enum _dba_keyword {
00041     DBA_KEY_ERROR       = -1,
00042     DBA_KEY_PRIORITY    =  0,
00043     DBA_KEY_PRIOMAX     =  1,
00044     DBA_KEY_PRIOMIN     =  2,
00045     DBA_KEY_REP_COD     =  3,
00046     DBA_KEY_REP_MEMO    =  4,
00047     DBA_KEY_ANA_ID      =  5,
00048     DBA_KEY_MOBILE      =  6,
00049     DBA_KEY_IDENT       =  7,
00050     DBA_KEY_LAT         =  8,
00051     DBA_KEY_LON         =  9,
00052     DBA_KEY_LATMAX      = 10,
00053     DBA_KEY_LATMIN      = 11,
00054     DBA_KEY_LONMAX      = 12,
00055     DBA_KEY_LONMIN      = 13,
00056     DBA_KEY_YEAR        = 14,
00057     DBA_KEY_MONTH       = 15,
00058     DBA_KEY_DAY         = 16,
00059     DBA_KEY_HOUR        = 17,
00060     DBA_KEY_MIN         = 18,
00061     DBA_KEY_SEC         = 19,
00062     DBA_KEY_YEARMAX     = 20,
00063     DBA_KEY_YEARMIN     = 21,
00064     DBA_KEY_MONTHMAX    = 22,
00065     DBA_KEY_MONTHMIN    = 23,
00066     DBA_KEY_DAYMAX      = 24,
00067     DBA_KEY_DAYMIN      = 25,
00068     DBA_KEY_HOURMAX     = 26,
00069     DBA_KEY_HOURMIN     = 27,
00070     DBA_KEY_MINUMAX     = 28,
00071     DBA_KEY_MINUMIN     = 29,
00072     DBA_KEY_SECMAX      = 30,
00073     DBA_KEY_SECMIN      = 31,
00074     DBA_KEY_LEVELTYPE1  = 32,
00075     DBA_KEY_L1          = 33,
00076     DBA_KEY_LEVELTYPE2  = 34,
00077     DBA_KEY_L2          = 35,
00078     DBA_KEY_PINDICATOR  = 36,
00079     DBA_KEY_P1          = 37,
00080     DBA_KEY_P2          = 38,
00081     DBA_KEY_VAR         = 39,
00082     DBA_KEY_VARLIST     = 40,
00083     DBA_KEY_CONTEXT_ID  = 41,
00084     DBA_KEY_QUERY       = 42,
00085     DBA_KEY_ANA_FILTER  = 43,
00086     DBA_KEY_DATA_FILTER = 44,
00087     DBA_KEY_ATTR_FILTER = 45,
00088     DBA_KEY_LIMIT       = 46,
00089     DBA_KEY_VAR_RELATED = 47,
00090     DBA_KEY_COUNT       = 48,
00091 };
00093 typedef enum _dba_keyword dba_keyword;
00094 
00095 /* TODO: should be deleted after checking if dbavm uses them */
00096 #if 0
00097 /* Shortcuts for commonly used variables */
00098 #define DBA_VAR_BLOCK       DBA_VAR(0,  1,   1)
00099 #define DBA_VAR_STATION     DBA_VAR(0,  1,   2)
00100 #define DBA_VAR_NAME        DBA_VAR(0,  1,  19)
00101 #define DBA_VAR_HEIGHT      DBA_VAR(0,  7,   1)
00102 #define DBA_VAR_HEIGHTBARO  DBA_VAR(0,  7,  31)
00103 #define DBA_VAR_DATA_ID     DBA_VAR(0, 33, 195)
00104 #endif
00105 
00106 struct _dba_record;
00107 struct _dba_item;
00108 
00118 typedef struct _dba_record* dba_record;
00119 
00126 typedef struct _dba_item* dba_record_cursor;
00127 
00136 const char* dba_record_keyword_name(dba_keyword keyword);
00137 
00148 dba_err dba_record_keyword_info(dba_keyword keyword, dba_varinfo* info);
00149 
00159 dba_keyword dba_record_keyword_byname(const char* tag);
00160 
00172 dba_keyword dba_record_keyword_byname_len(const char* tag, int len);
00173 
00183 dba_err dba_record_create(dba_record* rec);
00184 
00191 void dba_record_delete(dba_record rec);
00192 
00199 void dba_record_clear(dba_record rec);
00200 
00207 void dba_record_clear_vars(dba_record rec);
00208 
00220 dba_err dba_record_copy(dba_record dest, dba_record source);
00221 
00235 dba_err dba_record_add(dba_record dest, dba_record source);
00236 
00252 dba_err dba_record_difference(dba_record dest, dba_record source1, dba_record source2);
00253 
00264 int dba_record_equals(dba_record rec1, dba_record rec2);
00265 
00277 dba_var dba_record_key_peek(dba_record rec, dba_keyword parameter);
00278 
00290 dba_var dba_record_var_peek(dba_record rec, dba_varcode code);
00291 
00308 const char* dba_record_key_peek_value(dba_record rec, dba_keyword parameter);
00309 
00324 const char* dba_record_var_peek_value(dba_record rec, dba_varcode code);
00325 
00338 dba_err dba_record_contains(dba_record rec, const char* name, int* found);
00339 
00352 dba_err dba_record_contains_key(dba_record rec, dba_keyword parameter, int* found);
00353 
00366 dba_err dba_record_contains_var(dba_record rec, dba_varcode code, int* found);
00367 
00381 dba_err dba_record_enq(dba_record rec, const char* name, dba_var* var);
00382 
00396 dba_err dba_record_key_enq(dba_record rec, dba_keyword parameter, dba_var* var);
00397 
00411 dba_err dba_record_var_enq(dba_record rec, dba_varcode code, dba_var* var);
00412 
00429 dba_err dba_record_enqi(dba_record rec, const char* name, int* value, int* found);
00430 
00447 dba_err dba_record_key_enqi(dba_record rec, dba_keyword parameter, int* value, int* found);
00448 
00465 dba_err dba_record_var_enqi(dba_record rec, dba_varcode code, int* value, int* found);
00466 
00483 dba_err dba_record_enqd(dba_record rec, const char* name, double* value, int* found);
00484 
00501 dba_err dba_record_key_enqd(dba_record rec, dba_keyword parameter, double* value, int* found);
00502 
00519 dba_err dba_record_var_enqd(dba_record rec, dba_varcode code, double* value, int* found);
00520 
00537 dba_err dba_record_enqc(dba_record rec, const char* name, const char** value);
00538 
00555 dba_err dba_record_key_enqc(dba_record rec, dba_keyword parameter, const char** value);
00556 
00573 dba_err dba_record_var_enqc(dba_record rec, dba_varcode code, const char** value);
00574 
00592 dba_err dba_record_key_set(dba_record rec, dba_keyword parameter, dba_var var);
00593 
00609 dba_err dba_record_var_set(dba_record rec, dba_varcode code, dba_var var);
00610 
00623 dba_err dba_record_var_set_direct(dba_record rec, dba_var var);
00624 
00633 dba_err dba_record_set_ana_context(dba_record rec);
00634 
00649 dba_err dba_record_key_seti(dba_record rec, dba_keyword parameter, int value);
00650 
00665 dba_err dba_record_var_seti(dba_record rec, dba_varcode code, int value);
00666 
00681 dba_err dba_record_key_setd(dba_record rec, dba_keyword parameter, double value);
00682 
00697 dba_err dba_record_var_setd(dba_record rec, dba_varcode code, double value);
00698 
00712 dba_err dba_record_key_setc(dba_record rec, dba_keyword parameter, const char* value);
00713 
00727 dba_err dba_record_var_setc(dba_record rec, dba_varcode code, const char* value);
00728 
00742 dba_err dba_record_set_from_string(dba_record rec, const char* str);
00743 
00754 dba_err dba_record_key_unset(dba_record rec, dba_keyword parameter);
00755 
00766 dba_err dba_record_var_unset(dba_record rec, dba_varcode code);
00767 
00776 void dba_record_print(dba_record rec, FILE* out);
00777 
00791 void dba_record_diff(dba_record rec1, dba_record rec2, int* diffs, FILE* out);
00792 
00803 dba_record_cursor dba_record_iterate_first(dba_record rec);
00804 
00818 dba_record_cursor dba_record_iterate_next(dba_record rec, dba_record_cursor cur);
00819 
00829 dba_var dba_record_cursor_variable(dba_record_cursor cur);
00830 
00850 dba_err dba_record_parse_date_extremes(dba_record rec, int* minvalues, int* maxvalues);
00851 
00852 #ifdef  __cplusplus
00853 }
00854 #endif
00855 
00856 /* vim:set ts=4 sw=4: */
00857 #endif