diff options
Diffstat (limited to 'libs/glibmm2/glibmm/helperlist.h')
-rw-r--r-- | libs/glibmm2/glibmm/helperlist.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/libs/glibmm2/glibmm/helperlist.h b/libs/glibmm2/glibmm/helperlist.h new file mode 100644 index 0000000000..50685e80ca --- /dev/null +++ b/libs/glibmm2/glibmm/helperlist.h @@ -0,0 +1,165 @@ +// -*- c++ -*- +#ifndef _GLIBMM_HELPERLIST_H +#define _GLIBMM_HELPERLIST_H +/* $Id$ */ + +/* helperlist.h + * + * Copyright 2002 The gtkmm Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <glibmm/containers.h> + +namespace Glib +{ + +// This class has some pure virtual methods which need to be implemented by derived classes. +template< typename T_Child, typename T_CppElement, typename T_Iterator > +class HelperList +{ +public: + HelperList() + : gparent_(0) + {} + + HelperList(GObject* gparent) + : gparent_(gparent) + {} + + virtual ~HelperList() + {} + + typedef T_Child value_type; + typedef value_type& reference; + typedef const value_type& const_reference; + + typedef T_Iterator iterator; + typedef List_ConstIterator<iterator> const_iterator; + typedef List_ReverseIterator<iterator> reverse_iterator; + typedef List_ConstIterator<reverse_iterator> const_reverse_iterator; + + typedef T_CppElement element_type; + + typedef size_t difference_type; + typedef size_t size_type; + + //These are implemented differently for each Helper List. + virtual iterator erase(iterator) = 0; + + virtual void erase(iterator start, iterator stop) + { + while(start != stop) + start = erase(start); //Implemented in derived class. + } + + virtual void remove(const_reference) = 0; + + size_type size() const + { + return g_list_length(glist()); + } + + inline size_type max_size() { return size_type(-1); } + inline bool empty() { return glist() == 0; } + + inline iterator begin() + {return begin_();} + inline iterator end() + {return end_();} + + inline const_iterator begin() const + { return const_iterator(begin_()); } + inline const_iterator end() const + { return const_iterator(end_()); } + + inline reverse_iterator rbegin() + { return reverse_iterator(end_()); } + inline reverse_iterator rend() + { return reverse_iterator(begin_()); } + + inline const_reverse_iterator rbegin() const + { return const_reverse_iterator(reverse_iterator(end_())); } + inline const_reverse_iterator rend() const + { return const_reverse_iterator(reverse_iterator(begin_())); } + + reference front() const + { + return *begin(); + } + + reference back() const + { + return *(--end()); + } + + reference operator[](size_type l) const + { + size_type j = 0; + iterator i; + for(i = begin(), j = 0; i != end(), j < l; ++i, ++j); + return (*i); + } + +// iterator find(const_reference w) +// { +// iterator i = begin(); +// for(i = begin(); i != end() && (*i != w); i++); +// return i; +// } +// +// iterator find(Widget& w) +// { +// iterator i; +// for (i = begin(); i != end() && ((*i)->$1() != &w); i++); +// return i; +// } + + //Derived classes might choose to reimplement these as public: + inline void pop_front() + { erase(begin()); } + inline void pop_back() + { erase(--end()); } + + void clear() + { erase(begin(), end()); } + + GObject* gparent() + { return gparent_; }; + const GObject* gparent() const + { return gparent_; }; + +protected: + virtual GList*& glist() const = 0; // front of list + + iterator begin_() const + { + return iterator(glist(), glist()); + } + + iterator end_() const + { + return iterator(glist(), (GList*)0); + } + + GObject* gparent_; +}; + + +} /* namespace Glib */ + +#endif /* _GLIBMM_HELPERLIST_H */ + |