mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-07 08:08:48 +00:00
progress on compiler errors
This commit is contained in:
Vendored
+8
-1
@@ -76,7 +76,14 @@
|
|||||||
"push_ignores.inline.h": "c",
|
"push_ignores.inline.h": "c",
|
||||||
"list": "c",
|
"list": "c",
|
||||||
"xhash": "c",
|
"xhash": "c",
|
||||||
"xtree": "c"
|
"xtree": "c",
|
||||||
|
"os_resolve.h": "c",
|
||||||
|
"os_win32_includes.h": "c",
|
||||||
|
"os_linux_includes.h": "c",
|
||||||
|
"metadesk.h": "c",
|
||||||
|
"mdesk.h": "c",
|
||||||
|
"text.h": "c",
|
||||||
|
"forward_list": "c"
|
||||||
},
|
},
|
||||||
"workbench.colorCustomizations": {
|
"workbench.colorCustomizations": {
|
||||||
"activityBar.activeBackground": "#713fb8",
|
"activityBar.activeBackground": "#713fb8",
|
||||||
|
|||||||
+6
-3
@@ -1,5 +1,6 @@
|
|||||||
# TODO(Ed): Need to eventually utilize the original build scripts
|
# TODO(Ed): Need to eventually utilize the original build scripts
|
||||||
# For now just using something I'm used to for getting the library working..
|
# For now just using something I'm used to for getting the library working..
|
||||||
|
clear-host
|
||||||
|
|
||||||
$misc = join-path $PSScriptRoot 'helpers/misc.ps1'
|
$misc = join-path $PSScriptRoot 'helpers/misc.ps1'
|
||||||
. $misc
|
. $misc
|
||||||
@@ -102,7 +103,9 @@ if ($code_sanity)
|
|||||||
write-host "Building code/metadesk.c (sanity compile) with $vendor"
|
write-host "Building code/metadesk.c (sanity compile) with $vendor"
|
||||||
|
|
||||||
$compiler_args = @()
|
$compiler_args = @()
|
||||||
# $compiler_args +=
|
$compiler_args += $flag_all_c
|
||||||
|
$compiler_args += $flag_updated_cpp_macro
|
||||||
|
$compiler_args += $flag_c11
|
||||||
|
|
||||||
$linker_args = @()
|
$linker_args = @()
|
||||||
$linker_args += $flag_link_win_subsystem_console
|
$linker_args += $flag_link_win_subsystem_console
|
||||||
@@ -110,8 +113,8 @@ if ($code_sanity)
|
|||||||
$path_base = join-path $path_code base
|
$path_base = join-path $path_code base
|
||||||
|
|
||||||
$includes = @( $path_base )
|
$includes = @( $path_base )
|
||||||
$unit = join-path $path_base 'base.c'
|
$unit = join-path $path_code 'metadesk.c'
|
||||||
$executable = join-path $path_build 'base.lib'
|
$executable = join-path $path_build 'metadesk.lib'
|
||||||
|
|
||||||
$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable
|
$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -35,7 +35,7 @@ arena_alloc_(ArenaParams* params)
|
|||||||
//- rjf: arena push/pop core functions
|
//- rjf: arena push/pop core functions
|
||||||
|
|
||||||
void*
|
void*
|
||||||
arena_push(Arena *arena, U64 size, U64 align)
|
arena_push(Arena *arena, SSIZE size, SSIZE align)
|
||||||
{
|
{
|
||||||
SPTR const header_size = align_pow2(size_of(Arena), MD_DEFAULT_MEMORY_ALIGNMENT);
|
SPTR const header_size = align_pow2(size_of(Arena), MD_DEFAULT_MEMORY_ALIGNMENT);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -74,8 +74,8 @@ arena_allocator(Arena* arena) {
|
|||||||
|
|
||||||
//- rjf: arena creation/destruction
|
//- rjf: arena creation/destruction
|
||||||
|
|
||||||
MD_API Arena* arena__alloc(ArenaParams* params);
|
MD_API Arena* arena__alloc(ArenaParams params);
|
||||||
#define arena_alloc(...) arena__alloc( &(ArenaParams){ __VA_ARGS__ } )
|
#define arena_alloc(...) arena__alloc( (ArenaParams){ __VA_ARGS__ } )
|
||||||
|
|
||||||
void arena_release(Arena *arena);
|
void arena_release(Arena *arena);
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
|
||||||
# include "base.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef MARKUP_LAYER_COLOR
|
|
||||||
#define MARKUP_LAYER_COLOR 0.20f, 0.60f, 0.80f
|
|
||||||
|
|
||||||
#include "base.h"
|
|
||||||
|
|
||||||
#include "platform.c"
|
|
||||||
|
|
||||||
MD_NS_BEGIN
|
|
||||||
|
|
||||||
#include "debug.c"
|
|
||||||
#include "memory_substrate.c"
|
|
||||||
#include "arena.c"
|
|
||||||
#include "strings.c"
|
|
||||||
#include "text.c"
|
|
||||||
#include "thread_context.c"
|
|
||||||
#include "command_line.c"
|
|
||||||
#include "logger.c"
|
|
||||||
#include "entry_point.c"
|
|
||||||
#include "time.c"
|
|
||||||
|
|
||||||
MD_NS_END
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
|
||||||
# pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "context_cracking.h"
|
|
||||||
#include "platform.h"
|
|
||||||
#include "linkage.h"
|
|
||||||
#include "macros.h"
|
|
||||||
#include "generic_macros.h"
|
|
||||||
#include "profiling.h"
|
|
||||||
#include "namespace.h"
|
|
||||||
|
|
||||||
MD_NS_BEGIN
|
|
||||||
|
|
||||||
#include "base_types.h"
|
|
||||||
#include "ring.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "memory.h"
|
|
||||||
#include "memory_substrate.h"
|
|
||||||
#include "arena.h"
|
|
||||||
#include "space.h"
|
|
||||||
#include "math.h"
|
|
||||||
#include "sort.h"
|
|
||||||
#include "toolchain.h"
|
|
||||||
#include "strings.h"
|
|
||||||
#include "text.h"
|
|
||||||
#include "thread_context.h"
|
|
||||||
#include "command_line.h"
|
|
||||||
#include "markup.h"
|
|
||||||
#include "logger.h"
|
|
||||||
#include "entry_point.h"
|
|
||||||
#include "time.h"
|
|
||||||
#include "file.h"
|
|
||||||
|
|
||||||
MD_NS_END
|
|
||||||
+12
-2
@@ -9,9 +9,9 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Globals/Thread-Locals
|
//~ rjf: Globals/Thread-Locals
|
||||||
|
|
||||||
MD_API_C thread_static Log *log_active;
|
MD_API_C thread_static Log* log_active;
|
||||||
#if !BUILD_SUPPLEMENTARY_UNIT
|
#if !BUILD_SUPPLEMENTARY_UNIT
|
||||||
MD_API_C thread_static Log *log_active = 0;
|
MD_API_C thread_static Log* log_active = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -54,6 +54,16 @@ log_msgf(LogMsgKind kind, char *fmt, ...) {
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Log Scopes
|
//~ rjf: Log Scopes
|
||||||
|
|
||||||
|
void
|
||||||
|
log_scope_begin(void) {
|
||||||
|
if (log_active != 0) {
|
||||||
|
U64 pos = arena_pos(log_active->arena);
|
||||||
|
LogScope* scope = push_array(log_active->arena, LogScope, 1);
|
||||||
|
scope->pos = pos;
|
||||||
|
sll_stack_push(log_active->top_scope, scope);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LogScopeResult
|
LogScopeResult
|
||||||
log_scope_end(Arena *arena)
|
log_scope_end(Arena *arena)
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-12
@@ -48,7 +48,7 @@ struct Log
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Log Creation/Selection
|
//~ rjf: Log Creation/Selection
|
||||||
|
|
||||||
Log* log_alloc(AllocatorInfo ainfo);
|
Log* log_alloc(AllocatorInfo ainfo, U64 arena_block_size);
|
||||||
void log_release(Log* log);
|
void log_release(Log* log);
|
||||||
MD_API void log_select (Log* log);
|
MD_API void log_select (Log* log);
|
||||||
|
|
||||||
@@ -82,15 +82,5 @@ MD_API void log_msgf(LogMsgKind kind, char* fmt, ...);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Log Scopes
|
//~ rjf: Log Scopes
|
||||||
|
|
||||||
void log_scope_begin(void);
|
MD_API void log_scope_begin(void);
|
||||||
MD_API LogScopeResult log_scope_end(Arena* arena);
|
MD_API LogScopeResult log_scope_end(Arena* arena);
|
||||||
|
|
||||||
inline void
|
|
||||||
log_scope_begin(void) {
|
|
||||||
if (log_active != 0) {
|
|
||||||
U64 pos = arena_pos(log_active->arena);
|
|
||||||
LogScope* scope = push_array(log_active->arena, LogScope, 1);
|
|
||||||
scope->pos = pos;
|
|
||||||
sll_stack_push(log_active->top_scope, scope);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -144,3 +144,38 @@
|
|||||||
#ifndef each_non_zero_enum_val
|
#ifndef each_non_zero_enum_val
|
||||||
#define each_non_zero_enum_val(type, it) type it = (type) 1; it < type ## _COUNT; it = (type)( it + 1 )
|
#define each_non_zero_enum_val(type, it) type it = (type) 1; it < type ## _COUNT; it = (type)( it + 1 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef stringify
|
||||||
|
#define stringify_(S) #S
|
||||||
|
#define stringify(S) stringify_(S)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef glue
|
||||||
|
#define glue_(A,B) A ## B
|
||||||
|
#define glue(A,B) glue_(A,B)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define src_line_str stringify(__LINE__)
|
||||||
|
|
||||||
|
#ifndef do_once
|
||||||
|
#define do_once() \
|
||||||
|
local_persist int __do_once_counter_##src_line_str = 0; \
|
||||||
|
for(; __do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1 ) \
|
||||||
|
|
||||||
|
#define do_once_defer( expression ) \
|
||||||
|
local_persist int __do_once_counter_##src_line_str = 0; \
|
||||||
|
for(;__do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1, (expression)) \
|
||||||
|
|
||||||
|
#define do_once_start \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
local_persist \
|
||||||
|
bool done = false; \
|
||||||
|
if ( done ) \
|
||||||
|
break; \
|
||||||
|
done = true;
|
||||||
|
|
||||||
|
#define do_once_end \
|
||||||
|
} \
|
||||||
|
while(0);
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
|
# pragma once
|
||||||
|
# include "markup.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline void
|
||||||
|
set_thread_name(String8 string) {
|
||||||
|
prof_thread_name("%.*s", str8_varg(string));
|
||||||
|
os_set_thread_name(string);
|
||||||
|
}
|
||||||
+1
-5
@@ -7,11 +7,7 @@
|
|||||||
// Copyright (c) 2024 Epic Games Tools
|
// Copyright (c) 2024 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
inline void
|
MD_API void set_thread_name(String8 string);
|
||||||
set_thread_name(String8 string) {
|
|
||||||
prof_thread_name("%.*s", str8_varg(string));
|
|
||||||
os_set_thread_name(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
set_thread_namef(char *fmt, ...)
|
set_thread_namef(char *fmt, ...)
|
||||||
|
|||||||
@@ -737,16 +737,6 @@ sll__queue_pop_nz(void* nil, void** f, void* f_next, void** l)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Misc. Helper Macros
|
//~ rjf: Misc. Helper Macros
|
||||||
|
|
||||||
#ifndef stringify
|
|
||||||
#define stringify_(S) #S
|
|
||||||
#define stringify(S) stringify_(S)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef glue
|
|
||||||
#define glue_(A,B) A ## B
|
|
||||||
#define glue(A,B) glue_(A,B)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef array_count
|
#ifndef array_count
|
||||||
#define array_count(a) (sizeof(a) / sizeof((a)[0]))
|
#define array_count(a) (sizeof(a) / sizeof((a)[0]))
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ heap_allocator_proc( void* allocator_data, AllocatorMode mode, SSIZE size, SSIZE
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
VArena
|
VArena*
|
||||||
varena__alloc(VArenaParams params)
|
varena__alloc(VArenaParams params)
|
||||||
{
|
{
|
||||||
if (params.reserve_size == 0) {
|
if (params.reserve_size == 0) {
|
||||||
@@ -294,7 +294,7 @@ varena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE requested_
|
|||||||
}
|
}
|
||||||
|
|
||||||
allocated_mem = rcast(void*, current_offset + size_to_allocate);
|
allocated_mem = rcast(void*, current_offset + size_to_allocate);
|
||||||
vm->commit_used += size_to_allocate
|
vm->commit_used += size_to_allocate;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -354,7 +354,7 @@ varena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE requested_
|
|||||||
}
|
}
|
||||||
|
|
||||||
allocated_mem = old_memory;
|
allocated_mem = old_memory;
|
||||||
vm->commit_used += size_to_allocate
|
vm->commit_used += size_to_allocate;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -390,7 +390,7 @@ farena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE size, SSIZ
|
|||||||
{
|
{
|
||||||
case AllocatorMode_Alloc:
|
case AllocatorMode_Alloc:
|
||||||
{
|
{
|
||||||
UPTR end = arena->slice.data + arena->used;
|
SPTR end = scast(SPTR, arena->slice.data) + arena->used;
|
||||||
SSIZE total_size = align_pow2(size, alignment);
|
SSIZE total_size = align_pow2(size, alignment);
|
||||||
|
|
||||||
if (arena->used + total_size > arena->slice.len ) {
|
if (arena->used + total_size > arena->slice.len ) {
|
||||||
@@ -398,7 +398,7 @@ farena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE size, SSIZ
|
|||||||
return allocated_mem;
|
return allocated_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
allocated_mem = end;
|
allocated_mem = scast(void*, end);
|
||||||
arena->used += total_size;
|
arena->used += total_size;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ struct VArena
|
|||||||
MD_API VArena* varena__alloc(VArenaParams params PARAM_DEFAULT);
|
MD_API VArena* varena__alloc(VArenaParams params PARAM_DEFAULT);
|
||||||
#define varena_alloc(...) varena__alloc( (VArenaParams){__VA_ARGS__} )
|
#define varena_alloc(...) varena__alloc( (VArenaParams){__VA_ARGS__} )
|
||||||
|
|
||||||
MD_API void varena_commit (VArena vm, SSIZE commit_size);
|
MD_API void varena_commit (VArena* vm, SSIZE commit_size);
|
||||||
MD_API VArenaParams varena_release (VArena vm);
|
MD_API void varena_release(VArena* vm);
|
||||||
|
|
||||||
MD_API void* varena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE size, SSIZE alignment, void* old_memory, SSIZE old_size, U64 flags);
|
MD_API void* varena_allocator_proc(void* allocator_data, AllocatorMode mode, SSIZE size, SSIZE alignment, void* old_memory, SSIZE old_size, U64 flags);
|
||||||
|
|
||||||
|
|||||||
+31
-31
@@ -612,6 +612,32 @@ str8_list_concat_in_place(String8List* list, String8List* to_push) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String8Node*
|
||||||
|
str8_list_alloc_aligner(AllocatorInfo ainfo, String8List* list, U64 min, U64 align) {
|
||||||
|
String8Node* node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||||
|
U64 new_size = list->total_size + min;
|
||||||
|
U64 increase_size = 0;
|
||||||
|
|
||||||
|
if (align > 1) {
|
||||||
|
// NOTE(allen): assert is power of 2
|
||||||
|
assert(((align - 1) & align) == 0);
|
||||||
|
U64 mask = align - 1;
|
||||||
|
new_size += mask;
|
||||||
|
new_size &= (~mask);
|
||||||
|
increase_size = new_size - list->total_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
local_persist const U8 zeroes_buffer[64] = {0};
|
||||||
|
assert(increase_size <= array_count(zeroes_buffer));
|
||||||
|
|
||||||
|
sll_queue_push(list->first, list->last, node);
|
||||||
|
list->node_count += 1;
|
||||||
|
list->total_size = new_size;
|
||||||
|
node->string.str = (U8*)zeroes_buffer;
|
||||||
|
node->string.size = increase_size;
|
||||||
|
return(node);
|
||||||
|
}
|
||||||
|
|
||||||
String8Node*
|
String8Node*
|
||||||
str8_list_push_aligner(Arena* arena, String8List* list, U64 min, U64 align)
|
str8_list_push_aligner(Arena* arena, String8List* list, U64 min, U64 align)
|
||||||
{
|
{
|
||||||
@@ -639,36 +665,10 @@ str8_list_push_aligner(Arena* arena, String8List* list, U64 min, U64 align)
|
|||||||
node->string.size = increase_size;
|
node->string.size = increase_size;
|
||||||
return(node);
|
return(node);
|
||||||
#else
|
#else
|
||||||
return str8_list_aligner(arena_allocator(arena), list, min, align);
|
return str8_list_alloc_aligner(arena_allocator(arena), list, min, align);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
String8Node*
|
|
||||||
str8_list_aligner(AllocatorInfo ainfo, String8List* list, U64 min, U64 align) {
|
|
||||||
String8Node* node = alloc_array_no_zero(ainfo, String8Node, 1);
|
|
||||||
U64 new_size = list->total_size + min;
|
|
||||||
U64 increase_size = 0;
|
|
||||||
|
|
||||||
if (align > 1) {
|
|
||||||
// NOTE(allen): assert is power of 2
|
|
||||||
assert(((align - 1) & align) == 0);
|
|
||||||
U64 mask = align - 1;
|
|
||||||
new_size += mask;
|
|
||||||
new_size &= (~mask);
|
|
||||||
increase_size = new_size - list->total_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
local_persist const U8 zeroes_buffer[64] = {0};
|
|
||||||
assert(increase_size <= array_count(zeroes_buffer));
|
|
||||||
|
|
||||||
sll_queue_push(list->first, list->last, node);
|
|
||||||
list->node_count += 1;
|
|
||||||
list->total_size = new_size;
|
|
||||||
node->string.str = (U8*)zeroes_buffer;
|
|
||||||
node->string.size = increase_size;
|
|
||||||
return(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
String8List
|
String8List
|
||||||
str8_list_copy(Arena *arena, String8List *list) {
|
str8_list_copy(Arena *arena, String8List *list) {
|
||||||
#if MD_DONT_MAP_ANREA_TO_ALLOCATOR_IMPL
|
#if MD_DONT_MAP_ANREA_TO_ALLOCATOR_IMPL
|
||||||
@@ -1246,7 +1246,7 @@ str32_from_8(Arena *arena, String8 in){
|
|||||||
}
|
}
|
||||||
|
|
||||||
String8
|
String8
|
||||||
str8_from_16(AllocatorInfo ainfo, String16 in) {
|
str8_from_16_alloc(AllocatorInfo ainfo, String16 in) {
|
||||||
U64 cap = in.size * 3;
|
U64 cap = in.size * 3;
|
||||||
U8* str = alloc_array_no_zero(ainfo, U8, cap + 1);
|
U8* str = alloc_array_no_zero(ainfo, U8, cap + 1);
|
||||||
U16* ptr = in.str;
|
U16* ptr = in.str;
|
||||||
@@ -1263,7 +1263,7 @@ str8_from_16(AllocatorInfo ainfo, String16 in) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String16
|
String16
|
||||||
str16_from_8(AllocatorInfo ainfo, String8 in) {
|
str16_from_8_alloc(AllocatorInfo ainfo, String8 in) {
|
||||||
U64 cap = in.size * 2;
|
U64 cap = in.size * 2;
|
||||||
U16* str = alloc_array_no_zero(ainfo, U16, cap + 1);
|
U16* str = alloc_array_no_zero(ainfo, U16, cap + 1);
|
||||||
U8* ptr = in.str;
|
U8* ptr = in.str;
|
||||||
@@ -1280,7 +1280,7 @@ str16_from_8(AllocatorInfo ainfo, String8 in) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String8
|
String8
|
||||||
str8_from_32(AllocatorInfo ainfo, String32 in){
|
str8_from_32_alloc(AllocatorInfo ainfo, String32 in){
|
||||||
U64 cap = in.size * 4;
|
U64 cap = in.size * 4;
|
||||||
U8* str = alloc_array_no_zero(ainfo, U8, cap + 1);
|
U8* str = alloc_array_no_zero(ainfo, U8, cap + 1);
|
||||||
U32* ptr = in.str;
|
U32* ptr = in.str;
|
||||||
@@ -1295,7 +1295,7 @@ str8_from_32(AllocatorInfo ainfo, String32 in){
|
|||||||
}
|
}
|
||||||
|
|
||||||
String32
|
String32
|
||||||
str32_from_8(AllocatorInfo ainfo, String8 in){
|
str32_from_8_alloc(AllocatorInfo ainfo, String8 in){
|
||||||
U64 cap = in.size;
|
U64 cap = in.size;
|
||||||
U32* str = alloc_array_no_zero(ainfo, U32, cap + 1);
|
U32* str = alloc_array_no_zero(ainfo, U32, cap + 1);
|
||||||
U8* ptr = in.str;
|
U8* ptr = in.str;
|
||||||
|
|||||||
+137
-130
@@ -154,7 +154,7 @@ struct FuzzyMatchRangeList
|
|||||||
|
|
||||||
inline U8
|
inline U8
|
||||||
integer_symbols(U8 value) {
|
integer_symbols(U8 value) {
|
||||||
read_only local_persist thread_local
|
read_only local_persist
|
||||||
U8 lookup_table[16] = {
|
U8 lookup_table[16] = {
|
||||||
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
|
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
|
||||||
};
|
};
|
||||||
@@ -163,7 +163,7 @@ integer_symbols(U8 value) {
|
|||||||
|
|
||||||
inline U8
|
inline U8
|
||||||
base64(U8 value) {
|
base64(U8 value) {
|
||||||
read_only local_persist thread_local
|
read_only local_persist
|
||||||
U8 lookup_table[64] = {
|
U8 lookup_table[64] = {
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||||||
@@ -177,7 +177,7 @@ base64(U8 value) {
|
|||||||
|
|
||||||
inline U8
|
inline U8
|
||||||
base64_reverse(U8 value) {
|
base64_reverse(U8 value) {
|
||||||
read_only local_persist thread_local
|
read_only local_persist
|
||||||
U8 lookup_table[128] = {
|
U8 lookup_table[128] = {
|
||||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||||
@@ -194,7 +194,7 @@ base64_reverse(U8 value) {
|
|||||||
// NOTE(allen): Includes reverses for uppercase and lowercase hex.
|
// NOTE(allen): Includes reverses for uppercase and lowercase hex.
|
||||||
inline U8
|
inline U8
|
||||||
integer_symbol_reverse(U8 value) {
|
integer_symbol_reverse(U8 value) {
|
||||||
read_only local_persist thread_local
|
read_only local_persist
|
||||||
lookup_table[128] = {
|
lookup_table[128] = {
|
||||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||||
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||||
@@ -311,33 +311,34 @@ str8_cstring_capped_reverse(void* raw_start, void* raw_cap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: String Stylization
|
//~ rjf: String Formatting & Copying
|
||||||
|
|
||||||
inline String8 upper_from_str8 (Arena* arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_upper(string.str[idx]); } return string; }
|
MD_API String8 push_str8_cat (Arena* arena, String8 s1, String8 s2);
|
||||||
inline String8 lower_from_str8 (Arena* arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_lower(string.str[idx]); } return string; }
|
MD_API String8 push_str8_copy(Arena* arena, String8 s);
|
||||||
inline String8 backslashed_from_str8(Arena *arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_is_slash(string.str[idx]) ? '\\' : string.str[idx]; } return string; }
|
MD_API String8 push_str8fv (Arena* arena, char* fmt, va_list args);
|
||||||
|
String8 push_str8f (Arena* arena, char* fmt, ...);
|
||||||
|
|
||||||
inline String8 upper_from_str8_alloc (AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_upper(string.str[idx]); } return string; }
|
MD_API String8 alloc_str8_cat (AllocatorInfo ainfo, String8 s1, String8 s2);
|
||||||
inline String8 lower_from_str8_alloc (AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_lower(string.str[idx]); } return string; }
|
MD_API String8 alloc_str8_copy(AllocatorInfo ainfo, String8 s);
|
||||||
inline String8 backslashed_from_str8_alloc(AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_is_slash(string.str[idx]) ? '\\' : string.str[idx]; } return string; }
|
MD_API String8 alloc_str8fv (AllocatorInfo ainfo, char* fmt, va_list args);
|
||||||
|
String8 alloc_str8f (AllocatorInfo ainfo, char* fmt, ...);
|
||||||
|
|
||||||
////////////////////////////////
|
inline String8
|
||||||
//~ rjf: String Matching
|
push_str8f(Arena *arena, char *fmt, ...){
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
String8 result = push_str8fv(arena, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
#define str8_match_lit(a_lit, b, flags) str8_match(str8_lit(a_lit), (b), (flags))
|
inline String8
|
||||||
#define str8_match_cstr(a_cstr, b, flags) str8_match(str8_cstring(a_cstr), (b), (flags))
|
alloc_str8f(AllocatorInfo ainfo, char *fmt, ...){
|
||||||
#define str8_ends_with_lit(string, end_lit, flags) str8_ends_with((string), str8_lit(end_lit), (flags))
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
MD_API B32 str8_match (String8 a, String8 b, StringMatchFlags flags);
|
String8 result = alloc_str8fv(ainfo, fmt, args);
|
||||||
MD_API U64 str8_find_needle (String8 string, U64 start_pos, String8 needle, StringMatchFlags flags);
|
va_end(args);
|
||||||
MD_API U64 str8_find_needle_reverse(String8 string, U64 start_pos, String8 needle, StringMatchFlags flags);
|
return(result);
|
||||||
B32 str8_ends_with (String8 string, String8 end, StringMatchFlags flags);
|
|
||||||
|
|
||||||
inline B32
|
|
||||||
str8_ends_with(String8 string, String8 end, StringMatchFlags flags) {
|
|
||||||
String8 postfix = str8_postfix(string, end.size);
|
|
||||||
B32 is_match = str8_match(end, postfix, flags);
|
|
||||||
return is_match;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -390,34 +391,33 @@ str8_chop(String8 str, U64 amt){
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: String Formatting & Copying
|
//~ rjf: String Stylization
|
||||||
|
|
||||||
MD_API String8 push_str8_cat (Arena* arena, String8 s1, String8 s2);
|
inline String8 upper_from_str8 (Arena* arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_upper(string.str[idx]); } return string; }
|
||||||
MD_API String8 push_str8_copy(Arena* arena, String8 s);
|
inline String8 lower_from_str8 (Arena* arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_lower(string.str[idx]); } return string; }
|
||||||
MD_API String8 push_str8fv (Arena* arena, char* fmt, va_list args);
|
inline String8 backslashed_from_str8(Arena *arena, String8 string) { string = push_str8_copy(arena, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_is_slash(string.str[idx]) ? '\\' : string.str[idx]; } return string; }
|
||||||
String8 push_str8f (Arena* arena, char* fmt, ...);
|
|
||||||
|
|
||||||
MD_API String8 alloc_str8_cat (AllocatorInfo ainfo, String8 s1, String8 s2);
|
inline String8 upper_from_str8_alloc (AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_upper(string.str[idx]); } return string; }
|
||||||
MD_API String8 alloc_str8_copy(AllocatorInfo ainfo, String8 s);
|
inline String8 lower_from_str8_alloc (AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_to_lower(string.str[idx]); } return string; }
|
||||||
MD_API String8 alloc_str8fv (AllocatorInfo ainfo, char* fmt, va_list args);
|
inline String8 backslashed_from_str8_alloc(AllocatorInfo ainfo, String8 string) { string = alloc_str8_copy(ainfo, string); for(U64 idx = 0; idx < string.size; idx += 1) { string.str[idx] = char_is_slash(string.str[idx]) ? '\\' : string.str[idx]; } return string; }
|
||||||
String8 alloc_str8f (AllocatorInfo ainfo, char* fmt, ...);
|
|
||||||
|
|
||||||
inline String8
|
////////////////////////////////
|
||||||
push_str8f(Arena *arena, char *fmt, ...){
|
//~ rjf: String Matching
|
||||||
va_list args;
|
|
||||||
va_start(args, fmt);
|
|
||||||
String8 result = push_str8fv(arena, fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline String8
|
#define str8_match_lit(a_lit, b, flags) str8_match(str8_lit(a_lit), (b), (flags))
|
||||||
alloc_str8f(AllocatorInfo ainfo, char *fmt, ...){
|
#define str8_match_cstr(a_cstr, b, flags) str8_match(str8_cstring(a_cstr), (b), (flags))
|
||||||
va_list args;
|
#define str8_ends_with_lit(string, end_lit, flags) str8_ends_with((string), str8_lit(end_lit), (flags))
|
||||||
va_start(args, fmt);
|
|
||||||
String8 result = alloc_str8fv(ainfo, fmt, args);
|
MD_API B32 str8_match (String8 a, String8 b, StringMatchFlags flags);
|
||||||
va_end(args);
|
MD_API U64 str8_find_needle (String8 string, U64 start_pos, String8 needle, StringMatchFlags flags);
|
||||||
return(result);
|
MD_API U64 str8_find_needle_reverse(String8 string, U64 start_pos, String8 needle, StringMatchFlags flags);
|
||||||
|
B32 str8_ends_with (String8 string, String8 end, StringMatchFlags flags);
|
||||||
|
|
||||||
|
inline B32
|
||||||
|
str8_ends_with(String8 string, String8 end, StringMatchFlags flags) {
|
||||||
|
String8 postfix = str8_postfix(string, end.size);
|
||||||
|
B32 is_match = str8_match(end, postfix, flags);
|
||||||
|
return is_match;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -699,7 +699,7 @@ str8_split_by_string_chars(Arena *arena, String8 string, String8 split_chars, St
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline String8List
|
inline String8List
|
||||||
str8_split_by_string_chars(AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags) {
|
str8_split_by_string_chars_alloc(AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags) {
|
||||||
String8List list = str8_split_alloc(ainfo, string, split_chars.str, split_chars.size, flags);
|
String8List list = str8_split_alloc(ainfo, string, split_chars.str, split_chars.size, flags);
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@@ -738,7 +738,7 @@ str8_list_from_flags(Arena* arena, String8List* list, U32 flags, String8* flag_s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return str8_list_from_flags_alloc(arena_allocator(arena), list, flags, flag_string_table, flag_string_count);
|
str8_list_from_flags_alloc(arena_allocator(arena), list, flags, flag_string_table, flag_string_count);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,6 +755,25 @@ str8_list_from_flags_alloc(AllocatorInfo ainfo, String8List* list, U32 flags, St
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf; String Arrays
|
//~ rjf; String Arrays
|
||||||
|
|
||||||
|
inline String8Array
|
||||||
|
str8_array_from_list_alloc(AllocatorInfo ainfo, String8List* list) {
|
||||||
|
String8Array array;
|
||||||
|
array.count = list->node_count;
|
||||||
|
array.v = alloc_array_no_zero(ainfo, String8, array.count);
|
||||||
|
U64 idx = 0;
|
||||||
|
for(String8Node *n = list->first; n != 0; n = n->next, idx += 1) {
|
||||||
|
array.v[idx] = n->string;
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline String8Array
|
||||||
|
str8_array_reserve_alloc(AllocatorInfo ainfo, U64 count) {
|
||||||
|
String8Array arr;
|
||||||
|
arr.count = 0;
|
||||||
|
arr.v = alloc_array(ainfo, String8, count);
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
inline String8Array
|
inline String8Array
|
||||||
str8_array_from_list(Arena* arena, String8List* list) {
|
str8_array_from_list(Arena* arena, String8List* list) {
|
||||||
@@ -784,26 +803,6 @@ str8_array_reserve(Arena *arena, U64 count) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String8Array
|
|
||||||
str8_array_from_list_alloc(AllocatorInfo ainfo, String8List* list) {
|
|
||||||
String8Array array;
|
|
||||||
array.count = list->node_count;
|
|
||||||
array.v = alloc_array_no_zero(ainfo, String8, array.count);
|
|
||||||
U64 idx = 0;
|
|
||||||
for(String8Node *n = list->first; n != 0; n = n->next, idx += 1) {
|
|
||||||
array.v[idx] = n->string;
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline String8Array
|
|
||||||
str8_array_reserve_alloc(AllocatorInfo ainfo, U64 count) {
|
|
||||||
String8Array arr;
|
|
||||||
arr.count = 0;
|
|
||||||
arr.v = alloc_array(ainfo, String8, count);
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: String Path Helpers
|
//~ rjf: String Path Helpers
|
||||||
|
|
||||||
@@ -825,7 +824,7 @@ MD_API String8 str8_path_list_join_by_style_alloc (AllocatorInfo ainfo, Str
|
|||||||
inline U8
|
inline U8
|
||||||
utf8_class(U8 value)
|
utf8_class(U8 value)
|
||||||
{
|
{
|
||||||
read_only local_persist thread_local
|
read_only local_persist
|
||||||
U8 lookup_table[32] = {
|
U8 lookup_table[32] = {
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,3,3,4,5,
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,3,3,4,5,
|
||||||
};
|
};
|
||||||
@@ -937,7 +936,8 @@ string_from_architecture(Arch arch) {
|
|||||||
//~ rjf: Time Types -> String
|
//~ rjf: Time Types -> String
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
string_from_week_day(WeekDay week_day) {
|
string_from_week_day(WeekDay week_day)
|
||||||
|
{
|
||||||
local_persist String8 strings[] = {
|
local_persist String8 strings[] = {
|
||||||
str8_lit_comp("Sun"),
|
str8_lit_comp("Sun"),
|
||||||
str8_lit_comp("Mon"),
|
str8_lit_comp("Mon"),
|
||||||
@@ -955,7 +955,8 @@ string_from_week_day(WeekDay week_day) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
string_from_month(Month month) {
|
string_from_month(Month month)
|
||||||
|
{
|
||||||
local_persist String8 strings[] = {
|
local_persist String8 strings[] = {
|
||||||
str8_lit_comp("Jan"),
|
str8_lit_comp("Jan"),
|
||||||
str8_lit_comp("Feb"),
|
str8_lit_comp("Feb"),
|
||||||
@@ -1064,6 +1065,61 @@ str8_serial_write_to_dst(String8List* srl, void* out) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void str8_serial_begin_alloc (AllocatorInfo ainfo, String8List* srl);
|
||||||
|
String8 str8_serial_end_alloc (AllocatorInfo ainfo, String8List* srl);
|
||||||
|
MD_API U64 str8_serial_alloc_align (AllocatorInfo ainfo, String8List* srl, U64 align);
|
||||||
|
MD_API void* str8_serial_alloc_size (AllocatorInfo ainfo, String8List* srl, U64 size);
|
||||||
|
void* str8_serial_alloc_data (AllocatorInfo ainfo, String8List* srl, void* data, U64 size);
|
||||||
|
void str8_serial_alloc_data_list(AllocatorInfo ainfo, String8List* srl, String8Node* first);
|
||||||
|
MD_API void str8_serial_alloc_u64 (AllocatorInfo ainfo, String8List* srl, U64 x);
|
||||||
|
MD_API void str8_serial_alloc_u32 (AllocatorInfo ainfo, String8List* srl, U32 x);
|
||||||
|
void str8_serial_alloc_u16 (AllocatorInfo ainfo, String8List* srl, U16 x);
|
||||||
|
void str8_serial_alloc_u8 (AllocatorInfo ainfo, String8List* srl, U8 x);
|
||||||
|
void str8_serial_alloc_cstr (AllocatorInfo ainfo, String8List* srl, String8 str);
|
||||||
|
void str8_serial_alloc_string (AllocatorInfo ainfo, String8List* srl, String8 str);
|
||||||
|
|
||||||
|
inline void
|
||||||
|
str8_serial_begin_alloc(AllocatorInfo ainfo, String8List* srl) {
|
||||||
|
String8Node* node = alloc_array(ainfo, String8Node, 1);
|
||||||
|
node->string.str = alloc_array_no_zero(ainfo, U8, 0);
|
||||||
|
srl->first = srl->last = node;
|
||||||
|
srl->node_count = 1;
|
||||||
|
srl->total_size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline String8
|
||||||
|
str8_serial_end_alloc(AllocatorInfo ainfo, String8List* srl) {
|
||||||
|
U64 size = srl->total_size;
|
||||||
|
U8* out = alloc_array_no_zero(ainfo, U8, size);
|
||||||
|
str8_serial_write_to_dst(srl, out);
|
||||||
|
String8 result = str8(out, size);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
str8_serial_alloc_data(AllocatorInfo ainfo, String8List* srl, void* data, U64 size){
|
||||||
|
void* result = str8_serial_alloc_size(ainfo, srl, size);
|
||||||
|
if(result != 0) {
|
||||||
|
memory_copy(result, data, size);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
str8_serial_alloc_data_list(AllocatorInfo ainfo, String8List* srl, String8Node* first){
|
||||||
|
for (String8Node* node = first; node != 0; node = node->next) {
|
||||||
|
str8_serial_alloc_data(ainfo, srl, node->string.str, node->string.size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void str8_serial_alloc_u16(AllocatorInfo ainfo, String8List* srl, U16 x) { str8_serial_alloc_data(ainfo, srl, &x, sizeof(x)); }
|
||||||
|
inline void str8_serial_alloc_u8 (AllocatorInfo ainfo, String8List* srl, U8 x) { str8_serial_alloc_data(ainfo, srl, &x, sizeof(x)); }
|
||||||
|
|
||||||
|
inline void str8_serial_alloc_cstr (AllocatorInfo ainfo, String8List* srl, String8 str) { str8_serial_alloc_data(ainfo, srl, str.str, str.size); str8_serial_alloc_u8(ainfo, srl, 0); }
|
||||||
|
inline void str8_serial_alloc_string(AllocatorInfo ainfo, String8List* srl, String8 str) { str8_serial_alloc_data(ainfo, srl, str.str, str.size); }
|
||||||
|
|
||||||
|
|
||||||
void str8_serial_begin (Arena* arena, String8List* srl);
|
void str8_serial_begin (Arena* arena, String8List* srl);
|
||||||
String8 str8_serial_end (Arena* arena, String8List* srl);
|
String8 str8_serial_end (Arena* arena, String8List* srl);
|
||||||
MD_API U64 str8_serial_push_align (Arena* arena, String8List* srl, U64 align);
|
MD_API U64 str8_serial_push_align (Arena* arena, String8List* srl, U64 align);
|
||||||
@@ -1078,12 +1134,16 @@ MD_API void str8_serial_push_u32 (Arena* arena, String8List* srl, U32 x)
|
|||||||
void str8_serial_push_string (Arena* arena, String8List* srl, String8 str);
|
void str8_serial_push_string (Arena* arena, String8List* srl, String8 str);
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
str8_serial_begin(Arena* arena, String8List* srl){
|
str8_serial_begin(Arena* arena, String8List* srl) {
|
||||||
|
#if MD_DONT_MAP_ARENA_TO_ALLOCATOR_IMPL
|
||||||
String8Node* node = push_array(arena, String8Node, 1);
|
String8Node* node = push_array(arena, String8Node, 1);
|
||||||
node->string.str = push_array_no_zero(arena, U8, 0);
|
node->string.str = push_array_no_zero(arena, U8, 0);
|
||||||
srl->first = srl->last = node;
|
srl->first = srl->last = node;
|
||||||
srl->node_count = 1;
|
srl->node_count = 1;
|
||||||
srl->total_size = 0;
|
srl->total_size = 0;
|
||||||
|
#else
|
||||||
|
str8_serial_begin_alloc(arena_allocator(arena), srl);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
@@ -1117,59 +1177,6 @@ inline void str8_serial_push_u8 (Arena* arena, String8List* srl, U8 x) { str8_s
|
|||||||
inline void str8_serial_push_cstr (Arena* arena, String8List* srl, String8 str) { str8_serial_push_data(arena, srl, str.str, str.size); str8_serial_push_u8(arena, srl, 0); }
|
inline void str8_serial_push_cstr (Arena* arena, String8List* srl, String8 str) { str8_serial_push_data(arena, srl, str.str, str.size); str8_serial_push_u8(arena, srl, 0); }
|
||||||
inline void str8_serial_push_string(Arena* arena, String8List* srl, String8 str) { str8_serial_push_data(arena, srl, str.str, str.size); }
|
inline void str8_serial_push_string(Arena* arena, String8List* srl, String8 str) { str8_serial_push_data(arena, srl, str.str, str.size); }
|
||||||
|
|
||||||
void str8_serial_begin_alloc (AllocatorInfo ainfo, String8List* srl);
|
|
||||||
String8 str8_serial_end_alloc (AllocatorInfo ainfo, String8List* srl);
|
|
||||||
MD_API U64 str8_serial_alloc_align (AllocatorInfo ainfo, String8List* srl, U64 align);
|
|
||||||
MD_API void* str8_serial_alloc_size (AllocatorInfo ainfo, String8List* srl, U64 size);
|
|
||||||
void* str8_serial_alloc_data (AllocatorInfo ainfo, String8List* srl, void* data, U64 size);
|
|
||||||
void str8_serial_alloc_data_list(AllocatorInfo ainfo, String8List* srl, String8Node* first);
|
|
||||||
MD_API void str8_serial_alloc_u64 (AllocatorInfo ainfo, String8List* srl, U64 x);
|
|
||||||
MD_API void str8_serial_alloc_u32 (AllocatorInfo ainfo, String8List* srl, U32 x);
|
|
||||||
void str8_serial_alloc_u16 (AllocatorInfo ainfo, String8List* srl, U16 x);
|
|
||||||
void str8_serial_alloc_u8 (AllocatorInfo ainfo, String8List* srl, U8 x);
|
|
||||||
void str8_serial_alloc_cstr (AllocatorInfo ainfo, String8List* srl, String8 str);
|
|
||||||
void str8_serial_alloc_string (AllocatorInfo ainfo, String8List* srl, String8 str);
|
|
||||||
|
|
||||||
inline void
|
|
||||||
str8_serial_begin(AllocatorInfo ainfo, String8List* srl) {
|
|
||||||
String8Node* node = alloc_array(ainfo, String8Node, 1);
|
|
||||||
node->string.str = alloc_array_no_zero(ainfo, U8, 0);
|
|
||||||
srl->first = srl->last = node;
|
|
||||||
srl->node_count = 1;
|
|
||||||
srl->total_size = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline String8
|
|
||||||
str8_serial_end(AllocatorInfo ainfo, String8List* srl) {
|
|
||||||
U64 size = srl->total_size;
|
|
||||||
U8* out = alloc_array_no_zero(ainfo, U8, size);
|
|
||||||
str8_serial_write_to_dst(srl, out);
|
|
||||||
String8 result = str8(out, size);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void*
|
|
||||||
str8_serial_push_data(AllocatorInfo ainfo, String8List* srl, void* data, U64 size){
|
|
||||||
void* result = str8_serial_alloc_size(ainfo, srl, size);
|
|
||||||
if(result != 0) {
|
|
||||||
memory_copy(result, data, size);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void
|
|
||||||
str8_serial_push_data_list(AllocatorInfo ainfo, String8List* srl, String8Node* first){
|
|
||||||
for (String8Node* node = first; node != 0; node = node->next) {
|
|
||||||
str8_serial_alloc_data(ainfo, srl, node->string.str, node->string.size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void str8_serial_alloc_u16(AllocatorInfo ainfo, String8List* srl, U16 x) { str8_serial_alloc_data(ainfo, srl, &x, sizeof(x)); }
|
|
||||||
inline void str8_serial_alloc_u8 (AllocatorInfo ainfo, String8List* srl, U8 x) { str8_serial_alloc_data(ainfo, srl, &x, sizeof(x)); }
|
|
||||||
|
|
||||||
inline void str8_serial_push_cstr (AllocatorInfo ainfo, String8List* srl, String8 str) { str8_serial_alloc_data(ainfo, srl, str.str, str.size); str8_serial_alloc_u8(ainfo, srl, 0); }
|
|
||||||
inline void str8_serial_push_string(AllocatorInfo ainfo, String8List* srl, String8 str) { str8_serial_alloc_data(ainfo, srl, str.str, str.size); }
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Deserialization Helpers
|
//~ rjf: Deserialization Helpers
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -6,7 +6,8 @@
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ allen: Time
|
//~ allen: Time
|
||||||
|
|
||||||
typedef enum WeekDay
|
typedef enum WeekDay WeekDay;
|
||||||
|
enum Weekday
|
||||||
{
|
{
|
||||||
WeekDay_Sun,
|
WeekDay_Sun,
|
||||||
WeekDay_Mon,
|
WeekDay_Mon,
|
||||||
@@ -16,10 +17,10 @@ typedef enum WeekDay
|
|||||||
WeekDay_Fri,
|
WeekDay_Fri,
|
||||||
WeekDay_Sat,
|
WeekDay_Sat,
|
||||||
WeekDay_COUNT,
|
WeekDay_COUNT,
|
||||||
}
|
};
|
||||||
WeekDay;
|
|
||||||
|
|
||||||
typedef enum Month
|
typedef enum Month Month;
|
||||||
|
enum Month
|
||||||
{
|
{
|
||||||
Month_Jan,
|
Month_Jan,
|
||||||
Month_Feb,
|
Month_Feb,
|
||||||
@@ -34,8 +35,7 @@ typedef enum Month
|
|||||||
Month_Nov,
|
Month_Nov,
|
||||||
Month_Dec,
|
Month_Dec,
|
||||||
Month_COUNT,
|
Month_COUNT,
|
||||||
}
|
};
|
||||||
Month;
|
|
||||||
|
|
||||||
typedef struct DateTime DateTime;
|
typedef struct DateTime DateTime;
|
||||||
struct DateTime
|
struct DateTime
|
||||||
|
|||||||
+3
-3
@@ -687,7 +687,7 @@ parse_from_text_tokens(Arena* arena, String8 filename, String8 text, TokenArray
|
|||||||
|
|
||||||
// TODO(Ed): Add opt-in support for comment awareness
|
// TODO(Ed): Add opt-in support for comment awareness
|
||||||
//- rjf: comments -> always no-op & inc
|
//- rjf: comments -> always no-op & inc
|
||||||
if (token->flags & TokenGroup_Comment) {
|
if (token->flags & TokenFlagGroup_Comment) {
|
||||||
token += 1;
|
token += 1;
|
||||||
goto end_consume;
|
goto end_consume;
|
||||||
// < // > <content> <unescaped newline>
|
// < // > <content> <unescaped newline>
|
||||||
@@ -763,7 +763,7 @@ parse_from_text_tokens(Arena* arena, String8 filename, String8 text, TokenArray
|
|||||||
if (mode_main_or_main_implict && found_tag)
|
if (mode_main_or_main_implict && found_tag)
|
||||||
{
|
{
|
||||||
// Token after should be label.
|
// Token after should be label.
|
||||||
if (token + 1 >= tokens_opl || !(token[1].flags & TokenGroup_Label))
|
if (token + 1 >= tokens_opl || !(token[1].flags & TokenFlagGroup_Label))
|
||||||
{
|
{
|
||||||
Node* error = push_node(arena, NodeKind_ErrorMarker, 0, token_string, token_string, token->range.min);
|
Node* error = push_node(arena, NodeKind_ErrorMarker, 0, token_string, token_string, token->range.min);
|
||||||
String8 error_string = str8_lit("Tag label expected after @ symbol.");
|
String8 error_string = str8_lit("Tag label expected after @ symbol.");
|
||||||
@@ -797,7 +797,7 @@ parse_from_text_tokens(Arena* arena, String8 filename, String8 text, TokenArray
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: [main, main_implicit] label -> create new main
|
//- rjf: [main, main_implicit] label -> create new main
|
||||||
if (mode_main_or_main_implict && token->flags & TokenGroup_Label)
|
if (mode_main_or_main_implict && token->flags & TokenFlagGroup_Label)
|
||||||
{
|
{
|
||||||
String8 node_string_raw = token_string;
|
String8 node_string_raw = token_string;
|
||||||
String8 node_string = content_string_from_token_flags_str8(token->flags, node_string_raw);
|
String8 node_string = content_string_from_token_flags_str8(token->flags, node_string_raw);
|
||||||
|
|||||||
+10
-10
@@ -1,6 +1,5 @@
|
|||||||
#if INTELLISENSE_DIRECTIVES
|
#if INTELLISENSE_DIRECTIVES
|
||||||
# pragma once
|
# pragma once
|
||||||
# include "base/base.h"
|
|
||||||
# include "os/os.h"
|
# include "os/os.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -70,15 +69,15 @@ enum
|
|||||||
TokenFlag_BadCharacter = (1 << 14),
|
TokenFlag_BadCharacter = (1 << 14),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef U32 TokenGroups;
|
typedef U32 TokenFlagGroups;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TokenGroup_Comment = TokenFlag_Comment,
|
TokenFlagGroup_Comment = TokenFlag_Comment,
|
||||||
TokenGroup_Whitespace = (TokenFlag_Whitespace| TokenFlag_Newline),
|
TokenFlagGroup_Whitespace = (TokenFlag_Whitespace| TokenFlag_Newline),
|
||||||
TokenGroup_Irregular = (TokenGroup_Comment | TokenGroup_Whitespace),
|
TokenFlagGroup_Irregular = (TokenFlagGroup_Comment | TokenFlagGroup_Whitespace),
|
||||||
TokenGroup_Regular = ~TokenGroup_Irregular,
|
TokenFlagGroup_Regular = ~TokenFlagGroup_Irregular,
|
||||||
TokenGroup_Label = (TokenFlag_Identifier | TokenFlag_Numeric | TokenFlag_StringLiteral | TokenFlag_Symbol),
|
TokenFlagGroup_Label = (TokenFlag_Identifier | TokenFlag_Numeric | TokenFlag_StringLiteral | TokenFlag_Symbol),
|
||||||
TokenGroup_Error = (TokenFlag_BrokenComment | TokenFlag_BrokenStringLiteral | TokenFlag_BadCharacter),
|
TokenFlagGroup_Error = (TokenFlag_BrokenComment | TokenFlag_BrokenStringLiteral | TokenFlag_BadCharacter),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct Token Token;
|
typedef struct Token Token;
|
||||||
@@ -228,8 +227,9 @@ struct ParseResult
|
|||||||
inline Node*
|
inline Node*
|
||||||
nil_node()
|
nil_node()
|
||||||
{
|
{
|
||||||
read_only thread_local local_persist
|
read_only local_persist
|
||||||
nil = {
|
Node nil =
|
||||||
|
{
|
||||||
&nil,
|
&nil,
|
||||||
&nil,
|
&nil,
|
||||||
&nil,
|
&nil,
|
||||||
|
|||||||
+20
-7
@@ -1,17 +1,30 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
#include "metadesk.h"
|
||||||
# include "metadesk.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "base/base.c"
|
#undef MARKUP_LAYER_COLOR
|
||||||
|
#define MARKUP_LAYER_COLOR 0.20f, 0.60f, 0.80f
|
||||||
|
|
||||||
|
#include "base/platform.c"
|
||||||
|
|
||||||
|
MD_NS_BEGIN
|
||||||
|
|
||||||
|
#include "base/debug.c"
|
||||||
|
#include "base/memory_substrate.c"
|
||||||
|
#include "base/arena.c"
|
||||||
|
#include "base/strings.c"
|
||||||
|
#include "base/text.c"
|
||||||
|
#include "base/thread_context.c"
|
||||||
|
#include "base/command_line.c"
|
||||||
|
#include "base/logger.c"
|
||||||
|
#include "base/entry_point.c"
|
||||||
|
#include "base/time.c"
|
||||||
|
|
||||||
#if OS_WINDOWS
|
#if OS_WINDOWS
|
||||||
# include "os/win32/os_win32.c"
|
# include "os/win32/os_win32.c"
|
||||||
#elif OS_LINUX
|
#elif OS_LINUX
|
||||||
# include "os/linux/os_linux.c"
|
# include "os/win32/os_win32.c"
|
||||||
#else
|
|
||||||
# error OS core layer not implemented for this operating system.
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "os/os.c"
|
#include "os/os.c"
|
||||||
|
|
||||||
#include "mdesk/mdesk.c"
|
#include "mdesk/mdesk.c"
|
||||||
|
MD_NS_END
|
||||||
|
|||||||
+39
-1
@@ -2,6 +2,44 @@
|
|||||||
# pragma once
|
# pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "base/base.h"
|
#include "base/context_cracking.h"
|
||||||
|
#include "base/platform.h"
|
||||||
|
#include "base/linkage.h"
|
||||||
|
#include "base/macros.h"
|
||||||
|
#include "base/generic_macros.h"
|
||||||
|
#include "base/profiling.h"
|
||||||
|
#include "base/namespace.h"
|
||||||
|
|
||||||
|
MD_NS_BEGIN
|
||||||
|
|
||||||
|
#include "base/base_types.h"
|
||||||
|
#include "base/ring.h"
|
||||||
|
#include "base/debug.h"
|
||||||
|
#include "base/memory.h"
|
||||||
|
#include "base/memory_substrate.h"
|
||||||
|
#include "base/arena.h"
|
||||||
|
#include "base/space.h"
|
||||||
|
#include "base/math.h"
|
||||||
|
#include "base/sort.h"
|
||||||
|
#include "base/toolchain.h"
|
||||||
|
#include "base/time.h"
|
||||||
|
#include "base/strings.h"
|
||||||
|
#include "base/text.h"
|
||||||
|
#include "base/thread_context.h"
|
||||||
|
#include "base/command_line.h"
|
||||||
|
#include "base/markup.h"
|
||||||
|
#include "base/logger.h"
|
||||||
|
#include "base/entry_point.h"
|
||||||
|
#include "base/file.h"
|
||||||
|
|
||||||
#include "os/os.h"
|
#include "os/os.h"
|
||||||
|
|
||||||
|
MD_NS_END
|
||||||
|
|
||||||
|
#include "os/os_resolve.h"
|
||||||
|
|
||||||
|
MD_NS_BEGIN
|
||||||
|
|
||||||
#include "mdesk/mdesk.h"
|
#include "mdesk/mdesk.h"
|
||||||
|
|
||||||
|
MD_NS_END
|
||||||
|
|||||||
@@ -1,33 +1,15 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
# pragma once
|
# pragma once
|
||||||
# include "base/base.h"
|
# include "base/debug.h"
|
||||||
|
# include "base/strings.h"
|
||||||
|
# include "base/thread_context.h"
|
||||||
|
# include "os/os.h"
|
||||||
|
# include "os/linux/os_linux_includes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Copyright (c) 2024 Epic Games Tools
|
// Copyright (c) 2024 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: Includes
|
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
#include <features.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <linux/limits.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <sys/syscall.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <sys/sysinfo.h>
|
|
||||||
#include <sys/random.h>
|
|
||||||
|
|
||||||
int pthread_setname_np(pthread_t thread, const char* name);
|
int pthread_setname_np(pthread_t thread, const char* name);
|
||||||
int pthread_getname_np(pthread_t thread, char* name, size_t size);
|
int pthread_getname_np(pthread_t thread, char* name, size_t size);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
|
# pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Includes
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <features.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <linux/limits.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <sys/sysinfo.h>
|
||||||
|
#include <sys/random.h>
|
||||||
+49
-63
@@ -1,22 +1,8 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
# pragma once
|
# pragma once
|
||||||
# include "base/base.h"
|
# include "base/file.h"
|
||||||
#endif
|
# include "base/debug.h"
|
||||||
|
# include "os_resolve.h"
|
||||||
#if !defined(OS_FEATURE_GRAPHICAL)
|
|
||||||
# define OS_FEATURE_GRAPHICAL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(OS_GFX_STUB)
|
|
||||||
# define OS_GFX_STUB 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if OS_WINDOWS
|
|
||||||
# include "os/win32/os_win32.h"
|
|
||||||
#elif OS_LINUX
|
|
||||||
# include "os/linux/os_linux.h"
|
|
||||||
#else
|
|
||||||
# error OS core layer not implemented for this operating system.
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Copyright (c) 2024 Epic Games Tools
|
// Copyright (c) 2024 Epic Games Tools
|
||||||
@@ -177,7 +163,7 @@ os_handle_list_push(Arena* arena, OS_HandleList* handles, OS_Handle handle) {
|
|||||||
sll_queue_push(handles->first, handles->last, n);
|
sll_queue_push(handles->first, handles->last, n);
|
||||||
handles->count += 1;
|
handles->count += 1;
|
||||||
#else
|
#else
|
||||||
return os_handle_list_alloc(arena_allocator(arena), handles, handle);
|
os_handle_list_alloc(arena_allocator(arena), handles, handle);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,6 +206,17 @@ os_handle_array_from_list_alloc(AllocatorInfo ainfo, OS_HandleList* list) {
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Command Line Argc/Argv Helper (Helper, Implemented Once)
|
//~ rjf: Command Line Argc/Argv Helper (Helper, Implemented Once)
|
||||||
|
|
||||||
|
inline String8List
|
||||||
|
os_string_list_from_argcv_alloc(AllocatorInfo ainfo, int argc, char** argv) {
|
||||||
|
String8List result = {0};
|
||||||
|
for(int i = 0; i < argc; i += 1)
|
||||||
|
{
|
||||||
|
String8 str = str8_cstring(argv[i]);
|
||||||
|
str8_list_alloc(ainfo, &result, str);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
inline String8List
|
inline String8List
|
||||||
os_string_list_from_argcv(Arena* arena, int argc, char** argv) {
|
os_string_list_from_argcv(Arena* arena, int argc, char** argv) {
|
||||||
String8List result = {0};
|
String8List result = {0};
|
||||||
@@ -231,16 +228,36 @@ os_string_list_from_argcv(Arena* arena, int argc, char** argv) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String8List
|
////////////////////////////////
|
||||||
os_string_list_from_argcv(AllocatorInfo ainfo, int argc, char** argv) {
|
//~ rjf: @os_hooks File System (Implemented Per-OS)
|
||||||
String8List result = {0};
|
|
||||||
for(int i = 0; i < argc; i += 1)
|
//- rjf: files
|
||||||
{
|
MD_API OS_Handle os_file_open (OS_AccessFlags flags, String8 path);
|
||||||
String8 str = str8_cstring(argv[i]);
|
MD_API void os_file_close (OS_Handle file);
|
||||||
str8_list_alloc(ainfo, &result, str);
|
MD_API U64 os_file_read (OS_Handle file, Rng1U64 rng, void *out_data);
|
||||||
}
|
MD_API U64 os_file_write (OS_Handle file, Rng1U64 rng, void *data);
|
||||||
return result;
|
MD_API B32 os_file_set_times (OS_Handle file, DateTime time);
|
||||||
}
|
MD_API FileProperties os_properties_from_file (OS_Handle file);
|
||||||
|
MD_API OS_FileID os_id_from_file (OS_Handle file);
|
||||||
|
MD_API B32 os_delete_file_at_path (String8 path);
|
||||||
|
MD_API B32 os_copy_file_path (String8 dst, String8 src);
|
||||||
|
MD_API String8 os_full_path_from_path (Arena* arena, String8 path);
|
||||||
|
MD_API B32 os_file_path_exists (String8 path);
|
||||||
|
MD_API FileProperties os_properties_from_file_path(String8 path);
|
||||||
|
|
||||||
|
//- rjf: file maps
|
||||||
|
MD_API OS_Handle os_file_map_open (OS_AccessFlags flags, OS_Handle file);
|
||||||
|
MD_API void os_file_map_close (OS_Handle map);
|
||||||
|
MD_API void* os_file_map_view_open (OS_Handle map, OS_AccessFlags flags, Rng1U64 range);
|
||||||
|
MD_API void os_file_map_view_close(OS_Handle map, void* ptr, Rng1U64 range);
|
||||||
|
|
||||||
|
//- rjf: directory iteration
|
||||||
|
MD_API OS_FileIter* os_file_iter_begin(Arena* arena, String8 path, OS_FileIterFlags flags);
|
||||||
|
MD_API B32 os_file_iter_next (Arena* arena, OS_FileIter* iter, OS_FileInfo* info_out);
|
||||||
|
MD_API void os_file_iter_end ( OS_FileIter* iter);
|
||||||
|
|
||||||
|
//- rjf: directory creation
|
||||||
|
MD_API B32 os_make_directory(String8 path);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Filesystem Helpers (Helpers, Implemented Once)
|
//~ rjf: Filesystem Helpers (Helpers, Implemented Once)
|
||||||
@@ -295,8 +312,8 @@ inline S64 os_file_id_compare(OS_FileID a, OS_FileID b) { S64 cmp = memory_compa
|
|||||||
//~ rjf: GUID Helpers (Helpers, Implemented Once)
|
//~ rjf: GUID Helpers (Helpers, Implemented Once)
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
os_string_from_guid(Arena* arena, OS_Guid guid) {
|
os_string_from_guid_alloc(AllocatorInfo ainfo, OS_Guid guid) {
|
||||||
String8 result = push_str8f(arena,
|
String8 result = alloc_str8f(ainfo,
|
||||||
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
||||||
guid.data1,
|
guid.data1,
|
||||||
guid.data2,
|
guid.data2,
|
||||||
@@ -314,8 +331,8 @@ os_string_from_guid(Arena* arena, OS_Guid guid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
os_string_from_guid(AllocatorInfo ainfo, OS_Guid guid) {
|
os_string_from_guid(Arena* arena, OS_Guid guid) {
|
||||||
String8 result = alloc_str8f(ainfo,
|
String8 result = push_str8f(arena,
|
||||||
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
||||||
guid.data1,
|
guid.data1,
|
||||||
guid.data2,
|
guid.data2,
|
||||||
@@ -364,37 +381,6 @@ MD_API void os_set_thread_name(String8 string);
|
|||||||
|
|
||||||
MD_API void os_abort(S32 exit_code);
|
MD_API void os_abort(S32 exit_code);
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: @os_hooks File System (Implemented Per-OS)
|
|
||||||
|
|
||||||
//- rjf: files
|
|
||||||
MD_API OS_Handle os_file_open (OS_AccessFlags flags, String8 path);
|
|
||||||
MD_API void os_file_close (OS_Handle file);
|
|
||||||
MD_API U64 os_file_read (OS_Handle file, Rng1U64 rng, void *out_data);
|
|
||||||
MD_API U64 os_file_write (OS_Handle file, Rng1U64 rng, void *data);
|
|
||||||
MD_API B32 os_file_set_times (OS_Handle file, DateTime time);
|
|
||||||
MD_API FileProperties os_properties_from_file (OS_Handle file);
|
|
||||||
MD_API OS_FileID os_id_from_file (OS_Handle file);
|
|
||||||
MD_API B32 os_delete_file_at_path (String8 path);
|
|
||||||
MD_API B32 os_copy_file_path (String8 dst, String8 src);
|
|
||||||
MD_API String8 os_full_path_from_path (Arena* arena, String8 path);
|
|
||||||
MD_API B32 os_file_path_exists (String8 path);
|
|
||||||
MD_API FileProperties os_properties_from_file_path(String8 path);
|
|
||||||
|
|
||||||
//- rjf: file maps
|
|
||||||
MD_API OS_Handle os_file_map_open (OS_AccessFlags flags, OS_Handle file);
|
|
||||||
MD_API void os_file_map_close (OS_Handle map);
|
|
||||||
MD_API void* os_file_map_view_open (OS_Handle map, OS_AccessFlags flags, Rng1U64 range);
|
|
||||||
MD_API void os_file_map_view_close(OS_Handle map, void* ptr, Rng1U64 range);
|
|
||||||
|
|
||||||
//- rjf: directory iteration
|
|
||||||
MD_API OS_FileIter* os_file_iter_begin(Arena* arena, String8 path, OS_FileIterFlags flags);
|
|
||||||
MD_API B32 os_file_iter_next (Arena* arena, OS_FileIter* iter, OS_FileInfo* info_out);
|
|
||||||
MD_API void os_file_iter_end ( OS_FileIter* iter);
|
|
||||||
|
|
||||||
//- rjf: directory creation
|
|
||||||
MD_API B32 os_make_directory(String8 path);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Shared Memory (Implemented Per-OS)
|
//~ rjf: @os_hooks Shared Memory (Implemented Per-OS)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
|
# include "base/context_cracking.h"
|
||||||
|
# include "base/namespace.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OS_FEATURE_GRAPHICAL)
|
||||||
|
# define OS_FEATURE_GRAPHICAL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OS_GFX_STUB)
|
||||||
|
# define OS_GFX_STUB 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if OS_WINDOWS
|
||||||
|
# include "os/win32/os_win32_includes.h"
|
||||||
|
|
||||||
|
MD_NS_BEGIN
|
||||||
|
# include "os/win32/os_win32.h"
|
||||||
|
MD_NS_END
|
||||||
|
|
||||||
|
#elif OS_LINUX
|
||||||
|
# include "os/linux/os_linux_includes.h"
|
||||||
|
|
||||||
|
MD_NS_BEGIN
|
||||||
|
# include "os/linux/os_linux.h"
|
||||||
|
MD_NS_END
|
||||||
|
# error OS core layer not implemented for this operating system.
|
||||||
|
#endif
|
||||||
+41
-65
@@ -1,39 +1,14 @@
|
|||||||
#ifdef INTELLISENSE_DIRECTIVES
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
# pragma once
|
# pragma once
|
||||||
# include "base/base.h"
|
# include "base/strings.h"
|
||||||
|
# include "base/thread_context.h"
|
||||||
|
# include "os.h"
|
||||||
|
# include "os_win32_includes.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Copyright (c) 2024 Epic Games Tools
|
// Copyright (c) 2024 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: Includes / Libraries
|
|
||||||
|
|
||||||
#ifndef NOMINMAX
|
|
||||||
#define NOMINMAX
|
|
||||||
#endif
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#define WIN32_MEAN_AND_LEAN
|
|
||||||
#define VC_EXTRALEAN
|
|
||||||
#include <windows.h>
|
|
||||||
#include <windowsx.h>
|
|
||||||
#include <timeapi.h>
|
|
||||||
#include <tlhelp32.h>
|
|
||||||
#include <Shlobj.h>
|
|
||||||
#include <processthreadsapi.h>
|
|
||||||
#pragma comment(lib, "user32")
|
|
||||||
#pragma comment(lib, "winmm")
|
|
||||||
#pragma comment(lib, "shell32")
|
|
||||||
#pragma comment(lib, "advapi32")
|
|
||||||
#pragma comment(lib, "rpcrt4")
|
|
||||||
#pragma comment(lib, "shlwapi")
|
|
||||||
#pragma comment(lib, "comctl32")
|
|
||||||
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") // this is required for loading correct comctl32 dll file
|
|
||||||
#undef NOMINMAX
|
|
||||||
#undef WIN32_LEAN_AND_MEAN
|
|
||||||
#undef WIN32_MEAN_AND_LEAN
|
|
||||||
#undef VC_EXTRALEAN
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: File Iterator Types
|
//~ rjf: File Iterator Types
|
||||||
|
|
||||||
@@ -108,26 +83,6 @@ struct OS_W32_State
|
|||||||
|
|
||||||
MD_API extern OS_W32_State os_w32_state = {0};
|
MD_API extern OS_W32_State os_w32_state = {0};
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: File Info Conversion Helpers
|
|
||||||
|
|
||||||
inline FilePropertyFlags
|
|
||||||
os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
|
||||||
{
|
|
||||||
FilePropertyFlags flags = 0;
|
|
||||||
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
|
||||||
flags |= FilePropertyFlag_IsFolder;
|
|
||||||
}
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void
|
|
||||||
os_w32_file_properties_from_attribute_data(FileProperties* properties, WIN32_FILE_ATTRIBUTE_DATA* attributes) {
|
|
||||||
properties->size = compose_64bit(attributes->nFileSizeHigh, attributes->nFileSizeLow);
|
|
||||||
os_w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
|
||||||
os_w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
|
||||||
properties->flags = os_w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Time Conversion Helpers
|
//~ rjf: Time Conversion Helpers
|
||||||
@@ -173,6 +128,27 @@ os_w32_dense_time_from_file_time(DenseTime* out, FILETIME* in) {
|
|||||||
*out = dense_time_from_date_time(date_time);
|
*out = dense_time_from_date_time(date_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: File Info Conversion Helpers
|
||||||
|
|
||||||
|
inline FilePropertyFlags
|
||||||
|
os_w32_file_property_flags_from_dwFileAttributes(DWORD dwFileAttributes)
|
||||||
|
{
|
||||||
|
FilePropertyFlags flags = 0;
|
||||||
|
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
|
flags |= FilePropertyFlag_IsFolder;
|
||||||
|
}
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
os_w32_file_properties_from_attribute_data(FileProperties* properties, WIN32_FILE_ATTRIBUTE_DATA* attributes) {
|
||||||
|
properties->size = compose_64bit(attributes->nFileSizeHigh, attributes->nFileSizeLow);
|
||||||
|
os_w32_dense_time_from_file_time(&properties->created, &attributes->ftCreationTime);
|
||||||
|
os_w32_dense_time_from_file_time(&properties->modified, &attributes->ftLastWriteTime);
|
||||||
|
properties->flags = os_w32_file_property_flags_from_dwFileAttributes(attributes->dwFileAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Functions
|
//~ rjf: Entity Functions
|
||||||
|
|
||||||
@@ -188,21 +164,7 @@ MD_API DWORD os_w32_thread_entry_point(void* ptr);
|
|||||||
//~ rjf: @os_hooks System/Process Info (Implemented Per-OS)
|
//~ rjf: @os_hooks System/Process Info (Implemented Per-OS)
|
||||||
|
|
||||||
inline String8
|
inline String8
|
||||||
os_get_current_path(Arena* arena) {
|
os_get_current_path_alloc(AllocatorInfo ainfo) {
|
||||||
String8 name;
|
|
||||||
TempArena scratch = scratch_begin(&arena, 1);
|
|
||||||
{
|
|
||||||
DWORD length = GetCurrentDirectoryW(0, 0);
|
|
||||||
U16* memory = push_array_no_zero(scratch.arena, U16, length + 1);
|
|
||||||
length = GetCurrentDirectoryW(length + 1, (WCHAR*)memory);
|
|
||||||
name = str8_from_16(arena, str16(memory, length));
|
|
||||||
}
|
|
||||||
scratch_end(scratch);
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline String8
|
|
||||||
os_get_current_path(AllocatorInfo ainfo) {
|
|
||||||
String8 name;
|
String8 name;
|
||||||
// TODO(Ed): Review
|
// TODO(Ed): Review
|
||||||
TempArena scratch = scratch_begin(0, 0);
|
TempArena scratch = scratch_begin(0, 0);
|
||||||
@@ -216,6 +178,20 @@ os_get_current_path(AllocatorInfo ainfo) {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline String8
|
||||||
|
os_get_current_path(Arena* arena) {
|
||||||
|
String8 name;
|
||||||
|
TempArena scratch = scratch_begin(&arena, 1);
|
||||||
|
{
|
||||||
|
DWORD length = GetCurrentDirectoryW(0, 0);
|
||||||
|
U16* memory = push_array_no_zero(scratch.arena, U16, length + 1);
|
||||||
|
length = GetCurrentDirectoryW(length + 1, (WCHAR*)memory);
|
||||||
|
name = str8_from_16(arena, str16(memory, length));
|
||||||
|
}
|
||||||
|
scratch_end(scratch);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Memory Allocation (Implemented Per-OS)
|
//~ rjf: @os_hooks Memory Allocation (Implemented Per-OS)
|
||||||
|
|
||||||
@@ -240,7 +216,7 @@ os_reserve_large(U64 size) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline B32 os_commit_large(void *ptr, U64 size) { return 1; }
|
inline B32 os_commit_large(void* ptr, U64 size) { return 1; }
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: @os_hooks Thread Info (Implemented Per-OS)
|
//~ rjf: @os_hooks Thread Info (Implemented Per-OS)
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#ifdef INTELLISENSE_DIRECTIVES
|
||||||
|
# pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Includes / Libraries
|
||||||
|
|
||||||
|
#ifndef NOMINMAX
|
||||||
|
#define NOMINMAX
|
||||||
|
#endif
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define WIN32_MEAN_AND_LEAN
|
||||||
|
#define VC_EXTRALEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
|
#include <timeapi.h>
|
||||||
|
#include <tlhelp32.h>
|
||||||
|
#include <Shlobj.h>
|
||||||
|
#include <processthreadsapi.h>
|
||||||
|
#pragma comment(lib, "user32")
|
||||||
|
#pragma comment(lib, "winmm")
|
||||||
|
#pragma comment(lib, "shell32")
|
||||||
|
#pragma comment(lib, "advapi32")
|
||||||
|
#pragma comment(lib, "rpcrt4")
|
||||||
|
#pragma comment(lib, "shlwapi")
|
||||||
|
#pragma comment(lib, "comctl32")
|
||||||
|
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") // this is required for loading correct comctl32 dll file
|
||||||
|
#undef NOMINMAX
|
||||||
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
|
#undef WIN32_MEAN_AND_LEAN
|
||||||
|
#undef VC_EXTRALEAN
|
||||||
@@ -737,12 +737,12 @@ The @code node_count and @code total_size are automatically maintained by the he
|
|||||||
@see(MD_Token)
|
@see(MD_Token)
|
||||||
@see(MD_TokenFromString)
|
@see(MD_TokenFromString)
|
||||||
@prefix(MD_TokenGroup)
|
@prefix(MD_TokenGroup)
|
||||||
@flags MD_TokenGroups:
|
@flags MD_TokenFlagGroups:
|
||||||
{
|
{
|
||||||
Comment: `MD_TokenKind_Comment`,
|
Comment: `MD_TokenKind_Comment`,
|
||||||
Whitespace: `(MD_TokenKind_Whitespace|MD_TokenKind_Newline)`,
|
Whitespace: `(MD_TokenKind_Whitespace|MD_TokenKind_Newline)`,
|
||||||
Irregular: `(MD_TokenGroup_Comment|MD_TokenGroup_Whitespace)`,
|
Irregular: `(MD_TokenFlagGroup_Comment|MD_TokenFlagGroup_Whitespace)`,
|
||||||
Regular: `~MD_TokenGroup_Irregular`,
|
Regular: `~MD_TokenFlagGroup_Irregular`,
|
||||||
Label: `(MD_TokenKind_Identifier|MD_TokenKind_Numeric|MD_TokenKind_StringLiteral|MD_TokenKind_Symbol)`,
|
Label: `(MD_TokenKind_Identifier|MD_TokenKind_Numeric|MD_TokenKind_StringLiteral|MD_TokenKind_Symbol)`,
|
||||||
Error: `(MD_TokenKind_BrokenComment|MD_TokenKind_BrokenStringLiteral|MD_TokenKind_BadCharacter)`,
|
Error: `(MD_TokenKind_BrokenComment|MD_TokenKind_BrokenStringLiteral|MD_TokenKind_BadCharacter)`,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1018,8 +1018,8 @@ word MsgList, MD_MsgList
|
|||||||
|
|
||||||
word TokenFlags, MD_MsgFlags
|
word TokenFlags, MD_MsgFlags
|
||||||
namespace TokenFlag_, MD_TokenFlag_
|
namespace TokenFlag_, MD_TokenFlag_
|
||||||
word TokenGroups, MD_TokenGroups
|
word TokenFlagGroups, MD_TokenFlagGroups
|
||||||
namespace TokenGroup_, MD_TokenGroup_
|
namespace TokenFlagGroup_, MD_TokenFlagGroup_
|
||||||
word Token, MD_Token
|
word Token, MD_Token
|
||||||
word TokenChunkNode, MD_TokenChunkNode
|
word TokenChunkNode, MD_TokenChunkNode
|
||||||
word TokenChunkList, MD_TokenChunkList
|
word TokenChunkList, MD_TokenChunkList
|
||||||
|
|||||||
+13
-13
@@ -2387,7 +2387,7 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, Node *parent,
|
|||||||
case MD_ParseSetRule_EndOnDelimiter:
|
case MD_ParseSetRule_EndOnDelimiter:
|
||||||
{
|
{
|
||||||
MD_u64 opener_check_off = off;
|
MD_u64 opener_check_off = off;
|
||||||
opener_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, opener_check_off), TokenGroup_Irregular);
|
opener_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, opener_check_off), TokenFlagGroup_Irregular);
|
||||||
initial_token = MD_TokenFromString(MD_S8Skip(string, opener_check_off));
|
initial_token = MD_TokenFromString(MD_S8Skip(string, opener_check_off));
|
||||||
if(initial_token.kind == MD_TokenKind_Reserved)
|
if(initial_token.kind == MD_TokenKind_Reserved)
|
||||||
{
|
{
|
||||||
@@ -2486,7 +2486,7 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, Node *parent,
|
|||||||
|
|
||||||
//- rjf: check separators and possible braces from higher parents
|
//- rjf: check separators and possible braces from higher parents
|
||||||
{
|
{
|
||||||
closer_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
closer_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token potential_closer = MD_TokenFromString(MD_S8Skip(string, closer_check_off));
|
Token potential_closer = MD_TokenFromString(MD_S8Skip(string, closer_check_off));
|
||||||
if(potential_closer.kind == MD_TokenKind_Reserved)
|
if(potential_closer.kind == MD_TokenKind_Reserved)
|
||||||
{
|
{
|
||||||
@@ -2510,7 +2510,7 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, Node *parent,
|
|||||||
if(!close_with_separator && !parse_all)
|
if(!close_with_separator && !parse_all)
|
||||||
{
|
{
|
||||||
MD_u64 closer_check_off = off;
|
MD_u64 closer_check_off = off;
|
||||||
closer_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
closer_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token potential_closer = MD_TokenFromString(MD_S8Skip(string, closer_check_off));
|
Token potential_closer = MD_TokenFromString(MD_S8Skip(string, closer_check_off));
|
||||||
if(potential_closer.kind == MD_TokenKind_Reserved)
|
if(potential_closer.kind == MD_TokenKind_Reserved)
|
||||||
{
|
{
|
||||||
@@ -2574,7 +2574,7 @@ MD_ParseNodeSet(MD_Arena *arena, MD_String8 string, MD_u64 offset, Node *parent,
|
|||||||
NodeFlags trailing_separator_flags = 0;
|
NodeFlags trailing_separator_flags = 0;
|
||||||
if(!close_with_separator)
|
if(!close_with_separator)
|
||||||
{
|
{
|
||||||
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token trailing_separator = MD_TokenFromString(MD_S8Skip(string, off));
|
Token trailing_separator = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
if (trailing_separator.kind == MD_TokenKind_Reserved)
|
if (trailing_separator.kind == MD_TokenKind_Reserved)
|
||||||
{
|
{
|
||||||
@@ -2659,7 +2659,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
MD_MemoryZeroStruct(&comment_token);
|
MD_MemoryZeroStruct(&comment_token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if((token.kind & TokenGroup_Whitespace) != 0)
|
else if((token.kind & TokenFlagGroup_Whitespace) != 0)
|
||||||
{
|
{
|
||||||
off += token.raw_string.size;
|
off += token.raw_string.size;
|
||||||
}
|
}
|
||||||
@@ -2678,7 +2678,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
for(;off < string.size;)
|
for(;off < string.size;)
|
||||||
{
|
{
|
||||||
//- rjf: parse @ symbol, signifying start of tag
|
//- rjf: parse @ symbol, signifying start of tag
|
||||||
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token next_token = MD_TokenFromString(MD_S8Skip(string, off));
|
Token next_token = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
if(next_token.kind != MD_TokenKind_Reserved ||
|
if(next_token.kind != MD_TokenKind_Reserved ||
|
||||||
next_token.string.str[0] != '@')
|
next_token.string.str[0] != '@')
|
||||||
@@ -2690,7 +2690,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
//- rjf: parse string of tag node
|
//- rjf: parse string of tag node
|
||||||
Token name = MD_TokenFromString(MD_S8Skip(string, off));
|
Token name = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
MD_u64 name_off = off;
|
MD_u64 name_off = off;
|
||||||
if((name.kind & TokenGroup_Label) == 0)
|
if((name.kind & TokenFlagGroup_Label) == 0)
|
||||||
{
|
{
|
||||||
// NOTE(rjf): @error Improper token for tag string
|
// NOTE(rjf): @error Improper token for tag string
|
||||||
MD_String8 error_str = MD_S8Fmt(arena, "\"%.*s\" is not a proper tag label",
|
MD_String8 error_str = MD_S8Fmt(arena, "\"%.*s\" is not a proper tag label",
|
||||||
@@ -2726,7 +2726,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
retry:;
|
retry:;
|
||||||
{
|
{
|
||||||
//- rjf: try to parse an unnamed set
|
//- rjf: try to parse an unnamed set
|
||||||
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token unnamed_set_opener = MD_TokenFromString(MD_S8Skip(string, off));
|
Token unnamed_set_opener = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
if(unnamed_set_opener.kind == MD_TokenKind_Reserved)
|
if(unnamed_set_opener.kind == MD_TokenKind_Reserved)
|
||||||
{
|
{
|
||||||
@@ -2763,9 +2763,9 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: try to parse regular node, with/without children
|
//- rjf: try to parse regular node, with/without children
|
||||||
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenGroup_Irregular);
|
off += MD_LexAdvanceFromSkips(MD_S8Skip(string, off), TokenFlagGroup_Irregular);
|
||||||
Token label_name = MD_TokenFromString(MD_S8Skip(string, off));
|
Token label_name = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
if((label_name.kind & TokenGroup_Label) != 0)
|
if((label_name.kind & TokenFlagGroup_Label) != 0)
|
||||||
{
|
{
|
||||||
off += label_name.raw_string.size;
|
off += label_name.raw_string.size;
|
||||||
parsed_node = MD_MakeNode(arena, NodeKind_Main, label_name.string, label_name.raw_string,
|
parsed_node = MD_MakeNode(arena, NodeKind_Main, label_name.string, label_name.raw_string,
|
||||||
@@ -2774,7 +2774,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
|
|
||||||
//- rjf: try to parse children for this node
|
//- rjf: try to parse children for this node
|
||||||
MD_u64 colon_check_off = off;
|
MD_u64 colon_check_off = off;
|
||||||
colon_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, colon_check_off), TokenGroup_Irregular);
|
colon_check_off += MD_LexAdvanceFromSkips(MD_S8Skip(string, colon_check_off), TokenFlagGroup_Irregular);
|
||||||
Token colon = MD_TokenFromString(MD_S8Skip(string, colon_check_off));
|
Token colon = MD_TokenFromString(MD_S8Skip(string, colon_check_off));
|
||||||
if(colon.kind == MD_TokenKind_Reserved &&
|
if(colon.kind == MD_TokenKind_Reserved &&
|
||||||
colon.string.str[0] == ':')
|
colon.string.str[0] == ':')
|
||||||
@@ -2792,7 +2792,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
|
|
||||||
//- rjf: collect bad token
|
//- rjf: collect bad token
|
||||||
Token bad_token = MD_TokenFromString(MD_S8Skip(string, off));
|
Token bad_token = MD_TokenFromString(MD_S8Skip(string, off));
|
||||||
if(bad_token.kind & TokenGroup_Error)
|
if(bad_token.kind & TokenFlagGroup_Error)
|
||||||
{
|
{
|
||||||
off += bad_token.raw_string.size;
|
off += bad_token.raw_string.size;
|
||||||
|
|
||||||
@@ -2859,7 +2859,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset)
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if((token.kind & TokenGroup_Whitespace) != 0)
|
else if((token.kind & TokenFlagGroup_Whitespace) != 0)
|
||||||
{
|
{
|
||||||
off += token.raw_string.size;
|
off += token.raw_string.size;
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -707,20 +707,20 @@ enum
|
|||||||
MD_TokenKind_BadCharacter = (1<<10),
|
MD_TokenKind_BadCharacter = (1<<10),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef MD_u32 MD_TokenGroups;
|
typedef MD_u32 MD_TokenFlagGroups;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TokenGroup_Comment = MD_TokenKind_Comment,
|
TokenFlagGroup_Comment = MD_TokenKind_Comment,
|
||||||
TokenGroup_Whitespace = (MD_TokenKind_Whitespace|
|
TokenFlagGroup_Whitespace = (MD_TokenKind_Whitespace|
|
||||||
MD_TokenKind_Newline),
|
MD_TokenKind_Newline),
|
||||||
TokenGroup_Irregular = (TokenGroup_Comment|
|
TokenFlagGroup_Irregular = (TokenFlagGroup_Comment|
|
||||||
TokenGroup_Whitespace),
|
TokenFlagGroup_Whitespace),
|
||||||
TokenGroup_Regular = ~TokenGroup_Irregular,
|
TokenFlagGroup_Regular = ~TokenFlagGroup_Irregular,
|
||||||
TokenGroup_Label = (MD_TokenKind_Identifier|
|
TokenFlagGroup_Label = (MD_TokenKind_Identifier|
|
||||||
MD_TokenKind_Numeric|
|
MD_TokenKind_Numeric|
|
||||||
MD_TokenKind_StringLiteral|
|
MD_TokenKind_StringLiteral|
|
||||||
MD_TokenKind_Symbol),
|
MD_TokenKind_Symbol),
|
||||||
TokenGroup_Error = (MD_TokenKind_BrokenComment|
|
TokenFlagGroup_Error = (MD_TokenKind_BrokenComment|
|
||||||
MD_TokenKind_BrokenStringLiteral|
|
MD_TokenKind_BrokenStringLiteral|
|
||||||
MD_TokenKind_BadCharacter),
|
MD_TokenKind_BadCharacter),
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user