Commit a57456b7 authored by neverlord's avatar neverlord

any_tuple::tail

parent 30c57dcc
...@@ -56,7 +56,12 @@ class any_tuple ...@@ -56,7 +56,12 @@ class any_tuple
bool equal_to(const any_tuple& other) const; bool equal_to(const any_tuple& other) const;
any_tuple tail() const; any_tuple tail(size_t offset = 1) const;
inline bool empty() const
{
return size() == 0;
}
}; };
......
...@@ -99,29 +99,31 @@ struct offset_decorator : cppa::detail::abstract_tuple ...@@ -99,29 +99,31 @@ struct offset_decorator : cppa::detail::abstract_tuple
typedef cppa::cow_ptr<cppa::detail::abstract_tuple> ptr_type; typedef cppa::cow_ptr<cppa::detail::abstract_tuple> ptr_type;
offset_decorator(const ptr_type& decorated) offset_decorator(const ptr_type& decorated, size_t offset)
: m_decorated(decorated), m_type_list(decorated->types()) : m_offset(offset)
, m_decorated(decorated)
, m_type_list(decorated->types())
{ {
} }
void* mutable_at(size_t pos) void* mutable_at(size_t pos)
{ {
return m_decorated->mutable_at(pos + 1); return m_decorated->mutable_at(pos + m_offset);
} }
size_t size() const size_t size() const
{ {
return m_decorated->size() - 1; return m_decorated->size() - m_offset;
} }
abstract_tuple* copy() const abstract_tuple* copy() const
{ {
return new offset_decorator(m_decorated); return new offset_decorator(m_decorated, m_offset);
} }
const void* at(size_t pos) const const void* at(size_t pos) const
{ {
return m_decorated->at(pos + 1); return m_decorated->at(pos + m_offset);
} }
const cppa::util::abstract_type_list& types() const const cppa::util::abstract_type_list& types() const
...@@ -131,11 +133,12 @@ struct offset_decorator : cppa::detail::abstract_tuple ...@@ -131,11 +133,12 @@ struct offset_decorator : cppa::detail::abstract_tuple
const cppa::uniform_type_info& utype_info_at(size_t pos) const const cppa::uniform_type_info& utype_info_at(size_t pos) const
{ {
return m_decorated->utype_info_at(pos + 1); return m_decorated->utype_info_at(pos + m_offset);
} }
private: private:
size_t m_offset;
ptr_type m_decorated; ptr_type m_decorated;
offset_type_list m_type_list; offset_type_list m_type_list;
...@@ -168,10 +171,11 @@ any_tuple& any_tuple::operator=(any_tuple&& other) ...@@ -168,10 +171,11 @@ any_tuple& any_tuple::operator=(any_tuple&& other)
return *this; return *this;
} }
any_tuple any_tuple::tail() const any_tuple any_tuple::tail(size_t offset) const
{ {
if (size() <= 1) return any_tuple(s_empty_tuple()); if (offset == 0) return *this;
return any_tuple(new offset_decorator(m_vals)); if (size() <= offset) return any_tuple(s_empty_tuple());
return any_tuple(new offset_decorator(m_vals, offset));
} }
size_t any_tuple::size() const size_t any_tuple::size() const
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment