diff --git a/all.h b/all.h index 3a73e55..6f51ee2 100644 --- a/all.h +++ b/all.h @@ -878,6 +878,7 @@ fn void stringChunkListDeleteLast(StringArena* a, StringChunkList* list); fn StringChunkList stringChunkListInit(StringArena* a); fn void stringChunkCopyToBuffer(StringChunkList* list, u8* buffer, u32 len); fn bool stringChunkListsEq(StringChunkList* a, StringChunkList* b); +fn bool stringChunkListEqString(StringChunkList* a, String* b); ///// BINARY SERIALIZATION NONSENSE fn u64 writeU64ToBufferLE(u8* buffer, u64 value); diff --git a/string_chunk.c b/string_chunk.c index f3c3caf..7f64b4a 100644 --- a/string_chunk.c +++ b/string_chunk.c @@ -182,3 +182,17 @@ fn bool stringChunkListsEq(StringChunkList* a, StringChunkList* b) { return true; } +fn bool stringChunkListEqString(StringChunkList* a, String* b) { + if (a->total_size != b->length) return false; + StringChunk* chunk = a->first; + for (u32 i = 0; i < a->total_size; i++) { + if (i > 0 && i % STRING_CHUNK_PAYLOAD_SIZE == 0) { + chunk = chunk->next; + } + u8 a_char = *((char*)(chunk + 1) + (i%STRING_CHUNK_PAYLOAD_SIZE)); + u8 b_char = b->bytes[i]; + if (a_char != b_char) return false; + } + return true; +} +