00001
00002
00003
00004
00005 #ifndef _U_ARRAY_H_
00006 #define _U_ARRAY_H_
00007
00008 #include <u/libu_conf.h>
00009 #include <stdint.h>
00010 #ifdef HAVE__BOOL
00011 #include <stdbool.h>
00012 #endif
00013 #ifdef HAVE_COMPLEX
00014 #include <complex.h>
00015 #undef I
00016 #endif
00017
00018 #ifdef __cplusplus
00019 extern "C" {
00020 #endif
00021
00029 #ifndef U_ARRAY_NSLOTS_DFL
00030 #define U_ARRAY_NSLOTS_DFL 512
00031 #endif
00032
00035 #ifndef U_ARRAY_RESIZE_PAD
00036 #define U_ARRAY_RESIZE_PAD 100
00037 #endif
00038
00042 typedef enum {
00043 U_ARRAY_TYPE_UNSET = 0,
00044 #ifdef HAVE__BOOL
00045 U_ARRAY_TYPE_BOOL,
00046 #endif
00047 U_ARRAY_TYPE_CHAR,
00048 U_ARRAY_TYPE_U_CHAR,
00049 U_ARRAY_TYPE_SHORT,
00050 U_ARRAY_TYPE_U_SHORT,
00051 U_ARRAY_TYPE_INT,
00052 U_ARRAY_TYPE_U_INT,
00053 U_ARRAY_TYPE_LONG,
00054 U_ARRAY_TYPE_U_LONG,
00055 #ifdef HAVE_LONG_LONG
00056 U_ARRAY_TYPE_LONG_LONG,
00057 U_ARRAY_TYPE_U_LONG_LONG,
00058 #endif
00059 #ifdef HAVE_INTMAX_T
00060 U_ARRAY_TYPE_INTMAX,
00061 U_ARRAY_TYPE_U_INTMAX,
00062 #endif
00063 U_ARRAY_TYPE_FLOAT,
00064 U_ARRAY_TYPE_DOUBLE,
00065 #ifdef HAVE_LONG_DOUBLE
00066 U_ARRAY_TYPE_LONG_DOUBLE,
00067 #endif
00068 #ifdef HAVE_FLOAT__COMPLEX
00069 U_ARRAY_TYPE_FLOAT_COMPLEX,
00070 #endif
00071 #ifdef HAVE_DOUBLE__COMPLEX
00072 U_ARRAY_TYPE_DOUBLE_COMPLEX,
00073 #endif
00074 #ifdef HAVE_LONG_DOUBLE__COMPLEX
00075 U_ARRAY_TYPE_LONG_DOUBLE_COMPLEX,
00076 #endif
00077 U_ARRAY_TYPE_PTR,
00078 U_ARRAY_TYPE_MAX = U_ARRAY_TYPE_PTR
00079 } u_array_type_t;
00080
00081
00082 struct u_array_s;
00083
00085 typedef struct u_array_s u_array_t;
00086
00087
00088 int u_array_create (u_array_type_t t, size_t nslots, u_array_t **pda);
00089 void u_array_free (u_array_t *da);
00090
00091
00092 int u_array_resize (u_array_t *da, size_t req_idx);
00093
00114 int u_array_set_char (u_array_t *da, size_t idx, char v, char *pold);
00115
00117 int u_array_set_u_char (u_array_t *da, size_t idx, unsigned char v,
00118 unsigned char *pold);
00119
00121 int u_array_set_short (u_array_t *da, size_t idx, short v, short *pold);
00122
00124 int u_array_set_u_short (u_array_t *da, size_t idx, unsigned short v,
00125 unsigned short *pold);
00126
00128 int u_array_set_int (u_array_t *da, size_t idx, int v, int *pold);
00129
00131 int u_array_set_u_int (u_array_t *da, size_t idx, unsigned int v,
00132 unsigned int *pold);
00133
00135 int u_array_set_long (u_array_t *da, size_t idx, long v, long *pold);
00136
00138 int u_array_set_u_long (u_array_t *da, size_t idx, unsigned long v,
00139 unsigned long *pold);
00140
00142 int u_array_set_float (u_array_t *da, size_t idx, float v, float *pold);
00143
00145 int u_array_set_double (u_array_t *da, size_t idx, double v, double *pold);
00146
00161 int u_array_get_char (u_array_t *da, size_t idx, char *pv);
00162
00164 int u_array_get_u_char (u_array_t *da, size_t idx, unsigned char *pv);
00165
00167 int u_array_get_short (u_array_t *da, size_t idx, short *pv);
00168
00170 int u_array_get_u_short (u_array_t *da, size_t idx, unsigned short *pv);
00171
00173 int u_array_get_int (u_array_t *da, size_t idx, int *pv);
00174
00176 int u_array_get_u_int (u_array_t *da, size_t idx, unsigned int *pv);
00177
00179 int u_array_get_long (u_array_t *da, size_t idx, long *pv);
00180
00182 int u_array_get_u_long (u_array_t *da, size_t idx, unsigned long *pv);
00183
00185 int u_array_get_float (u_array_t *da, size_t idx, float *pv);
00186
00188 int u_array_get_double (u_array_t *da, size_t idx, double *pv);
00189
00190
00191
00192
00193
00194
00195 void *u_array_set_ptr (u_array_t *da, size_t idx, void *v, int *prc);
00196 void *u_array_get_ptr (u_array_t *da, size_t idx, int *prc);
00197
00198 #ifdef HAVE__BOOL
00199
00200 int u_array_set_bool (u_array_t *da, size_t idx, _Bool v, _Bool *pold);
00201
00203 int u_array_get_bool (u_array_t *da, size_t idx, _Bool *pv);
00204 #endif
00205
00206 #ifdef HAVE_LONG_LONG
00207
00208 int u_array_set_long_long (u_array_t *da, size_t idx, long long v,
00209 long long *pold);
00210
00212 int u_array_set_u_long_long (u_array_t *da, size_t idx, unsigned long long v,
00213 unsigned long long *pold);
00214
00216 int u_array_get_long_long (u_array_t *da, size_t idx, long long *pv);
00217
00219 int u_array_get_u_long_long (u_array_t *da, size_t idx, unsigned long long *pv);
00220 #endif
00221
00222 #ifdef HAVE_INTMAX_T
00223
00224 int u_array_set_intmax (u_array_t *da, size_t idx, intmax_t v, intmax_t *pold);
00225
00227 int u_array_set_u_intmax (u_array_t *da, size_t idx, uintmax_t v,
00228 uintmax_t *pold);
00229
00231 int u_array_get_intmax (u_array_t *da, size_t idx, intmax_t *pv);
00232
00234 int u_array_get_u_intmax (u_array_t *da, size_t idx, uintmax_t *pv);
00235 #endif
00236
00237 #ifdef HAVE_LONG_DOUBLE
00238
00239 int u_array_set_long_double (u_array_t *da, size_t idx, long double v,
00240 long double *pold);
00241
00243 int u_array_get_long_double (u_array_t *da, size_t idx, long double *pv);
00244 #endif
00245
00246 #ifdef HAVE_FLOAT__COMPLEX
00247
00248 int u_array_set_float_complex (u_array_t *da, size_t idx, float _Complex v,
00249 float _Complex *pold);
00250
00252 int u_array_get_float_complex (u_array_t *da, size_t idx, float _Complex *pv);
00253 #endif
00254
00255 #ifdef HAVE_DOUBLE__COMPLEX
00256
00257 int u_array_set_double_complex (u_array_t *da, size_t idx, double _Complex v,
00258 double _Complex *pold);
00259
00261 int u_array_get_double_complex (u_array_t *da, size_t idx, double _Complex *pv);
00262 #endif
00263
00264 #ifdef HAVE_LONG_DOUBLE__COMPLEX
00265
00266 int u_array_set_long_double_complex (u_array_t *da, size_t idx,
00267 long double _Complex v, long double _Complex *pold);
00268
00270 int u_array_get_long_double_complex (u_array_t *da, size_t idx,
00271 long double _Complex *pv);
00272 #endif
00273
00278 #ifdef __cplusplus
00279 }
00280 #endif
00281
00282 #endif