libdballe 4.0.18
|
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