00001
00002
00003
00004
00005 #ifndef _U_ARRAY_H_
00006 #define _U_ARRAY_H_
00007
00008 #include <u/libu_conf.h>
00009 #ifdef HAVE__BOOL
00010 #include <stdbool.h>
00011 #endif
00012 #ifdef HAVE_COMPLEX
00013 #include <complex.h>
00014 #endif
00015
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00027 #ifndef U_ARRAY_NSLOTS_DFL
00028 #define U_ARRAY_NSLOTS_DFL 512
00029 #endif
00030
00033 #ifndef U_ARRAY_RESIZE_PAD
00034 #define U_ARRAY_RESIZE_PAD 100
00035 #endif
00036
00040 typedef enum {
00041 U_ARRAY_TYPE_UNSET = 0,
00042 #ifdef HAVE__BOOL
00043 U_ARRAY_TYPE_BOOL,
00044 #endif
00045 U_ARRAY_TYPE_CHAR,
00046 U_ARRAY_TYPE_U_CHAR,
00047 U_ARRAY_TYPE_SHORT,
00048 U_ARRAY_TYPE_U_SHORT,
00049 U_ARRAY_TYPE_INT,
00050 U_ARRAY_TYPE_U_INT,
00051 U_ARRAY_TYPE_LONG,
00052 U_ARRAY_TYPE_U_LONG,
00053 #ifdef HAVE_LONG_LONG
00054 U_ARRAY_TYPE_LONG_LONG,
00055 U_ARRAY_TYPE_U_LONG_LONG,
00056 #endif
00057 #ifdef HAVE_INTMAX_T
00058 U_ARRAY_TYPE_INTMAX,
00059 U_ARRAY_TYPE_U_INTMAX,
00060 #endif
00061 U_ARRAY_TYPE_FLOAT,
00062 U_ARRAY_TYPE_DOUBLE,
00063 #ifdef HAVE_LONG_DOUBLE
00064 U_ARRAY_TYPE_LONG_DOUBLE,
00065 #endif
00066 #ifdef HAVE_FLOAT__COMPLEX
00067 U_ARRAY_TYPE_FLOAT_COMPLEX,
00068 #endif
00069 #ifdef HAVE_DOUBLE__COMPLEX
00070 U_ARRAY_TYPE_DOUBLE_COMPLEX,
00071 #endif
00072 #ifdef HAVE_LONG_DOUBLE__COMPLEX
00073 U_ARRAY_TYPE_LONG_DOUBLE_COMPLEX,
00074 #endif
00075 U_ARRAY_TYPE_PTR,
00076 U_ARRAY_TYPE_MAX = U_ARRAY_TYPE_PTR
00077 } u_array_type_t;
00078
00079
00080 struct u_array_s;
00081
00083 typedef struct u_array_s u_array_t;
00084
00085
00086 int u_array_create (u_array_type_t t, size_t nslots, u_array_t **pda);
00087 void u_array_free (u_array_t *da);
00088
00089
00090 int u_array_resize (u_array_t *da, size_t req_idx);
00091
00112 int u_array_set_char (u_array_t *da, size_t idx, char v, char *pold);
00113
00115 int u_array_set_u_char (u_array_t *da, size_t idx, unsigned char v,
00116 unsigned char *pold);
00117
00119 int u_array_set_short (u_array_t *da, size_t idx, short v, short *pold);
00120
00122 int u_array_set_u_short (u_array_t *da, size_t idx, unsigned short v,
00123 unsigned short *pold);
00124
00126 int u_array_set_int (u_array_t *da, size_t idx, int v, int *pold);
00127
00129 int u_array_set_u_int (u_array_t *da, size_t idx, unsigned int v,
00130 unsigned int *pold);
00131
00133 int u_array_set_long (u_array_t *da, size_t idx, long v, long *pold);
00134
00136 int u_array_set_u_long (u_array_t *da, size_t idx, unsigned long v,
00137 unsigned long *pold);
00138
00140 int u_array_set_float (u_array_t *da, size_t idx, float v, float *pold);
00141
00143 int u_array_set_double (u_array_t *da, size_t idx, double v, double *pold);
00144
00159 int u_array_get_char (u_array_t *da, size_t idx, char *pv);
00160
00162 int u_array_get_u_char (u_array_t *da, size_t idx, unsigned char *pv);
00163
00165 int u_array_get_short (u_array_t *da, size_t idx, short *pv);
00166
00168 int u_array_get_u_short (u_array_t *da, size_t idx, unsigned short *pv);
00169
00171 int u_array_get_int (u_array_t *da, size_t idx, int *pv);
00172
00174 int u_array_get_u_int (u_array_t *da, size_t idx, unsigned int *pv);
00175
00177 int u_array_get_long (u_array_t *da, size_t idx, long *pv);
00178
00180 int u_array_get_u_long (u_array_t *da, size_t idx, unsigned long *pv);
00181
00183 int u_array_get_float (u_array_t *da, size_t idx, float *pv);
00184
00186 int u_array_get_double (u_array_t *da, size_t idx, double *pv);
00187
00188
00189
00190
00191
00192
00193 void *u_array_set_ptr (u_array_t *da, size_t idx, void *v, int *prc);
00194 void *u_array_get_ptr (u_array_t *da, size_t idx, int *prc);
00195
00196 #ifdef HAVE__BOOL
00197
00198 int u_array_set_bool (u_array_t *da, size_t idx, _Bool v, _Bool *pold);
00199
00201 int u_array_get_bool (u_array_t *da, size_t idx, _Bool *pv);
00202 #endif
00203
00204 #ifdef HAVE_LONG_LONG
00205
00206 int u_array_set_long_long (u_array_t *da, size_t idx, long long v,
00207 long long *pold);
00208
00210 int u_array_set_u_long_long (u_array_t *da, size_t idx, unsigned long long v,
00211 unsigned long long *pold);
00212
00214 int u_array_get_long_long (u_array_t *da, size_t idx, long long *pv);
00215
00217 int u_array_get_u_long_long (u_array_t *da, size_t idx, unsigned long long *pv);
00218 #endif
00219
00220 #ifdef HAVE_INTMAX_T
00221
00222 int u_array_set_intmax (u_array_t *da, size_t idx, intmax_t v, intmax_t *pold);
00223
00225 int u_array_set_u_intmax (u_array_t *da, size_t idx, uintmax_t v,
00226 uintmax_t *pold);
00227
00229 int u_array_get_intmax (u_array_t *da, size_t idx, intmax_t *pv);
00230
00232 int u_array_get_u_intmax (u_array_t *da, size_t idx, uintmax_t *pv);
00233 #endif
00234
00235 #ifdef HAVE_LONG_DOUBLE
00236
00237 int u_array_set_long_double (u_array_t *da, size_t idx, long double v,
00238 long double *pold);
00239
00241 int u_array_get_long_double (u_array_t *da, size_t idx, long double *pv);
00242 #endif
00243
00244 #ifdef HAVE_FLOAT__COMPLEX
00245
00246 int u_array_set_float_complex (u_array_t *da, size_t idx, float _Complex v,
00247 float _Complex *pold);
00248
00250 int u_array_get_float_complex (u_array_t *da, size_t idx, float _Complex *pv);
00251 #endif
00252
00253 #ifdef HAVE_DOUBLE__COMPLEX
00254
00255 int u_array_set_double_complex (u_array_t *da, size_t idx, double _Complex v,
00256 double _Complex *pold);
00257
00259 int u_array_get_double_complex (u_array_t *da, size_t idx, double _Complex *pv);
00260 #endif
00261
00262 #ifdef HAVE_LONG_DOUBLE__COMPLEX
00263
00264 int u_array_set_long_double_complex (u_array_t *da, size_t idx,
00265 long double _Complex v, long double _Complex *pold);
00266
00268 int u_array_get_long_double_complex (u_array_t *da, size_t idx,
00269 long double _Complex *pv);
00270 #endif
00271
00276 #ifdef __cplusplus
00277 }
00278 #endif
00279
00280 #endif