Blobs

While most of HarfBuzz's object types are specific to the shaping process, blobs are somewhat different.

Blobs are an abstraction designed to negotiate lifecycle and permissions for raw pieces of data. For example, when you load the raw font data into memory and want to pass it to HarfBuzz, you do so in a hb_blob_t wrapper.

This allows you to take advantage of HarfBuzz's reference-counting and destroy callbacks. If you allocated the memory for the data using malloc(), you would create the blob using

      hb_blob_create (data, length, HB_MEMORY_MODE_WRITABLE, data, free)
    

That way, HarfBuzz will call free() on the allocated memory whenever the blob drops its last reference and is deconstructed. Consequently, the user code can stop worrying about freeing memory and let the reference-counting machinery take care of that.

Most of the time, blobs are read-only, facilitating their use in immutable objects.