/*
 * 4coder app links base allocator
 */

// TOP

internal void
scratch_block__init(Scratch_Block *block, Arena *arena){
    block->temp = begin_temp(arena);
}

Scratch_Block::Scratch_Block(Temp_Memory t){
    this->temp = t;
}

Scratch_Block::Scratch_Block(Arena *arena){
    scratch_block__init(this, arena);
}

Scratch_Block::Scratch_Block(Application_Links *app){
    scratch_block__init(this, context_get_arena(app));
}

Scratch_Block::~Scratch_Block(){
    end_temp(this->temp);
}

Scratch_Block::operator Arena*(){
    return(this->temp.temp_memory_arena.arena);
}

void Scratch_Block::restore(void){
    end_temp(this->temp);
}

////////////////////////////////

internal Arena
make_arena_app_links(Application_Links *app, umem chunk_size, umem align){
    return(make_arena(context_get_base_allocator(app), chunk_size, align));
}

internal Arena
make_arena_app_links(Application_Links *app, umem chunk_size){
    return(make_arena_app_links(app, chunk_size, 8));
}

internal Arena
make_arena_app_links(Application_Links *app){
    return(make_arena_app_links(app, KB(16), 8));
}

// BOTTOM