src/hb-open-type-private.hh | 25 +++++++++++-------------- src/hb-ot-kern-table.hh | 2 +- src/hb-ot-layout-private.hh | 8 ++++---- src/hb-ot-layout.cc | 6 +++--- src/hb-ot-post-table.hh | 2 +- 5 files changed, 20 insertions(+), 23 deletions(-)
New commits: commit 2a2e28e701319b4053a5c95f06c68f859e4ce99b Author: Behdad Esfahbod <[email protected]> Date: Tue May 8 03:00:21 2018 -0700 Don't keep instance in hb_table_lazy_loader_t diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index 28c36921..775cb390 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -1239,7 +1239,6 @@ struct hb_table_lazy_loader_t { face = face_; blob = nullptr; - instance = nullptr; } inline void fini (void) @@ -1250,19 +1249,18 @@ struct hb_table_lazy_loader_t inline const T* get (void) const { retry: - T *p = (T *) hb_atomic_ptr_get (&instance); - if (unlikely (!p)) + hb_blob_t *blob_ = (hb_blob_t *) hb_atomic_ptr_get (&blob); + if (unlikely (!blob_)) { - hb_blob_t *blob_ = OT::Sanitizer<T>().sanitize (face->reference_table (T::tableTag)); - p = const_cast<T *>(blob_->as<T> ()); - if (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), nullptr, p)) + blob_ = OT::Sanitizer<T>().sanitize (face->reference_table (T::tableTag)); + if (!hb_atomic_ptr_cmpexch (&blob, nullptr, blob_)) { hb_blob_destroy (blob_); goto retry; } blob = blob_; } - return p; + return blob_->as<T> (); } inline const T* operator-> (void) const @@ -1270,10 +1268,9 @@ struct hb_table_lazy_loader_t return get(); } + private: hb_face_t *face; mutable hb_blob_t *blob; - private: - mutable T *instance; }; commit 57bac8f6995fabbb98eb9824d822f370f9449488 Author: Behdad Esfahbod <[email protected]> Date: Tue May 8 02:55:20 2018 -0700 Rename diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index e21bd458..28c36921 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -1181,7 +1181,7 @@ struct BinSearchArrayOf : SortedArrayOf<Type, BinSearchHeader> {}; /* Lazy struct and blob loaders. */ -/* Logic is shared between hb_lazy_loader_t and hb_lazy_table_loader_t */ +/* Logic is shared between hb_lazy_loader_t and hb_table_lazy_loader_t */ template <typename T> struct hb_lazy_loader_t { @@ -1231,9 +1231,9 @@ struct hb_lazy_loader_t T *instance; }; -/* Logic is shared between hb_lazy_loader_t and hb_lazy_table_loader_t */ +/* Logic is shared between hb_lazy_loader_t and hb_table_lazy_loader_t */ template <typename T> -struct hb_lazy_table_loader_t +struct hb_table_lazy_loader_t { inline void init (hb_face_t *face_) { diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh index caef70b9..b2f974b8 100644 --- a/src/hb-ot-layout-private.hh +++ b/src/hb-ot-layout-private.hh @@ -172,10 +172,10 @@ struct hb_ot_layout_t const struct OT::GPOS *gpos; /* TODO Move the following out of this struct. */ - OT::hb_lazy_table_loader_t<struct OT::BASE> base; - OT::hb_lazy_table_loader_t<struct OT::MATH> math; - OT::hb_lazy_table_loader_t<struct OT::fvar> fvar; - OT::hb_lazy_table_loader_t<struct OT::avar> avar; + OT::hb_table_lazy_loader_t<struct OT::BASE> base; + OT::hb_table_lazy_loader_t<struct OT::MATH> math; + OT::hb_table_lazy_loader_t<struct OT::fvar> fvar; + OT::hb_table_lazy_loader_t<struct OT::avar> avar; unsigned int gsub_lookup_count; unsigned int gpos_lookup_count; commit 2a46a020fd2fa2fe99886ab06188db5f0fa37ad1 Author: Behdad Esfahbod <[email protected]> Date: Tue May 8 02:53:03 2018 -0700 Minor diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index 8bc74169..e21bd458 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -186,7 +186,7 @@ struct hb_sanitize_context_t : inline void start_processing (void) { this->start = hb_blob_get_data (this->blob, nullptr); - this->end = this->start + hb_blob_get_length (this->blob); + this->end = this->start + this->blob->length; assert (this->start <= this->end); /* Must not overflow. */ this->max_ops = MAX ((unsigned int) (this->end - this->start) * HB_SANITIZE_MAX_OPS_FACTOR, (unsigned) HB_SANITIZE_MAX_OPS_MIN); @@ -329,7 +329,7 @@ struct Sanitizer unsigned int edit_count = c->edit_count; if (edit_count && !c->writable) { c->start = hb_blob_get_data_writable (blob, nullptr); - c->end = c->start + hb_blob_get_length (blob); + c->end = c->start + blob->length; if (c->start) { c->writable = true; diff --git a/src/hb-ot-kern-table.hh b/src/hb-ot-kern-table.hh index 9366dbf4..b0fdea4a 100644 --- a/src/hb-ot-kern-table.hh +++ b/src/hb-ot-kern-table.hh @@ -364,7 +364,7 @@ struct kern { blob = Sanitizer<kern>().sanitize (face->reference_table (HB_OT_TAG_kern)); table = blob->as<kern> (); - table_length = hb_blob_get_length (blob); + table_length = blob->length; } inline void fini (void) { diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index d5efde29..368a8465 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -77,9 +77,9 @@ _hb_ot_layout_create (hb_face_t *face) * See this thread for why we finally had to bend in and do this: * https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html */ - unsigned int gdef_len = hb_blob_get_length (layout->gdef_blob); - unsigned int gsub_len = hb_blob_get_length (layout->gsub_blob); - unsigned int gpos_len = hb_blob_get_length (layout->gpos_blob); + unsigned int gdef_len = layout->gdef_blob->length; + unsigned int gsub_len = layout->gsub_blob->length; + unsigned int gpos_len = layout->gpos_blob->length; if (0 /* sha1sum:c5ee92f0bca4bfb7d06c4d03e8cf9f9cf75d2e8a Windows 7? timesi.ttf */ || (442 == gdef_len && 42038 == gpos_len && 2874 == gsub_len) diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh index bb5f9b31..8ba5ee10 100644 --- a/src/hb-ot-post-table.hh +++ b/src/hb-ot-post-table.hh @@ -111,7 +111,7 @@ struct post { blob = Sanitizer<post>().sanitize (face->reference_table (HB_OT_TAG_post)); const post *table = blob->as<post> (); - unsigned int table_length = hb_blob_get_length (blob); + unsigned int table_length = blob->length; version = table->version.to_int (); index_to_offset.init (); _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
