Add set symmetric difference
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 25 May 2012 17:48:00 +0000 (13:48 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 25 May 2012 17:48:00 +0000 (13:48 -0400)
src/hb-set-private.hh
src/hb-set.cc
src/hb-set.h

index 717e530..df96b99 100644 (file)
@@ -102,6 +102,11 @@ struct _hb_set_t
     for (unsigned int i = 0; i < ELTS; i++)
       elts[i] &= ~other->elts[i];
   }
+  inline void symmetric_difference (const hb_set_t *other)
+  {
+    for (unsigned int i = 0; i < ELTS; i++)
+      elts[i] ^= other->elts[i];
+  }
   inline hb_codepoint_t get_min (void) const
   {
     for (unsigned int i = 0; i < ELTS; i++)
index 0e8adde..7103bcd 100644 (file)
@@ -164,6 +164,13 @@ hb_set_subtract (hb_set_t *set,
   set->subtract (other);
 }
 
+void
+hb_set_symmetric_difference (hb_set_t *set,
+                            hb_set_t *other)
+{
+  set->symmetric_difference (other);
+}
+
 hb_codepoint_t
 hb_set_min (hb_set_t *set)
 {
index 35c77b8..38bb84b 100644 (file)
@@ -105,9 +105,15 @@ void
 hb_set_subtract (hb_set_t *set,
                 hb_set_t *other);
 
+void
+hb_set_symmetric_difference (hb_set_t *set,
+                            hb_set_t *other);
+
+/* Undefined if set empty */
 hb_codepoint_t
 hb_set_min (hb_set_t *set);
 
+/* Undefined if set empty */
 hb_codepoint_t
 hb_set_max (hb_set_t *set);