mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-05 07:08:45 +00:00
thread context scratch system; converge on transition idiom in sample code
This commit is contained in:
+23
-2
@@ -224,6 +224,12 @@
|
||||
# define MD_C_LINKAGE_END }
|
||||
#endif
|
||||
|
||||
#if MD_COMPILER_CL
|
||||
# define MD_THREAD_LOCAL __declspec(thread)
|
||||
#elif MD_COMPILER_GCC || MD_COMPILER_CLANG
|
||||
# define MD_THREAD_LOCAL __thread
|
||||
#endif
|
||||
|
||||
//~ Common defines
|
||||
|
||||
#define MD_FUNCTION
|
||||
@@ -260,6 +266,8 @@ union MD_IntPtr{
|
||||
void *ptr;
|
||||
};
|
||||
|
||||
typedef struct MD_Arena MD_Arena;
|
||||
|
||||
typedef enum MD_ArenaOperation{
|
||||
MD_ArenaOperation_GetPos,
|
||||
MD_ArenaOperation_GetCap,
|
||||
@@ -269,9 +277,8 @@ typedef enum MD_ArenaOperation{
|
||||
MD_ArenaOperation_SetAutoAlign,
|
||||
} MD_ArenaOperation;
|
||||
|
||||
typedef MD_IntPtr MD_ArenaFunc(struct MD_Arena *arena, MD_ArenaOperation op, MD_u64 v);
|
||||
typedef MD_IntPtr MD_ArenaFunc(MD_Arena *arena, MD_ArenaOperation op, MD_u64 v);
|
||||
|
||||
typedef struct MD_Arena MD_Arena;
|
||||
struct MD_Arena{
|
||||
MD_ArenaFunc *func;
|
||||
};
|
||||
@@ -284,6 +291,13 @@ struct MD_ArenaTemp{
|
||||
MD_u64 pos;
|
||||
};
|
||||
|
||||
//~ Thread Context
|
||||
|
||||
typedef struct MD_ThreadContext MD_ThreadContext;
|
||||
struct MD_ThreadContext{
|
||||
MD_Arena *scratch_pool[2];
|
||||
};
|
||||
|
||||
//~ Basic Unicode string types.
|
||||
|
||||
typedef struct MD_String8 MD_String8;
|
||||
@@ -703,6 +717,13 @@ sizeof(T)*(c)))
|
||||
MD_FUNCTION MD_Arena* MD_ArenaNew(MD_u64 cap);
|
||||
MD_FUNCTION void MD_ArenaRelease(MD_Arena *arena);
|
||||
|
||||
//~ Thread Context Functions
|
||||
|
||||
MD_FUNCTION void MD_ThreadInit(MD_ThreadContext *tctx_mem);
|
||||
MD_FUNCTION MD_ArenaTemp MD_GetScratch(MD_Arena **conflicts, MD_u32 count);
|
||||
|
||||
#define MD_ReleaseScratch(scratch) MD_ArenaEndTemp(scratch)
|
||||
|
||||
//~ Characters
|
||||
|
||||
MD_FUNCTION MD_b32 MD_CharIsAlpha(MD_u8 c);
|
||||
|
||||
Reference in New Issue
Block a user