factor/native/array.h

37 lines
780 B
C
Raw Normal View History

2004-07-16 02:26:21 -04:00
typedef struct {
CELL header;
/* untagged */
CELL capacity;
} ARRAY;
INLINE ARRAY* untag_array(CELL tagged)
{
type_check(ARRAY_TYPE,tagged);
return (ARRAY*)UNTAG(tagged);
}
ARRAY* array(CELL capacity, CELL fill);
ARRAY* grow_array(ARRAY* array, CELL capacity, CELL fill);
#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);