11 if(length == ~(uint64_t)0){
13 ARC_DEBUG_LOG_ERROR(
"ARC_String_Create(string, data, length), length was max uint64_t which is bigger than allowed");
20 (*string)->data = (
char *)malloc(
sizeof(
char) * (length + 1));
21 (*string)->length = length;
25 strncpy((*string)->data, data, length);
29 (*string)->data[length] =
'\0';
39 if(length == ~(uint64_t)0){
41 ARC_DEBUG_LOG_ERROR(
"ARC_String_Create(string, data, length), length was max uint64_t which is bigger than allowed");
48 (*string)->data = (
char *)calloc(
sizeof(
char), length + 1);
49 (*string)->length = length;
54 if(string->
data != NULL){
84 if(start + length > original->
length){
91 for(uint32_t i = 0; i < length; i++){
95 strncpy(data, original->
data + start, length);
106 if(substring != NULL){
131 char *data = (
char *)malloc(
sizeof(
char) * ((*string)->length + length + 1));
133 strncpy(data, (*string)->data, (*string)->length);
134 strncpy(data + (*string)->length, cstring, length);
135 data[(*string)->length + length] =
'\0';
137 free((*string)->data);
139 (*string)->data = data;
140 (*string)->length = (*string)->length + length;
160 if(string->
length != length){
164 if(strncmp(string->
data, cstring, string->
length)){
180 if(string->
length - offset < length){
184 if(strncmp(string->
data + offset, cstring, length)){
193 for(uint64_t length = string->
length; length; length--){
194 if(string->
data[length - 1] >=
'a' && string->
data[length - 1] <=
'z'){
198 if(string->
data[length - 1] >=
'A' && string->
data[length - 1] <=
'Z'){
209 for(uint64_t index = 0; index <
string->length; index++){
210 if(string->
data[index] <
'0' || string->
data[index] >
'9'){
219 return (uint64_t) strtoul(string->
data, NULL, 10);
223 return (int64_t) strtol(string->
data, NULL, 10);
227 return strtod(string->
data, NULL);
232 if(!
string || !substring){
242 uint64_t max =
string->length - (substring->
length - 1);
243 for(uint64_t i = 0; max; i++, max--){
244 if(!strncmp(string->
data + i, substring->
data, substring->
length)){
253 if(!
string || !cstring){
255 ARC_DEBUG_LOG_ERROR(
"ARC_String_FindCString(string, cstring, length), string or cstring was null");
259 if(string->
length < length){
263 uint64_t max =
string->length - (length - 1);
264 for(uint64_t i = 0; i < max; i++){
265 if(!strncmp(string->
data + i, cstring, length)){
278 if(!
string || !substring){
280 ARC_DEBUG_LOG_ERROR(
"ARC_String_FindBack(string, substring), string or substring was null");
288 uint64_t max =
string->length - (substring->
length - 1);
290 if(!strncmp(string->
data + (max - 1), substring->
data, substring->
length)){
299 if(!
string || !cstring){
301 ARC_DEBUG_LOG_ERROR(
"ARC_String_FindBack(string, substring), string or substring was null");
305 if(length > string->
length){
309 uint64_t max =
string->length - (length - 1);
311 if(!strncmp(string->
data + (max - 1), cstring, length)){
336 uint64_t length = original->
length - 1;
337 for(; length; length--){
338 if(strncmp(original->
data + (length - 1), &charToStrip, 1)){
350 for(; start <= length; start++){
351 if(strncmp(original->
data + start, &charToStrip, 1)){
380 for(uint64_t i = 0; i < original->
length; i++){
381 if(original->
data[i] ==
' '){
385 if(original->
data[i] ==
'\n'){
389 if(original->
data[i] ==
'\t'){
393 if(original->
data[i] ==
'\r'){
408 for(uint32_t i = 0; i < length; i++){
413 for(uint64_t i = 0; i < length; i++){
414 if(original->
data[i] ==
' '){
418 if(original->
data[i] ==
'\n'){
422 if(original->
data[i] ==
'\t'){
426 if(original->
data[i] ==
'\r'){
430 data[start] = original->
data[i];
439 for(uint64_t i = 0; i < original->
length; i++){
440 if(original->
data[i] ==
' '){
444 if(original->
data[i] ==
'\n'){
448 if(original->
data[i] ==
'\t'){
452 if(original->
data[i] ==
'\r'){
461 for(uint64_t i = original->
length;; i--){
462 if(original->
data[i - 1] ==
' '){
466 if(original->
data[i - 1] ==
'\n'){
470 if(original->
data[i - 1] ==
'\t'){
474 if(original->
data[i - 1] ==
'\r'){
487 for(uint32_t i = 0; i < first->
length; i++){
488 data[i] = first->
data[i];
491 for(uint32_t i = 0; i < second->
length; i++){
500 if(removeIndex == 0 && removeIndex + removeLength >= original->
length){
505 if(removeIndex == 0){
510 if(removeIndex + removeLength >= original->
length){
529 if(
arc_errno != 0 || copyReplaced == NULL){
534 *
string = copyReplaced;
539 if(original == NULL || pattern == NULL || replacement == NULL){
541 ARC_DEBUG_LOG_ERROR(
"ARC_String_CopyReplaceMatching(newString, original, pattern, replacement), original, pattern, or replacement was null");
545 uint64_t numberOfMatches = 0;
546 for(uint64_t originalIndex = 0; originalIndex < original->
length; originalIndex++){
549 originalIndex += pattern->
length - 1;
554 if(numberOfMatches == 0){
561 (*newString)->data = (
char *)malloc(
sizeof(
char *) * original->
length + 1);
563 for(uint64_t originalIndex = 0, newIndex = 0; originalIndex < original->
length; originalIndex++, newIndex++){
565 for(uint64_t replacementIndex = 0; replacementIndex < replacement->
length; replacementIndex++){
566 (*newString)->data[newIndex + replacementIndex] = replacement->
data[replacementIndex];
569 originalIndex += pattern->
length - 1;
570 newIndex += replacement->
length - 1;
574 (*newString)->data[newIndex] = original->
data[originalIndex];
577 (*newString)->data[(*newString)->length] =
'\0';
582 if(*
string == NULL || patternCString == NULL || replacementCString == NULL){
584 ARC_DEBUG_LOG_ERROR(
"ARC_String_ReplaceMatchingCString(string, patternCString, patternLength, replacementCString, replacementLength), *string, patternCString, or replacementCString was null");
590 uint64_t numberOfMatches = 0;
591 for(uint64_t originalIndex = 0; originalIndex < original->
length; originalIndex++){
594 originalIndex += patternLength - 1;
599 if(numberOfMatches == 0){
604 (*string)->
length = original->
length + (replacementLength - patternLength);
605 (*string)->data = (
char *)malloc(
sizeof(
char *) * original->
length + 1);
607 for(uint64_t originalIndex = 0, newIndex = 0; originalIndex < original->
length; originalIndex++, newIndex++){
609 for(uint64_t replacementIndex = 0; replacementIndex < replacementLength; replacementIndex++){
610 (*string)->data[newIndex + replacementIndex] = replacementCString[replacementIndex];
613 originalIndex += patternLength - 1;
614 newIndex += replacementLength - 1;
618 (*string)->data[newIndex] = original->
data[originalIndex];
621 (*string)->data[(*string)->length] =
'\0';
#define ARC_ERRNO_OVERFLOW
#define ARC_DEBUG_LOG_ERROR(STR)
uint64_t ARC_String_ToUint64_t(ARC_String *string)
converst substring from string to uint64_t
void ARC_String_StripEndsWhitespace(ARC_String **stripped, ARC_String *original)
strips the whitespace from the ends of a string
void ARC_String_RemoveSubstring(ARC_String **newString, ARC_String *original, ARC_String *substring)
copy a subtring from a givin ARC_String
int64_t ARC_String_ToInt64_t(ARC_String *string)
converst substring from string to int64_t
void ARC_String_AppendCStringWithStrlen(ARC_String **string, const char *cstring)
appends to an ARC_String with an ARC_String
void ARC_String_Merge(ARC_String **combined, ARC_String *first, ARC_String *second)
merges two strings together
uint64_t ARC_String_FindCStringWithStrlen(ARC_String *string, const char *cstring)
takes given cstring and gives position of first matching
ARC_Bool ARC_String_EqualsCString(ARC_String *string, const char *cstring, uint64_t length)
check if ARC_String and cstring match
void ARC_String_CopySubstring(ARC_String **substring, ARC_String *original, uint64_t start, uint64_t length)
copy a subtring from a givin ARC_String
uint64_t ARC_String_FindBack(ARC_String *string, ARC_String *substring)
takes a given string, and assigns index and length for position of last matching substring
uint64_t ARC_String_FindBackCStringWithStrlen(ARC_String *string, const char *cstring)
takes a given cstring and give position of last matching
void ARC_String_CreateWithStrlen(ARC_String **string, char *data)
creates ARC_String type with strinlen
void ARC_String_AppendCString(ARC_String **string, const char *cstring, uint64_t length)
appends to an ARC_String with an ARC_String
void ARC_String_Create(ARC_String **string, char *data, uint64_t length)
creates ARC_String type
void ARC_String_CopyReplaceMatching(ARC_String **newString, ARC_String *original, ARC_String *pattern, ARC_String *replacement)
replaces characters in a copy of a string matching the given pattern
uint64_t ARC_String_FindBackCString(ARC_String *string, const char *cstring, uint64_t length)
takes a given cstring and give position of last matching
ARC_Bool ARC_String_EqualsCStringWithStrlen(ARC_String *string, const char *cstring)
check if ARC_String and cstring match
void ARC_String_Copy(ARC_String **copy, ARC_String *original)
copy a ARC_String
void ARC_String_ReplaceMatchingCStringWithStrlen(ARC_String **string, char *patternCString, char *replacementCString)
replaces characters in string matching the given pattern
ARC_Bool ARC_String_SubstringEquals(ARC_String *first, uint64_t offset, ARC_String *second)
check if substring of first equals second string
void ARC_String_Append(ARC_String **string, ARC_String *append)
appends to an ARC_String with an ARC_String
ARC_Bool ARC_String_SubstringEqualsCString(ARC_String *string, uint64_t offset, const char *cstring, uint64_t length)
check if ARC_String and cstring match
uint64_t ARC_String_FindCString(ARC_String *string, const char *cstring, uint64_t length)
takes given cstring and gives position of first matching
void ARC_String_CreateEmpty(ARC_String **string, uint64_t length)
creates an empty ARC_String type, useful if you want to add to the string over time without having to...
void ARC_String_StripWhitespace(ARC_String **stripped, ARC_String *original)
strips whitespace from a ARC_String
ARC_Bool ARC_String_Equals(ARC_String *first, ARC_String *second)
checks if two strings are the same
ARC_Bool ARC_String_IsAlpha(ARC_String *string)
checks if string is alphabetic
void ARC_String_Destroy(ARC_String *string)
destroys ARC_String type
uint64_t ARC_String_Find(ARC_String *string, ARC_String *substring)
takes a given string, and assigns index and length for position of first matching substring
void ARC_String_ReplaceMatchingCString(ARC_String **string, char *patternCString, uint64_t patternLength, char *replacementCString, uint64_t replacementLength)
replaces characters in string matching the given pattern
double ARC_String_ToDouble(ARC_String *string)
converst substring from string to double
void ARC_String_ReplaceWithSubstring(ARC_String **string, uint64_t start, uint64_t length)
replaces a string with a section of itself
void ARC_String_StripEnds(ARC_String **stripped, ARC_String *original, char charToStrip)
strips the ends based on a given char
void ARC_String_RemoveSection(ARC_String **newString, ARC_String *original, uint64_t removeIndex, uint64_t removeLength)
copy a subtring from a givin ARC_String
ARC_Bool ARC_String_IsNumeric(ARC_String *string)
checks if string is made out of only numbers
void ARC_String_ReplaceMatching(ARC_String **string, ARC_String *pattern, ARC_String *replacement)
replaces characters in string matching the given pattern
substring position within a string