#ifndef MEM_CTX_H
#define MEM_CTX_H

#include "mem_allocator.h"
#include "mem_arena.h"

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

typedef enum {
  CTX_DEST_BUFFER_MAIN,
  CTX_DEST_BUFFER_TEMP,

  COUNT_CTX_DEST_BUFFER,
} CTXDestBuffer;

Allocator wapp_mem_ctx_allocator(CTXDestBuffer buffer);
void wapp_mem_ctx_init(u64 main_buf_capacity, u64 temp_buf_capacity);
void *wapp_mem_ctx_alloc(CTXDestBuffer buffer, u64 size);
void *wapp_mem_ctx_alloc_aligned(CTXDestBuffer buffer, u64 size, u64 alignment);
void *wapp_mem_ctx_realloc(CTXDestBuffer buffer, void *ptr, u64 size);
void *wapp_mem_ctx_realloc_aligned(CTXDestBuffer buffer, void *ptr, u64 size,
                                   u64 alignment);
void wapp_mem_ctx_clear(CTXDestBuffer buffer);
void wapp_mem_ctx_free(void);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // !MEM_CTX_H