sexputil.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef sexputil_h
00019 #define sexputil_h
00020
00021
00022
00023 #include <inttypes.h>
00024
00025
00026
00027 #include <sexp.h>
00028
00029
00030
00031
00032
00033
00034
00035 namespace sexp {
00036
00037
00038
00039
00040
00041 inline bool
00042 is_atom(sexp_t* sx)
00043 {
00044 return (sx->ty == SEXP_VALUE);
00045 }
00046
00047 inline bool
00048 is_list(sexp_t* sx)
00049 {
00050 return (sx->ty == SEXP_LIST);
00051 }
00052
00053 inline bool
00054 is_null_list(sexp_t* sx)
00055 {
00056 return (sx->list == NULL);
00057 }
00058
00059
00060
00061
00062
00063
00064 inline bool
00065 is_atom_basic(sexp_t* sx)
00066 {
00067 return (sx->aty == SEXP_BASIC);
00068 }
00069
00070
00071 inline char*
00072 get_value(sexp_t* sx)
00073 {
00074 return sx->val;
00075 }
00076
00077 inline long
00078 get_value_l(sexp_t* sx, long default_val = 0)
00079 {
00080 long val = default_val;
00081 if (sx->val) {
00082 val = strtol(sx->val, (char **)NULL, 0);
00083 }
00084 return val;
00085 }
00086
00087 inline unsigned long
00088 get_value_ul(sexp_t* sx, unsigned long default_val = 0)
00089 {
00090 unsigned long val = default_val;
00091 if (sx->val) {
00092 val = strtoul(sx->val, (char **)NULL, 0);
00093 }
00094 return val;
00095 }
00096
00097 inline int32_t
00098 get_value_i32(sexp_t* sx, int32_t default_val = 0)
00099 {
00100 return (int32_t)get_value_l(sx, default_val);
00101 }
00102
00103 inline uint32_t
00104 get_value_ui32(sexp_t* sx, uint32_t default_val = 0)
00105 {
00106 return (uint32_t)get_value_ul(sx, default_val);
00107 }
00108
00109 inline int64_t
00110 get_value_i64(sexp_t* sx, int64_t default_val = 0)
00111 {
00112 int64_t val = default_val;
00113 if (sx->val) {
00114 val = (int64_t)strtoll(sx->val, (char **)NULL, 0);
00115 }
00116 return val;
00117 }
00118
00119 inline uint64_t
00120 get_value_ui64(sexp_t* sx, uint64_t default_val = 0)
00121 {
00122 uint64_t val = default_val;
00123 if (sx->val) {
00124 val = (uint64_t)strtoull(sx->val, (char **)NULL, 0);
00125 }
00126 return val;
00127 }
00128
00129
00130
00131
00132
00133
00134
00135 inline sexp_t*
00136 get_elem(sexp_t* sx, unsigned int n)
00137 {
00138 sexp_t* elm = sx->list;
00139 for (int i = 0; elm && i < n; ++i, elm = elm->next) { }
00140 return elm;
00141 }
00142
00143 inline sexp_t*
00144 get_elem0(sexp_t* sx)
00145 {
00146 return sx->list;
00147 }
00148
00149 inline sexp_t*
00150 get_elem1(sexp_t* sx)
00151 {
00152 return (sx->list) ? sx->list->next : NULL;
00153 }
00154
00155 inline sexp_t*
00156 get_elem2(sexp_t* sx)
00157 {
00158 return (sx->list && sx->list->next) ? sx->list->next->next : NULL;
00159 }
00160
00161 inline sexp_t*
00162 get_elem3(sexp_t* sx)
00163 {
00164 return get_elem(sx, 3);
00165 }
00166
00167
00168
00169 inline sexp_t*
00170 get_next(sexp_t* sx)
00171 {
00172 return sx->next;
00173 }
00174
00175 };
00176
00177
00178
00179 namespace sexp {
00180
00181
00182
00183 inline sexp_t*
00184 get_wnast_attrs(sexp_t* sx)
00185 {
00186 return get_elem3(sx);
00187 }
00188
00189 inline sexp_t*
00190 get_wnast_kid0(sexp_t* sx)
00191 {
00192 return get_elem(sx, 4);
00193 }
00194
00195
00196 };
00197
00198
00199
00200 #endif