00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined (octave_base_list_h)
00024 #define octave_base_list_h 1
00025
00026 #include <list>
00027
00028 template <typename elt_type>
00029 class
00030 octave_base_list
00031 {
00032 public:
00033
00034 typedef typename std::list<elt_type>::iterator iterator;
00035 typedef typename std::list<elt_type>::const_iterator const_iterator;
00036
00037 bool empty (void) const { return lst.empty (); }
00038
00039 size_t length (void) const { return lst.size (); }
00040
00041 iterator erase (iterator pos) { return lst.erase (pos); }
00042
00043 template <class P>
00044 void remove_if (P pred)
00045 {
00046
00047
00048
00049
00050
00051
00052
00053
00054 iterator b = lst.begin ();
00055 iterator e = lst.end ();
00056 while (b != e)
00057 {
00058 iterator n = b;
00059 n++;
00060 if (pred (*b))
00061 lst.erase (b);
00062 b = n;
00063 }
00064 }
00065
00066 void clear (void) { lst.clear (); }
00067
00068 iterator begin (void) { return iterator (lst.begin ()); }
00069 const_iterator begin (void) const { return const_iterator (lst.begin ()); }
00070
00071 iterator end (void) { return iterator (lst.end ()); }
00072 const_iterator end (void) const { return const_iterator (lst.end ()); }
00073
00074 elt_type& front (void) { return lst.front (); }
00075 elt_type& back (void) { return lst.back (); }
00076
00077 const elt_type& front (void) const { return lst.front (); }
00078 const elt_type& back (void) const { return lst.back (); }
00079
00080 void push_front (const elt_type& s) { lst.push_front (s); }
00081 void push_back (const elt_type& s) { lst.push_back (s); }
00082
00083 void pop_front (void) { lst.pop_front (); }
00084 void pop_back (void) { lst.pop_back (); }
00085
00086
00087 void append (const elt_type& s) { lst.push_back (s); }
00088
00089 private:
00090
00091 std::list<elt_type> lst;
00092 };
00093
00094 #endif
00095
00096
00097
00098
00099
00100