开始设计
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#ifndef INCLUDED_C_ARENA_H
|
||||
#define INCLUDED_C_ARENA_H
|
||||
|
||||
#ifndef INCLUDED_C_BASE_H
|
||||
#include <c_Base.h>
|
||||
#endif /*INCLUDED_C_BASE_H*/
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
typedef struct {
|
||||
uint8_t* buf;
|
||||
c_size_t buf_len;
|
||||
c_size_t prev_offset;
|
||||
c_size_t curr_offset;
|
||||
}c_Arena_t;
|
||||
|
||||
typedef struct {
|
||||
c_Arena_t* arena;
|
||||
c_size_t prev_offset;
|
||||
c_size_t curr_offset;
|
||||
}c_ArenaTemp_t;
|
||||
|
||||
void c_Arena_Init(c_Arena_t* a, void* buf, c_size_t buf_len);
|
||||
|
||||
void *c_Arena_Alloc(c_Arena_t *a, c_size_t size);
|
||||
|
||||
void *c_Arena_Resize(c_Arena_t *a, void *old_memory, c_size_t old_size, c_size_t new_size);
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
C_STATIC_FORCE_INLINE
|
||||
void c_Arena_Destroy(c_Arena_t* a) {
|
||||
a->curr_offset = a->prev_offset = 0;
|
||||
}
|
||||
|
||||
C_STATIC_FORCE_INLINE
|
||||
void c_Arena_Free(c_Arena_t *a, void *ptr) {
|
||||
C_UNUSED(a);
|
||||
C_UNUSED(ptr);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
C_STATIC_FORCE_INLINE
|
||||
c_ArenaTemp_t c_ArenaTemp_Begin(c_Arena_t *a) {
|
||||
c_ArenaTemp_t temp;
|
||||
temp.arena = a;
|
||||
temp.prev_offset = a->prev_offset;
|
||||
temp.curr_offset = a->prev_offset;
|
||||
return temp;
|
||||
}
|
||||
|
||||
C_STATIC_FORCE_INLINE
|
||||
void c_ArenaTemp_End(c_ArenaTemp_t *a) {
|
||||
a->arena->curr_offset = a->curr_offset;
|
||||
a->arena->prev_offset = a->prev_offset;
|
||||
}
|
||||
|
||||
#endif /*INCLUDED_C_ARENA_H*/
|
||||
Reference in New Issue
Block a user