## idmef-data idmef-data — |

## Synopsis

    enum        idmef_data_type_t;
                data;
    int         idmef_data_new                  (idmef_data_t **data);
    idmef_data_t* idmef_data_ref                (idmef_data_t *data);
    int         idmef_data_new_char             (idmef_data_t **data,
                                                 char c);
    int         idmef_data_new_byte             (idmef_data_t **data,
                                                 uint8_t i);
    int         idmef_data_new_uint32           (idmef_data_t **data,
                                                 uint32_t i);
    int         idmef_data_new_uint64           (idmef_data_t **data,
                                                 uint64_t i);
    int         idmef_data_new_float            (idmef_data_t **data,
                                                 float f);
    void        idmef_data_set_char             (idmef_data_t *data,
                                                 char c);
    void        idmef_data_set_byte             (idmef_data_t *data,
                                                 uint8_t i);
    void        idmef_data_set_uint32           (idmef_data_t *data,
                                                 uint32_t i);
    void        idmef_data_set_uint64           (idmef_data_t *data,
                                                 uint64_t i);
    void        idmef_data_set_float            (idmef_data_t *data,
                                                 float f);
    int         idmef_data_set_ptr_dup_fast     (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);
    int         idmef_data_set_ptr_ref_fast     (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);
    int         idmef_data_set_ptr_nodup_fast   (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 void *ptr,
                                                 size_t len);
    int         idmef_data_new_ptr_dup_fast     (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);
    int         idmef_data_new_ptr_ref_fast     (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);
    int         idmef_data_new_ptr_nodup_fast   (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 void *ptr,
                                                 size_t len);
    int         idmef_data_set_char_string_dup_fast
                                                (idmef_data_t *data,
                                                 const char *str,
                                                 size_t len);
    int         idmef_data_new_char_string_dup_fast
                                                (idmef_data_t **data,
                                                 const char *str,
                                                 size_t len);
    int         idmef_data_new_char_string_ref_fast
                                                (idmef_data_t **data,
                                                 const char *ptr,
                                                 size_t len);
    int         idmef_data_new_char_string_nodup_fast
                                                (idmef_data_t **data,
                                                 char *ptr,
                                                 size_t len);
    int         idmef_data_set_char_string_ref_fast
                                                (idmef_data_t *data,
                                                 const char *ptr,
                                                 size_t len);
    int         idmef_data_set_char_string_nodup_fast
                                                (idmef_data_t *data,
                                                 char *ptr,
                                                 size_t len);
    int         idmef_data_new_char_string_ref  (idmef_data_t **data,
                                                 const char *ptr);
    int         idmef_data_new_char_string_dup  (idmef_data_t **data,
                                                 const char *ptr);
    int         idmef_data_new_char_string_nodup
                                                (idmef_data_t **data,
                                                 char *ptr);
    int         idmef_data_set_char_string_ref  (idmef_data_t *data,
                                                 const char *ptr);
    int         idmef_data_set_char_string_dup  (idmef_data_t *data,
                                                 const char *ptr);
    int         idmef_data_set_char_string_nodup
                                                (idmef_data_t *data,
                                                 char *ptr);
    #define     idmef_data_set_char_string_constant(string, str)
    int         idmef_data_new_byte_string_ref  (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);
    int         idmef_data_new_byte_string_dup  (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);
    int         idmef_data_new_byte_string_nodup
                                                (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);
    int         idmef_data_set_byte_string_ref  (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);
    int         idmef_data_set_byte_string_dup  (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);
    int         idmef_data_set_byte_string_nodup
                                                (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);
    void        idmef_data_destroy              (idmef_data_t *data);
    int         idmef_data_copy_ref             (const idmef_data_t *src,
                                                 idmef_data_t *dst);
    int         idmef_data_copy_dup             (const idmef_data_t *src,
                                                 idmef_data_t *dst);
    int         idmef_data_clone                (const idmef_data_t *src,
                                                 idmef_data_t **dst);
    idmef_data_type_t idmef_data_get_type       (const idmef_data_t *data);
    size_t      idmef_data_get_len              (const idmef_data_t *data);
    const void* idmef_data_get_data             (const idmef_data_t *data);
    char        idmef_data_get_char             (const idmef_data_t *data);
    uint8_t     idmef_data_get_byte             (const idmef_data_t *data);
    uint32_t    idmef_data_get_uint32           (const idmef_data_t *data);
    uint64_t    idmef_data_get_uint64           (const idmef_data_t *data);
    float       idmef_data_get_float            (const idmef_data_t *data);
    const char* idmef_data_get_char_string      (const idmef_data_t *data);
    const unsigned char* idmef_data_get_byte_string
                                                (const idmef_data_t *data);
    prelude_bool_t idmef_data_is_empty          (const idmef_data_t *data);
    int         idmef_data_to_string            (const idmef_data_t *data,
                                                 prelude_string_t *out);
    void        idmef_data_destroy_internal     (idmef_data_t *data);

## Description

## Details

### enum idmef_data_type_t

    typedef enum {
    	IDMEF_DATA_TYPE_UNKNOWN      = 0,
    	IDMEF_DATA_TYPE_CHAR         = 1,
    	IDMEF_DATA_TYPE_BYTE         = 2,
    	IDMEF_DATA_TYPE_UINT32       = 3,
    	IDMEF_DATA_TYPE_UINT64       = 4,
    	IDMEF_DATA_TYPE_FLOAT        = 5,
    	IDMEF_DATA_TYPE_CHAR_STRING  = 6,
    	IDMEF_DATA_TYPE_BYTE_STRING  = 7
    } idmef_data_type_t;

### data

    typedef struct {
            int refcount;

            int flags;
            idmef_data_type_t type;
            size_t len;

            union {
    		char char_data;
    		uint8_t byte_data;
    		uint32_t uint32_data;
    		uint64_t uint64_data;
    		float float_data;
    		void *rw_data;
    		const void *ro_data;
    } data;

### idmef_data_new ()

    int         idmef_data_new                  (idmef_data_t **data);

`data` : |
Returns : |

### idmef_data_ref ()

    idmef_data_t* idmef_data_ref                (idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_new_char ()

    int         idmef_data_new_char             (idmef_data_t **data,
                                                 char c);

`data` : |
`c` : |
Returns : |

### idmef_data_new_byte ()

    int         idmef_data_new_byte             (idmef_data_t **data,
                                                 uint8_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_uint32 ()

    int         idmef_data_new_uint32           (idmef_data_t **data,
                                                 uint32_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_uint64 ()

    int         idmef_data_new_uint64           (idmef_data_t **data,
                                                 uint64_t i);

`data` : |
`i` : |
Returns : |

### idmef_data_new_float ()

    int         idmef_data_new_float            (idmef_data_t **data,
                                                 float f);

`data` : |
`f` : |
Returns : |

### idmef_data_set_char ()

    void        idmef_data_set_char             (idmef_data_t *data,
                                                 char c);

`data` : |
`c` : |

### idmef_data_set_byte ()

    void        idmef_data_set_byte             (idmef_data_t *data,
                                                 uint8_t i);

`data` : |
`i` : |

### idmef_data_set_uint32 ()

    void        idmef_data_set_uint32           (idmef_data_t *data,
                                                 uint32_t i);

`data` : |
`i` : |

### idmef_data_set_uint64 ()

    void        idmef_data_set_uint64           (idmef_data_t *data,
                                                 uint64_t i);

`data` : |
`i` : |

### idmef_data_set_float ()

    void        idmef_data_set_float            (idmef_data_t *data,
                                                 float f);

`data` : |
`f` : |

### idmef_data_set_ptr_dup_fast ()

    int         idmef_data_set_ptr_dup_fast     (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_ptr_ref_fast ()

    int         idmef_data_set_ptr_ref_fast     (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_ptr_nodup_fast ()

    int         idmef_data_set_ptr_nodup_fast   (idmef_data_t *data,
                                                 idmef_data_type_t type,
                                                 void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_dup_fast ()

    int         idmef_data_new_ptr_dup_fast     (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_ref_fast ()

    int         idmef_data_new_ptr_ref_fast     (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 const void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_ptr_nodup_fast ()

    int         idmef_data_new_ptr_nodup_fast   (idmef_data_t **data,
                                                 idmef_data_type_t type,
                                                 void *ptr,
                                                 size_t len);

`data` : |
`type` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_dup_fast ()

    int         idmef_data_set_char_string_dup_fast
                                                (idmef_data_t *data,
                                                 const char *str,
                                                 size_t len);

`data` : |
`str` : |
`len` : |
Returns : |

### idmef_data_new_char_string_dup_fast ()

    int         idmef_data_new_char_string_dup_fast
                                                (idmef_data_t **data,
                                                 const char *str,
                                                 size_t len);

`data` : |
`str` : |
`len` : |
Returns : |

### idmef_data_new_char_string_ref_fast ()

    int         idmef_data_new_char_string_ref_fast
                                                (idmef_data_t **data,
                                                 const char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_char_string_nodup_fast ()

    int         idmef_data_new_char_string_nodup_fast
                                                (idmef_data_t **data,
                                                 char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_ref_fast ()

    int         idmef_data_set_char_string_ref_fast
                                                (idmef_data_t *data,
                                                 const char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_char_string_nodup_fast ()

    int         idmef_data_set_char_string_nodup_fast
                                                (idmef_data_t *data,
                                                 char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_char_string_ref ()

    int         idmef_data_new_char_string_ref  (idmef_data_t **data,
                                                 const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_new_char_string_dup ()

    int         idmef_data_new_char_string_dup  (idmef_data_t **data,
                                                 const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_new_char_string_nodup ()

    int         idmef_data_new_char_string_nodup
                                                (idmef_data_t **data,
                                                 char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_ref ()

    int         idmef_data_set_char_string_ref  (idmef_data_t *data,
                                                 const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_dup ()

    int         idmef_data_set_char_string_dup  (idmef_data_t *data,
                                                 const char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_nodup ()

    int         idmef_data_set_char_string_nodup
                                                (idmef_data_t *data,
                                                 char *ptr);

`data` : |
`ptr` : |
Returns : |

### idmef_data_set_char_string_constant()

    #define     idmef_data_set_char_string_constant(string, str)

`string` : |
`str` : |

### idmef_data_new_byte_string_ref ()

    int         idmef_data_new_byte_string_ref  (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_byte_string_dup ()

    int         idmef_data_new_byte_string_dup  (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_new_byte_string_nodup ()

    int         idmef_data_new_byte_string_nodup
                                                (idmef_data_t **data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_ref ()

    int         idmef_data_set_byte_string_ref  (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_dup ()

    int         idmef_data_set_byte_string_dup  (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_set_byte_string_nodup ()

    int         idmef_data_set_byte_string_nodup
                                                (idmef_data_t *data,
                                                 unsigned char *ptr,
                                                 size_t len);

`data` : |
`ptr` : |
`len` : |
Returns : |

### idmef_data_destroy ()

    void        idmef_data_destroy              (idmef_data_t *data);

Frees `data`. The buffer pointed by `data` will be freed if the `data` object is marked as _dup or _nodup.

`data` : | Pointer to an idmef_data_t object.

### idmef_data_copy_ref ()

    int         idmef_data_copy_ref             (const idmef_data_t *src,
                                                 idmef_data_t *dst);

Makes `dst` reference the same buffer as `src`.

`src` : | Source idmef_data_t object.
`dst` : | Destination idmef_data_t object.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_copy_dup ()

    int         idmef_data_copy_dup             (const idmef_data_t *src,
                                                 idmef_data_t *dst);

Copies `src` to `dst`, including the associated buffer. This is an alternative to `idmef_data_clone()`.

`src` : | Source idmef_data_t object.
`dst` : | Destination idmef_data_t object.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_clone ()

    int         idmef_data_clone                (const idmef_data_t *src,
                                                 idmef_data_t **dst);

`src` : |
`dst` : |
Returns : |

### idmef_data_get_type ()

    idmef_data_type_t idmef_data_get_type       (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the type of the embedded data.

### idmef_data_get_len ()

    size_t      idmef_data_get_len              (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the length of data contained within `data` object.

### idmef_data_get_data ()

    const void* idmef_data_get_data             (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | the data contained within `data` object.

### idmef_data_get_char ()

    char        idmef_data_get_char             (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_byte ()

    uint8_t     idmef_data_get_byte             (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_uint32 ()

    uint32_t    idmef_data_get_uint32           (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_uint64 ()

    uint64_t    idmef_data_get_uint64           (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_float ()

    float       idmef_data_get_float            (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_char_string ()

    const char* idmef_data_get_char_string      (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_get_byte_string ()

    const unsigned char* idmef_data_get_byte_string
                                                (const idmef_data_t *data);

`data` : |
Returns : |

### idmef_data_is_empty ()

    prelude_bool_t idmef_data_is_empty          (const idmef_data_t *data);

`data` : | Pointer to an idmef_data_t object.
Returns : | TRUE if empty, FALSE otherwise.

### idmef_data_to_string ()

    int         idmef_data_to_string            (const idmef_data_t *data,
                                                 prelude_string_t *out);

Formats data contained within `data` to be printable, and stores the result in the provided `out` buffer.

`data` : | Pointer to an idmef_data_t object.
`out` : | Pointer to a prelude_string_t to store the formated data into.
Returns : | 0 on success, a negative value if an error occured.

### idmef_data_destroy_internal ()

    void        idmef_data_destroy_internal     (idmef_data_t *data);

`data` : |