Add find and rfine functions
This commit is contained in:
parent
f8e0804dd2
commit
093d0daf6f
@ -1,5 +1,6 @@
|
|||||||
#include "str8.h"
|
#include "str8.h"
|
||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
c8 wapp_str8_get(const Str8 *str, u64 index) {
|
c8 wapp_str8_get(const Str8 *str, u64 index) {
|
||||||
if (index >= str->size) {
|
if (index >= str->size) {
|
||||||
@ -16,3 +17,33 @@ void wapp_str8_set(Str8 *str, u64 index, c8 c) {
|
|||||||
|
|
||||||
str->buf[index] = c;
|
str->buf[index] = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i64 wapp_str8_find(Str8RO *str, Str8RO substr) {
|
||||||
|
if (substr.size > str->size) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (u64 i = 0; i < str->size; ++i) {
|
||||||
|
const c8 *sub = str->buf + i;
|
||||||
|
if (memcmp(sub, substr.buf, substr.size) == 0) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 wapp_str8_rfind(Str8RO *str, Str8RO substr) {
|
||||||
|
if (substr.size > str->size) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i64 i = str->size - substr.size; i >= 0; --i) {
|
||||||
|
const c8 *sub = str->buf + i;
|
||||||
|
if (memcmp(sub, substr.buf, substr.size) == 0) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
@ -35,6 +35,9 @@ typedef const Str8 Str8RO;
|
|||||||
c8 wapp_str8_get(Str8RO *str, u64 index);
|
c8 wapp_str8_get(Str8RO *str, u64 index);
|
||||||
void wapp_str8_set(Str8 *str, u64 index, c8 c);
|
void wapp_str8_set(Str8 *str, u64 index, c8 c);
|
||||||
|
|
||||||
|
i64 wapp_str8_find(Str8RO *str, Str8RO substr);
|
||||||
|
i64 wapp_str8_rfind(Str8RO *str, Str8RO substr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
END_C_LINKAGE
|
END_C_LINKAGE
|
||||||
#endif // !__cplusplus
|
#endif // !__cplusplus
|
||||||
|
Loading…
Reference in New Issue
Block a user