forked from MrBesen/libmrbesen
44 lines
1006 B
C++
44 lines
1006 B
C++
#include "util.h"
|
|
|
|
#include <algorithm>
|
|
|
|
unsigned int mrbesen::Util::count(const std::string& str, char c) {
|
|
size_t pos = 0;
|
|
long count = -1;
|
|
do {
|
|
pos = str.find(c, pos);
|
|
++count;
|
|
} while((pos++) != std::string::npos);
|
|
return (unsigned int) count;
|
|
}
|
|
|
|
bool icompare_pred(unsigned char a, unsigned char b) {
|
|
return std::tolower(a) == std::tolower(b);
|
|
}
|
|
|
|
bool mrbesen::Util::equalsIgnoreCase(const std::string& a, const std::string& b, size_t max) {
|
|
size_t al = a.size(), bl = b.size();
|
|
if((al == 0 && bl == 0) || max == 0) return true;
|
|
|
|
if(al != bl && (al < max || bl < max)) {
|
|
return false;
|
|
}
|
|
|
|
if(max == std::string::npos) {
|
|
return std::equal(b.begin(), b.end(), a.begin(), icompare_pred);
|
|
} else {
|
|
if(max > al) max = al;
|
|
if(max > bl) max = bl;
|
|
|
|
return std::equal(b.begin(), b.begin()+max, a.begin(), icompare_pred);
|
|
}
|
|
}
|
|
|
|
void mrbesen::Util::toLower(const std::string& in, std::string& out) {
|
|
out = "";
|
|
out.reserve(in.size());
|
|
for(char c : in) {
|
|
out += std::tolower(c);
|
|
}
|
|
}
|