2004-07-16 02:26:21 -04:00
|
|
|
typedef struct {
|
|
|
|
CELL header;
|
2005-01-27 20:06:10 -05:00
|
|
|
/* tagged */
|
2004-07-16 02:26:21 -04:00
|
|
|
CELL capacity;
|
2004-12-10 21:46:42 -05:00
|
|
|
} F_ARRAY;
|
2004-07-16 02:26:21 -04:00
|
|
|
|
2005-04-09 18:30:46 -04:00
|
|
|
INLINE F_ARRAY* untag_array_fast(CELL tagged)
|
|
|
|
{
|
|
|
|
return (F_ARRAY*)UNTAG(tagged);
|
|
|
|
}
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
INLINE F_ARRAY* untag_array(CELL tagged)
|
|
|
|
{
|
|
|
|
type_check(ARRAY_TYPE,tagged);
|
|
|
|
return untag_array_fast(tagged);
|
|
|
|
}
|
|
|
|
|
2005-04-09 18:30:46 -04:00
|
|
|
INLINE F_ARRAY* untag_byte_array_fast(CELL tagged)
|
2004-07-16 02:26:21 -04:00
|
|
|
{
|
2005-01-27 20:06:10 -05:00
|
|
|
return (F_ARRAY*)UNTAG(tagged);
|
2004-07-16 02:26:21 -04:00
|
|
|
}
|
|
|
|
|
2005-06-16 18:50:49 -04:00
|
|
|
INLINE CELL array_size(CELL size)
|
|
|
|
{
|
|
|
|
return align8(sizeof(F_ARRAY) + size * CELLS);
|
|
|
|
}
|
|
|
|
|
2006-03-10 22:16:46 -05:00
|
|
|
F_ARRAY *allot_array(CELL type, F_FIXNUM capacity);
|
|
|
|
F_ARRAY *array(CELL type, F_FIXNUM capacity, CELL fill);
|
|
|
|
F_ARRAY *byte_array(F_FIXNUM size);
|
2005-04-09 18:30:46 -04:00
|
|
|
|
2006-05-15 00:03:55 -04:00
|
|
|
CELL make_array_2(CELL v1, CELL v2);
|
|
|
|
CELL make_array_4(CELL v1, CELL v2, CELL v3, CELL v4);
|
|
|
|
|
2005-01-27 20:06:10 -05:00
|
|
|
void primitive_array(void);
|
2005-01-29 16:39:30 -05:00
|
|
|
void primitive_tuple(void);
|
2005-04-09 18:30:46 -04:00
|
|
|
void primitive_byte_array(void);
|
2006-05-16 16:50:51 -04:00
|
|
|
void primitive_quotation(void);
|
2005-04-09 18:30:46 -04:00
|
|
|
|
2006-05-15 00:03:55 -04:00
|
|
|
F_ARRAY *resize_array(F_ARRAY* array, F_FIXNUM capacity, CELL fill);
|
2005-06-10 16:08:00 -04:00
|
|
|
void primitive_resize_array(void);
|
2005-09-11 20:46:55 -04:00
|
|
|
void primitive_array_to_tuple(void);
|
|
|
|
void primitive_tuple_to_array(void);
|
2004-07-16 02:26:21 -04:00
|
|
|
|
2004-12-10 21:46:42 -05:00
|
|
|
#define AREF(array,index) ((CELL)(array) + sizeof(F_ARRAY) + (index) * CELLS)
|
2006-05-17 14:55:46 -04:00
|
|
|
#define UNAREF(array,ptr) (((CELL)(ptr)-(CELL)(array)-sizeof(F_ARRAY)) / CELLS)
|
2004-07-16 02:26:21 -04:00
|
|
|
|
2005-02-20 19:03:37 -05:00
|
|
|
INLINE CELL array_capacity(F_ARRAY* array)
|
|
|
|
{
|
|
|
|
return untag_fixnum_fast(array->capacity);
|
|
|
|
}
|
2004-07-16 02:26:21 -04:00
|
|
|
|
2004-12-10 21:46:42 -05:00
|
|
|
void fixup_array(F_ARRAY* array);
|
|
|
|
void collect_array(F_ARRAY* array);
|