diff options
Diffstat (limited to 'core/ustring.cpp')
-rw-r--r-- | core/ustring.cpp | 757 |
1 files changed, 484 insertions, 273 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index a1a2280066..ed096bd475 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -83,8 +83,9 @@ bool select_word(const String &p_s, int p_col, int &r_beg, int &r_end) { end++; } - if (end < s.length()) + if (end < s.length()) { end += 1; + } r_beg = beg; r_end = end; @@ -114,10 +115,11 @@ CharString &CharString::operator+=(char p_char) { } const char *CharString::get_data() const { - if (size()) + if (size()) { return &operator[](0); - else + } else { return ""; + } } CharString &CharString::operator=(const char *p_cstr) { @@ -153,8 +155,9 @@ void String::copy_from(const char *p_cstr) { int len = 0; const char *ptr = p_cstr; - while (*(ptr++) != 0) + while (*(ptr++) != 0) { len++; + } if (len == 0) { resize(0); @@ -178,8 +181,9 @@ void String::copy_from(const CharType *p_cstr, const int p_clip_to) { int len = 0; const CharType *ptr = p_cstr; - while ((p_clip_to < 0 || len < p_clip_to) && *(ptr++) != 0) + while ((p_clip_to < 0 || len < p_clip_to) && *(ptr++) != 0) { len++; + } if (len == 0) { resize(0); @@ -211,10 +215,12 @@ void String::copy_from(const CharType &p_char) { } bool String::operator==(const String &p_str) const { - if (length() != p_str.length()) + if (length() != p_str.length()) { return false; - if (empty()) + } + if (empty()) { return true; + } int l = length(); @@ -223,8 +229,9 @@ bool String::operator==(const String &p_str) const { /* Compare char by char */ for (int i = 0; i < l; i++) { - if (src[i] != dst[i]) + if (src[i] != dst[i]) { return false; + } } return true; @@ -255,8 +262,9 @@ String &String::operator+=(const String &p_str) { return *this; } - if (p_str.empty()) + if (p_str.empty()) { return *this; + } int from = length(); @@ -267,8 +275,9 @@ String &String::operator+=(const String &p_str) { set(length(), 0); - for (int i = 0; i < p_str.length(); i++) + for (int i = 0; i < p_str.length(); i++) { dst[from + i] = src[i]; + } return *this; } @@ -287,13 +296,15 @@ String &String::operator+=(CharType p_char) { } String &String::operator+=(const char *p_str) { - if (!p_str || p_str[0] == 0) + if (!p_str || p_str[0] == 0) { return *this; + } int src_len = 0; const char *ptr = p_str; - while (*(ptr++) != 0) + while (*(ptr++) != 0) { src_len++; + } int from = length(); @@ -303,8 +314,9 @@ String &String::operator+=(const char *p_str) { set(length(), 0); - for (int i = 0; i < src_len; i++) + for (int i = 0; i < src_len; i++) { dst[from + i] = p_str[i]; + } return *this; } @@ -320,18 +332,21 @@ void String::operator=(const CharType *p_str) { bool String::operator==(const StrRange &p_str_range) const { int len = p_str_range.len; - if (length() != len) + if (length() != len) { return false; - if (empty()) + } + if (empty()) { return true; + } const CharType *c_str = p_str_range.c_str; const CharType *dst = &operator[](0); /* Compare char by char */ for (int i = 0; i < len; i++) { - if (c_str[i] != dst[i]) + if (c_str[i] != dst[i]) { return false; + } } return true; @@ -341,13 +356,16 @@ bool String::operator==(const char *p_str) const { int len = 0; const char *aux = p_str; - while (*(aux++) != 0) + while (*(aux++) != 0) { len++; + } - if (length() != len) + if (length() != len) { return false; - if (empty()) + } + if (empty()) { return true; + } int l = length(); @@ -355,8 +373,9 @@ bool String::operator==(const char *p_str) const { /* Compare char by char */ for (int i = 0; i < l; i++) { - if (p_str[i] != dst[i]) + if (p_str[i] != dst[i]) { return false; + } } return true; @@ -366,13 +385,16 @@ bool String::operator==(const CharType *p_str) const { int len = 0; const CharType *aux = p_str; - while (*(aux++) != 0) + while (*(aux++) != 0) { len++; + } - if (length() != len) + if (length() != len) { return false; - if (empty()) + } + if (empty()) { return true; + } int l = length(); @@ -380,8 +402,9 @@ bool String::operator==(const CharType *p_str) const { /* Compare char by char */ for (int i = 0; i < l; i++) { - if (p_str[i] != dst[i]) + if (p_str[i] != dst[i]) { return false; + } } return true; @@ -396,10 +419,12 @@ bool String::operator!=(const CharType *p_str) const { } bool String::operator<(const CharType *p_str) const { - if (empty() && p_str[0] == 0) + if (empty() && p_str[0] == 0) { return false; - if (empty()) + } + if (empty()) { return true; + } return is_str_less(c_str(), p_str); } @@ -409,10 +434,12 @@ bool String::operator<=(const String &p_str) const { } bool String::operator<(const char *p_str) const { - if (empty() && p_str[0] == 0) + if (empty() && p_str[0] == 0) { return false; - if (empty()) + } + if (empty()) { return true; + } return is_str_less(c_str(), p_str); } @@ -422,27 +449,31 @@ bool String::operator<(const String &p_str) const { } signed char String::nocasecmp_to(const String &p_str) const { - if (empty() && p_str.empty()) + if (empty() && p_str.empty()) { return 0; - if (empty()) + } + if (empty()) { return -1; - if (p_str.empty()) + } + if (p_str.empty()) { return 1; + } const CharType *that_str = p_str.c_str(); const CharType *this_str = c_str(); while (true) { - if (*that_str == 0 && *this_str == 0) + if (*that_str == 0 && *this_str == 0) { return 0; //we're equal - else if (*this_str == 0) + } else if (*this_str == 0) { return -1; //if this is empty, and the other one is not, then we're less.. I think? - else if (*that_str == 0) + } else if (*that_str == 0) { return 1; //otherwise the other one is smaller.. - else if (_find_upper(*this_str) < _find_upper(*that_str)) //more than + } else if (_find_upper(*this_str) < _find_upper(*that_str)) { //more than return -1; - else if (_find_upper(*this_str) > _find_upper(*that_str)) //less than + } else if (_find_upper(*this_str) > _find_upper(*that_str)) { //less than return 1; + } this_str++; that_str++; @@ -450,27 +481,31 @@ signed char String::nocasecmp_to(const String &p_str) const { } signed char String::casecmp_to(const String &p_str) const { - if (empty() && p_str.empty()) + if (empty() && p_str.empty()) { return 0; - if (empty()) + } + if (empty()) { return -1; - if (p_str.empty()) + } + if (p_str.empty()) { return 1; + } const CharType *that_str = p_str.c_str(); const CharType *this_str = c_str(); while (true) { - if (*that_str == 0 && *this_str == 0) + if (*that_str == 0 && *this_str == 0) { return 0; //we're equal - else if (*this_str == 0) + } else if (*this_str == 0) { return -1; //if this is empty, and the other one is not, then we're less.. I think? - else if (*that_str == 0) + } else if (*that_str == 0) { return 1; //otherwise the other one is smaller.. - else if (*this_str < *that_str) //more than + } else if (*this_str < *that_str) { //more than return -1; - else if (*this_str > *that_str) //less than + } else if (*this_str > *that_str) { //less than return 1; + } this_str++; that_str++; @@ -483,53 +518,63 @@ signed char String::naturalnocasecmp_to(const String &p_str) const { if (this_str && that_str) { while (*this_str == '.' || *that_str == '.') { - if (*this_str++ != '.') + if (*this_str++ != '.') { return 1; - if (*that_str++ != '.') + } + if (*that_str++ != '.') { return -1; - if (!*that_str) + } + if (!*that_str) { return 1; - if (!*this_str) + } + if (!*this_str) { return -1; + } } while (*this_str) { - if (!*that_str) + if (!*that_str) { return 1; - else if (IS_DIGIT(*this_str)) { + } else if (IS_DIGIT(*this_str)) { int64_t this_int, that_int; - if (!IS_DIGIT(*that_str)) + if (!IS_DIGIT(*that_str)) { return -1; + } /* Compare the numbers */ this_int = to_int(this_str, -1, true); that_int = to_int(that_str, -1, true); - if (this_int < that_int) + if (this_int < that_int) { return -1; - else if (this_int > that_int) + } else if (this_int > that_int) { return 1; + } /* Skip */ - while (IS_DIGIT(*this_str)) + while (IS_DIGIT(*this_str)) { this_str++; - while (IS_DIGIT(*that_str)) + } + while (IS_DIGIT(*that_str)) { that_str++; - } else if (IS_DIGIT(*that_str)) + } + } else if (IS_DIGIT(*that_str)) { return 1; - else { - if (_find_upper(*this_str) < _find_upper(*that_str)) //more than + } else { + if (_find_upper(*this_str) < _find_upper(*that_str)) { //more than return -1; - else if (_find_upper(*this_str) > _find_upper(*that_str)) //less than + } else if (_find_upper(*this_str) > _find_upper(*that_str)) { //less than return 1; + } this_str++; that_str++; } } - if (*that_str) + if (*that_str) { return -1; + } } return 0; @@ -546,8 +591,9 @@ String String::capitalize() const { String slice = aux.get_slicec(' ', i); if (slice.length() > 0) { slice[0] = _find_upper(slice[0]); - if (i > 0) + if (i > 0) { cap += " "; + } cap += slice; } } @@ -610,10 +656,12 @@ String String::get_with_code_lines() const { } int String::get_slice_count(String p_splitter) const { - if (empty()) + if (empty()) { return 0; - if (p_splitter.empty()) + } + if (p_splitter.empty()) { return 0; + } int pos = 0; int slices = 1; @@ -627,22 +675,26 @@ int String::get_slice_count(String p_splitter) const { } String String::get_slice(String p_splitter, int p_slice) const { - if (empty() || p_splitter.empty()) + if (empty() || p_splitter.empty()) { return ""; + } int pos = 0; int prev_pos = 0; //int slices=1; - if (p_slice < 0) + if (p_slice < 0) { return ""; - if (find(p_splitter) == -1) + } + if (find(p_splitter) == -1) { return *this; + } int i = 0; while (true) { pos = find(p_splitter, pos); - if (pos == -1) + if (pos == -1) { pos = length(); //reached end + } int from = prev_pos; //int to=pos; @@ -651,8 +703,9 @@ String String::get_slice(String p_splitter, int p_slice) const { return substr(from, pos - from); } - if (pos == length()) //reached end and no find + if (pos == length()) { //reached end and no find break; + } pos += p_splitter.length(); prev_pos = pos; i++; @@ -662,11 +715,13 @@ String String::get_slice(String p_splitter, int p_slice) const { } String String::get_slicec(CharType p_splitter, int p_slice) const { - if (empty()) + if (empty()) { return String(); + } - if (p_slice < 0) + if (p_slice < 0) { return String(); + } const CharType *c = this->ptr(); int i = 0; @@ -693,16 +748,18 @@ Vector<String> String::split_spaces() const { int from = 0; int i = 0; int len = length(); - if (len == 0) + if (len == 0) { return ret; + } bool inside = false; while (true) { bool empty = operator[](i) < 33; - if (i == 0) + if (i == 0) { inside = !empty; + } if (!empty && !inside) { inside = true; @@ -714,8 +771,9 @@ Vector<String> String::split_spaces() const { inside = false; } - if (i == len) + if (i == len) { break; + } i++; } @@ -729,12 +787,13 @@ Vector<String> String::split(const String &p_splitter, bool p_allow_empty, int p while (true) { int end = find(p_splitter, from); - if (end < 0) + if (end < 0) { end = len; + } if (p_allow_empty || (end > from)) { - if (p_maxsplit <= 0) + if (p_maxsplit <= 0) { ret.push_back(substr(from, end - from)); - else { + } else { // Put rest of the string and leave cycle. if (p_maxsplit == ret.size()) { ret.push_back(substr(from, len)); @@ -746,8 +805,9 @@ Vector<String> String::split(const String &p_splitter, bool p_allow_empty, int p } } - if (end == len) + if (end == len) { break; + } from = end + p_splitter.length(); } @@ -796,13 +856,16 @@ Vector<float> String::split_floats(const String &p_splitter, bool p_allow_empty) while (true) { int end = find(p_splitter, from); - if (end < 0) + if (end < 0) { end = len; - if (p_allow_empty || (end > from)) + } + if (p_allow_empty || (end > from)) { ret.push_back(String::to_double(&c_str()[from])); + } - if (end == len) + if (end == len) { break; + } from = end + p_splitter.length(); } @@ -829,8 +892,9 @@ Vector<float> String::split_floats_mk(const Vector<String> &p_splitters, bool p_ ret.push_back(String::to_double(&c_str()[from])); } - if (end == len) + if (end == len) { break; + } from = end + spl_len; } @@ -845,13 +909,16 @@ Vector<int> String::split_ints(const String &p_splitter, bool p_allow_empty) con while (true) { int end = find(p_splitter, from); - if (end < 0) + if (end < 0) { end = len; - if (p_allow_empty || (end > from)) + } + if (p_allow_empty || (end > from)) { ret.push_back(String::to_int(&c_str()[from], end - from)); + } - if (end == len) + if (end == len) { break; + } from = end + p_splitter.length(); } @@ -874,11 +941,13 @@ Vector<int> String::split_ints_mk(const Vector<String> &p_splitters, bool p_allo spl_len = p_splitters[idx].length(); } - if (p_allow_empty || (end > from)) + if (p_allow_empty || (end > from)) { ret.push_back(String::to_int(&c_str()[from], end - from)); + } - if (end == len) + if (end == len) { break; + } from = end + spl_len; } @@ -911,8 +980,9 @@ String String::to_upper() const { for (int i = 0; i < upper.size(); i++) { const CharType s = upper[i]; const CharType t = _find_upper(s); - if (s != t) // avoid copy on write + if (s != t) { // avoid copy on write upper[i] = t; + } } return upper; @@ -924,8 +994,9 @@ String String::to_lower() const { for (int i = 0; i < lower.size(); i++) { const CharType s = lower[i]; const CharType t = _find_lower(s); - if (s != t) // avoid copy on write + if (s != t) { // avoid copy on write lower[i] = t; + } } return lower; @@ -965,8 +1036,9 @@ String String::chr(CharType p_char) { String String::num(double p_num, int p_decimals) { #ifndef NO_USE_STDLIB - if (p_decimals > 16) + if (p_decimals > 16) { p_decimals = 16; + } char fmt[7]; fmt[0] = '%'; @@ -1003,8 +1075,9 @@ String String::num(double p_num, int p_decimals) { bool period = false; int z = 0; while (buf[z]) { - if (buf[z] == '.') + if (buf[z] == '.') { period = true; + } z++; } @@ -1116,8 +1189,9 @@ String String::num_int64(int64_t p_num, int base, bool capitalize_hex) { chars++; } while (n); - if (sign) + if (sign) { chars++; + } String s; s.resize(chars + 1); CharType *c = s.ptrw(); @@ -1135,8 +1209,9 @@ String String::num_int64(int64_t p_num, int base, bool capitalize_hex) { n /= base; } while (n); - if (sign) + if (sign) { c[0] = '-'; + } return s; } @@ -1196,11 +1271,13 @@ String String::num_real(double p_num) { dec_max = dec_max * 10 + 9; digit++; - if ((dec - (float)((int)dec)) < 1e-6) + if ((dec - (float)((int)dec)) < 1e-6) { break; + } - if (digit == decimals) + if (digit == decimals) { break; + } } dec *= 10; @@ -1227,10 +1304,9 @@ String String::num_real(double p_num) { sd = ".0"; } - if (intn == 0) - + if (intn == 0) { s = "0"; - else { + } else { while (intn) { CharType num = '0' + (intn % 10); intn /= 10; @@ -1239,8 +1315,9 @@ String String::num_real(double p_num) { } s = s + sd; - if (neg) + if (neg) { s = "-" + s; + } return s; } @@ -1275,14 +1352,16 @@ String String::num_scientific(double p_num) { } CharString String::ascii(bool p_allow_extended) const { - if (!length()) + if (!length()) { return CharString(); + } CharString cs; cs.resize(size()); - for (int i = 0; i < size(); i++) + for (int i = 0; i < size(); i++) { cs[i] = operator[](i); + } return cs; } @@ -1297,8 +1376,9 @@ String String::utf8(const char *p_utf8, int p_len) { bool String::parse_utf8(const char *p_utf8, int p_len) { #define _UNICERROR(m_err) print_line("Unicode parsing error: " + String(m_err) + ". Is the string valid UTF-8?"); - if (!p_utf8) + if (!p_utf8) { return true; + } String aux; @@ -1310,8 +1390,9 @@ bool String::parse_utf8(const char *p_utf8, int p_len) { bool has_bom = uint8_t(p_utf8[0]) == 0xEF && uint8_t(p_utf8[1]) == 0xBB && uint8_t(p_utf8[2]) == 0xBF; if (has_bom) { //just skip it - if (p_len >= 0) + if (p_len >= 0) { p_len -= 3; + } p_utf8 += 3; } } @@ -1325,19 +1406,19 @@ bool String::parse_utf8(const char *p_utf8, int p_len) { uint8_t c = *ptrtmp >= 0 ? *ptrtmp : uint8_t(256 + *ptrtmp); /* Determine the number of characters in sequence */ - if ((c & 0x80) == 0) + if ((c & 0x80) == 0) { skip = 0; - else if ((c & 0xE0) == 0xC0) + } else if ((c & 0xE0) == 0xC0) { skip = 1; - else if ((c & 0xF0) == 0xE0) + } else if ((c & 0xF0) == 0xE0) { skip = 2; - else if ((c & 0xF8) == 0xF0) + } else if ((c & 0xF8) == 0xF0) { skip = 3; - else if ((c & 0xFC) == 0xF8) + } else if ((c & 0xFC) == 0xF8) { skip = 4; - else if ((c & 0xFE) == 0xFC) + } else if ((c & 0xFE) == 0xFC) { skip = 5; - else { + } else { _UNICERROR("invalid skip"); return true; //invalid utf8 } @@ -1377,19 +1458,19 @@ bool String::parse_utf8(const char *p_utf8, int p_len) { int len = 0; /* Determine the number of characters in sequence */ - if ((*p_utf8 & 0x80) == 0) + if ((*p_utf8 & 0x80) == 0) { len = 1; - else if ((*p_utf8 & 0xE0) == 0xC0) + } else if ((*p_utf8 & 0xE0) == 0xC0) { len = 2; - else if ((*p_utf8 & 0xF0) == 0xE0) + } else if ((*p_utf8 & 0xF0) == 0xE0) { len = 3; - else if ((*p_utf8 & 0xF8) == 0xF0) + } else if ((*p_utf8 & 0xF8) == 0xF0) { len = 4; - else if ((*p_utf8 & 0xFC) == 0xF8) + } else if ((*p_utf8 & 0xFC) == 0xF8) { len = 5; - else if ((*p_utf8 & 0xFE) == 0xFC) + } else if ((*p_utf8 & 0xFE) == 0xFC) { len = 6; - else { + } else { _UNICERROR("invalid len"); return true; //invalid UTF8 @@ -1410,9 +1491,9 @@ bool String::parse_utf8(const char *p_utf8, int p_len) { uint32_t unichar = 0; - if (len == 1) + if (len == 1) { unichar = *p_utf8; - else { + } else { unichar = (0xFF >> (len + 1)) & *p_utf8; for (int i = 1; i < len; i++) { @@ -1443,16 +1524,17 @@ bool String::parse_utf8(const char *p_utf8, int p_len) { CharString String::utf8() const { int l = length(); - if (!l) + if (!l) { return CharString(); + } const CharType *d = &operator[](0); int fl = 0; for (int i = 0; i < l; i++) { uint32_t c = d[i]; - if (c <= 0x7f) // 7 bits. + if (c <= 0x7f) { // 7 bits. fl += 1; - else if (c <= 0x7ff) { // 11 bits + } else if (c <= 0x7ff) { // 11 bits fl += 2; } else if (c <= 0xffff) { // 16 bits fl += 3; @@ -1479,9 +1561,9 @@ CharString String::utf8() const { for (int i = 0; i < l; i++) { uint32_t c = d[i]; - if (c <= 0x7f) // 7 bits. + if (c <= 0x7f) { // 7 bits. APPEND_CHAR(c); - else if (c <= 0x7ff) { // 11 bits + } else if (c <= 0x7ff) { // 11 bits APPEND_CHAR(uint32_t(0xc0 | ((c >> 6) & 0x1f))); // Top 5 bits. APPEND_CHAR(uint32_t(0x80 | (c & 0x3f))); // Bottom 6 bits. @@ -1537,15 +1619,17 @@ String::String(const CharType *p_str, int p_clip_to_len) { } String::String(const StrRange &p_range) { - if (!p_range.c_str) + if (!p_range.c_str) { return; + } copy_from(p_range.c_str, p_range.len); } int String::hex_to_int(bool p_with_prefix) const { - if (p_with_prefix && length() < 3) + if (p_with_prefix && length() < 3) { return 0; + } const CharType *s = ptr(); @@ -1556,8 +1640,9 @@ int String::hex_to_int(bool p_with_prefix) const { } if (p_with_prefix) { - if (s[0] != '0' || s[1] != 'x') + if (s[0] != '0' || s[1] != 'x') { return 0; + } s += 2; } @@ -1584,8 +1669,9 @@ int String::hex_to_int(bool p_with_prefix) const { } int64_t String::hex_to_int64(bool p_with_prefix) const { - if (p_with_prefix && length() < 3) + if (p_with_prefix && length() < 3) { return 0; + } const CharType *s = ptr(); @@ -1596,8 +1682,9 @@ int64_t String::hex_to_int64(bool p_with_prefix) const { } if (p_with_prefix) { - if (s[0] != '0' || s[1] != 'x') + if (s[0] != '0' || s[1] != 'x') { return 0; + } s += 2; } @@ -1624,8 +1711,9 @@ int64_t String::hex_to_int64(bool p_with_prefix) const { } int64_t String::bin_to_int64(bool p_with_prefix) const { - if (p_with_prefix && length() < 3) + if (p_with_prefix && length() < 3) { return 0; + } const CharType *s = ptr(); @@ -1636,8 +1724,9 @@ int64_t String::bin_to_int64(bool p_with_prefix) const { } if (p_with_prefix) { - if (s[0] != '0' || s[1] != 'b') + if (s[0] != '0' || s[1] != 'b') { return 0; + } s += 2; } @@ -1662,8 +1751,9 @@ int64_t String::bin_to_int64(bool p_with_prefix) const { } int String::to_int() const { - if (length() == 0) + if (length() == 0) { return 0; + } int to = (find(".") >= 0) ? find(".") : length(); @@ -1686,8 +1776,9 @@ int String::to_int() const { } int64_t String::to_int64() const { - if (length() == 0) + if (length() == 0) { return 0; + } int to = (find(".") >= 0) ? find(".") : length(); @@ -1711,11 +1802,12 @@ int64_t String::to_int64() const { int String::to_int(const char *p_str, int p_len) { int to = 0; - if (p_len >= 0) + if (p_len >= 0) { to = p_len; - else { - while (p_str[to] != 0 && p_str[to] != '.') + } else { + while (p_str[to] != 0 && p_str[to] != '.') { to++; + } } int integer = 0; @@ -1730,8 +1822,9 @@ int String::to_int(const char *p_str, int p_len) { } else if (c == '-' && integer == 0) { sign = -sign; - } else if (c != ' ') + } else if (c != ' ') { break; + } } return integer * sign; @@ -1743,8 +1836,9 @@ bool String::is_numeric() const { }; int s = 0; - if (operator[](0) == '-') + if (operator[](0) == '-') { ++s; + } bool dot = false; for (int i = s; i < length(); i++) { CharType c = operator[](i); @@ -1995,8 +2089,9 @@ double String::to_double(const CharType *p_str, const CharType **r_end) { } int64_t String::to_int(const CharType *p_str, int p_len, bool p_clamp) { - if (p_len == 0 || !p_str[0]) + if (p_len == 0 || !p_str[0]) { return 0; + } ///@todo make more exact so saving and loading does not lose precision int64_t integer = 0; @@ -2058,8 +2153,9 @@ int64_t String::to_int(const CharType *p_str, int p_len, bool p_clamp) { } double String::to_double() const { - if (empty()) + if (empty()) { return 0; + } #ifndef NO_USE_STDLIB return built_in_strtod<CharType>(c_str()); //return wcstod(c_str(),nullptr ); DOES NOT WORK ON ANDROID :( @@ -2086,24 +2182,27 @@ uint32_t String::hash(const char *p_cstr) { uint32_t hashv = 5381; uint32_t c; - while ((c = *p_cstr++)) + while ((c = *p_cstr++)) { hashv = ((hashv << 5) + hashv) + c; /* hash * 33 + c */ + } return hashv; } uint32_t String::hash(const char *p_cstr, int p_len) { uint32_t hashv = 5381; - for (int i = 0; i < p_len; i++) + for (int i = 0; i < p_len; i++) { hashv = ((hashv << 5) + hashv) + p_cstr[i]; /* hash * 33 + c */ + } return hashv; } uint32_t String::hash(const CharType *p_cstr, int p_len) { uint32_t hashv = 5381; - for (int i = 0; i < p_len; i++) + for (int i = 0; i < p_len; i++) { hashv = ((hashv << 5) + hashv) + p_cstr[i]; /* hash * 33 + c */ + } return hashv; } @@ -2112,8 +2211,9 @@ uint32_t String::hash(const CharType *p_cstr) { uint32_t hashv = 5381; uint32_t c; - while ((c = *p_cstr++)) + while ((c = *p_cstr++)) { hashv = ((hashv << 5) + hashv) + c; /* hash * 33 + c */ + } return hashv; } @@ -2125,8 +2225,9 @@ uint32_t String::hash() const { uint32_t hashv = 5381; uint32_t c; - while ((c = *chr++)) + while ((c = *chr++)) { hashv = ((hashv << 5) + hashv) + c; /* hash * 33 + c */ + } return hashv; } @@ -2138,8 +2239,9 @@ uint64_t String::hash64() const { uint64_t hashv = 5381; uint64_t c; - while ((c = *chr++)) + while ((c = *chr++)) { hashv = ((hashv << 5) + hashv) + c; /* hash * 33 + c */ + } return hashv; } @@ -2206,29 +2308,35 @@ Vector<uint8_t> String::sha256_buffer() const { } String String::insert(int p_at_pos, const String &p_string) const { - if (p_at_pos < 0) + if (p_at_pos < 0) { return *this; + } - if (p_at_pos > length()) + if (p_at_pos > length()) { p_at_pos = length(); + } String pre; - if (p_at_pos > 0) + if (p_at_pos > 0) { pre = substr(0, p_at_pos); + } String post; - if (p_at_pos < length()) + if (p_at_pos < length()) { post = substr(p_at_pos, length() - p_at_pos); + } return pre + p_string + post; } String String::substr(int p_from, int p_chars) const { - if (p_chars == -1) + if (p_chars == -1) { p_chars = length() - p_from; + } - if (empty() || p_from < 0 || p_from >= length() || p_chars <= 0) + if (empty() || p_from < 0 || p_from >= length() || p_chars <= 0) { return ""; + } if ((p_from + p_chars) > length()) { p_chars = length() - p_from; @@ -2256,15 +2364,17 @@ int String::find_last(const String &p_str) const { } int String::find(const String &p_str, int p_from) const { - if (p_from < 0) + if (p_from < 0) { return -1; + } const int src_len = p_str.length(); const int len = length(); - if (src_len == 0 || len == 0) + if (src_len == 0 || len == 0) { return -1; // won't find anything! + } const CharType *src = c_str(); const CharType *str = p_str.c_str(); @@ -2285,27 +2395,31 @@ int String::find(const String &p_str, int p_from) const { } } - if (found) + if (found) { return i; + } } return -1; } int String::find(const char *p_str, int p_from) const { - if (p_from < 0) + if (p_from < 0) { return -1; + } const int len = length(); - if (len == 0) + if (len == 0) { return -1; // won't find anything! + } const CharType *src = c_str(); int src_len = 0; - while (p_str[src_len] != '\0') + while (p_str[src_len] != '\0') { src_len++; + } if (src_len == 1) { const char needle = p_str[0]; @@ -2333,8 +2447,9 @@ int String::find(const char *p_str, int p_from) const { } } - if (found) + if (found) { return i; + } } } @@ -2346,18 +2461,21 @@ int String::find_char(const CharType &p_char, int p_from) const { } int String::findmk(const Vector<String> &p_keys, int p_from, int *r_key) const { - if (p_from < 0) + if (p_from < 0) { return -1; - if (p_keys.size() == 0) + } + if (p_keys.size() == 0) { return -1; + } //int src_len=p_str.length(); const String *keys = &p_keys[0]; int key_count = p_keys.size(); int len = length(); - if (len == 0) + if (len == 0) { return -1; // won't find anything! + } const CharType *src = c_str(); @@ -2365,8 +2483,9 @@ int String::findmk(const Vector<String> &p_keys, int p_from, int *r_key) const { bool found = true; for (int k = 0; k < key_count; k++) { found = true; - if (r_key) + if (r_key) { *r_key = k; + } const CharType *cmp = keys[k].c_str(); int l = keys[k].length(); @@ -2383,25 +2502,29 @@ int String::findmk(const Vector<String> &p_keys, int p_from, int *r_key) const { break; } } - if (found) + if (found) { break; + } } - if (found) + if (found) { return i; + } } return -1; } int String::findn(const String &p_str, int p_from) const { - if (p_from < 0) + if (p_from < 0) { return -1; + } int src_len = p_str.length(); - if (src_len == 0 || length() == 0) + if (src_len == 0 || length() == 0) { return -1; // won't find anything! + } const CharType *srcd = c_str(); @@ -2424,8 +2547,9 @@ int String::findn(const String &p_str, int p_from) const { } } - if (found) + if (found) { return i; + } } return -1; @@ -2434,20 +2558,23 @@ int String::findn(const String &p_str, int p_from) const { int String::rfind(const String &p_str, int p_from) const { // establish a limit int limit = length() - p_str.length(); - if (limit < 0) + if (limit < 0) { return -1; + } // establish a starting point - if (p_from < 0) + if (p_from < 0) { p_from = limit; - else if (p_from > limit) + } else if (p_from > limit) { p_from = limit; + } int src_len = p_str.length(); int len = length(); - if (src_len == 0 || len == 0) + if (src_len == 0 || len == 0) { return -1; // won't find anything! + } const CharType *src = c_str(); @@ -2467,8 +2594,9 @@ int String::rfind(const String &p_str, int p_from) const { } } - if (found) + if (found) { return i; + } } return -1; @@ -2477,20 +2605,23 @@ int String::rfind(const String &p_str, int p_from) const { int String::rfindn(const String &p_str, int p_from) const { // establish a limit int limit = length() - p_str.length(); - if (limit < 0) + if (limit < 0) { return -1; + } // establish a starting point - if (p_from < 0) + if (p_from < 0) { p_from = limit; - else if (p_from > limit) + } else if (p_from > limit) { p_from = limit; + } int src_len = p_str.length(); int len = length(); - if (src_len == 0 || len == 0) + if (src_len == 0 || len == 0) { return -1; // won't find anything! + } const CharType *src = c_str(); @@ -2513,8 +2644,9 @@ int String::rfindn(const String &p_str, int p_from) const { } } - if (found) + if (found) { return i; + } } return -1; @@ -2522,26 +2654,30 @@ int String::rfindn(const String &p_str, int p_from) const { bool String::ends_with(const String &p_string) const { int pos = find_last(p_string); - if (pos == -1) + if (pos == -1) { return false; + } return pos + p_string.length() == length(); } bool String::begins_with(const String &p_string) const { - if (p_string.length() > length()) + if (p_string.length() > length()) { return false; + } int l = p_string.length(); - if (l == 0) + if (l == 0) { return true; + } const CharType *src = &p_string[0]; const CharType *str = &operator[](0); int i = 0; for (; i < l; i++) { - if (src[i] != str[i]) + if (src[i] != str[i]) { return false; + } } // only if i == l the p_string matches the beginning @@ -2550,15 +2686,17 @@ bool String::begins_with(const String &p_string) const { bool String::begins_with(const char *p_string) const { int l = length(); - if (l == 0 || !p_string) + if (l == 0 || !p_string) { return false; + } const CharType *str = &operator[](0); int i = 0; while (*p_string && i < l) { - if (*p_string != str[i]) + if (*p_string != str[i]) { return false; + } i++; p_string++; } @@ -2720,15 +2858,17 @@ static bool _wildcard_match(const CharType *p_pattern, const CharType *p_string, } bool String::match(const String &p_wildcard) const { - if (!p_wildcard.length() || !length()) + if (!p_wildcard.length() || !length()) { return false; + } return _wildcard_match(p_wildcard.c_str(), c_str(), true); } bool String::matchn(const String &p_wildcard) const { - if (!p_wildcard.length() || !length()) + if (!p_wildcard.length() || !length()) { return false; + } return _wildcard_match(p_wildcard.c_str(), c_str(), false); } @@ -2832,8 +2972,9 @@ String String::replace(const char *p_key, const char *p_with) const { new_string += substr(search_from, result - search_from); new_string += p_with; int k = 0; - while (p_key[k] != '\0') + while (p_key[k] != '\0') { k++; + } search_from = result + k; } @@ -2882,29 +3023,35 @@ String String::repeat(int p_count) const { new_string.resize(length() * p_count + 1); - for (int i = 0; i < p_count; i++) - for (int j = 0; j < length(); j++) + for (int i = 0; i < p_count; i++) { + for (int j = 0; j < length(); j++) { new_string[i * length() + j] = src[j]; + } + } return new_string; } String String::left(int p_pos) const { - if (p_pos <= 0) + if (p_pos <= 0) { return ""; + } - if (p_pos >= length()) + if (p_pos >= length()) { return *this; + } return substr(0, p_pos); } String String::right(int p_pos) const { - if (p_pos >= length()) + if (p_pos >= length()) { return ""; + } - if (p_pos <= 0) + if (p_pos <= 0) { return *this; + } return substr(p_pos, (length() - p_pos)); } @@ -2925,8 +3072,9 @@ String String::dedent() const { for (int i = 0; i < length(); i++) { CharType c = operator[](i); if (c == '\n') { - if (has_text) + if (has_text) { new_string += substr(indent_stop, i - indent_stop); + } new_string += "\n"; has_text = false; line_start = i + 1; @@ -2942,14 +3090,16 @@ String String::dedent() const { } if (has_indent && indent_stop < 0) { int j = i - line_start; - if (j >= indent.length() || c != indent[j]) + if (j >= indent.length() || c != indent[j]) { indent_stop = i; + } } } } - if (has_text) + if (has_text) { new_string += substr(indent_stop, length() - indent_stop); + } return new_string; } @@ -2960,24 +3110,27 @@ String String::strip_edges(bool left, bool right) const { if (left) { for (int i = 0; i < len; i++) { - if (operator[](i) <= 32) + if (operator[](i) <= 32) { beg++; - else + } else { break; + } } } if (right) { for (int i = (int)(len - 1); i >= 0; i--) { - if (operator[](i) <= 32) + if (operator[](i) <= 32) { end--; - else + } else { break; + } } } - if (beg == 0 && end == len) + if (beg == 0 && end == len) { return *this; + } return substr(beg, end - beg); } @@ -2986,8 +3139,9 @@ String String::strip_escapes() const { String new_string; for (int i = 0; i < length(); i++) { // Escape characters on first page of the ASCII table, before 32 (Space). - if (operator[](i) < 32) + if (operator[](i) < 32) { continue; + } new_string += operator[](i); } @@ -2999,12 +3153,14 @@ String String::lstrip(const String &p_chars) const { int beg; for (beg = 0; beg < len; beg++) { - if (p_chars.find_char(get(beg)) == -1) + if (p_chars.find_char(get(beg)) == -1) { break; + } } - if (beg == 0) + if (beg == 0) { return *this; + } return substr(beg, len - beg); } @@ -3014,12 +3170,14 @@ String String::rstrip(const String &p_chars) const { int end; for (end = len - 1; end >= 0; end--) { - if (p_chars.find_char(get(end)) == -1) + if (p_chars.find_char(get(end)) == -1) { break; + } } - if (end == len - 1) + if (end == len - 1) { return *this; + } return substr(0, end + 1); } @@ -3041,8 +3199,9 @@ String String::simplify_path() const { s = s.substr(1, s.length() - 1); } else { int p = s.find(":/"); - if (p == -1) + if (p == -1) { p = s.find(":\\"); + } if (p != -1 && p < s.find("/")) { drive = s.substr(0, p + 2); s = s.substr(p + 2, s.length()); @@ -3052,10 +3211,11 @@ String String::simplify_path() const { s = s.replace("\\", "/"); while (true) { // in case of using 2 or more slash String compare = s.replace("//", "/"); - if (s == compare) + if (s == compare) { break; - else + } else { s = compare; + } } Vector<String> dirs = s.split("/", false); @@ -3079,8 +3239,9 @@ String String::simplify_path() const { s = ""; for (int i = 0; i < dirs.size(); i++) { - if (i > 0) + if (i > 0) { s += "/"; + } s += dirs[i]; } @@ -3088,12 +3249,13 @@ String String::simplify_path() const { } static int _humanize_digits(int p_num) { - if (p_num < 100) + if (p_num < 100) { return 2; - else if (p_num < 1024) + } else if (p_num < 1024) { return 1; - else + } else { return 0; + } } String String::humanize_size(uint64_t p_size) { @@ -3121,32 +3283,36 @@ String String::humanize_size(uint64_t p_size) { } bool String::is_abs_path() const { - if (length() > 1) + if (length() > 1) { return (operator[](0) == '/' || operator[](0) == '\\' || find(":/") != -1 || find(":\\") != -1); - else if ((length()) == 1) + } else if ((length()) == 1) { return (operator[](0) == '/' || operator[](0) == '\\'); - else + } else { return false; + } } bool String::is_valid_identifier() const { int len = length(); - if (len == 0) + if (len == 0) { return false; + } const wchar_t *str = &operator[](0); for (int i = 0; i < len; i++) { if (i == 0) { - if (str[0] >= '0' && str[0] <= '9') + if (str[0] >= '0' && str[0] <= '9') { return false; // no start with number plz + } } bool valid_char = (str[i] >= '0' && str[i] <= '9') || (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || str[i] == '_'; - if (!valid_char) + if (!valid_char) { return false; + } } return true; @@ -3296,11 +3462,11 @@ String String::xml_escape(bool p_escape_quotes) const { str = str.replace("\"", """); } /* - for (int i=1;i<32;i++) { +for (int i=1;i<32;i++) { - char chr[2]={i,0}; - str=str.replace(chr,"&#"+String::num(i)+";"); - }*/ + char chr[2]={i,0}; + str=str.replace(chr,"&#"+String::num(i)+";"); +}*/ return str; } @@ -3331,37 +3497,45 @@ static _FORCE_INLINE_ int _xml_unescape(const CharType *p_src, int p_src_len, Ch c |= ct; } - if (p_dst) + if (p_dst) { *p_dst = c; + } } else if (p_src_len >= 4 && p_src[1] == 'g' && p_src[2] == 't' && p_src[3] == ';') { - if (p_dst) + if (p_dst) { *p_dst = '>'; + } eat = 4; } else if (p_src_len >= 4 && p_src[1] == 'l' && p_src[2] == 't' && p_src[3] == ';') { - if (p_dst) + if (p_dst) { *p_dst = '<'; + } eat = 4; } else if (p_src_len >= 5 && p_src[1] == 'a' && p_src[2] == 'm' && p_src[3] == 'p' && p_src[4] == ';') { - if (p_dst) + if (p_dst) { *p_dst = '&'; + } eat = 5; } else if (p_src_len >= 6 && p_src[1] == 'q' && p_src[2] == 'u' && p_src[3] == 'o' && p_src[4] == 't' && p_src[5] == ';') { - if (p_dst) + if (p_dst) { *p_dst = '"'; + } eat = 6; } else if (p_src_len >= 6 && p_src[1] == 'a' && p_src[2] == 'p' && p_src[3] == 'o' && p_src[4] == 's' && p_src[5] == ';') { - if (p_dst) + if (p_dst) { *p_dst = '\''; + } eat = 6; } else { - if (p_dst) + if (p_dst) { *p_dst = *p_src; + } eat = 1; } - if (p_dst) + if (p_dst) { p_dst++; + } len++; p_src += eat; @@ -3384,8 +3558,9 @@ String String::xml_unescape() const { String str; int l = length(); int len = _xml_unescape(c_str(), l, nullptr); - if (len == 0) + if (len == 0) { return String(); + } str.resize(len + 1); _xml_unescape(c_str(), l, str.ptrw()); str[len] = 0; @@ -3426,8 +3601,9 @@ String String::pad_zeros(int p_digits) const { end = s.length(); } - if (end == 0) + if (end == 0) { return s; + } int begin = 0; @@ -3435,8 +3611,9 @@ String String::pad_zeros(int p_digits) const { begin++; } - if (begin >= end) + if (begin >= end) { return s; + } while (end - begin < p_digits) { s = s.insert(begin, "0"); @@ -3465,16 +3642,19 @@ String String::trim_suffix(const String &p_suffix) const { bool String::is_valid_integer() const { int len = length(); - if (len == 0) + if (len == 0) { return false; + } int from = 0; - if (len != 1 && (operator[](0) == '+' || operator[](0) == '-')) + if (len != 1 && (operator[](0) == '+' || operator[](0) == '-')) { from++; + } for (int i = from; i < len; i++) { - if (operator[](i) < '0' || operator[](i) > '9') + if (operator[](i) < '0' || operator[](i) > '9') { return false; // no start with number plz + } } return true; @@ -3483,16 +3663,19 @@ bool String::is_valid_integer() const { bool String::is_valid_hex_number(bool p_with_prefix) const { int len = length(); - if (len == 0) + if (len == 0) { return false; + } int from = 0; - if (len != 1 && (operator[](0) == '+' || operator[](0) == '-')) + if (len != 1 && (operator[](0) == '+' || operator[](0) == '-')) { from++; + } if (p_with_prefix) { - if (len < 3) + if (len < 3) { return false; + } if (operator[](from) != '0' || operator[](from + 1) != 'x') { return false; } @@ -3501,8 +3684,9 @@ bool String::is_valid_hex_number(bool p_with_prefix) const { for (int i = from; i < len; i++) { CharType c = operator[](i); - if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) + if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) { continue; + } return false; } @@ -3512,8 +3696,9 @@ bool String::is_valid_hex_number(bool p_with_prefix) const { bool String::is_valid_float() const { int len = length(); - if (len == 0) + if (len == 0) { return false; + } int from = 0; if (operator[](0) == '+' || operator[](0) == '-') { @@ -3528,18 +3713,20 @@ bool String::is_valid_float() const { for (int i = from; i < len; i++) { if (operator[](i) >= '0' && operator[](i) <= '9') { - if (exponent_found) + if (exponent_found) { exponent_values_found = true; - else + } else { numbers_found = true; + } } else if (numbers_found && !exponent_found && operator[](i) == 'e') { exponent_found = true; } else if (!period_found && !exponent_found && operator[](i) == '.') { period_found = true; } else if ((operator[](i) == '-' || operator[](i) == '+') && exponent_found && !exponent_values_found && !sign_found) { sign_found = true; - } else + } else { return false; // no start with number plz + } } return numbers_found; @@ -3550,19 +3737,22 @@ String String::path_to_file(const String &p_path) const { String src = this->replace("\\", "/"); String dst = p_path.replace("\\", "/").get_base_dir(); String rel = src.path_to(dst); - if (rel == dst) // failed + if (rel == dst) { // failed return p_path; - else + } else { return rel + p_path.get_file(); + } } String String::path_to(const String &p_path) const { String src = this->replace("\\", "/"); String dst = p_path.replace("\\", "/"); - if (!src.ends_with("/")) + if (!src.ends_with("/")) { src += "/"; - if (!dst.ends_with("/")) + } + if (!dst.ends_with("/")) { dst += "/"; + } String base; @@ -3583,8 +3773,9 @@ String String::path_to(const String &p_path) const { String src_begin = src.get_slicec('/', 0); String dst_begin = dst.get_slicec('/', 0); - if (src_begin != dst_begin) + if (src_begin != dst_begin) { return p_path; //impossible to do this + } base = src_begin; src = src.substr(src_begin.length(), src.length()); @@ -3599,12 +3790,15 @@ String String::path_to(const String &p_path) const { int common_parent = 0; while (true) { - if (src_dirs.size() == common_parent) + if (src_dirs.size() == common_parent) { break; - if (dst_dirs.size() == common_parent) + } + if (dst_dirs.size() == common_parent) { break; - if (src_dirs[common_parent] != dst_dirs[common_parent]) + } + if (src_dirs[common_parent] != dst_dirs[common_parent]) { break; + } common_parent++; } @@ -3620,8 +3814,9 @@ String String::path_to(const String &p_path) const { dir += dst_dirs[i] + "/"; } - if (dir.length() == 0) + if (dir.length() == 0) { dir = "./"; + } return dir; } @@ -3647,29 +3842,35 @@ bool String::is_valid_ip_address() const { Vector<String> ip = split(":"); for (int i = 0; i < ip.size(); i++) { String n = ip[i]; - if (n.empty()) + if (n.empty()) { continue; + } if (n.is_valid_hex_number(false)) { int nint = n.hex_to_int(false); - if (nint < 0 || nint > 0xffff) + if (nint < 0 || nint > 0xffff) { return false; + } continue; }; - if (!n.is_valid_ip_address()) + if (!n.is_valid_ip_address()) { return false; + } }; } else { Vector<String> ip = split("."); - if (ip.size() != 4) + if (ip.size() != 4) { return false; + } for (int i = 0; i < ip.size(); i++) { String n = ip[i]; - if (!n.is_valid_integer()) + if (!n.is_valid_integer()) { return false; + } int val = n.to_int(); - if (val < 0 || val > 255) + if (val < 0 || val > 255) { return false; + } } }; @@ -3702,33 +3903,38 @@ String String::get_base_dir() const { } int sep = MAX(rs.find_last("/"), rs.find_last("\\")); - if (sep == -1) + if (sep == -1) { return base; + } return base + rs.substr(0, sep); } String String::get_file() const { int sep = MAX(find_last("/"), find_last("\\")); - if (sep == -1) + if (sep == -1) { return *this; + } return substr(sep + 1, length()); } String String::get_extension() const { int pos = find_last("."); - if (pos < 0 || pos < MAX(find_last("/"), find_last("\\"))) + if (pos < 0 || pos < MAX(find_last("/"), find_last("\\"))) { return ""; + } return substr(pos + 1, length()); } String String::plus_file(const String &p_file) const { - if (empty()) + if (empty()) { return p_file; - if (operator[](length() - 1) == '/' || (p_file.size() > 0 && p_file.operator[](0) == '/')) + } + if (operator[](length() - 1) == '/' || (p_file.size() > 0 && p_file.operator[](0) == '/')) { return *this + p_file; + } return *this + "/" + p_file; } @@ -3763,21 +3969,23 @@ String String::percent_decode() const { uint8_t a = LOWERCASE(cs[i + 1]); uint8_t b = LOWERCASE(cs[i + 2]); - if (a >= '0' && a <= '9') + if (a >= '0' && a <= '9') { c = (a - '0') << 4; - else if (a >= 'a' && a <= 'f') + } else if (a >= 'a' && a <= 'f') { c = (a - 'a' + 10) << 4; - else + } else { continue; + } uint8_t d = 0; - if (b >= '0' && b <= '9') + if (b >= '0' && b <= '9') { d = (b - '0'); - else if (b >= 'a' && b <= 'f') + } else if (b >= 'a' && b <= 'f') { d = (b - 'a' + 10); - else + } else { continue; + } c += d; i += 2; } @@ -3802,8 +4010,9 @@ String String::property_name_encode() const { String String::get_basename() const { int pos = find_last("."); - if (pos < 0 || pos < MAX(find_last("/"), find_last("\\"))) + if (pos < 0 || pos < MAX(find_last("/"), find_last("\\"))) { return *this; + } return substr(0, pos); } @@ -3829,8 +4038,9 @@ String String::rpad(int min_length, const String &character) const { String s = *this; int padding = min_length - s.length(); if (padding > 0) { - for (int i = 0; i < padding; i++) + for (int i = 0; i < padding; i++) { s = s + character; + } } return s; @@ -3841,8 +4051,9 @@ String String::lpad(int min_length, const String &character) const { String s = *this; int padding = min_length - s.length(); if (padding > 0) { - for (int i = 0; i < padding; i++) + for (int i = 0; i < padding; i++) { s = character + s; + } } return s; |