GRU - Generic Reusable Utilities
Data Structures | Macros | Typedefs | Enumerations | Functions
gru_variant.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <common/gru_alloc.h>

Go to the source code of this file.

Data Structures

struct  gru_variant_t_
 An abstract struct that can hold different types. More...
 

Macros

#define GRU_VARIANT_STRING_INITIALIZER(x)   { .type = GRU_STRING, .variant.string = (x) }
 Initializer for the string variant type. More...
 
#define GRU_VARIANT_STRING_DEFAULT_INITIALIZER   GRU_VARIANT_STRING_INITIALIZER(NULL)
 Default string initializer. More...
 
#define GRU_VARIANT_INTEGER_INITIALIZER(x)   { .type = GRU_INTEGER, .variant.inumber = (x) }
 Initializer for the integer variant type. More...
 
#define GRU_VARIANT_INTEGER_DEFAULT_INITIALIZER   GRU_VARIANT_INTEGER_INITIALIZER(0)
 Default integer initializer. More...
 
#define GRU_VARIANT_DOUBLE_INITIALIZER(x)   { .type = GRU_DOUBLE, .variant.fnumber = (x) }
 Initializer for the double variant type. More...
 
#define GRU_VARIANT_DOUBLE_DEFAULT_INITIALIZER   GRU_VARIANT_DOUBLE_INITIALIZER(0.0)
 Default double initializer. More...
 
#define GRU_VARIANT_BOOLEAN_INITIALIZER(x)   { .type = GRU_BOOLEAN, .variant.flag = (x) }
 Initializer for the boolean variant type. More...
 
#define GRU_VARIANT_BOOLEAN_DEFAULT_INITIALIZER   GRU_VARIANT_BOOLEAN_INITIALIZER(false)
 Default boolean initializer. More...
 

Typedefs

typedef enum gru_variant_type_t_ gru_variant_type_t
 
typedef struct gru_variant_t_ gru_variant_t
 An abstract struct that can hold different types. More...
 

Enumerations

enum  gru_variant_type_t_ { GRU_STRING , GRU_INTEGER , GRU_DOUBLE , GRU_BOOLEAN }
 

Functions

gru_export bool gru_variant_set_string (gru_variant_t *variant, const char *str)
 Set the variant value to a string. More...
 
gru_export void gru_variant_set_integer (gru_variant_t *variant, uint64_t number)
 Set the variant value to an integer. More...
 
gru_export void gru_variant_clean (gru_variant_t *variant)
 Release the memory used by a variant (if any used at all). More...
 
gru_export gru_variant_t gru_variant_parse (const char *str)
 Parses a string and sets it to the most appropriate type. More...
 
gru_export bool gru_variant_equals_str (gru_variant_t *variant, const char *str)
 Simple equality check to test if the variant value matches a given string. More...
 

Macro Definition Documentation

◆ GRU_VARIANT_BOOLEAN_DEFAULT_INITIALIZER

#define GRU_VARIANT_BOOLEAN_DEFAULT_INITIALIZER   GRU_VARIANT_BOOLEAN_INITIALIZER(false)

Default boolean initializer.

◆ GRU_VARIANT_BOOLEAN_INITIALIZER

#define GRU_VARIANT_BOOLEAN_INITIALIZER (   x)    { .type = GRU_BOOLEAN, .variant.flag = (x) }

Initializer for the boolean variant type.

◆ GRU_VARIANT_DOUBLE_DEFAULT_INITIALIZER

#define GRU_VARIANT_DOUBLE_DEFAULT_INITIALIZER   GRU_VARIANT_DOUBLE_INITIALIZER(0.0)

Default double initializer.

◆ GRU_VARIANT_DOUBLE_INITIALIZER

#define GRU_VARIANT_DOUBLE_INITIALIZER (   x)    { .type = GRU_DOUBLE, .variant.fnumber = (x) }

Initializer for the double variant type.

◆ GRU_VARIANT_INTEGER_DEFAULT_INITIALIZER

#define GRU_VARIANT_INTEGER_DEFAULT_INITIALIZER   GRU_VARIANT_INTEGER_INITIALIZER(0)

Default integer initializer.

◆ GRU_VARIANT_INTEGER_INITIALIZER

#define GRU_VARIANT_INTEGER_INITIALIZER (   x)    { .type = GRU_INTEGER, .variant.inumber = (x) }

Initializer for the integer variant type.

◆ GRU_VARIANT_STRING_DEFAULT_INITIALIZER

#define GRU_VARIANT_STRING_DEFAULT_INITIALIZER   GRU_VARIANT_STRING_INITIALIZER(NULL)

Default string initializer.

◆ GRU_VARIANT_STRING_INITIALIZER

#define GRU_VARIANT_STRING_INITIALIZER (   x)    { .type = GRU_STRING, .variant.string = (x) }

Initializer for the string variant type.

Typedef Documentation

◆ gru_variant_t

typedef struct gru_variant_t_ gru_variant_t

An abstract struct that can hold different types.

◆ gru_variant_type_t

Enumeration Type Documentation

◆ gru_variant_type_t_

Enumerator
GRU_STRING 
GRU_INTEGER 
GRU_DOUBLE 
GRU_BOOLEAN 

Function Documentation

◆ gru_variant_clean()

gru_export void gru_variant_clean ( gru_variant_t variant)

Release the memory used by a variant (if any used at all).

It's safe to pass any variant even if no memory is used at all

Parameters
variantthe variant to release

◆ gru_variant_equals_str()

gru_export bool gru_variant_equals_str ( gru_variant_t variant,
const char *  str 
)

Simple equality check to test if the variant value matches a given string.

Parameters
variantthe variant to compare with
strthe string to check
Returns
true if it's equal or false otherwise

◆ gru_variant_parse()

gru_export gru_variant_t gru_variant_parse ( const char *  str)

Parses a string and sets it to the most appropriate type.

Parameters
strthe string to parse
Returns
a variant (if all conversion fails, it defaults to string)

◆ gru_variant_set_integer()

gru_export void gru_variant_set_integer ( gru_variant_t variant,
uint64_t  number 
)

Set the variant value to an integer.

Parameters
variantthe variant to hold the data
numberthe number to set

◆ gru_variant_set_string()

gru_export bool gru_variant_set_string ( gru_variant_t variant,
const char *  str 
)

Set the variant value to a string.

Parameters
variantthe variant hold the data
strthe string to set
Returns
false if unable to allocate memory for the string or true otherwise