From cd9762a94ae06fd67a9c46b3c0ea8b0a1d04acd4 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Thu, 19 Apr 2012 16:44:35 +1000 Subject: [PATCH] Add simple json::object accessors --- json.cpp.rl | 25 +++++++++++++++++++++++++ json.hpp | 14 ++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/json.cpp.rl b/json.cpp.rl index 39aab065..e6832dea 100644 --- a/json.cpp.rl +++ b/json.cpp.rl @@ -384,6 +384,31 @@ json::object::operator[](const std::string &key) const { } +void +json::object::clear (void) + { m_values.clear (); } + + +void +json::object::erase (const std::string &key) { + auto pos = m_values.find (key); + if (pos == m_values.end ()) + throw json::error ("erasing invalid key"); + + m_values.erase (key); +} + + +json::object::const_iterator +json::object::begin (void) const + { return m_values.begin (); } + + +json::object::const_iterator +json::object::end (void) const + { return m_values.end (); } + + std::ostream& json::object::write (std::ostream &os) const { os << "{\n"; diff --git a/json.hpp b/json.hpp index 42b008bd..5f7e42ab 100644 --- a/json.hpp +++ b/json.hpp @@ -87,7 +87,11 @@ namespace json { /// Represents a JSON object, and contains its children. class object : public node { protected: - std::map> m_values; + typedef std::map> value_store; + typedef value_store::iterator iterator; + typedef value_store::const_iterator const_iterator; + + value_store m_values; public: object () { ; } @@ -99,9 +103,15 @@ namespace json { virtual bool operator==(const node &rhs) const { return rhs == *this; } - virtual void insert (const std::string &_key, std::unique_ptr&& value); + virtual void insert (const std::string &key, std::unique_ptr&& value); virtual const node& operator[](const std::string &key) const; + virtual void clear (void); + virtual void erase (const std::string &key); + + virtual const_iterator begin (void) const; + virtual const_iterator end (void) const; + virtual std::ostream& write (std::ostream &os) const; };