Imported Upstream version 3.4.0
[platform/upstream/harfbuzz.git] / src / hb-subset-input.hh
index 0aeb966..07c0e22 100644 (file)
 #include "hb.hh"
 
 #include "hb-subset.h"
+#include "hb-map.hh"
+#include "hb-set.hh"
 
 #include "hb-font.hh"
 
+HB_MARK_AS_FLAG_T (hb_subset_flags_t);
+
 struct hb_subset_input_t
 {
   hb_object_header_t header;
 
-  hb_set_t *unicodes;
-  hb_set_t *glyphs;
-  hb_set_t *name_ids;
-  hb_set_t *name_languages;
-  hb_set_t *drop_tables;
-
-  bool drop_hints;
-  bool desubroutinize;
-  bool retain_gids;
-  bool name_legacy;
-  /* TODO
-   *
-   * features
-   * lookups
-   * name_ids
-   * ...
-   */
+  struct sets_t {
+    hb_set_t *glyphs;
+    hb_set_t *unicodes;
+    hb_set_t *no_subset_tables;
+    hb_set_t *drop_tables;
+    hb_set_t *name_ids;
+    hb_set_t *name_languages;
+    hb_set_t *layout_features;
+  };
+
+  union {
+    sets_t sets;
+    hb_set_t* set_ptrs[sizeof (sets_t) / sizeof (hb_set_t*)];
+  };
+
+  unsigned flags;
+
+  inline unsigned num_sets () const
+  {
+    return sizeof (set_ptrs) / sizeof (hb_set_t*);
+  }
+
+  inline hb_array_t<hb_set_t*> sets_iter ()
+  {
+    return hb_array_t<hb_set_t*> (set_ptrs, num_sets ());
+  }
+
+  bool in_error () const
+  {
+    for (unsigned i = 0; i < num_sets (); i++)
+    {
+      if (unlikely (set_ptrs[i]->in_error ()))
+        return true;
+    }
+    return false;
+  }
 };