Ardour  9.0-pre0-582-g084a23a80d
list.h
Go to the documentation of this file.
1 #ifndef _GDKMM_LIST_H_
2 #define _GDKMM_LIST_H_
3 
4 namespace Gdk {
5 
6 #ifdef GTKMM_CXX_HAVE_PARTIAL_SPECIALIZATION
7 // Dummy class to make it appear as though the user has the list.
8 /*
9 template<class Parent,class Iterator,class Access>
10  class List
11  {
12  public:
13  typedef List<Parent,Iterator,Access> List;
14  private:
15  Parent* parent;
16  public:
17  List(Parent& p):parent(p) {}
18  List():parent(0) {}
19  List(const List& list):parent(list.parent) {}
20 
21  Iterator begin()
22  {
23  if (parent)
24  return Access::begin(parent);
25  return Iterator();
26  }
27  Iterator end();
28  {
29  if (parent)
30  return Access::end(parent);
31  return Iterator();
32  }
33  };
34 */
35 
36 // An iterator that caches the current object to C++ for speed
37 template<class C_Obj, class Cpp_Obj>
38  class List_Iterator
39  {
40  public:
41  typedef List_Iterator<C_Obj,Cpp_Obj> self;
42 
43  private:
44  GList *node;
45  Cpp_Obj cache;
46 
47  public:
48  self& operator=(const self& x)
49  {
50  cache.free();
51  node=x.node;
52  }
53 
54  bool operator==(const self& x) const
55  { return node == x.node; }
56  bool operator!=(const self& x) const
57  { return node != x.node; }
58 
59  List_Iterator(GList *n) : node(n),cache(0)
60  {}
61  List_Iterator() :node(0),cache(0)
62  {}
63  List_Iterator(const self& x)
64  : node(x.node),cache(0)
65  {}
66 
67  Cpp_Obj& operator*() const
68  {
69  if (node)
70  {if (cache.gobj()!=node->data)
71  cache=Cpp_Obj(node->data);
72  }
73  else
74  cache=Cpp_Obj(0);
75  cache=0;
76  return ;
77  }
78 
79  Cpp_Obj* operator->() const
80  {
81  return &(operator*());
82  }
83 
84  self& operator++()
85  {
86  cache.free();
87  if (node && node->next)
88  node = node->next;
89  return *this;
90  }
91 
92  self operator++(int)
93  {
94  self tmp = *this;
95  ++*this;
96  return tmp;
97  }
98 
99  self& operator--()
100  {
101  cache.free();
102  if (node && node->prev)
103  node=node->prev;
104  return *this;
105  }
106 
107  self operator--(int)
108  {
109  self tmp = *this;
110  --*this;
111  return tmp;
112  }
113 
114  };
115 
116 /*
117 List_Iterator<GdkWidget*,Widget> iter;
118 (*iter) should be a Widget
119 
120 Example usage:
121 
122  class Foo()
123  {
124  public:
125  typedef List_Iterator<GdkWidget*,Widget> Iterator;
126  typedef List<Foo,Iterator,Child_Access) Child_List;
127  private:
128  struct Child_Access
129  {
130  static Iterator begin(Foo& foo)
131  {return foo.get_children_begin();}
132  static Iterator end(Foo& foo)
133  {return foo.get_children_end();}
134  };
135  public:
136 // GList* get_children();
137  Iterator get_children_begin()
138  {return Iterator(gdk_foo_get_children(*this);}
139  Iterator get_children_end()
140  {
141  GList* list=gdk_foo_get_children(*this);
142  return Iterator(g_list_last(list);
143  }
144  Child_List get_children()
145  {
146  return Child_List(this);
147  }
148 
149  };
150 */
151 
152 #endif
153 
154 } /* namespace Gdk */
155 
156 
157 #endif // _GDKMM_LIST_H_
bool operator==(const ProcessorSelection &a, const ProcessorSelection &b)