PIString/PIChar explicit, support char16_t

This commit is contained in:
2023-07-06 19:59:26 +03:00
parent 8ad2503c5a
commit 61f1a34c14
11 changed files with 132 additions and 73 deletions

View File

@@ -404,6 +404,16 @@ PIString PIString::fromAscii(const char * s, int len) {
}
PIString PIString::fromAscii(const PIByteArray & ascii) {
PIString ret;
ret.resize(ascii.size());
for (int l = 0; l < ret.size_s(); ++l) {
ret[l] = PIChar(ascii[l]);
}
return ret;
}
PIString PIString::fromCodepage(const char * s, const char * c) {
PIString ret;
if (s[0] > '\0')
@@ -572,12 +582,6 @@ PIString & PIString::operator+=(const char * str) {
}
PIString & PIString::operator+=(const PIByteArray & ba) {
appendFromChars((const char *)ba.data(), ba.size_s(), __utf8name__);
return *this;
}
PIString::~PIString() {
deleteData();
}
@@ -593,6 +597,16 @@ PIString & PIString::operator+=(const wchar_t * str) {
}
PIString & PIString::operator+=(const char16_t * str) {
if (!str) return *this;
int i = -1;
while (str[++i]) {
d.push_back(PIChar(str[i]));
}
return *this;
}
PIString & PIString::operator+=(const PIString & str) {
d.append(str.d);
return *this;
@@ -1161,12 +1175,24 @@ int PIString::entries(const PIChar c) const {
}
bool PIString::startsWith(const PIChar c) const {
if (isEmpty()) return false;
return front() == c;
}
bool PIString::startsWith(const PIString & str) const {
if (size() < str.size()) return false;
return str == left(str.size());
}
bool PIString::endsWith(const PIChar c) const {
if (isEmpty()) return false;
return back() == c;
}
bool PIString::endsWith(const PIString & str) const {
if (size() < str.size()) return false;
return str == right(str.size());