--- deliantra/dclient/include/adt/slice.h 2010/10/17 08:14:45 1.1 +++ deliantra/dclient/include/adt/slice.h 2010/10/20 08:33:39 1.2 @@ -1,14 +1,17 @@ #pragma once template -struct container_slice +struct slice_view { - typedef Container container_type; + typedef Container container_type; - typedef typename container_type::const_iterator const_iterator; - typedef typename container_type::iterator iterator; + typedef typename container_type::const_iterator const_iterator; + typedef typename container_type::iterator iterator; - container_slice (Container const &container, size_t offset) + typedef typename container_type::const_reverse_iterator const_reverse_iterator; + typedef typename container_type::reverse_iterator reverse_iterator; + + slice_view (Container const &container, size_t offset) : container (container) , offset (offset) { @@ -21,14 +24,17 @@ const_iterator begin () const { return container.begin () + offset; } const_iterator end () const { return container.end (); } + const_reverse_iterator rbegin () const { return container.rbegin () + offset; } + const_reverse_iterator rend () const { return container.rend (); } + private: container_type const &container; size_t offset; }; template -container_slice +slice_view slice (Container const &container, size_t offset) { - return container_slice (container, offset); + return slice_view (container, offset); }