mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-01 20:28:13 +00:00
remove MD_JoinStringListWithSeparator, just have separator argument in MD_JoinStringList; helper for making node references
This commit is contained in:
+7
-6
@@ -13,10 +13,11 @@
|
|||||||
// [ ] Helpers for parsing NodeFlags, figuring out which nodes in a set are
|
// [ ] Helpers for parsing NodeFlags, figuring out which nodes in a set are
|
||||||
// separated by a semicolon, something like MD_SeekNodeWithFlags(node) -> node ?
|
// separated by a semicolon, something like MD_SeekNodeWithFlags(node) -> node ?
|
||||||
// [ ] Escaping characters from strings
|
// [ ] Escaping characters from strings
|
||||||
// [ ] Get rid of MD_JoinStringListWithSeparator, just have a separator argument on
|
// [x] Get rid of MD_JoinStringListWithSeparator, just have a separator argument on
|
||||||
// MD_JoinStringList.
|
// MD_JoinStringList.
|
||||||
// [ ] MD_StringMap_Next, for iterating matching slots in an MD_Map, that all
|
// [x] MD_StringMap_Next, for iterating matching slots in an MD_Map, that all
|
||||||
// share the same key (important in the case of hash collisions)
|
// share the same key (important in the case of hash collisions)
|
||||||
|
// [x] Helper for making a reference for a node, e.g. MD_ReferenceFromNode
|
||||||
|
|
||||||
// NOTE(allen): "Plugin" functionality
|
// NOTE(allen): "Plugin" functionality
|
||||||
//
|
//
|
||||||
@@ -668,9 +669,7 @@ MD_FUNCTION MD_String8 MD_PushStringF(char *fmt, ...);
|
|||||||
MD_FUNCTION void MD_PushStringToList(MD_String8List *list, MD_String8 string);
|
MD_FUNCTION void MD_PushStringToList(MD_String8List *list, MD_String8 string);
|
||||||
MD_FUNCTION void MD_PushStringListToList(MD_String8List *list, MD_String8List *to_push);
|
MD_FUNCTION void MD_PushStringListToList(MD_String8List *list, MD_String8List *to_push);
|
||||||
MD_FUNCTION MD_String8List MD_SplitString(MD_String8 string, int split_count, MD_String8 *splits);
|
MD_FUNCTION MD_String8List MD_SplitString(MD_String8 string, int split_count, MD_String8 *splits);
|
||||||
// TODO(allen): single joiner with MD_StringJoin optional parameter
|
MD_FUNCTION MD_String8 MD_JoinStringList(MD_String8List list, MD_String8 separator);
|
||||||
MD_FUNCTION MD_String8 MD_JoinStringList(MD_String8List list);
|
|
||||||
MD_FUNCTION MD_String8 MD_JoinStringListWithSeparator(MD_String8List list, MD_String8 separator);
|
|
||||||
MD_FUNCTION MD_i64 MD_I64FromString(MD_String8 string, MD_u32 radix);
|
MD_FUNCTION MD_i64 MD_I64FromString(MD_String8 string, MD_u32 radix);
|
||||||
MD_FUNCTION MD_f64 MD_F64FromString(MD_String8 string);
|
MD_FUNCTION MD_f64 MD_F64FromString(MD_String8 string);
|
||||||
MD_FUNCTION MD_u64 MD_HashString(MD_String8 string);
|
MD_FUNCTION MD_u64 MD_HashString(MD_String8 string);
|
||||||
@@ -693,8 +692,9 @@ MD_FUNCTION MD_String8 MD_S8FromS32(MD_String32 str);
|
|||||||
MD_FUNCTION MD_String32 MD_S32FromS8(MD_String8 str);
|
MD_FUNCTION MD_String32 MD_S32FromS8(MD_String8 str);
|
||||||
|
|
||||||
//~ String-To-Pointer Table
|
//~ String-To-Pointer Table
|
||||||
MD_FUNCTION MD_MapSlot *MD_StringMap_Lookup(MD_Map *table, MD_String8 string);
|
MD_FUNCTION MD_MapSlot * MD_StringMap_Lookup(MD_Map *table, MD_String8 string);
|
||||||
MD_FUNCTION MD_b32 MD_StringMap_Insert(MD_Map *table, MD_MapCollisionRule collision_rule, MD_String8 string, void *value);
|
MD_FUNCTION MD_b32 MD_StringMap_Insert(MD_Map *table, MD_MapCollisionRule collision_rule, MD_String8 string, void *value);
|
||||||
|
MD_FUNCTION MD_MapSlot * MD_StringMap_Next(MD_MapSlot *slot, MD_String8 key);
|
||||||
|
|
||||||
//~ Pointer-To-Pointer Table
|
//~ Pointer-To-Pointer Table
|
||||||
MD_FUNCTION MD_MapSlot *MD_PtrMap_Lookup(MD_Map *map, void *key);
|
MD_FUNCTION MD_MapSlot *MD_PtrMap_Lookup(MD_Map *map, void *key);
|
||||||
@@ -726,6 +726,7 @@ MD_FUNCTION MD_b32 MD_NodeIsNil(MD_Node *node);
|
|||||||
MD_FUNCTION MD_Node *MD_NilNode(void);
|
MD_FUNCTION MD_Node *MD_NilNode(void);
|
||||||
MD_FUNCTION MD_Node *MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token);
|
MD_FUNCTION MD_Node *MD_MakeNodeFromToken(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_Token token);
|
||||||
MD_FUNCTION MD_Node *MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string);
|
MD_FUNCTION MD_Node *MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8 *at, MD_String8 string);
|
||||||
|
MD_FUNCTION MD_Node *MD_MakeNodeReference(MD_Node *target);
|
||||||
MD_FUNCTION void MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling);
|
MD_FUNCTION void MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling);
|
||||||
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
MD_FUNCTION void MD_PushChild(MD_Node *parent, MD_Node *new_child);
|
||||||
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
MD_FUNCTION void MD_PushTag(MD_Node *node, MD_Node *tag);
|
||||||
|
|||||||
+27
-16
@@ -423,22 +423,7 @@ MD_SplitString(MD_String8 string, int split_count, MD_String8 *splits)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_String8
|
MD_FUNCTION_IMPL MD_String8
|
||||||
MD_JoinStringList(MD_String8List list)
|
MD_JoinStringList(MD_String8List list, MD_String8 separator)
|
||||||
{
|
|
||||||
MD_String8 string = MD_ZERO_STRUCT;
|
|
||||||
string.size = list.total_size;
|
|
||||||
string.str = _MD_PushArray(MD_u8, string.size);
|
|
||||||
MD_u64 write_pos = 0;
|
|
||||||
for(MD_String8Node *node = list.first; node; node = node->next)
|
|
||||||
{
|
|
||||||
_MD_MemoryCopy(string.str + write_pos, node->string.str, node->string.size);
|
|
||||||
write_pos += node->string.size;
|
|
||||||
}
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
MD_FUNCTION_IMPL MD_String8
|
|
||||||
MD_JoinStringListWithSeparator(MD_String8List list, MD_String8 separator)
|
|
||||||
{
|
{
|
||||||
if (list.node_count == 0)
|
if (list.node_count == 0)
|
||||||
{
|
{
|
||||||
@@ -1027,6 +1012,24 @@ MD_StringMap_Insert(MD_Map *map, MD_MapCollisionRule collision_rule, MD_String8
|
|||||||
return !!slot;
|
return !!slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MD_FUNCTION_IMPL MD_MapSlot *
|
||||||
|
MD_StringMap_Next(MD_MapSlot *slot, MD_String8 key)
|
||||||
|
{
|
||||||
|
MD_MapSlot *next = 0;
|
||||||
|
if(slot)
|
||||||
|
{
|
||||||
|
for(MD_MapSlot *candidate = slot->next; candidate; candidate = candidate->next)
|
||||||
|
{
|
||||||
|
if(MD_StringMatch(*(MD_String8 *)candidate->key, key, 0))
|
||||||
|
{
|
||||||
|
next = candidate;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
//~ NOTE(mal): MD_PtrMap
|
//~ NOTE(mal): MD_PtrMap
|
||||||
|
|
||||||
@@ -2193,6 +2196,14 @@ MD_MakeNodeFromString(MD_NodeKind kind, MD_String8 filename, MD_u8 *file, MD_u8
|
|||||||
return _MD_MakeNode(kind, string, string, filename, file, at);
|
return _MD_MakeNode(kind, string, string, filename, file, at);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MD_FUNCTION_IMPL MD_Node *
|
||||||
|
MD_MakeNodeReference(MD_Node *target)
|
||||||
|
{
|
||||||
|
MD_Node *n = MD_MakeNodeFromString(MD_NodeKind_Reference, MD_S8Lit("`reference node`"), 0, 0, MD_S8Lit("`reference node`"));
|
||||||
|
n->ref_target = target;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
MD_FUNCTION_IMPL void
|
MD_FUNCTION_IMPL void
|
||||||
MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling)
|
MD_PushSibling(MD_Node **first, MD_Node **last, MD_Node *parent, MD_Node *new_sibling)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user