feat: added strlast and strfirst (and _pred equivs) to strutil
This commit is contained in:
parent
953aacde64
commit
2d2d0bb7ca
|
@ -13,3 +13,35 @@ uintptr_t strnhash(const char* s, size_t n) {
|
||||||
uintptr_t strhash(const char* s) {
|
uintptr_t strhash(const char* s) {
|
||||||
return strnhash(s, strlen(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;
|
||||||
|
}
|
||||||
|
|
|
@ -4,7 +4,13 @@
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
|
||||||
|
typedef int(*CharPredFn)(int);
|
||||||
|
|
||||||
extern uintptr_t strnhash(const char* s, size_t n);
|
extern uintptr_t strnhash(const char* s, size_t n);
|
||||||
extern uintptr_t strhash(const char* s);
|
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
|
#endif // !_fencer_strutil_h
|
||||||
|
|
Loading…
Reference in a new issue