new StringBuilder functions
This commit is contained in:
@@ -1,19 +1,21 @@
|
||||
#include "tlibc/string/str.h"
|
||||
#include "tlibc/string/StringBuilder.h"
|
||||
|
||||
str str_copy(str src){
|
||||
if(src.data == NULL || src.size == 0)
|
||||
return src;
|
||||
str str_copy(const str self){
|
||||
if(self.data == NULL || self.size == 0)
|
||||
return self;
|
||||
|
||||
str nstr = str_construct((char*)malloc(src.size + 1), src.size, true);
|
||||
memcpy(nstr.data, src.data, src.size);
|
||||
nstr.data[nstr.size] = '\0';
|
||||
return nstr;
|
||||
str copy = str_construct((char*)malloc(self.size + 1), self.size, true);
|
||||
memcpy(copy.data, self.data, self.size);
|
||||
copy.data[copy.size] = '\0';
|
||||
return copy;
|
||||
}
|
||||
|
||||
bool str_equals(str s0, str s1){
|
||||
if(s0.size != s1.size)
|
||||
bool str_equals(const str self, const str other){
|
||||
if(self.size != other.size)
|
||||
return false;
|
||||
if(self.data == other.data)
|
||||
return true;
|
||||
/*
|
||||
BENCHMARK:
|
||||
str_equals64: 2.967s
|
||||
@@ -21,7 +23,7 @@ bool str_equals(str s0, str s1){
|
||||
strncmp: 1.611s
|
||||
memcmp: 0.710s
|
||||
*/
|
||||
return memcmp(s0.data, s1.data, s0.size) == 0;
|
||||
return memcmp(self.data, other.data, self.size) == 0;
|
||||
}
|
||||
|
||||
str str_reverse(str s){
|
||||
@@ -34,7 +36,7 @@ str str_reverse(str s){
|
||||
return r;
|
||||
}
|
||||
|
||||
i32 str_seek(str src, str fragment, u32 startIndex){
|
||||
i32 str_seek(const str src, const str fragment, u32 startIndex){
|
||||
if(src.size == 0 || fragment.size == 0)
|
||||
return -1;
|
||||
|
||||
@@ -49,7 +51,7 @@ i32 str_seek(str src, str fragment, u32 startIndex){
|
||||
return -1;
|
||||
}
|
||||
|
||||
i32 str_seekReverse(str src, str fragment, u32 startIndex){
|
||||
i32 str_seekReverse(const str src, const str fragment, u32 startIndex){
|
||||
if(src.size == 0 || fragment.size == 0)
|
||||
return -1;
|
||||
|
||||
@@ -66,7 +68,7 @@ i32 str_seekReverse(str src, str fragment, u32 startIndex){
|
||||
return -1;
|
||||
}
|
||||
|
||||
i32 str_seekChar(str src, char c, u32 startIndex){
|
||||
i32 str_seekChar(const str src, char c, u32 startIndex){
|
||||
for(u32 i = startIndex; i < src.size; i++){
|
||||
if(src.data[i] == c)
|
||||
return i;
|
||||
@@ -74,7 +76,7 @@ i32 str_seekChar(str src, char c, u32 startIndex){
|
||||
return -1;
|
||||
}
|
||||
|
||||
i32 str_seekCharReverse(str src, char c, u32 startIndex){
|
||||
i32 str_seekCharReverse(const str src, char c, u32 startIndex){
|
||||
if(startIndex > src.size - 1)
|
||||
startIndex = src.size - 1;
|
||||
for(u32 i = startIndex; i != (u32)-1; i--){
|
||||
@@ -84,24 +86,27 @@ i32 str_seekCharReverse(str src, char c, u32 startIndex){
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool str_startsWith(str src, str fragment){
|
||||
bool str_startsWith(const str src, const str fragment){
|
||||
if(src.size < fragment.size)
|
||||
return false;
|
||||
|
||||
src.size = fragment.size;
|
||||
return str_equals(src, fragment);
|
||||
str src_fragment = str_null;
|
||||
src_fragment.data = src.data;
|
||||
src_fragment.size = fragment.size;
|
||||
return str_equals(src_fragment, fragment);
|
||||
}
|
||||
|
||||
bool str_endsWith(str src, str fragment){
|
||||
bool str_endsWith(const str src, const str fragment){
|
||||
if(src.size < fragment.size)
|
||||
return false;
|
||||
|
||||
src.data = (char*)(src.data + src.size - fragment.size);
|
||||
src.size = fragment.size;
|
||||
return str_equals(src, fragment);
|
||||
str src_fragment = str_null;
|
||||
src_fragment.data = (char*)(src.data + src.size - fragment.size);
|
||||
src_fragment.size = fragment.size;
|
||||
return str_equals(src_fragment, fragment);
|
||||
}
|
||||
|
||||
u32 str_hash32(str s){
|
||||
u32 str_hash32(const str s){
|
||||
u8* ubuf = (u8*)s.data;
|
||||
u32 hash=0;
|
||||
for (u32 i = 0; i < s.size; i++)
|
||||
@@ -109,7 +114,7 @@ u32 str_hash32(str s){
|
||||
return hash;
|
||||
}
|
||||
|
||||
str str_toUpper(str src){
|
||||
str str_toUpper(const str src){
|
||||
str r = str_copy(src);
|
||||
for (u32 i = 0; i < r.size; i++){
|
||||
if(isAlphabeticalLower(r.data[i]))
|
||||
@@ -118,7 +123,7 @@ str str_toUpper(str src){
|
||||
return r;
|
||||
}
|
||||
|
||||
str str_toLower(str src){
|
||||
str str_toLower(const str src){
|
||||
str r = str_copy(src);
|
||||
for (u32 i = 0; i < r.size; i++){
|
||||
if(isAlphabeticalUpper(r.data[i]))
|
||||
|
||||
Reference in New Issue
Block a user