Path: blob/master/src/java.desktop/share/native/libharfbuzz/hb-blob.h
41152 views
/*1* Copyright © 2009 Red Hat, Inc.2*3* This is part of HarfBuzz, a text shaping library.4*5* Permission is hereby granted, without written agreement and without6* license or royalty fees, to use, copy, modify, and distribute this7* software and its documentation for any purpose, provided that the8* above copyright notice and the following two paragraphs appear in9* all copies of this software.10*11* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR12* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES13* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN14* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH15* DAMAGE.16*17* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,18* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND19* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS20* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO21* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.22*23* Red Hat Author(s): Behdad Esfahbod24*/2526#if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)27#error "Include <hb.h> instead."28#endif2930#ifndef HB_BLOB_H31#define HB_BLOB_H3233#include "hb-common.h"3435HB_BEGIN_DECLS363738/**39* hb_memory_mode_t:40* @HB_MEMORY_MODE_DUPLICATE: HarfBuzz immediately makes a copy of the data.41* @HB_MEMORY_MODE_READONLY: HarfBuzz client will never modify the data,42* and HarfBuzz will never modify the data.43* @HB_MEMORY_MODE_WRITABLE: HarfBuzz client made a copy of the data solely44* for HarfBuzz, so HarfBuzz may modify the data.45* @HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE: See above46*47* Data type holding the memory modes available to48* client programs.49*50* Regarding these various memory-modes:51*52* - In no case shall the HarfBuzz client modify memory53* that is passed to HarfBuzz in a blob. If there is54* any such possibility, @HB_MEMORY_MODE_DUPLICATE should be used55* such that HarfBuzz makes a copy immediately,56*57* - Use @HB_MEMORY_MODE_READONLY otherwise, unless you really really58* really know what you are doing,59*60* - @HB_MEMORY_MODE_WRITABLE is appropriate if you really made a61* copy of data solely for the purpose of passing to62* HarfBuzz and doing that just once (no reuse!),63*64* - If the font is mmap()ed, it's okay to use65* @HB_MEMORY_READONLY_MAY_MAKE_WRITABLE, however, using that mode66* correctly is very tricky. Use @HB_MEMORY_MODE_READONLY instead.67**/68typedef enum {69HB_MEMORY_MODE_DUPLICATE,70HB_MEMORY_MODE_READONLY,71HB_MEMORY_MODE_WRITABLE,72HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE73} hb_memory_mode_t;7475/**76* hb_blob_t:77*78* Data type for blobs. A blob wraps a chunk of binary79* data and facilitates its lifecycle management between80* a client program and HarfBuzz.81*82**/83typedef struct hb_blob_t hb_blob_t;8485HB_EXTERN hb_blob_t *86hb_blob_create (const char *data,87unsigned int length,88hb_memory_mode_t mode,89void *user_data,90hb_destroy_func_t destroy);9192HB_EXTERN hb_blob_t *93hb_blob_create_from_file (const char *file_name);9495/* Always creates with MEMORY_MODE_READONLY.96* Even if the parent blob is writable, we don't97* want the user of the sub-blob to be able to98* modify the parent data as that data may be99* shared among multiple sub-blobs.100*/101HB_EXTERN hb_blob_t *102hb_blob_create_sub_blob (hb_blob_t *parent,103unsigned int offset,104unsigned int length);105106HB_EXTERN hb_blob_t *107hb_blob_copy_writable_or_fail (hb_blob_t *blob);108109HB_EXTERN hb_blob_t *110hb_blob_get_empty (void);111112HB_EXTERN hb_blob_t *113hb_blob_reference (hb_blob_t *blob);114115HB_EXTERN void116hb_blob_destroy (hb_blob_t *blob);117118HB_EXTERN hb_bool_t119hb_blob_set_user_data (hb_blob_t *blob,120hb_user_data_key_t *key,121void * data,122hb_destroy_func_t destroy,123hb_bool_t replace);124125126HB_EXTERN void *127hb_blob_get_user_data (hb_blob_t *blob,128hb_user_data_key_t *key);129130131HB_EXTERN void132hb_blob_make_immutable (hb_blob_t *blob);133134HB_EXTERN hb_bool_t135hb_blob_is_immutable (hb_blob_t *blob);136137138HB_EXTERN unsigned int139hb_blob_get_length (hb_blob_t *blob);140141HB_EXTERN const char *142hb_blob_get_data (hb_blob_t *blob, unsigned int *length);143144HB_EXTERN char *145hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);146147HB_END_DECLS148149#endif /* HB_BLOB_H */150151152