factor/native/array.h

38 lines
889 B
C

typedef struct {
CELL header;
/* untagged */
CELL capacity;
} ARRAY;
INLINE ARRAY* untag_array(CELL tagged)
{
type_check(ARRAY_TYPE,tagged);
return (ARRAY*)UNTAG(tagged);
}
ARRAY* allot_array(CELL type, FIXNUM capacity);
ARRAY* array(FIXNUM capacity, CELL fill);
ARRAY* grow_array(ARRAY* array, FIXNUM capacity, CELL fill);
ARRAY* shrink_array(ARRAY* array, FIXNUM capacity);
#define AREF(array,index) ((CELL)(array) + sizeof(ARRAY) + (index) * CELLS)
#define ASIZE(pointer) align8(sizeof(ARRAY) + \
((ARRAY*)(pointer))->capacity * CELLS)
/* untagged & unchecked */
INLINE CELL array_nth(ARRAY* array, CELL index)
{
return get(AREF(array,index));
}
/* untagged & unchecked */
INLINE void set_array_nth(ARRAY* array, CELL index, CELL value)
{
put(AREF(array,index),value);
}
void fixup_array(ARRAY* array);
void collect_array(ARRAY* array);
ARRAY* copy_array(ARRAY* array);