< 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 >