54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
|
|
// Generated Array block
|
|
|
|
function
|
|
Token_Array token_array_make(Arena*arena){
|
|
Token_Array result={
|
|
0};
|
|
result.arena=arena;
|
|
result.last=&result.first;
|
|
return result;
|
|
}
|
|
|
|
function
|
|
void token_array_push(Token_Array*array, Token*item){
|
|
if(array->len+1>4096){
|
|
assert(array->arena);
|
|
Token_Array_Block*block=arena_push_struct(array->arena, Token_Array_Block);
|
|
array->last=array->last->next=block;
|
|
array->len=0;
|
|
array->block+=1;
|
|
}
|
|
array->last->data[array->len++]=*item;
|
|
}
|
|
|
|
function
|
|
Token_Array_Iter token_array_iter(Token_Array*array){
|
|
return((Token_Array_Iter){
|
|
.total_len=array->len, .total_block=array->block, .block=&array->first, }
|
|
);
|
|
}
|
|
|
|
function
|
|
Token*token_array_iter_next(Token_Array_Iter*it){
|
|
if(it->iter_len+1>4096){
|
|
it->iter_len=0;
|
|
it->iter_block+=1;
|
|
it->block=it->block->next;
|
|
}
|
|
return it->block->data+it->iter_len++;
|
|
}
|
|
|
|
function
|
|
B32 token_array_iter_is_end(Token_Array_Iter*it){
|
|
B32 result=it->iter_len==it->total_len&&it->iter_block==it->total_block;
|
|
return result;
|
|
}
|
|
|
|
function
|
|
Token*token_array_iter_begin(Token_Array*array){
|
|
array->it=token_array_iter(array);
|
|
Token*result=token_array_iter_next(&array->it);
|
|
return result;
|
|
}
|