libamxc  1.10.3
C Generic Data Containers
variant_double.c File Reference
#include <sys/resource.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <math.h>
#include <amxc_variant_priv.h>

Go to the source code of this file.

Functions

static int variant_double_to_string (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_int8 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_int16 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_int32 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_int64 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_uint8 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_uint16 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_uint32 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_uint64 (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_float (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_to_bool (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_convert_to (amxc_var_t *const dest, const amxc_var_t *const src)
 
static int variant_double_compare (const amxc_var_t *const lval, const amxc_var_t *const rval, int *const result)
 
static CONSTRUCTOR void amxc_var_double_init (void)
 
static DESTRUCTOR void amxc_var_double_cleanup (void)
 
int amxc_var_set_double (amxc_var_t *var, double val)
 Setter helper function. More...
 
double amxc_var_get_double (const amxc_var_t *var)
 Conversion helper function. More...
 
double amxc_var_get_const_double (const amxc_var_t *const var)
 Conversion helper function. More...
 
amxc_var_tamxc_var_add_new_double (amxc_var_t *const var, double val)
 Conversion helper function. More...
 
amxc_var_tamxc_var_add_new_key_double (amxc_var_t *const var, const char *key, double val)
 Conversion helper function. More...
 

Variables

static amxc_var_type_t amxc_variant_double
 

Function Documentation

◆ amxc_var_double_cleanup()

static DESTRUCTOR void amxc_var_double_cleanup ( void  )
static

Definition at line 296 of file variant_double.c.

296  {
298 }
int PRIVATE amxc_var_remove_type(amxc_var_type_t *const type)
static amxc_var_type_t amxc_variant_double

◆ amxc_var_double_init()

static CONSTRUCTOR void amxc_var_double_init ( void  )
static

Definition at line 292 of file variant_double.c.

292  {
294 }
uint32_t PRIVATE amxc_var_add_type(amxc_var_type_t *const type, const uint32_t index)
#define AMXC_VAR_ID_DOUBLE
Double variant id.
Definition: amxc_variant.h:194

◆ variant_double_compare()

static int variant_double_compare ( const amxc_var_t *const  lval,
const amxc_var_t *const  rval,
int *const  result 
)
static

Definition at line 262 of file variant_double.c.

264  {
265  if(lval->data.d == rval->data.d) {
266  *result = 0;
267  } else if(lval->data.d > rval->data.d) {
268  *result = 1;
269  } else {
270  *result = -1;
271  }
272  return 0;
273 }
void * data
Definition: amxc_variant.h:883

◆ variant_double_convert_to()

static int variant_double_convert_to ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 220 of file variant_double.c.

221  {
222  int retval = -1;
223 
240  NULL,
241  NULL,
245  };
246 
247  if(dest->type_id >= AMXC_VAR_ID_CUSTOM_BASE) {
248  goto exit;
249  }
250 
251  if(convfn[dest->type_id] != NULL) {
252  if(dest->type_id == AMXC_VAR_ID_ANY) {
254  }
255  retval = convfn[dest->type_id](dest, src);
256  }
257 
258 exit:
259  return retval;
260 }
int PRIVATE amxc_var_default_convert_to_null(amxc_var_t *const dest, const amxc_var_t *const src)
int PRIVATE amxc_var_default_convert_to_htable(amxc_var_t *const dest, const amxc_var_t *const src)
Definition: amxc_variant.c:174
int PRIVATE amxc_var_default_copy(amxc_var_t *const dest, const amxc_var_t *const src)
Definition: amxc_variant.c:136
int PRIVATE amxc_var_default_convert_to_list(amxc_var_t *const dest, const amxc_var_t *const src)
Definition: amxc_variant.c:155
#define AMXC_VAR_ID_CUSTOM_BASE
Base variant id for custom variants.
Definition: amxc_variant.h:257
#define AMXC_VAR_ID_ANY
Special variant id, typically used in cast or conversion functions.
Definition: amxc_variant.h:247
int(* amxc_var_convert_fn_t)(amxc_var_t *const dest, const amxc_var_t *const src)
Variant type callback function prototype for dynamically converting one type to another.
int amxc_var_set_type(amxc_var_t *const var, const uint32_t type)
Change the variant data type.
Definition: amxc_variant.c:261
uint32_t type_id
Definition: amxc_variant.h:864
static int variant_double_to_uint16(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_uint8(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_string(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_uint64(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_int16(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_uint32(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_float(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_int32(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_bool(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_int8(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_to_int64(amxc_var_t *const dest, const amxc_var_t *const src)

◆ variant_double_to_bool()

static int variant_double_to_bool ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 209 of file variant_double.c.

210  {
211  int retval = -1;
212 
213  dest->data.b = src->data.d == 0 ? false : true;
214 
215  retval = 0;
216 
217  return retval;
218 }

◆ variant_double_to_float()

static int variant_double_to_float ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 198 of file variant_double.c.

199  {
200  int retval = -1;
201 
202  dest->data.f = (float) src->data.d;
203 
204  retval = 0;
205 
206  return retval;
207 }

◆ variant_double_to_int16()

static int variant_double_to_int16 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 100 of file variant_double.c.

101  {
102  int retval = -1;
103 
104  /* verify overflow or underflow */
105  when_true(src->data.d > INT16_MAX || src->data.d < INT16_MIN, exit);
106 
107  dest->data.i16 = (int16_t) src->data.d;
108  retval = 0;
109 
110 exit:
111  return retval;
112 }
#define when_true(x, l)
Definition: amxc_macros.h:134

◆ variant_double_to_int32()

static int variant_double_to_int32 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 114 of file variant_double.c.

115  {
116  int retval = -1;
117 
118  /* verify overflow or underflow */
119  when_true(src->data.d > INT32_MAX || src->data.d < INT32_MIN, exit);
120 
121  dest->data.i32 = (int32_t) src->data.d;
122  retval = 0;
123 
124 exit:
125  return retval;
126 }

◆ variant_double_to_int64()

static int variant_double_to_int64 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 128 of file variant_double.c.

129  {
130  int retval = -1;
131 
132  /* verify overflow or underflow */
133  when_true(src->data.d > INT64_MAX || src->data.d < INT64_MIN, exit);
134 
135  dest->data.i64 = (int64_t) src->data.d;
136  retval = 0;
137 
138 exit:
139  return retval;
140 }

◆ variant_double_to_int8()

static int variant_double_to_int8 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 86 of file variant_double.c.

87  {
88  int retval = -1;
89 
90  /* verify overflow or underflow */
91  when_true(src->data.d > INT8_MAX || src->data.d < INT8_MIN, exit);
92 
93  dest->data.i8 = (int8_t) src->data.d;
94  retval = 0;
95 
96 exit:
97  return retval;
98 }

◆ variant_double_to_string()

static int variant_double_to_string ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 64 of file variant_double.c.

65  {
66  int retval = -1;
67  int check = 0;
68  int size_needed = snprintf(NULL, 0, "%f", src->data.d);
69  dest->data.s = (char*) calloc(size_needed + 1, sizeof(char));
70 
71  when_null(dest->data.s, exit);
72 
73  check = snprintf(dest->data.s, size_needed + 1, "%f", src->data.d);
74  if(check < 0) {
75  free(dest->data.s);
76  dest->data.s = NULL;
77  goto exit;
78  }
79 
80  retval = 0;
81 
82 exit:
83  return retval;
84 }
#define when_null(x, l)
Definition: amxc_macros.h:126

◆ variant_double_to_uint16()

static int variant_double_to_uint16 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 156 of file variant_double.c.

157  {
158  int retval = -1;
159 
160  /* verify overflow or underflow */
161  when_true(fabs(src->data.d) > UINT16_MAX, exit);
162 
163  dest->data.ui16 = (uint16_t) fabs(src->data.d);
164  retval = 0;
165 
166 exit:
167  return retval;
168 }

◆ variant_double_to_uint32()

static int variant_double_to_uint32 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 170 of file variant_double.c.

171  {
172  int retval = -1;
173 
174  /* verify overflow or underflow */
175  when_true(fabs(src->data.d) > UINT32_MAX, exit);
176 
177  dest->data.ui32 = (uint32_t) fabs(src->data.d);
178  retval = 0;
179 
180 exit:
181  return retval;
182 }

◆ variant_double_to_uint64()

static int variant_double_to_uint64 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 184 of file variant_double.c.

185  {
186  int retval = -1;
187 
188  /* verify overflow or underflow */
189  when_true(fabs(src->data.d) > UINT64_MAX, exit);
190 
191  dest->data.ui64 = (uint64_t) fabs(src->data.d);
192  retval = 0;
193 
194 exit:
195  return retval;
196 }

◆ variant_double_to_uint8()

static int variant_double_to_uint8 ( amxc_var_t *const  dest,
const amxc_var_t *const  src 
)
static

Definition at line 142 of file variant_double.c.

143  {
144  int retval = -1;
145 
146  /* verify overflow or underflow */
147  when_true(fabs(src->data.d) > UINT8_MAX, exit);
148 
149  dest->data.ui8 = (uint8_t) fabs(src->data.d);
150  retval = 0;
151 
152 exit:
153  return retval;
154 }

Variable Documentation

◆ amxc_variant_double

amxc_var_type_t amxc_variant_double
static
Initial value:
= {
.init = NULL,
.del = NULL,
.convert_from = NULL,
.get_key = NULL,
.set_key = NULL,
.get_index = NULL,
.set_index = NULL,
.type_id = 0,
.hit = { .ait = NULL, .key = NULL, .next = NULL },
}
int PRIVATE amxc_var_default_move(amxc_var_t *const dest, amxc_var_t *const src)
Definition: amxc_variant.c:142
#define AMXC_VAR_NAME_DOUBLE
Provides a name for variant id AMXC_VAR_ID_DOUBLE.
Definition: amxc_variant.h:336
static int variant_double_convert_to(amxc_var_t *const dest, const amxc_var_t *const src)
static int variant_double_compare(const amxc_var_t *const lval, const amxc_var_t *const rval, int *const result)

Definition at line 275 of file variant_double.c.