89 строки
1.9 KiB
C
89 строки
1.9 KiB
C
/*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#ifndef LAM_ARRAY_H
|
|
#define LAM_ARRAY_H
|
|
|
|
#include "lam_config.h"
|
|
#include "lam/types.h"
|
|
#include "lam/lfc/object.h"
|
|
|
|
/*
|
|
*
|
|
* Available Classes
|
|
*
|
|
*/
|
|
|
|
extern lam_class_info_t lam_array_cls;
|
|
|
|
|
|
/*
|
|
*
|
|
* Arrray interface
|
|
*
|
|
*/
|
|
|
|
typedef int (*lam_arr_cmp_fn)(lam_object_t *, lam_object_t *);
|
|
|
|
typedef struct lam_array
|
|
{
|
|
lam_object_t super;
|
|
lam_object_t **arr_items;
|
|
size_t arr_length;
|
|
size_t arr_size;
|
|
} lam_array_t;
|
|
|
|
|
|
void lam_arr_init(lam_array_t *arr);
|
|
void lam_arr_destroy(lam_array_t *arr);
|
|
|
|
/* initializes array with fixed length.
|
|
* lam_arr_init() must have been called first.
|
|
*/
|
|
bool lam_arr_init_with(lam_array_t *arr, size_t length);
|
|
|
|
bool lam_arr_append_item(lam_array_t *arr, lam_object_t *item);
|
|
|
|
static inline lam_object_t *lam_arr_get_item(lam_array_t *arr, int index);
|
|
static inline lam_object_t *lam_arr_get_item(lam_array_t *arr, int index)
|
|
{
|
|
if ( (index >=0) && (index < arr->arr_length) )
|
|
{
|
|
return arr->arr_items[index];
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
static inline size_t lam_arr_get_size(lam_array_t *arr);
|
|
static inline size_t lam_arr_get_size(lam_array_t *arr)
|
|
{
|
|
return arr->arr_size;
|
|
}
|
|
|
|
int lam_arr_index_of_item_matching(lam_array_t *arr, lam_object_t *item,
|
|
lam_arr_cmp_fn cmp_fn);
|
|
|
|
void lam_arr_remove_all(lam_array_t *arr);
|
|
|
|
void lam_arr_remove_item(lam_array_t *arr, int index);
|
|
|
|
void lam_arr_remove_item_matching(lam_array_t *arr, lam_object_t *item,
|
|
lam_arr_cmp_fn cmp_fn);
|
|
|
|
void lam_arr_set_item(lam_array_t *arr, lam_object_t *item, int index);
|
|
|
|
static inline lam_object_t **lam_arr_get_c_array(lam_array_t *arr,
|
|
size_t *size);
|
|
static inline lam_object_t **lam_arr_get_c_array(lam_array_t *arr,
|
|
size_t *size)
|
|
{
|
|
*size = arr->arr_size;
|
|
return arr->arr_items;
|
|
}
|
|
|
|
|
|
#endif /* LAM_ARRAY_H */
|
|
|
|
|