aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/tests/libsample/str.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/tests/libsample/str.cpp')
-rw-r--r--sources/shiboken6/tests/libsample/str.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/sources/shiboken6/tests/libsample/str.cpp b/sources/shiboken6/tests/libsample/str.cpp
new file mode 100644
index 000000000..742c0bb01
--- /dev/null
+++ b/sources/shiboken6/tests/libsample/str.cpp
@@ -0,0 +1,137 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "str.h"
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <sstream>
+
+Str::Str(char c)
+{
+ char str[2] = { c, 0 };
+ init(str);
+}
+
+Str::Str(const char *cstr)
+{
+ init(cstr);
+}
+
+void Str::init(const char *cstr)
+{
+ if (cstr)
+ m_str = cstr;
+}
+
+Str Str::arg(const Str &s) const
+{
+ size_t idx = m_str.find_first_of("%VAR");
+ if (idx == std::string::npos)
+ return *this;
+
+ std::string result = m_str;
+ result.replace(idx, 4, s.m_str);
+ return result.c_str();
+}
+
+Str &Str::append(const Str &s)
+{
+ m_str += s.m_str;
+ return *this;
+}
+
+Str &Str::prepend(const Str &s)
+{
+ m_str = s.m_str + m_str;
+ return *this;
+}
+
+const char *Str::cstring() const
+{
+ return m_str.c_str();
+}
+
+int Str::toInt(bool *ok, int base) const
+{
+ int result = 0;
+ std::istringstream conv(m_str);
+ switch (base) {
+ case 8:
+ conv >> std::oct >> result;
+ break;
+ case 10:
+ conv >> std::dec >> result;
+ break;
+ case 16:
+ conv >> std::hex >> result;
+ break;
+ }
+ const bool my_ok = std::istringstream::eofbit & conv.rdstate();
+ if (!my_ok)
+ result = 0;
+ if (ok)
+ *ok = my_ok;
+ return result;
+}
+
+void Str::show() const
+{
+ std::printf("%s", cstring());
+}
+
+char Str::get_char(int pos) const
+{
+ return m_str[pos];
+}
+
+bool Str::set_char(int pos, char ch)
+{
+ m_str[pos] = ch;
+ return true;
+}
+
+Str Str::operator+(int number) const
+{
+ std::ostringstream in;
+ in << m_str << number;
+ return in.str().c_str();
+}
+
+bool Str::operator==(const Str &other) const
+{
+ return m_str == other.m_str;
+}
+
+Str operator+(int number, const Str &str)
+{
+ std::ostringstream in;
+ in << number << str.m_str;
+ return in.str().c_str();
+}
+
+bool Str::operator<(const Str &other) const
+{
+ return m_str < other.m_str;
+}
+
+unsigned int strHash(const Str &str)
+{
+ unsigned int result = 0;
+ for (char c : str.m_str)
+ result = 5U * result + unsigned(c);
+ return result;
+}
+
+void changePStr(PStr *pstr, const char *suffix)
+{
+ pstr->append(suffix);
+}
+
+void duplicatePStr(PStr *pstr)
+{
+ if (!pstr)
+ return;
+ pstr->append(*pstr);
+}