00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _EGG_VARIANT_H
00022 #define _EGG_VARIANT_H
00023
00024 #include <sys/time.h>
00025
00026
00027 #ifndef MAX_INT
00028 # define MAX_INT ((int)(((unsigned) ~0)>>1))
00029 #endif
00030
00031 #ifndef MIN_INT
00032 # define MIN_INT (~MAX_INT)
00033 #endif
00034
00035 #ifndef MAX_LONG
00036 # define MAX_LONG ((long)(((unsigned) ~0L)>>1))
00037 #endif
00038
00039 #ifndef MIN_LONG
00040 # define MIN_LONG (~MAX_LONG)
00041 #endif
00042
00043
00044 #ifndef MIN_FLOAT
00045 # define MIN_FLOAT ((float)-1.0e36)
00046 #endif
00047
00048 #ifndef MAX_FLOAT
00049 # define MAX_FLOAT ((float)1.0e36)
00050 #endif
00051
00052 #ifndef MAX_DOUBLE
00053 # define MAX_DOUBLE (double)MAX_FLOAT
00054 #endif
00055
00056 #ifndef MIN_DOUBLE
00057 # define MIN_DOUBLE (double)MIN_FLOAT
00058 #endif
00059
00060 typedef enum {
00061 VARIANT_STRING = 0,
00062 VARIANT_INT,
00063 VARIANT_BOOL,
00064 VARIANT_TIMESTAMP
00065 } variant_type_t;
00066
00067 typedef struct {
00068 union {
00069 char *s_val;
00070 int i_val;
00071 int b_val;
00072 time_t ts_val;
00073 } value;
00074 variant_type_t type;
00075 } variant_t;
00076
00077 void variant_set_int(variant_t *data, int value);
00078 int variant_get_int(variant_t *data, int nil);
00079
00080 void variant_set_str(variant_t *data, const char *str);
00081 const char *variant_get_str(variant_t *data, const char *nil);
00082
00083 int variant_get_bool(variant_t *data, int nil);
00084 void variant_set_bool(variant_t *data, int value);
00085
00086 time_t variant_get_ts(variant_t *data, time_t nil);
00087 void variant_set_ts(variant_t *data, time_t value);
00088
00089
00090 #endif