diff options
author | David Robillard <d@drobilla.net> | 2011-12-08 22:34:35 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-12-08 22:34:35 +0000 |
commit | cf71d7ee9914de3936456eebe6d87948b46b2e57 (patch) | |
tree | f9a90d23a3e9e2f68adf329952de33b6e452f9b4 /ganv/Module.hpp | |
parent | f808fa7d26df3b42c0bb33c49894920b0f975ec9 (diff) | |
download | ganv-cf71d7ee9914de3936456eebe6d87948b46b2e57.tar.gz ganv-cf71d7ee9914de3936456eebe6d87948b46b2e57.tar.bz2 ganv-cf71d7ee9914de3936456eebe6d87948b46b2e57.zip |
Hide implementations.
git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@3837 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'ganv/Module.hpp')
-rw-r--r-- | ganv/Module.hpp | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/ganv/Module.hpp b/ganv/Module.hpp index 101b063..628a3c1 100644 --- a/ganv/Module.hpp +++ b/ganv/Module.hpp @@ -65,31 +65,45 @@ public: template<typename P, typename C> class iterator_base { public: - iterator_base(C** p) : _ptr(p) {} + iterator_base(GanvModule* m, guint i) : _module(m), _index(i) {} template<typename T, typename U> iterator_base(const iterator_base<T, U>& i) - : _ptr(const_cast<C**>(i._ptr)) + : _module(i._module) + , _index(i._index) {} - P* operator*() const { return Glib::wrap(*_ptr); } - P* operator->() const { return Glib::wrap(*_ptr); } - iterator_base operator++(int) { return iterator_base<P, C>(_ptr + 1); } - iterator_base& operator++() { ++_ptr; return *this; } - bool operator==(const iterator_base<P, C>& i) const { return _ptr == i._ptr; } - bool operator!=(const iterator_base<P, C>& i) const { return _ptr != i._ptr; } + P* operator*() const { + return Glib::wrap(ganv_module_get_port(_module, _index)); + } + P* operator->() const { + return Glib::wrap(ganv_module_get_port(_module, _index)); + } + iterator_base operator++(int) const { + return iterator_base<P, C>(_index + 1); + } + iterator_base& operator++() { + ++_index; return *this; + } + bool operator==(const iterator_base<P, C>& i) const { + return _index == i._index; + } + bool operator!=(const iterator_base<P, C>& i) const { + return _index != i._index; + } private: template<typename T, typename U> friend class iterator_base; - C** _ptr; + GanvModule* _module; + guint _index; }; typedef iterator_base<Port, GanvPort> iterator; typedef iterator_base<const Port, const GanvPort> const_iterator; - iterator begin() { return iterator((GanvPort**)gobj()->ports->pdata); } - iterator end() { return iterator((GanvPort**)gobj()->ports->pdata + gobj()->ports->len); } - iterator back() { return iterator((GanvPort**)gobj()->ports->pdata + gobj()->ports->len - 1); } - const_iterator begin() const { return const_iterator((const GanvPort**)gobj()->ports->pdata); } - const_iterator end() const { return const_iterator((const GanvPort**)gobj()->ports->pdata + gobj()->ports->len); } - const_iterator back() const { return const_iterator((const GanvPort**)gobj()->ports->pdata + gobj()->ports->len - 1); } + iterator begin() { return iterator(gobj(), 0); } + iterator end() { return iterator(gobj(), num_ports()); } + iterator back() { return iterator(gobj(), num_ports() - 1); } + const_iterator begin() const { return iterator(const_cast<GanvModule*>(gobj()), 0); } + const_iterator end() const { return iterator(const_cast<GanvModule*>(gobj()), num_ports()); } + const_iterator back() const { return iterator(const_cast<GanvModule*>(gobj()), num_ports() - 1); } void set_icon(Gdk::Pixbuf* icon) { ganv_module_set_icon(gobj(), icon->gobj()); @@ -103,7 +117,7 @@ public: ganv_module_for_each_port(gobj(), f, data); } - size_t num_ports() const { return gobj()->ports->len; } + guint num_ports() const { return ganv_module_num_ports(gobj()); } RW_PROPERTY(gboolean, stacked) RW_PROPERTY(gboolean, show_port_labels) |