]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
flat_set/map: use boost::totally_ordered
authorJustin Viiret <justin.viiret@intel.com>
Fri, 20 Jan 2017 04:52:55 +0000 (15:52 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 04:41:30 +0000 (14:41 +1000)
src/util/ue2_containers.h

index 75e0a0a4e07b4089e6cc9347be8c5d8eea63ec6c..7034dc6f27b39c511cd1e51531ff1ecfd0e0764c 100644 (file)
@@ -39,6 +39,7 @@
 #include <boost/container/small_vector.hpp>
 #include <boost/functional/hash/hash_fwd.hpp>
 #include <boost/iterator/iterator_facade.hpp>
+#include <boost/operators.hpp>
 #include <boost/unordered/unordered_map.hpp>
 #include <boost/unordered/unordered_set.hpp>
 
@@ -120,7 +121,8 @@ protected:
  */
 template <class T, class Compare = std::less<T>,
           class Allocator = std::allocator<T>>
-class flat_set : flat_detail::flat_base<T, Compare, Allocator> {
+class flat_set : flat_detail::flat_base<T, Compare, Allocator>,
+                 boost::totally_ordered<flat_set<T, Compare, Allocator>> {
     using base_type = flat_detail::flat_base<T, Compare, Allocator>;
     using storage_type = typename base_type::storage_type;
 
@@ -315,26 +317,14 @@ public:
         return comp();
     }
 
-    // Operators.
+    // Operators. All others provided by boost::totally_ordered.
 
     bool operator==(const flat_set &a) const {
         return data() == a.data();
     }
-    bool operator!=(const flat_set &a) const {
-        return data() != a.data();
-    }
     bool operator<(const flat_set &a) const {
         return data() < a.data();
     }
-    bool operator<=(const flat_set &a) const {
-        return data() <= a.data();
-    }
-    bool operator>(const flat_set &a) const {
-        return data() > a.data();
-    }
-    bool operator>=(const flat_set &a) const {
-        return data() >= a.data();
-    }
 
     // Free swap function for ADL.
     friend void swap(flat_set &a, flat_set &b) {
@@ -363,7 +353,8 @@ public:
  */
 template <class Key, class T, class Compare = std::less<Key>,
           class Allocator = std::allocator<std::pair<Key, T>>>
-class flat_map : flat_detail::flat_base<std::pair<Key, T>, Compare, Allocator> {
+class flat_map : flat_detail::flat_base<std::pair<Key, T>, Compare, Allocator>,
+                 boost::totally_ordered<flat_map<Key, T, Compare, Allocator>> {
 public:
     // Member types.
     using key_type = Key;
@@ -626,26 +617,14 @@ public:
         return value_compare(comp());
     }
 
-    // Operators.
+    // Operators. All others provided by boost::totally_ordered.
 
     bool operator==(const flat_map &a) const {
         return data() == a.data();
     }
-    bool operator!=(const flat_map &a) const {
-        return data() != a.data();
-    }
     bool operator<(const flat_map &a) const {
         return data() < a.data();
     }
-    bool operator<=(const flat_map &a) const {
-        return data() <= a.data();
-    }
-    bool operator>(const flat_map &a) const {
-        return data() > a.data();
-    }
-    bool operator>=(const flat_map &a) const {
-        return data() >= a.data();
-    }
 
     // Free swap function for ADL.
     friend void swap(flat_map &a, flat_map &b) {