From e27faa1e8813db3bb7d240825845c302a5bcbf8a Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Thu, 9 Nov 2023 14:20:15 -0800 Subject: [PATCH] Remove unnecessary sequence interface on PycDict --- pyc_sequence.cpp | 27 +-------------------------- pyc_sequence.h | 41 +++++++++++++++++++---------------------- 2 files changed, 20 insertions(+), 48 deletions(-) diff --git a/pyc_sequence.cpp b/pyc_sequence.cpp index 7aceac2..a56ca35 100644 --- a/pyc_sequence.cpp +++ b/pyc_sequence.cpp @@ -65,7 +65,7 @@ bool PycDict::isEqual(PycRef obj) const return false; PycRef dictObj = obj.cast(); - if (m_size != dictObj->m_size) + if (m_keys.size() != dictObj->m_keys.size()) return false; auto ki1 = m_keys.cbegin(); @@ -85,28 +85,3 @@ bool PycDict::isEqual(PycRef obj) const } return true; } - -PycRef PycDict::get(PycRef key) const -{ - auto ki = m_keys.cbegin(); - auto vi = m_values.cbegin(); - while (ki != m_keys.cend()) { - if ((*ki)->isEqual(key)) - return *vi; - ++ki, ++vi; - } - return NULL; // Disassembly shouldn't get non-existent keys -} - -PycRef PycDict::get(int idx) const -{ - if (idx < 0) - throw std::out_of_range("Dict index out of range"); - - auto it = m_values.cbegin(); - while (idx-- && it != m_values.cend()) - ++it; - if (it == m_values.cend()) - throw std::out_of_range("Dict index out of range"); - return *it; -} diff --git a/pyc_sequence.h b/pyc_sequence.h index 521782a..15ed139 100644 --- a/pyc_sequence.h +++ b/pyc_sequence.h @@ -46,32 +46,29 @@ public: PycList(int type = TYPE_LIST) : PycSimpleSequence(type) { } }; -class PycDict : public PycSequence { -public: - typedef std::vector> key_t; - typedef std::vector> value_t; - - PycDict(int type = TYPE_DICT) : PycSequence(type) { } - - bool isEqual(PycRef obj) const override; - - void load(class PycData* stream, class PycModule* mod) override; - - PycRef get(PycRef key) const; - const key_t& keys() const { return m_keys; } - const value_t& values() const { return m_values; } - - PycRef get(int idx) const override; - -private: - key_t m_keys; - value_t m_values; -}; - class PycSet : public PycSimpleSequence { public: typedef PycSimpleSequence::value_t value_t; PycSet(int type = TYPE_SET) : PycSimpleSequence(type) { } }; +class PycDict : public PycObject { +public: + typedef std::vector> key_t; + typedef std::vector> value_t; + + PycDict(int type = TYPE_DICT) : PycObject(type) { } + + bool isEqual(PycRef obj) const override; + + void load(class PycData* stream, class PycModule* mod) override; + + const key_t& keys() const { return m_keys; } + const value_t& values() const { return m_values; } + +private: + key_t m_keys; + value_t m_values; +}; + #endif