factor/native/array.h

49 lines
1.0 KiB
C
Raw Normal View History

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;
} 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);
}
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);
}
2005-11-04 22:50:26 -05:00
F_ARRAY* allot_array(CELL type, F_FIXNUM capacity);
F_ARRAY* array(CELL type, F_FIXNUM capacity, CELL fill);
2005-04-09 18:30:46 -04:00
2005-01-27 20:06:10 -05:00
void primitive_array(void);
void primitive_tuple(void);
2005-04-09 18:30:46 -04:00
void primitive_byte_array(void);
2005-11-04 22:50:26 -05: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);
void primitive_array_to_tuple(void);
void primitive_tuple_to_array(void);
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
INLINE CELL array_capacity(F_ARRAY* array)
{
return untag_fixnum_fast(array->capacity);
}
2004-07-16 02:26:21 -04:00
void fixup_array(F_ARRAY* array);
void collect_array(F_ARRAY* array);