first
This commit is contained in:
commit
db1adbb838
35 changed files with 4408 additions and 0 deletions
115
src/std/string.c
Normal file
115
src/std/string.c
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
#include "arc/std/string.h"
|
||||
|
||||
#include "arc/std/errno.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
uint8_t ARC_String_Alpha(char *val, uint64_t length){
|
||||
for(; length; length--){
|
||||
if(val[length - 1] >= 'a' && val[length - 1] <= 'z'){ continue; }
|
||||
if(val[length - 1] >= 'A' && val[length - 1] <= 'Z'){ continue; }
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t ARC_String_ToUint64_t(const char *data, ARC_StringSubstr *substr){
|
||||
char temp[substr->length + 1];
|
||||
strncpy(temp, data + substr->index, substr->length);
|
||||
temp[substr->length] = '\0';
|
||||
|
||||
return (uint64_t) strtoul(temp, NULL, 10);
|
||||
}
|
||||
|
||||
int32_t ARC_String_Find(char *data, char *substr, uint64_t *index){
|
||||
if(!data || !substr){ return ARC_ERRNO_NULL; }
|
||||
|
||||
uint64_t max = strlen(data);
|
||||
uint64_t sub = strlen(substr);
|
||||
if(!max || !sub || sub > max){ return ARC_ERRNO_DATA; }
|
||||
|
||||
max -= sub - 1;
|
||||
for(uint64_t i = 0; max; i++, max--){
|
||||
if(!strncmp(data + i, substr, sub)){
|
||||
*index = i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
*index = ~((uint64_t)0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ARC_String_FindBack(char *data, char *substr, uint64_t *index){
|
||||
if(!data || !substr){ return ARC_ERRNO_NULL; }
|
||||
|
||||
uint64_t max = strlen(data);
|
||||
uint64_t sub = strlen(substr);
|
||||
if(!max || !sub || sub > max){ return ARC_ERRNO_DATA; }
|
||||
|
||||
max -= sub - 1;
|
||||
for(; max; max--){
|
||||
if(!strncmp(data + (max - 1), substr, sub)){
|
||||
*index = max;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
*index = ~((uint64_t)0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ARC_StringSubstr_StripEnds(char *data, char *substr, ARC_StringSubstr *subdata){
|
||||
if(!subdata){ return ARC_ERRNO_NULL; }
|
||||
if(!substr){ substr = (char *)" "; }
|
||||
|
||||
subdata->length = (subdata->length)? subdata->length : strlen(data);
|
||||
uint64_t max = subdata->length;
|
||||
uint64_t sub = strlen(substr);
|
||||
if(!max || !sub || sub > max){ return ARC_ERRNO_DATA; }
|
||||
|
||||
max -= sub - 1;
|
||||
for(; max; max--){
|
||||
if(strncmp(data + subdata->index + (max - 1), substr, sub)){
|
||||
subdata->length = max;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
max = subdata->length - (sub - 1);
|
||||
for(uint64_t i = 0; max; i++, max--){
|
||||
if(strncmp(data + subdata->index + i, substr, sub)){
|
||||
subdata->index += i;
|
||||
subdata->length -= i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t ARC_StringSubstr_StripWhitespaceEnds(char *data, ARC_StringSubstr *subdata){
|
||||
if(!subdata){ return ARC_ERRNO_NULL; }
|
||||
|
||||
subdata->length = (subdata->length)? subdata->length : strlen(data);
|
||||
uint64_t max = subdata->length;
|
||||
if(!max){ return ARC_ERRNO_DATA; }
|
||||
|
||||
for(; max; max--){
|
||||
if(data[subdata->index + (max - 1)] != ' ' && data[subdata->index + (max - 1)] != '\n' && data[subdata->index + (max - 1)] != '\t' && data[subdata->index + (max - 1)] != '\r'){
|
||||
subdata->length = max;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
max = subdata->length;
|
||||
for(uint64_t i = 0; max; i++, max--){
|
||||
if(data[subdata->index + i] != ' ' && data[subdata->index + i] != '\n' && data[subdata->index + i] != '\t' && data[subdata->index + i] != '\r'){
|
||||
subdata->index += i;
|
||||
subdata->length -= i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue