< prev index next >

src/java.desktop/share/native/libfontmanager/harfbuzz/hb-face.hh

Print this page

        

@@ -24,51 +24,52 @@
  *
  * Red Hat Author(s): Behdad Esfahbod
  * Google Author(s): Behdad Esfahbod
  */
 
-#ifndef HB_FACE_PRIVATE_HH
-#define HB_FACE_PRIVATE_HH
+#ifndef HB_FACE_HH
+#define HB_FACE_HH
 
-#include "hb-private.hh"
+#include "hb.hh"
 
-#include "hb-object-private.hh"
-#include "hb-shaper-private.hh"
-#include "hb-shape-plan-private.hh"
+#include "hb-shaper.hh"
+#include "hb-shape-plan.hh"
+#include "hb-ot-face.hh"
 
 
 /*
  * hb_face_t
  */
 
-struct hb_face_t {
-  hb_object_header_t header;
-  ASSERT_POD ();
+#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INSTANTIATE_SHAPERS(shaper, face);
+#include "hb-shaper-list.hh"
+#undef HB_SHAPER_IMPLEMENT
 
-  hb_bool_t immutable;
+struct hb_face_t
+{
+  hb_object_header_t header;
 
   hb_reference_table_func_t  reference_table_func;
   void                      *user_data;
   hb_destroy_func_t          destroy;
 
   unsigned int index;                   /* Face index in a collection, zero-based. */
-  mutable unsigned int upem;            /* Units-per-EM. */
-  mutable unsigned int num_glyphs;      /* Number of glyphs. */
+  mutable hb_atomic_int_t upem;         /* Units-per-EM. */
+  mutable hb_atomic_int_t num_glyphs;   /* Number of glyphs. */
 
-  struct hb_shaper_data_t shaper_data;  /* Various shaper data. */
-
-  /* Various non-shaping data. */
-  /* ... */
+  hb_shaper_object_dataset_t<hb_face_t> data;/* Various shaper data. */
+  hb_ot_face_t table;                   /* All the face's tables. */
 
   /* Cache */
-  struct plan_node_t {
+  struct plan_node_t
+  {
     hb_shape_plan_t *shape_plan;
     plan_node_t *next;
-  } *shape_plans;
-
+  };
+  hb_atomic_ptr_t<plan_node_t> shape_plans;
 
-  inline hb_blob_t *reference_table (hb_tag_t tag) const
+  hb_blob_t *reference_table (hb_tag_t tag) const
   {
     hb_blob_t *blob;
 
     if (unlikely (!reference_table_func))
       return hb_blob_get_empty ();

@@ -78,34 +79,31 @@
       return hb_blob_get_empty ();
 
     return blob;
   }
 
-  inline HB_PURE_FUNC unsigned int get_upem (void) const
+  HB_PURE_FUNC unsigned int get_upem () const
   {
-    if (unlikely (!upem))
-      load_upem ();
-    return upem;
+    unsigned int ret = upem.get_relaxed ();
+    if (unlikely (!ret))
+    {
+      return load_upem ();
+    }
+    return ret;
   }
 
-  inline unsigned int get_num_glyphs (void) const
+  unsigned int get_num_glyphs () const
   {
-    if (unlikely (num_glyphs == (unsigned int) -1))
-      load_num_glyphs ();
-    return num_glyphs;
+    unsigned int ret = num_glyphs.get_relaxed ();
+    if (unlikely (ret == (unsigned int) -1))
+      return load_num_glyphs ();
+    return ret;
   }
 
   private:
-  HB_INTERNAL void load_upem (void) const;
-  HB_INTERNAL void load_num_glyphs (void) const;
+  HB_INTERNAL unsigned int load_upem () const;
+  HB_INTERNAL unsigned int load_num_glyphs () const;
 };
-
-extern HB_INTERNAL const hb_face_t _hb_face_nil;
-
-#define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
-#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, face);
-#include "hb-shaper-list.hh"
-#undef HB_SHAPER_IMPLEMENT
-#undef HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
+DECLARE_NULL_INSTANCE (hb_face_t);
 
 
-#endif /* HB_FACE_PRIVATE_HH */
+#endif /* HB_FACE_HH */
< prev index next >