Skip to content

Commit

Permalink
Make variant iterator bidirectional and stdlib compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
CelticMinstrel committed Mar 18, 2016
1 parent 279ced9 commit e4b944d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/variant.cpp
Expand Up @@ -164,6 +164,33 @@ variant_iterator variant_iterator::operator++(int)
return iter;
}

variant_iterator& variant_iterator::operator--()
{
if (type_ == TYPE_LIST)
{
--list_iterator_;
} else if (type_ == TYPE_MAP)
{
--map_iterator_;
}

return *this;
}

variant_iterator variant_iterator::operator--(int)
{
variant_iterator iter(*this);
if (type_ == TYPE_LIST)
{
--list_iterator_;
} else if (type_ == TYPE_MAP)
{
--map_iterator_;
}

return iter;
}

variant_iterator& variant_iterator::operator=(const variant_iterator& that)
{
if (this == &that)
Expand Down
8 changes: 8 additions & 0 deletions src/variant.hpp
Expand Up @@ -181,6 +181,12 @@ class variant {
*/
class variant_iterator {
public:
typedef variant value_type;
typedef std::bidirectional_iterator_tag iterator_category;
typedef variant& reference;
typedef variant* pointer;
typedef int difference_type;

/**
* Constructor for a TYPE_NULL variant.
*/
Expand Down Expand Up @@ -209,6 +215,8 @@ class variant_iterator {
variant operator*() const;
variant_iterator& operator++();
variant_iterator operator++(int);
variant_iterator& operator--();
variant_iterator operator--(int);
variant_iterator& operator=(const variant_iterator& that);
bool operator==(const variant_iterator& that) const;
bool operator!=(const variant_iterator& that) const;
Expand Down

0 comments on commit e4b944d

Please sign in to comment.