|  |  |  |  | 
To better integrate with client programs, HarfBuzz's objects offer a "user data" mechanism that can be used to attach arbitrary data to the object. User-data attachment can be useful for tying the lifecycles of various pieces of data together, or for creating language bindings.
      Each object type has a set_user_data()
      method and a get_user_data() method. The
      set_user_data() methods take a client-provided
      key and a pointer,
      user_data, pointing to the data itself. Once
      the key-data pair has been attached to the object, the
      get_user_data() method can be called with
      the key, returning the user_data pointer.
    
      The set_user_data() methods also support an
      optional destroy callback. Client programs
      can set the destroy callback and receive
      notification from HarfBuzz whenever the object is destructed.
    
      Finally, each set_user_data() method allows
      the client program to set a replace Boolean
      indicating whether or not the function call should replace any
      existing user_data
      associated with the specified key.