#include "base.h" #include "../String/StringBuilder.h" #include // returns length of char buffer (without \0) u32 cptr_length(const char* str){ const char *const str_first=str; while(*str) str++; return str-str_first; } // allocates new char[] and copies src there char* cptr_copy(const char* src){ u32 len=cptr_length(src)+1; char* dst=malloc(len); while(len--!=0) dst[len]=src[len]; return dst; } // multiplies char n times char* char_multiply(char c, u32 n){ char* rez=malloc(n+1); rez[n]=0; while(n--!=0) rez[n]=c; return rez; } bool cptr_equals(const char* key0, const char* key1){ char c0=*key0; char c1=*key1; bool eq=c0==c1; while(c0 && c1 && eq) { c0=*++key0; c1=*++key1; eq=c0==c1; } return eq; } bool cptr_startsWith(const char* src, const char* fragment){ char c0=*src; char c1=*fragment; bool eq=c0==c1 && c0 !=0 && c1!=0; while(c0 && c1 && eq) { c0=*++src; c1=*++fragment; eq=c0==c1; if(c1==0) return true; } return eq; } bool cptr_endsWith(const char* src, const char* fragment){ u32 src_len=cptr_length(src); u32 fr_len=cptr_length(fragment); if(src_len0) StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=src_remains_len}); string result=StringBuilder_build(sb); return result.ptr; }