Implement TreeMultiSet
authorDidier 'Ptitjes <ptitjes@free.fr>
Wed, 23 Sep 2009 21:08:16 +0000 (23:08 +0200)
committerDidier 'Ptitjes <ptitjes@free.fr>
Wed, 23 Sep 2009 21:09:30 +0000 (23:09 +0200)
Fixes bug 594940.

gee/Makefile.am
gee/treemultiset.vala [new file with mode: 0644]
tests/Makefile.am
tests/testmain.vala
tests/testtreemultiset.vala [new file with mode: 0644]

index ea989ae..044bc89 100644 (file)
@@ -48,6 +48,7 @@ libgee_la_VALASOURCES = \
        set.vala \
        timsort.vala \
        treemap.vala \
+       treemultiset.vala \
        treeset.vala \
        $(NULL)
 
diff --git a/gee/treemultiset.vala b/gee/treemultiset.vala
new file mode 100644 (file)
index 0000000..0feebe9
--- /dev/null
@@ -0,0 +1,37 @@
+/* treemultiset.vala
+ *
+ * Copyright (C) 2009  Didier Villevalois
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ *     Didier 'Ptitjes Villevalois <ptitjes@free.fr>
+ */
+
+/**
+ * A tree based implementation of the {@link Gee.MultiSet} interface.
+ */
+public class Gee.TreeMultiSet<G> : AbstractMultiSet<G> {
+       public CompareFunc compare_func {
+               get { return ((TreeMap<G, int>) _storage_map).key_compare_func; }
+       }
+
+       /**
+        * Constructs a new, empty tree multi set.
+        */
+       public TreeMultiSet (CompareFunc? compare_func = null) {
+               base (new TreeMap<G, int> (compare_func, int_equal));
+       }
+}
index d483fcb..a57bdf1 100644 (file)
@@ -39,6 +39,7 @@ tests_VALASOURCES = \
        testreadonlyset.vala \
        testset.vala \
        testtreemap.vala \
+       testtreemultiset.vala \
        testtreeset.vala \
        $(NULL)
 
index 41709d5..ed66fb0 100644 (file)
@@ -38,6 +38,7 @@ void main (string[] args) {
        TestSuite.get_root ().add_suite (new ReadOnlyMapTests ().get_suite ());
        TestSuite.get_root ().add_suite (new ReadOnlySetTests ().get_suite ());
        TestSuite.get_root ().add_suite (new TreeMapTests ().get_suite ());
+       TestSuite.get_root ().add_suite (new TreeMultiSetTests ().get_suite ());
        TestSuite.get_root ().add_suite (new TreeSetTests ().get_suite ());
 
        Test.run ();
diff --git a/tests/testtreemultiset.vala b/tests/testtreemultiset.vala
new file mode 100644 (file)
index 0000000..d5cb0e2
--- /dev/null
@@ -0,0 +1,49 @@
+/* testtreemultiset.vala
+ *
+ * Copyright (C) 2009  Didier Villevalois
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ *     Didier 'Ptitjes Villevalois <ptitjes@free.fr>
+ */
+
+using Gee;
+
+public class TreeMultiSetTests : MultiSetTests {
+
+       public TreeMultiSetTests () {
+               base ("TreeMultiSet");
+               add_test ("[TreeMultiSet] selected functions", test_selected_functions);
+       }
+
+       public override void set_up () {
+               test_collection = new TreeMultiSet<string> ();
+       }
+
+       public override void tear_down () {
+               test_collection = null;
+       }
+
+       private void test_selected_functions () {
+               var test_multi_set = test_collection as TreeMultiSet<string>;
+
+               // Check the collection exists
+               assert (test_multi_set != null);
+
+               // Check the selected compare functions
+               assert (test_multi_set.compare_func == strcmp);
+       }
+}