blob: 24c5f0c24c8c93860e24413de745a9f05bc4c194 [file] [log] [blame]
/*
// Copyright (c) 2016 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#ifndef OC_HELPERS_H
#define OC_HELPERS_H
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
#define STRING_ARRAY_ITEM_MAX_LEN 24
typedef struct oc_string {
uint16_t os_sz;
uint8_t *os_str;
} oc_string_t;
typedef struct oc_array {
uint16_t oa_sz;
union {
bool *b;
int64_t *i;
double *d;
char *s;
} oa_arr;
} oc_array_t;
typedef struct oc_array oc_string_array_t;
#define oc_string(ocstring) ((char *)(ocstring).os_str)
void oc_new_string(oc_string_t *ocstring, const char str[]);
void oc_alloc_string(oc_string_t *ocstring, int size);
void oc_free_string(oc_string_t *ocstring);
void oc_concat_strings(oc_string_t *concat, const char *, const char *);
#define oc_string_len(ocstring) ((ocstring).os_sz ? (ocstring).os_sz - 1 : 0)
void _oc_new_array(oc_array_t *ocarray, uint8_t size, uint8_t elem_sz);
void _oc_free_array(oc_array_t *ocarray);
#define oc_new_int_array(ocarray, size) \
_oc_new_array(ocarray, size, sizeof(uint64_t))
#define oc_new_bool_array(ocarray, size) \
_oc_new_array(ocarray, size, sizeof(bool))
#define oc_new_double_array(ocarray, size) \
_oc_new_array(ocarray, size, sizeof(double))
#define oc_free_int_array(ocarray) _oc_free_array(ocarray)
#define oc_free_bool_array(ocarray) _oc_free_array(ocarray)
#define oc_free_double_array(ocarray) _oc_free_array(ocarray)
#define oc_int_array_size(ocintarray) ((ocintarray).oa_sz / sizeof(int64_t))
#define oc_bool_array_size(ocboolarray) ((ocboolarray).oa_sz / sizeof(bool))
#define oc_double_array_size(ocdoublearray) \
((ocdoublearray).oa_sz / sizeof(double))
#define oc_int_array(ocintarray) (ocintarray.oa_arr.i)
#define oc_bool_array(ocboolarray) (ocboolarray.oa_arr.b)
#define oc_double_array(ocdoublearray) (ocdoublearray.oa_arr.d)
void _oc_alloc_string_array(oc_string_array_t *ocstringarray, uint8_t size);
bool _oc_copy_string_to_string_array(oc_string_array_t *ocstringarray,
const char str[], uint8_t index);
bool _oc_string_array_add_item(oc_string_array_t *ocstringarray,
const char str[]);
#define oc_new_string_array(ocstringarray, size) \
(_oc_alloc_string_array(ocstringarray, size))
#define oc_free_string_array(ocs) (_oc_free_array(ocs))
#define oc_string_array_add_item(ocstringarray, str) \
(_oc_string_array_add_item(&(ocstringarray), str))
#define oc_string_array_get_item(ocstringarray, index) \
(&(ocstringarray.oa_arr.s[index * STRING_ARRAY_ITEM_MAX_LEN]))
#define oc_string_array_set_item(ocstringarray, str, index) \
(_oc_copy_string_to_string_array(&(ocstringarray), str, index))
#define oc_string_array_get_item_size(ocstringarray, index) \
(strlen(oc_string_array_get_item(ocstringarray, index)))
#define oc_string_array_get_allocated_size(ocstringarray) \
(ocstringarray.oa_sz / STRING_ARRAY_ITEM_MAX_LEN)
#ifdef __cplusplus
}
#endif
#endif /* OC_HELPERS_H */