feat: added strlast and strfirst (and _pred equivs) to strutil

This commit is contained in:
Sara 2024-01-24 16:56:11 +01:00
parent 953aacde64
commit 2d2d0bb7ca
2 changed files with 38 additions and 0 deletions

View file

@ -13,3 +13,35 @@ uintptr_t strnhash(const char* s, size_t n) {
uintptr_t strhash(const char* s) {
return strnhash(s, strlen(s));
}
long strlast(const char* rbegin, const char* rend, char search) {
const char* itr = rbegin;
while(itr != rend)
if(*itr == search) return itr - rend;
else itr--;
return -1;
}
long strfirst(const char* begin, const char* end, char search) {
const char* itr = begin;
while(itr != end)
if(*itr == search) return itr - begin;
else itr++;
return -1;
}
long strfirst_pred(const char* begin, const char* end, CharPredFn pred) {
const char* itr = begin;
while(itr != end)
if(pred(*itr)) return itr - begin;
else itr++;
return -1;
}
long strlast_pred(const char* rbegin, const char* rend, CharPredFn pred) {
const char* itr = rbegin;
while(itr != rend)
if(pred(*itr)) return itr - rend;
else itr--;
return -1;
}

View file

@ -4,7 +4,13 @@
#include "stdlib.h"
#include "stdint.h"
typedef int(*CharPredFn)(int);
extern uintptr_t strnhash(const char* s, size_t n);
extern uintptr_t strhash(const char* s);
extern long strlast(const char* rbegin, const char* rend, char search);
extern long strfirst(const char* begin, const char* end, char search);
extern long strfirst_pred(const char* begin, const char* end, CharPredFn pred);
extern long strlast_pred(const char* rbegin, const char* rend, CharPredFn pred);
#endif // !_fencer_strutil_h