1
1
This commit was SVN r718.
Этот коммит содержится в:
Jeff Squyres 2004-02-10 22:22:48 +00:00
родитель 5198b6aa81
Коммит 9e9405811e
3 изменённых файлов: 0 добавлений и 205 удалений

Просмотреть файл

@ -18,7 +18,6 @@ headers = \
liblfc_la_SOURCES = \
$(headers) \
array.c \
lam_hash_table.c \
lam_list.c \
lam_object.c \

Просмотреть файл

@ -1,109 +0,0 @@
/*
* $HEADER$
*/
#include <string.h>
#include "lam/lfc/array.h"
#define ARR_BLK_SZ 20
lam_class_info_t lam_array_t_class_info = {
"lam_array_t",
CLASS_INFO(lam_object_t),
(lam_construct_t) lam_arr_construct,
(lam_destruct_t) lam_arr_destruct
};
/*
*
* lam_list_t interface
*
*/
void lam_arr_construct(lam_array_t *arr)
{
OBJ_CONSTRUCT_SUPER(arr, lam_object_t);
arr->arr_items = NULL;
arr->arr_size = 0;
arr->arr_length = 0;
}
void lam_arr_destruct(lam_array_t *arr)
{
lam_arr_remove_all(arr);
free(arr->arr_items);
OBJ_DESTRUCT_SUPER(arr, lam_object_t);
}
bool lam_arr_construct_with(lam_array_t *arr, size_t length)
{
/* initializes array with fixed length.
lam_arr_construct() must have been called first. */
if ( arr->arr_items )
{
lam_arr_remove_all(arr);
}
arr->arr_items = malloc(sizeof(lam_object_t *)*length);
if ( arr->arr_items )
{
arr->arr_length = length;
bzero(arr->arr_items, sizeof(lam_object_t *)*length);
}
else
return false;
return true;
}
bool lam_arr_append_item(lam_array_t *arr, lam_object_t *item)
{
if ( arr->arr_size == arr->arr_length )
{
arr->arr_items = (lam_object_t **)realloc(arr->arr_items,
sizeof(lam_object_t *)*(arr->arr_length + ARR_BLK_SZ));
if ( arr->arr_items )
{
arr->arr_length += ARR_BLK_SZ;
}
else
{
return false;
}
}
arr->arr_items[arr->arr_size++] = item;
return true;
}
void lam_arr_remove_all(lam_array_t *arr)
{
size_t i;
for ( i = 0; i < arr->arr_size; i++ )
{
OBJ_RELEASE(arr->arr_items[i]);
arr->arr_items[i] = NULL;
}
arr->arr_size = 0;
}
void lam_arr_remove_item(lam_array_t *arr, int index)
{
if ( (index >=0) && (index < arr->arr_length) )
{
arr->arr_items[index] = NULL;
}
}
void lam_arr_set_item(lam_array_t *arr, lam_object_t *item, int index)
{
if ( (index >=0) && (index < arr->arr_length) )
{
arr->arr_items[index] = item;
}
}

Просмотреть файл

@ -1,95 +0,0 @@
/*
* $HEADER$
*/
#ifndef LAM_ARRAY_H
#define LAM_ARRAY_H
#include "lam_config.h"
#include "lam/types.h"
#include "lam/lfc/lam_object.h"
/*
*
* Available Classes
*
*/
extern lam_class_info_t lam_array_t_class_info;
/*
*
* Array interface
*
*/
typedef int (*lam_arr_cmp_fn)(lam_object_t *, lam_object_t *);
struct lam_array_t
{
lam_object_t super;
lam_object_t **arr_items;
size_t arr_length;
size_t arr_size;
};
typedef struct lam_array_t lam_array_t;
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
void lam_arr_construct(lam_array_t *arr);
void lam_arr_destruct(lam_array_t *arr);
/* initializes array with fixed length.
* lam_arr_construct() must have been called first.
*/
bool lam_arr_construct_with(lam_array_t *arr, size_t length);
bool lam_arr_append_item(lam_array_t *arr, lam_object_t *item);
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);
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
static inline lam_object_t *lam_arr_get_item(lam_array_t *arr, size_t index);
static inline lam_object_t *lam_arr_get_item(lam_array_t *arr, size_t 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;
}
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 */