41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
DEFINE_UNTAG(F_BYTE_ARRAY,BYTE_ARRAY_TYPE,byte_array)
 | 
						|
 | 
						|
INLINE CELL byte_array_capacity(F_BYTE_ARRAY *array)
 | 
						|
{
 | 
						|
	return untag_fixnum_fast(array->capacity);
 | 
						|
}
 | 
						|
 | 
						|
INLINE CELL byte_array_size(CELL size)
 | 
						|
{
 | 
						|
	return sizeof(F_BYTE_ARRAY) + size;
 | 
						|
}
 | 
						|
 | 
						|
F_BYTE_ARRAY *allot_byte_array(CELL size);
 | 
						|
F_BYTE_ARRAY *allot_byte_array_internal(CELL size);
 | 
						|
F_BYTE_ARRAY *reallot_byte_array(F_BYTE_ARRAY *array, CELL capacity);
 | 
						|
 | 
						|
void primitive_byte_array(void);
 | 
						|
void primitive_uninitialized_byte_array(void);
 | 
						|
void primitive_resize_byte_array(void);
 | 
						|
 | 
						|
/* Macros to simulate a byte vector in C */
 | 
						|
typedef struct {
 | 
						|
	CELL count;
 | 
						|
	CELL array;
 | 
						|
} F_GROWABLE_BYTE_ARRAY;
 | 
						|
 | 
						|
INLINE F_GROWABLE_BYTE_ARRAY make_growable_byte_array(void)
 | 
						|
{
 | 
						|
	F_GROWABLE_BYTE_ARRAY result;
 | 
						|
	result.count = 0;
 | 
						|
	result.array = tag_object(allot_byte_array(100));
 | 
						|
	return result;
 | 
						|
}
 | 
						|
 | 
						|
void growable_byte_array_append(F_GROWABLE_BYTE_ARRAY *result, void *elts, CELL len);
 | 
						|
 | 
						|
INLINE void growable_byte_array_trim(F_GROWABLE_BYTE_ARRAY *byte_array)
 | 
						|
{
 | 
						|
	byte_array->array = tag_object(reallot_byte_array(untag_object(byte_array->array),byte_array->count));
 | 
						|
}
 |