< prev index next >

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

Print this page

        

*** 24,88 **** * * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ ! #ifndef HB_BLOB_PRIVATE_HH ! #define HB_BLOB_PRIVATE_HH ! #include "hb-private.hh" ! ! #include "hb-object-private.hh" /* * hb_blob_t */ struct hb_blob_t { ! inline void fini_shallow (void) ! { ! destroy_user_data (); ! } ! inline void destroy_user_data (void) { if (destroy) { destroy (user_data); user_data = nullptr; destroy = nullptr; } } ! HB_INTERNAL bool try_make_writable (void); ! HB_INTERNAL bool try_make_writable_inplace (void); ! HB_INTERNAL bool try_make_writable_inplace_unix (void); ! ! inline void lock (void) ! { ! hb_blob_make_immutable (this); ! } template <typename Type> ! inline const Type* as (void) const { ! return unlikely (!data) ? &Null(Type) : reinterpret_cast<const Type *> (data); } public: hb_object_header_t header; - ASSERT_POD (); - - bool immutable; const char *data; unsigned int length; hb_memory_mode_t mode; void *user_data; hb_destroy_func_t destroy; }; ! #endif /* HB_BLOB_PRIVATE_HH */ --- 24,101 ---- * * Red Hat Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod */ ! #ifndef HB_BLOB_HH ! #define HB_BLOB_HH ! #include "hb.hh" /* * hb_blob_t */ struct hb_blob_t { ! void fini_shallow () { destroy_user_data (); } ! void destroy_user_data () { if (destroy) { destroy (user_data); user_data = nullptr; destroy = nullptr; } } ! HB_INTERNAL bool try_make_writable (); ! HB_INTERNAL bool try_make_writable_inplace (); ! HB_INTERNAL bool try_make_writable_inplace_unix (); template <typename Type> ! const Type* as () const { ! return length < hb_null_size (Type) ? &Null(Type) : reinterpret_cast<const Type *> (data); } + hb_bytes_t as_bytes () const + { return hb_bytes_t (data, length); } public: hb_object_header_t header; const char *data; unsigned int length; hb_memory_mode_t mode; void *user_data; hb_destroy_func_t destroy; }; ! /* ! * hb_blob_ptr_t ! */ ! ! template <typename P> ! struct hb_blob_ptr_t ! { ! typedef typename hb_remove_pointer (P) T; ! ! hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {} ! hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; } ! const T * operator -> () const { return get (); } ! const T & operator * () const { return *get (); } ! template <typename C> operator const C * () const { return get (); } ! operator const char * () const { return (const char *) get (); } ! const T * get () const { return b->as<T> (); } ! hb_blob_t * get_blob () const { return b.get_raw (); } ! unsigned int get_length () const { return b.get ()->length; } ! void destroy () { hb_blob_destroy (b.get ()); b = nullptr; } ! ! hb_nonnull_ptr_t<hb_blob_t> b; ! }; ! ! ! #endif /* HB_BLOB_HH */
< prev index next >