00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00027 #ifndef _CVARIANT_H_
00028 #define _CVARIANT_H_
00029
00030 #include <sys/types.h>
00031
00032 #ifdef __cplusplus
00033 extern "C"
00034 {
00035 #endif
00036
00037
00039 typedef enum
00040 {
00042 cvariant_none=0,
00044 cvariant_string,
00046 cvariant_int,
00048 cvariant_float
00049 } cvariant_type;
00050
00052 typedef struct
00053 {
00055 cvariant_type type;
00057 int to_free;
00059 union
00060 {
00061 const char* string;
00062 int int_value;
00063 double float_value;
00064 };
00065 } cvariant;
00066
00067 #define CVARIANT_EMPTY_STRING NULL
00068 #define CVARIANT_EMPTY_INT 0
00069 #define CVARIANT_EMPTY_FLOAT 0.0
00070
00071
00074 cvariant cvariant_null();
00075
00080 cvariant cvariant_from_string(const char* string);
00081
00085 cvariant cvariant_from_string_copy(const char* string, size_t n);
00086
00090 cvariant cvariant_from_int(int value);
00091
00095 cvariant cvariant_from_float(double value);
00096
00097
00101 int cvariant_not_null(cvariant cv);
00102
00106 cvariant_type cvariant_get_type(cvariant cv);
00107
00108
00112 const char* cvariant_get_string(cvariant cv);
00113
00117 int cvariant_get_int(cvariant cv);
00118
00122 double cvariant_get_float(cvariant cv);
00123
00124
00129 int cvariant_compare(cvariant a, cvariant b);
00130
00133 void cvariant_free(cvariant cv);
00134
00135 #ifdef __cplusplus
00136 }
00137 #endif
00138 #endif