author | Volker Birk <vb@pep-project.org> |
Fri, 17 May 2019 17:59:06 +0200 | |
branch | sync |
changeset 3720 | 9ed76a79d784 |
parent 3121 | f33a2ae77177 |
child 3730 | 922720c27d9a |
permissions | -rw-r--r-- |
krista@3121 | 1 |
// This file is under GNU General Public License 3.0 |
krista@3121 | 2 |
// see LICENSE.txt |
krista@3121 | 3 |
|
vb@98 | 4 |
#pragma once |
vb@98 | 5 |
|
vb@98 | 6 |
#include "dynamic_api.h" |
vb@98 | 7 |
|
vb@98 | 8 |
#ifdef __cplusplus |
vb@98 | 9 |
extern "C" { |
vb@98 | 10 |
#endif |
vb@98 | 11 |
|
vb@98 | 12 |
|
vb@98 | 13 |
typedef struct _stringpair_t { |
roker@786 | 14 |
char * key; // may point to "" but must not be NULL! |
roker@786 | 15 |
char * value; // may point to "" but must not be NULL! |
vb@98 | 16 |
} stringpair_t; |
vb@98 | 17 |
|
vb@98 | 18 |
|
vb@98 | 19 |
// new_stringpair() - allocate new stringpair_t |
vb@98 | 20 |
// |
vb@98 | 21 |
// parameters: |
vb@1285 | 22 |
// key (in) utf-8 string used as key, should not be NULL |
vb@1285 | 23 |
// value (in) utf-8 string containing the value, should not be NULL |
vb@98 | 24 |
// |
vb@98 | 25 |
// return value: |
vb@98 | 26 |
// pointer to stringpair_t or NULL on failure |
vb@98 | 27 |
// |
vb@98 | 28 |
// caveat: |
vb@98 | 29 |
// key and value are copied and remain in the ownership of the caller |
vb@98 | 30 |
|
vb@98 | 31 |
DYNAMIC_API stringpair_t * new_stringpair(const char *key, const char *value); |
vb@98 | 32 |
|
vb@98 | 33 |
|
vb@98 | 34 |
// free_stringpair() - free memory allocated by stringpair_t |
vb@98 | 35 |
// |
vb@98 | 36 |
// parameters: |
vb@98 | 37 |
// pair (in) pointer to stringpair_t to free |
vb@98 | 38 |
|
vb@98 | 39 |
DYNAMIC_API void free_stringpair(stringpair_t * pair); |
vb@98 | 40 |
|
vb@98 | 41 |
|
vb@98 | 42 |
// stringpair_dup() - duplicate stringpair_t (deep copy) |
vb@98 | 43 |
// |
vb@98 | 44 |
// parameters: |
vb@98 | 45 |
// src (in) pointer to stringpair_t to duplicate |
vb@98 | 46 |
// |
vb@98 | 47 |
// return value: |
vb@98 | 48 |
// pointer to copy of src or NULL on failure |
vb@98 | 49 |
|
vb@98 | 50 |
DYNAMIC_API stringpair_t * stringpair_dup(const stringpair_t *src); |
vb@98 | 51 |
|
vb@98 | 52 |
|
vb@98 | 53 |
typedef struct _stringpair_list_t { |
vb@98 | 54 |
stringpair_t *value; |
vb@98 | 55 |
struct _stringpair_list_t *next; |
vb@98 | 56 |
} stringpair_list_t; |
vb@98 | 57 |
|
vb@98 | 58 |
|
vb@98 | 59 |
// new_stringpair_list() - allocate a new stringpair_list |
vb@98 | 60 |
// |
vb@98 | 61 |
// parameters: |
vb@281 | 62 |
// value (in) initial value |
vb@98 | 63 |
// |
vb@98 | 64 |
// return value: |
vb@98 | 65 |
// pointer to stringpair_list_t object or NULL if out of memory |
vb@98 | 66 |
// |
vb@98 | 67 |
// caveat: |
vb@281 | 68 |
// the ownership of the value goes to the stringpair_list |
krista@909 | 69 |
// next pointer is NULL |
vb@98 | 70 |
|
vb@281 | 71 |
DYNAMIC_API stringpair_list_t *new_stringpair_list(stringpair_t *value); |
vb@98 | 72 |
|
vb@98 | 73 |
|
krista@832 | 74 |
// stringpair_list_dup() - duplicate a stringpair_list (deep copy) |
vb@98 | 75 |
// |
vb@98 | 76 |
// parameters: |
vb@98 | 77 |
// src (in) stringpair_list to copy |
vb@98 | 78 |
// |
vb@98 | 79 |
// return value: |
vb@98 | 80 |
// pointer to stringpair_list_t object or NULL if out of memory |
krista@832 | 81 |
// stringpair value copies created by this function belong to the returned list |
vb@98 | 82 |
|
vb@98 | 83 |
DYNAMIC_API stringpair_list_t *stringpair_list_dup( |
vb@98 | 84 |
const stringpair_list_t *src |
vb@98 | 85 |
); |
vb@98 | 86 |
|
vb@98 | 87 |
|
vb@98 | 88 |
// stringpair_list_add() - add key to stringpair_list |
vb@98 | 89 |
// |
vb@98 | 90 |
// parameters: |
vb@98 | 91 |
// stringpair_list (in) stringpair_list struct or NULL to create a new |
vb@98 | 92 |
// one |
vb@281 | 93 |
// value (in) stringpair to add |
vb@98 | 94 |
// |
vb@98 | 95 |
// return value: |
vb@98 | 96 |
// pointer to last element in stringpair_list or NULL if out of memory |
vb@98 | 97 |
// |
vb@98 | 98 |
// caveat: |
roker@786 | 99 |
// the ownership of the value goes to the stringpair_list if add is successful |
vb@98 | 100 |
|
vb@98 | 101 |
DYNAMIC_API stringpair_list_t *stringpair_list_add( |
vb@98 | 102 |
stringpair_list_t *stringpair_list, |
vb@281 | 103 |
stringpair_t *value |
vb@98 | 104 |
); |
vb@98 | 105 |
|
vb@98 | 106 |
|
vb@98 | 107 |
// stringpair_list_append() - append stringpair_list to stringpair_list |
vb@98 | 108 |
// |
vb@98 | 109 |
// parameters: |
vb@98 | 110 |
// stringpair_list (in) stringpair_list struct to append to |
vb@98 | 111 |
// second (in) stringpair_list struct to append |
vb@98 | 112 |
// |
vb@98 | 113 |
// return value: |
vb@98 | 114 |
// pointer to last element in stringpair_list or NULL if out of memory |
krista@836 | 115 |
// or stringpair_list is NULL |
vb@98 | 116 |
// |
vb@98 | 117 |
// caveat: |
vb@98 | 118 |
// all values are being copied before being added to the list |
vb@98 | 119 |
// the original values are still being owned by the caller |
vb@98 | 120 |
|
vb@98 | 121 |
DYNAMIC_API stringpair_list_t *stringpair_list_append( |
vb@98 | 122 |
stringpair_list_t *stringpair_list, |
vb@98 | 123 |
stringpair_list_t *second |
vb@98 | 124 |
); |
vb@98 | 125 |
|
vb@98 | 126 |
|
vb@98 | 127 |
// stringpair_list_length() - get length of stringpair_list |
vb@98 | 128 |
// |
vb@98 | 129 |
// parameters: |
vb@98 | 130 |
// stringpair_list (in) stringpair_list struct to determine length of |
vb@98 | 131 |
// |
vb@98 | 132 |
// return value: |
vb@98 | 133 |
// length of stringpair_list in number of elements |
vb@98 | 134 |
|
vb@98 | 135 |
DYNAMIC_API int stringpair_list_length( |
vb@98 | 136 |
const stringpair_list_t *stringpair_list |
vb@98 | 137 |
); |
vb@98 | 138 |
|
vb@98 | 139 |
|
vb@98 | 140 |
// free_stringpair_list() - free memory occupied by stringpair_list |
vb@98 | 141 |
// |
vb@98 | 142 |
// parameters: |
vb@98 | 143 |
// stringpair_list (in) stringpair_list to free |
vb@98 | 144 |
|
vb@98 | 145 |
DYNAMIC_API void free_stringpair_list(stringpair_list_t *stringpair_list); |
vb@98 | 146 |
|
vb@98 | 147 |
|
vb@98 | 148 |
// stringpair_list_find() - find element in list using key |
vb@98 | 149 |
// |
vb@98 | 150 |
// parameters: |
vb@98 | 151 |
// stringpair_list (in) list to search |
vb@98 | 152 |
// key (in) key to search for |
vb@98 | 153 |
// |
vb@98 | 154 |
// return value: |
vb@104 | 155 |
// node with result if found or NULL if not |
vb@98 | 156 |
|
vb@104 | 157 |
DYNAMIC_API stringpair_list_t *stringpair_list_find( |
vb@98 | 158 |
stringpair_list_t *stringpair_list, |
vb@98 | 159 |
const char *key |
vb@98 | 160 |
); |
vb@98 | 161 |
|
vb@98 | 162 |
|
vb@98 | 163 |
#ifdef __cplusplus |
vb@98 | 164 |
} |
vb@98 | 165 |
#endif |
vb@98 | 166 |