Files
foobar2000-sdk/pfc/stringNew.cpp
2021-12-14 00:28:25 -07:00

83 lines
2.2 KiB
C++

#include "pfc.h"
namespace pfc {
t_size string::indexOf(char c,t_size base) const {
return pfc::string_find_first(ptr(),c,base);
}
t_size string::lastIndexOf(char c,t_size base) const {
return pfc::string_find_last(ptr(),c,base);
}
t_size string::indexOf(stringp s,t_size base) const {
return pfc::string_find_first(ptr(),s.ptr(),base);
}
t_size string::lastIndexOf(stringp s,t_size base) const {
return pfc::string_find_last(ptr(),s.ptr(),base);
}
t_size string::indexOfAnyChar(stringp _s,t_size base) const {
string s ( _s );
const t_size len = length();
const char* content = ptr();
for(t_size walk = 0; walk < len; ++walk) {
if (s.contains(content[walk])) return walk;
}
return ~0;
}
t_size string::lastIndexOfAnyChar(stringp _s,t_size base) const {
string s ( _s );
const char* content = ptr();
for(t_size _walk = length(); _walk > 0; --_walk) {
const t_size walk = _walk-1;
if (s.contains(content[walk])) return walk;
}
return ~0;
}
bool string::startsWith(char c) const {
return (*this)[0] == c;
}
bool string::startsWith(string s) const {
const char * walk = ptr();
const char * subWalk = s.ptr();
for(;;) {
if (*subWalk == 0) return true;
if (*walk != *subWalk) return false;
walk++; subWalk++;
}
}
bool string::endsWith(char c) const {
const t_size len = length();
if (len == 0) return false;
return ptr()[len-1] == c;
}
bool string::endsWith(string s) const {
const t_size len = length(), subLen = s.length();
if (subLen > len) return false;
return subString(len - subLen) == s;
}
char string::firstChar() const {
return (*this)[0];
}
char string::lastChar() const {
const t_size len = length();
return len > 0 ? (*this)[len-1] : (char)0;
}
string string::replace(stringp strOld, stringp strNew) const {
t_size walk = 0;
string ret;
for(;;) {
t_size next = indexOf(strOld, walk);
if (next == ~0) {
ret += subString(walk); break;
}
ret += subString(walk,next-walk) + strNew;
walk = next + strOld.length();
}
return ret;
}
bool string::contains(char c) const {return indexOf(c) != ~0;}
bool string::contains(stringp s) const {return indexOf(s) != ~0;}
bool string::containsAnyChar(stringp s) const {return indexOfAnyChar(s) != ~0;}
}