thread context scratch system; converge on transition idiom in sample code

This commit is contained in:
Allen Webster
2021-07-21 16:03:39 -07:00
parent c6df111fb1
commit 37484ea0a6
15 changed files with 120 additions and 92 deletions
+23 -2
View File
@@ -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);