Compare commits

..

2 Commits

Author SHA1 Message Date
e16a0035a4 fixed bug in HashMap 2025-07-21 16:02:31 +03:00
be2c4e7792 hex_to_str 2025-07-21 16:02:15 +03:00
6 changed files with 17 additions and 6 deletions

View File

@ -20,6 +20,7 @@ typedef int64_t i64;
typedef uint64_t u64;
typedef float f32;
typedef double f64;
typedef void* ptr;
#if !__cplusplus
typedef u8 bool;
@ -33,7 +34,7 @@ typedef const char* cstr;
#define nameof(V) #V
#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0]))
#define ARRAY_LEN(A) (sizeof(A)/sizeof(A[0]))
#define ALIGN_TO(_SIZE,_ALIGN) (((_SIZE) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1))
#if defined(_WIN64) || defined(_WIN32)

View File

@ -21,7 +21,7 @@ void StringBuilder_append_str(StringBuilder* b, str s);
void StringBuilder_append_i64(StringBuilder* b, i64 a);
void StringBuilder_append_u64(StringBuilder* b, u64 a);
void StringBuilder_append_f64(StringBuilder* b, f64 a);
void StringBuilder_append_memory(StringBuilder* b, Array mem);
void StringBuilder_append_memory(StringBuilder* b, Array mem, bool uppercase);
// adds '\0' to the buffer and returns pointer to buffer content
str StringBuilder_getStr(StringBuilder* b);

View File

@ -3,6 +3,7 @@
#include "../std.h"
#include "char.h"
#include "cstr.h"
#include "../collections/Array.h"
typedef struct str {
char* data;
@ -11,7 +12,7 @@ typedef struct str {
} str;
/// creates str from a string literal
#define STR(LITERAL) str_construct(LITERAL, ARRAY_SIZE(LITERAL) - 1, true)
#define STR(LITERAL) str_construct(LITERAL, ARRAY_LEN(LITERAL) - 1, true)
#define str_construct(DATA, LEN, ZERO_TERMINATED) ((str){ .data = DATA, .size = LEN, .isZeroTerminated = ZERO_TERMINATED })
@ -41,3 +42,5 @@ u32 str_hash32(str s);
str str_toUpper(str src);
str str_toLower(str src);
str hex_to_str(Array buf, bool uppercase);

View File

@ -83,7 +83,7 @@ void* NULLABLE(HashMap_tryGetPtr)(HashMap* ptr, str key){
static void __HashMap_expand(HashMap* ptr){
u32 height_expanded_n = ptr->height_n + 1;
assert(height_expanded_n >= Array_len(&__HashMap_heights, u32) && "HashMap IS FULL! Fix your code.");
assert(height_expanded_n < Array_len(&__HashMap_heights, u32) && "HashMap IS FULL! Fix your code.");
// alloc new HashMapBucket array
u32 height_expanded = ((u32*)__HashMap_heights.data)[height_expanded_n];

View File

@ -55,13 +55,13 @@ void StringBuilder_append_f64(StringBuilder* b, f64 n){
StringBuilder_append_cstr(b, buf);
}
void StringBuilder_append_memory(StringBuilder* b, Array mem) {
void StringBuilder_append_memory(StringBuilder* b, Array mem, bool uppercase) {
if(mem.data == NULL)
return;
char buf[8];
for (u32 i=0; i < mem.size; i++) {
sprintf(buf, "%02x", ((u8*)mem.data)[i]);
sprintf(buf, uppercase ? "%02X" : "%02x", ((u8*)mem.data)[i]);
StringBuilder_append_str(b, str_construct(buf, 2, true));
}
}

View File

@ -1,4 +1,5 @@
#include "string/str.h"
#include "string/StringBuilder.h"
str str_copy(str src){
if(src.data == NULL || src.size == 0)
@ -123,3 +124,9 @@ str str_toLower(str src){
}
return r;
}
str hex_to_str(Array buf, bool uppercase){
StringBuilder sb = StringBuilder_alloc(buf.size * 2 + 1);
StringBuilder_append_memory(&sb, buf, uppercase);
return StringBuilder_getStr(&sb);
}