ekiga r7305 - trunk/lib/engine/framework
- From: jpuydt svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r7305 - trunk/lib/engine/framework
- Date: Thu, 30 Oct 2008 15:18:17 +0000 (UTC)
Author: jpuydt
Date: Thu Oct 30 15:18:17 2008
New Revision: 7305
URL: http://svn.gnome.org/viewvc/ekiga?rev=7305&view=rev
Log:
Completed Ekiga::RefLister to have iterators (no const yet)
Added:
trunk/lib/engine/framework/map-key-iterator.h
Modified:
trunk/lib/engine/framework/reflister.h
Added: trunk/lib/engine/framework/map-key-iterator.h
==============================================================================
--- (empty file)
+++ trunk/lib/engine/framework/map-key-iterator.h Thu Oct 30 15:18:17 2008
@@ -0,0 +1,126 @@
+
+/*
+ * Ekiga -- A VoIP and Video-Conferencing application
+ * Copyright (C) 2000-2008 Damien Sandras
+
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version. This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Ekiga is licensed under the GPL license and as a special exception, you
+ * have permission to link or otherwise combine this program with the
+ * programs OPAL, OpenH323 and PWLIB, and distribute the combination, without
+ * applying the requirements of the GNU GPL to the OPAL, OpenH323 and PWLIB
+ * programs, as long as you do follow the requirements of the GNU GPL for all
+ * the rest of the software thus combined.
+ */
+
+
+/*
+ * map-key-iterator.h - description
+ * ------------------------------------------
+ * begin : written in 2008 by Julien Puydt
+ * copyright : (c) 2008 by Julien Puydt
+ * description : iterator on the keys of a std::map
+ *
+ */
+
+#ifndef __MAP_KEY_ITERATOR_H__
+#define __MAP_KEY_ITERATOR_H__
+
+#include <map>
+
+namespace Ekiga
+{
+ template<typename map_type>
+ class map_key_iterator: public std::forward_iterator_tag
+ {
+ public:
+
+ map_key_iterator (typename map_type::iterator it_);
+
+ map_key_iterator& operator= (const map_key_iterator& other);
+
+ bool operator== (const map_key_iterator& other);
+ bool operator!= (const map_key_iterator& other);
+
+ map_key_iterator& operator++ ();
+ map_key_iterator operator++ (int);
+
+ typename map_type::key_type operator* ();
+
+ typename map_type::key_type* operator-> ();
+
+ private:
+ typename map_type::iterator it;
+ };
+
+};
+
+template<typename map_type>
+Ekiga::map_key_iterator<map_type>::map_key_iterator (typename map_type::iterator it_): it(it_)
+{
+}
+
+template<typename map_type>
+Ekiga::map_key_iterator<map_type>&
+Ekiga::map_key_iterator<map_type>::operator= (const map_key_iterator<map_type>& other)
+{
+ it = other.it;
+ return *this;
+}
+
+template<typename map_type>
+bool
+Ekiga::map_key_iterator<map_type>::operator== (const map_key_iterator<map_type>& other)
+{
+ return it == other.it;
+}
+
+template<typename map_type>
+bool
+Ekiga::map_key_iterator<map_type>::operator!= (const map_key_iterator<map_type>& other)
+{
+ return it != other.it;
+}
+
+template<typename map_type>
+Ekiga::map_key_iterator<map_type>&
+Ekiga::map_key_iterator<map_type>::operator++ ()
+{
+ it++;
+ return *this;
+}
+
+template<typename map_type>
+Ekiga::map_key_iterator<map_type>
+Ekiga::map_key_iterator<map_type>::operator++ (int)
+{
+ map_key_iterator<map_type> tmp = *this;
+ ++it;
+ return tmp;
+}
+
+template<typename map_type>
+typename map_type::key_type
+Ekiga::map_key_iterator<map_type>::operator* ()
+{
+ return it->first;
+}
+
+template<typename map_type>
+typename map_type::key_type*
+Ekiga::map_key_iterator<map_type>::operator-> ()
+{
+ return it->first;
+}
+
+#endif
Modified: trunk/lib/engine/framework/reflister.h
==============================================================================
--- trunk/lib/engine/framework/reflister.h (original)
+++ trunk/lib/engine/framework/reflister.h Thu Oct 30 15:18:17 2008
@@ -37,10 +37,11 @@
#ifndef __REFLISTER_H__
#define __REFLISTER_H__
-#include "gmref.h"
#include <sigc++/sigc++.h>
#include <list>
-#include <map>
+
+#include "gmref.h"
+#include "map-key-iterator.h"
namespace Ekiga
{
@@ -50,6 +51,7 @@
protected:
typedef std::map<gmref_ptr<ObjectType>,std::list<sigc::connection> > container_type;
+ typedef Ekiga::map_key_iterator<container_type> iterator;
void visit_objects (sigc::slot<bool, gmref_ptr<ObjectType> > visitor);
@@ -60,6 +62,11 @@
void remove_object (gmref_ptr<ObjectType> obj);
+ void remove_all_objects ();
+
+ iterator begin ();
+ iterator end ();
+
sigc::signal<void, gmref_ptr<ObjectType> > object_added;
sigc::signal<void, gmref_ptr<ObjectType> > object_removed;
sigc::signal<void, gmref_ptr<ObjectType> > object_updated;
@@ -115,4 +122,27 @@
object_removed.emit (obj);
}
+template<typename ObjectType>
+void
+Ekiga::RefLister<ObjectType>::remove_all_objects ()
+{
+ /* iterators get invalidated as we go, hence the strange loop */
+ while (objects.begin () != objects.end ())
+ remove_object (objects.begin ()->first);
+}
+
+template<typename ObjectType>
+typename Ekiga::RefLister<ObjectType>::iterator
+Ekiga::RefLister<ObjectType>::begin ()
+{
+ return iterator (objects.begin ());
+}
+
+template<typename ObjectType>
+typename Ekiga::RefLister<ObjectType>::iterator
+Ekiga::RefLister<ObjectType>::end ()
+{
+ return iterator (objects.end ());
+}
+
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]