diff --git a/src/ox/model/descwrite.hpp b/src/ox/model/descwrite.hpp index 60618f3ca..17612d7c5 100644 --- a/src/ox/model/descwrite.hpp +++ b/src/ox/model/descwrite.hpp @@ -143,9 +143,6 @@ class TypeDescWriter { [[nodiscard]] constexpr const DescriptorType *type(const char *val) const noexcept; - [[nodiscard]] - constexpr const DescriptorType *type(SerStr val) const noexcept; - template [[nodiscard]] constexpr const DescriptorType *type(const BasicString*) const noexcept { @@ -332,11 +329,6 @@ constexpr const DescriptorType *TypeDescWriter::type(const char*) const noexcept return getType(types::String, 0, PT, 0); } -constexpr const DescriptorType *TypeDescWriter::type(SerStr) const noexcept { - constexpr auto PT = PrimitiveType::String; - return getType(types::String, 0, PT, 0); -} - template constexpr const DescriptorType *TypeDescWriter::type(const BString*) const noexcept { constexpr auto PT = PrimitiveType::String; diff --git a/src/ox/model/modelops.hpp b/src/ox/model/modelops.hpp index 2c0e1ed16..864ebf0d9 100644 --- a/src/ox/model/modelops.hpp +++ b/src/ox/model/modelops.hpp @@ -71,10 +71,6 @@ class MemberList { return OxError(0); } - constexpr Error field(const char *name, SerStr s) noexcept { - return field(name, s.target()); - } - template constexpr void setTypeInfo(const char* = T::TypeName, int = ModelTypeVersion_v, const Vector& = {}, int = ModelFieldCount_v) noexcept { @@ -131,10 +127,6 @@ class Copier { return OxError(0); } - constexpr Error field(const char *name, SerStr s) { - return field(name, s.target()); - } - template constexpr void setTypeInfo(const char* = T::TypeName, int = T::TypeVersion, const Vector& = {}, int = ModelFieldCount_v) noexcept { } @@ -192,10 +184,6 @@ class Mover { return OxError(0); } - constexpr Error field(const char *name, SerStr s) noexcept { - return field(name, s.target()); - } - template constexpr void setTypeInfo(const char* = T::TypeName, int = T::TypeVersion, const Vector& = {}, int = ModelFieldCount_v) noexcept { } @@ -260,18 +248,6 @@ class Equals { } } - constexpr Error field(const char*, SerStr s) noexcept { - const auto a = s.c_str(); - const auto b = *cbit_cast(m_other->vars[m_i]); - ++m_i; - if (a && b && ox_strcmp(a, b) == 0) { - return OxError(0); - } else { - this->value = false; - return OxError(1); - } - } - [[nodiscard]] static constexpr auto opType() noexcept { return OpType::Read; diff --git a/src/ox/model/types.hpp b/src/ox/model/types.hpp index 02b4140fb..bf1788100 100644 --- a/src/ox/model/types.hpp +++ b/src/ox/model/types.hpp @@ -157,76 +157,6 @@ constexpr bool isSmartPtr_v<::std::unique_ptr> = true; #endif -class SerStr { - - protected: - int m_cap = 0; - char *m_str = nullptr; - char **m_tgt = nullptr; - - public: - template - explicit constexpr SerStr(BString *str) noexcept { - m_str = str->data(); - m_cap = str->cap(); - } - - constexpr SerStr(char *str, int cap) noexcept { - m_str = str; - m_cap = cap; - } - - explicit constexpr SerStr(char **tgt, int cap = -1) noexcept { - m_tgt = tgt; - m_str = const_cast(*tgt); - m_cap = cap; - } - - explicit constexpr SerStr(char *str, char **tgt, int cap = -1) noexcept { - m_tgt = tgt; - m_str = str; - m_cap = cap; - } - - template - explicit constexpr SerStr(char (&str)[cap]) noexcept { - m_str = str; - m_cap = cap; - } - - [[nodiscard]] - constexpr const char *c_str() const noexcept { - return m_str; - } - - [[nodiscard]] - constexpr auto target() const noexcept { - return m_tgt; - } - - constexpr char *data(std::size_t sz = 0) noexcept { - if (m_tgt && sz) { - if (!*m_tgt || sz > static_cast(m_cap)) { - *m_tgt = new char[sz]; - m_str = *m_tgt; - m_cap = static_cast(sz); - } - } - return m_str; - } - - [[nodiscard]] - constexpr int len() const noexcept { - return static_cast(m_str ? ox_strlen(m_str) : 0); - } - - [[nodiscard]] - constexpr int cap() const noexcept { - return m_cap; - } - -}; - template class UnionView { diff --git a/src/ox/oc/read.cpp b/src/ox/oc/read.cpp index 40e56f9a3..afc1204c6 100644 --- a/src/ox/oc/read.cpp +++ b/src/ox/oc/read.cpp @@ -181,34 +181,6 @@ Error OrganicClawReader::field(const char *key, bool *val) noexcept { return err; } -Error OrganicClawReader::field(const char *key, SerStr val) noexcept { - auto err = OxError(0); - const char *begin = nullptr, *end = nullptr; - const auto &jv = value(key); - if (targetValid()) { - if (jv.empty()) { - auto data = val.data(); - if (data) { - data[0] = 0; - } - } else if (jv.isString()) { - jv.getString(&begin, &end); - auto strSize = end - begin; - auto data = val.data(static_cast(strSize) + 1); - if (strSize >= val.cap()) { - err = OxError(1, "String size exceeds capacity of destination"); - } else { - ox_memcpy(data, begin, static_cast(strSize)); - data[strSize] = 0; - } - } else { - err = OxError(1, "Type mismatch"); - } - } - ++m_fieldIt; - return err; -} - Error OrganicClawReader::fieldCString(const char *key, char *val, std::size_t buffLen) noexcept { auto err = OxError(0); const char *begin = nullptr, *end = nullptr; diff --git a/src/ox/oc/read.hpp b/src/ox/oc/read.hpp index e722d17fe..dd4fb68b4 100644 --- a/src/ox/oc/read.hpp +++ b/src/ox/oc/read.hpp @@ -72,8 +72,6 @@ class OrganicClawReader { template Error field(const char *key, BString *val) noexcept; - Error field(const char *key, SerStr val) noexcept; - Error fieldCString(const char *key, char *val, std::size_t buffLen) noexcept; Error fieldCString(const char *key, char **val) noexcept; @@ -205,7 +203,7 @@ Error OrganicClawReader::field(const char *key, BasicString *val) noexcept { template Error OrganicClawReader::field(const char *key, BString *val) noexcept { - return field(key, SerStr(val->data(), static_cast(val->cap()))); + return fieldCString(key, val->data(), val->cap()); } // array handler diff --git a/src/ox/oc/test/tests.cpp b/src/ox/oc/test/tests.cpp index 593d41d0a..4c0ececad 100644 --- a/src/ox/oc/test/tests.cpp +++ b/src/ox/oc/test/tests.cpp @@ -332,7 +332,7 @@ const std::map tests = { } case ox::PrimitiveType::String: { ox::Vector v(rdr->stringLength(fieldName) + 1); - oxAssert(rdr->field(fieldName, ox::SerStr(v.data(), static_cast(v.size()))), "Walking model failed."); + oxAssert(rdr->fieldCString(fieldName, v.data(), v.size()), "Walking model failed."); oxOutf("{}:\tstring:\t{}\n", fieldName, v.data()); break; } diff --git a/src/ox/oc/write.cpp b/src/ox/oc/write.cpp index e1ff81f8a..40c72e895 100644 --- a/src/ox/oc/write.cpp +++ b/src/ox/oc/write.cpp @@ -18,14 +18,6 @@ OrganicClawWriter::OrganicClawWriter(Json::Value json, int unionIdx) noexcept: m_unionIdx(unionIdx) { } -Error OrganicClawWriter::field(const char *key, SerStr val) noexcept { - if (targetValid() && val.len()) { - value(key) = val.c_str(); - } - ++m_fieldIt; - return OxError(0); -} - Error OrganicClawWriter::fieldCString(const char *key, const char *const*val, int len) noexcept { if (targetValid() && len) { value(key) = *val; diff --git a/src/ox/oc/write.hpp b/src/ox/oc/write.hpp index 59dfaf80c..4881ce870 100644 --- a/src/ox/oc/write.hpp +++ b/src/ox/oc/write.hpp @@ -141,12 +141,20 @@ class OrganicClawWriter { template Error field(const char *key, const BString *val) noexcept { - return field(key, SerStr(val->data(), val->cap())); + if (targetValid() && val->len()) { + value(key) = val->c_str(); + } + ++m_fieldIt; + return {}; } template Error field(const char *key, BString *val) noexcept { - return field(key, SerStr(val->data(), static_cast(val->cap()))); + if (targetValid() && val->len()) { + value(key) = val->c_str(); + } + ++m_fieldIt; + return {}; } template @@ -163,8 +171,6 @@ class OrganicClawWriter { return field(key, const_cast*>(val)); } - Error field(const char*, SerStr val) noexcept; - Error fieldCString(const char*, const char *const*val, int len) noexcept; Error fieldCString(const char *name, char **val, int len) noexcept;