factor/native/array.h

37 lines
914 B
C
Raw Normal View History

2004-07-16 02:26:21 -04:00
typedef struct {
CELL header;
/* untagged */
CELL capacity;
} F_ARRAY;
2004-07-16 02:26:21 -04:00
INLINE F_ARRAY* untag_array(CELL tagged)
2004-07-16 02:26:21 -04:00
{
/* type_check(ARRAY_TYPE,tagged); */
return (F_ARRAY*)UNTAG(tagged); /* FIXME */
2004-07-16 02:26:21 -04:00
}
F_ARRAY* allot_array(CELL type, F_FIXNUM capacity);
F_ARRAY* array(F_FIXNUM capacity, CELL fill);
F_ARRAY* grow_array(F_ARRAY* array, F_FIXNUM capacity, CELL fill);
F_ARRAY* shrink_array(F_ARRAY* array, F_FIXNUM capacity);
2004-07-16 02:26:21 -04:00
#define AREF(array,index) ((CELL)(array) + sizeof(F_ARRAY) + (index) * CELLS)
2004-07-16 02:26:21 -04:00
#define ASIZE(pointer) align8(sizeof(F_ARRAY) + \
((F_ARRAY*)(pointer))->capacity * CELLS)
2004-07-16 02:26:21 -04:00
/* untagged & unchecked */
INLINE CELL array_nth(F_ARRAY* array, CELL index)
2004-07-16 02:26:21 -04:00
{
return get(AREF(array,index));
}
/* untagged & unchecked */
INLINE void set_array_nth(F_ARRAY* array, CELL index, CELL value)
2004-07-16 02:26:21 -04:00
{
put(AREF(array,index),value);
}
void fixup_array(F_ARRAY* array);
void collect_array(F_ARRAY* array);