// file : cult/containers/list.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2010 Boris Kolpackov // license : GNU GPL v2 + exceptions; see accompanying LICENSE file #ifndef CULT_CONTAINERS_LIST_HXX #define CULT_CONTAINERS_LIST_HXX #include #include #include namespace Cult { namespace Containers { template class List: public std::list { typedef std::list Base; Base& base () { return *this; } Base const& base () const { return *this; } public: typedef typename Base::value_type Value; typedef typename Base::reference Reference; typedef typename Base::const_reference ConstReference; typedef typename Base::pointer Pointer; typedef typename Base::const_pointer ConstPointer; typedef IteratorAdapter Iterator; typedef IteratorAdapter ConstIterator; typedef IteratorAdapter ReverseIterator; typedef IteratorAdapter ConstReverseIterator; // Use Cult::Size and Cult::PtrDifference. // // typedef Base::size_type; // typedef Base::difference_type; public: explicit List () : Base () { } explicit List (Size size, Value const& value = Value ()) : Base (size, value) { } template List (InputIterator first, InputIterator last) : Base (first, last) { } List (List const& other) : Base (other) { } List& operator= (List const& other) { base () = other; return *this; } public: Void swap (List& other) { base ().swap (other); } public: Iterator begin () { return Iterator (base ().begin ()); } Iterator end () { return Iterator (base ().end ()); } ConstIterator begin () const { return ConstIterator (base ().begin ()); } ConstIterator end () const { return ConstIterator (base ().end ()); } // // ReverseIterator rbegin () { return ReverseIterator (base ().rbegin ()); } ReverseIterator rend () { return ReverseIterator (base ().rend ()); } ConstReverseIterator rbegin () const { return ConstReverseIterator (base ().rbegin ()); } ConstReverseIterator rend () const { return ConstReverseIterator (base ().rend ()); } public: Iterator insert (Iterator const& p, Value const& x) { return Iterator (base ().insert (p.base (), x)); } template Void insert (Iterator const& p, I const& first, I const& last) { base ().insert (p.base (), first, last); } template Void insert (Iterator const& p, IteratorAdapter const& first, IteratorAdapter const& last) { base ().insert (p.base (), first.base (), last.base ()); } Iterator erase (Iterator const& i) { return Iterator (base ().erase (i.base ())); } }; } } #endif // CULT_CONTAINERS_LIST_HXX