Keep PycSet objects marshalled from files in order too

This commit is contained in:
Michael Hansen
2023-02-16 22:01:31 -08:00
parent ded8adfba2
commit 1fcbf4cd4b
3 changed files with 4 additions and 18 deletions

View File

@@ -134,7 +134,7 @@ void PycSet::load(PycData* stream, PycModule* mod)
{ {
m_size = stream->get32(); m_size = stream->get32();
for (int i=0; i<m_size; i++) for (int i=0; i<m_size; i++)
m_values.insert(LoadObject(stream, mod)); m_values.push_back(LoadObject(stream, mod));
} }
bool PycSet::isEqual(PycRef<PycObject> obj) const bool PycSet::isEqual(PycRef<PycObject> obj) const
@@ -154,16 +154,3 @@ bool PycSet::isEqual(PycRef<PycObject> obj) const
} }
return true; return true;
} }
PycRef<PycObject> PycSet::get(int idx) const
{
if (idx < 0)
throw std::out_of_range("Set 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("Set index out of range");
return *it;
}

View File

@@ -3,7 +3,6 @@
#include "pyc_object.h" #include "pyc_object.h"
#include <vector> #include <vector>
#include <set>
class PycSequence : public PycObject { class PycSequence : public PycObject {
public: public:
@@ -74,7 +73,7 @@ private:
class PycSet : public PycSequence { class PycSet : public PycSequence {
public: public:
typedef std::set<PycRef<PycObject>> value_t; typedef std::vector<PycRef<PycObject>> value_t;
PycSet(int type = TYPE_SET) : PycSequence(type) { } PycSet(int type = TYPE_SET) : PycSequence(type) { }
@@ -83,7 +82,7 @@ public:
void load(class PycData* stream, class PycModule* mod) override; void load(class PycData* stream, class PycModule* mod) override;
const value_t& values() const { return m_values; } const value_t& values() const { return m_values; }
PycRef<PycObject> get(int idx) const override; PycRef<PycObject> get(int idx) const override { return m_values.at(idx); }
private: private:
value_t m_values; value_t m_values;

View File

@@ -1,4 +1,4 @@
a = set ( ) <EOL> a = set ( ) <EOL>
b = { 1 , 2 } <EOL> b = { 1 , 2 } <EOL>
c = { 'AB' , 'CD' } <EOL> c = { 'AB' , 'CD' } <EOL>
d = { 2 , 1 , 3 , 4 } <EOL> d = { 1 , 2 , 3 , 4 } <EOL>