diff --git a/libgnucash/engine/kvp-value.cpp b/libgnucash/engine/kvp-value.cpp index bbfedf6aab..456138a39a 100644 --- a/libgnucash/engine/kvp-value.cpp +++ b/libgnucash/engine/kvp-value.cpp @@ -29,6 +29,8 @@ #include #include +using boost::typeindex::type_id; + KvpValueImpl::KvpValueImpl(KvpValueImpl const & other) noexcept { duplicate(other); @@ -58,7 +60,7 @@ KvpValueImpl * KvpValueImpl::add(KvpValueImpl * val) noexcept { /* If already a glist here, just append */ - if (this->datastore.type() == typeid(GList*)) + if (this->datastore.type() == type_id()) { GList * list = boost::get(datastore); datastore = g_list_append (list, val); @@ -75,23 +77,23 @@ KvpValueImpl::add(KvpValueImpl * val) noexcept KvpValue::Type KvpValueImpl::get_type() const noexcept { - if (datastore.type() == typeid(int64_t)) + if (datastore.type() == type_id()) return KvpValue::Type::INT64; - else if (datastore.type() == typeid(double)) + else if (datastore.type() == type_id()) return KvpValue::Type::DOUBLE; - else if (datastore.type() == typeid(gnc_numeric)) + else if (datastore.type() == type_id()) return KvpValue::Type::NUMERIC; - else if (datastore.type() == typeid(const gchar *)) + else if (datastore.type() == type_id()) return KvpValue::Type::STRING; - else if (datastore.type() == typeid(GncGUID *)) + else if (datastore.type() == type_id()) return KvpValue::Type::GUID; - else if (datastore.type() == typeid(Time64)) + else if (datastore.type() == type_id()) return KvpValue::Type::TIME64; - else if (datastore.type() == typeid(GList *)) + else if (datastore.type() == type_id()) return KvpValue::Type::GLIST; - else if (datastore.type() == typeid(KvpFrameImpl *)) + else if (datastore.type() == type_id()) return KvpValue::Type::FRAME; - else if (datastore.type() == typeid(GDate)) + else if (datastore.type() == type_id()) return KvpValue::Type::GDATE; return KvpValue::Type::INVALID; @@ -100,7 +102,7 @@ KvpValueImpl::get_type() const noexcept KvpFrame * KvpValueImpl::replace_frame_nc (KvpFrame * new_value) noexcept { - if (datastore.type() != typeid(KvpFrame *)) + if (datastore.type() != type_id()) return {}; auto ret = boost::get(datastore); datastore = new_value; @@ -110,7 +112,7 @@ KvpValueImpl::replace_frame_nc (KvpFrame * new_value) noexcept GList * KvpValueImpl::replace_glist_nc (GList * new_value) noexcept { - if (datastore.type() != typeid(GList *)) + if (datastore.type() != type_id()) return {}; auto ret = boost::get(datastore); datastore = new_value; @@ -206,7 +208,7 @@ struct to_string_visitor : boost::static_visitor std::string KvpValueImpl::to_string(std::string const & prefix) const noexcept { - if (this->datastore.type() == typeid(KvpFrame*)) + if (this->datastore.type() == type_id()) return this->get()->to_string(prefix); std::ostringstream ret; to_string_visitor visitor {ret}; @@ -390,13 +392,13 @@ KvpValueImpl::~KvpValueImpl() noexcept void KvpValueImpl::duplicate(const KvpValueImpl& other) noexcept { - if (other.datastore.type() == typeid(const gchar *)) + if (other.datastore.type() == type_id()) this->datastore = const_cast(g_strdup(other.get())); - else if (other.datastore.type() == typeid(GncGUID*)) + else if (other.datastore.type() == type_id()) this->datastore = guid_copy(other.get()); - else if (other.datastore.type() == typeid(GList*)) + else if (other.datastore.type() == type_id()) this->datastore = kvp_glist_copy(other.get()); - else if (other.datastore.type() == typeid(KvpFrame*)) + else if (other.datastore.type() == type_id()) this->datastore = new KvpFrame(*other.get()); else this->datastore = other.datastore; diff --git a/libgnucash/engine/kvp-value.hpp b/libgnucash/engine/kvp-value.hpp index 61b7dfd99f..f5f1768709 100644 --- a/libgnucash/engine/kvp-value.hpp +++ b/libgnucash/engine/kvp-value.hpp @@ -174,7 +174,7 @@ KvpValueImpl::KvpValueImpl(T newvalue) noexcept: template T KvpValueImpl::get() const noexcept { - if (this->datastore.type() != typeid(T)) return {}; + if (this->datastore.type() != boost::typeindex::type_id()) return {}; return boost::get(datastore); }