88 lines
1.5 KiB
C
88 lines
1.5 KiB
C
global String string_empty;
|
|
|
|
function S64
|
|
clamp_top_s64(S64 val, S64 max){
|
|
if(val>max)return max;
|
|
return val;
|
|
}
|
|
|
|
function SizeU
|
|
clamp_top_sizeu(SizeU val, SizeU max){
|
|
if(val>max)return max;
|
|
return val;
|
|
}
|
|
|
|
function SizeU
|
|
get_align_offset(SizeU size, SizeU align){
|
|
SizeU mask = align - 1;
|
|
SizeU val = size & mask;
|
|
if(val){
|
|
val = align - val;
|
|
}
|
|
return val;
|
|
}
|
|
|
|
function SizeU
|
|
align_up(SizeU size, SizeU align){
|
|
SizeU result = size + get_align_offset(size, align);
|
|
return result;
|
|
}
|
|
|
|
function U64
|
|
hash_fnv(String string) {
|
|
U64 hash = (U64)14695981039346656037ULL;
|
|
for (U64 i = 0; i < string.len; i++) {
|
|
hash = hash ^ (U64)(string.str[i]);
|
|
hash = hash * (U64)1099511628211ULL;
|
|
}
|
|
return hash;
|
|
}
|
|
|
|
function U64
|
|
is_pow2(U64 x) {
|
|
assert(x != 0);
|
|
B32 result = (x & (x - 1llu)) == 0;
|
|
return result;
|
|
}
|
|
|
|
function U64
|
|
wrap_around_pow2(U64 x, U64 power_of_2) {
|
|
assert(is_pow2(power_of_2));
|
|
U64 r = (((x)&((power_of_2)-1llu)));
|
|
return r;
|
|
}
|
|
|
|
function B32
|
|
string_compare(String a, String b){
|
|
if(a.len != b.len)
|
|
return false;
|
|
for(S64 i = 0; i < a.len; i++){
|
|
if(a.str[i] != b.str[i])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function U8
|
|
char_to_lower(U8 c){
|
|
if(c >= 'A' && c <= 'Z')
|
|
c += 32;
|
|
return c;
|
|
}
|
|
|
|
function U8
|
|
char_to_upper(U8 c){
|
|
if(c >= 'a' && c <= 'z')
|
|
c -= 32;
|
|
return c;
|
|
}
|
|
|
|
function String
|
|
string_to_lower(Arena *arena, String string){
|
|
String result = arena_push_string_copy(arena, string);
|
|
for(S64 i = 0; i < string.len; i++){
|
|
result.str[i] = char_to_lower(result.str[i]);
|
|
}
|
|
return result;
|
|
}
|