From dc62f10ad47cf0d31a0453a9a42dfe1b5c756304 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 24 Oct 2012 15:39:37 -0700 Subject: [PATCH] Teach BOOST_FOREACH how to traverse our objects and arrays. --- src/SerializedObject.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/SerializedObject.h b/src/SerializedObject.h index e1f7b0021d..021e57d079 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -149,10 +149,28 @@ public: static std::auto_ptr makeDefaultObject(SField::ref name) { return makeDefaultObject(name.fieldType, name); } + // field iterator stuff + typedef boost::ptr_vector::iterator iterator; + typedef boost::ptr_vector::const_iterator const_iterator; + iterator begin() { return mData.begin(); } + iterator end() { return mData.end(); } + const_iterator begin() const { return mData.begin(); } + const_iterator end() const { return mData.end(); } + bool operator==(const STObject& o) const; bool operator!=(const STObject& o) const { return ! (*this == o); } }; +inline STObject::iterator range_begin(STObject& x) { return x.begin(); } +inline STObject::iterator range_end(STObject &x) { return x.end(); } +namespace boost +{ + template<> struct range_mutable_iterator { typedef STObject::iterator type; }; + template<> struct range_const_iterator { typedef STObject::iterator type; }; +} + + + class STArray : public SerializedType { public: @@ -222,5 +240,13 @@ public: virtual bool isEquivalent(const SerializedType& t) const; }; +inline STArray::iterator range_begin(STArray& x) { return x.begin(); } +inline STArray::iterator range_end(STArray &x) { return x.end(); } +namespace boost +{ + template<> struct range_mutable_iterator { typedef STArray::iterator type; }; + template<> struct range_const_iterator { typedef STArray::iterator type; }; +} + #endif // vim:ts=4