started working on parser
This commit is contained in:
40
src/cstr.c
40
src/cstr.c
@@ -50,3 +50,43 @@ char* NULLABLE(vsprintf_malloc)(size_t buffer_size, cstr format, va_list argv){
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
i32 cstr_seek(const char* src, const char* fragment, u32 startIndex, u32 seekLength){
|
||||
char sc = *src, fc = *fragment;
|
||||
if(sc == 0 || fc == 0)
|
||||
return -1;
|
||||
u32 fr_start = startIndex;
|
||||
for(u32 si = startIndex; si-startIndex < seekLength && sc != 0; si++){
|
||||
sc = src[si];
|
||||
fc = fragment[si-fr_start];
|
||||
if(fc == 0)
|
||||
return fr_start;
|
||||
if(sc != fc)
|
||||
fr_start++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
i32 cstr_seekReverse(const char* src, const char* fragment, u32 startIndex, u32 seekLength){
|
||||
char sc = *src, fc = *fragment;
|
||||
if(sc == 0 || fc == 0)
|
||||
return -1;
|
||||
i32 len = strlen(src);
|
||||
if(startIndex == (u32)-1)
|
||||
startIndex = len-1;
|
||||
u32 fr_len = strlen(fragment);
|
||||
for(u32 si = startIndex; si < (u32)-1 && si != (len - seekLength - 1); si--){
|
||||
if(si + 1 < fr_len)
|
||||
return -1;
|
||||
sc = src[si];
|
||||
fc = fragment[0];
|
||||
u32 fr_start = si;
|
||||
for(u32 fi = 0; fc == sc ; fi++){
|
||||
if(fi == fr_len)
|
||||
return fr_start;
|
||||
fc = fragment[fi];
|
||||
sc = src[si--];
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
Reference in New Issue
Block a user