jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-blob.h
changeset 34414 e496a8d8fc8a
child 40435 553eb1a50733
equal deleted inserted replaced
34413:bbed9966db6e 34414:e496a8d8fc8a
       
     1 /*
       
     2  * Copyright © 2009  Red Hat, Inc.
       
     3  *
       
     4  *  This is part of HarfBuzz, a text shaping library.
       
     5  *
       
     6  * Permission is hereby granted, without written agreement and without
       
     7  * license or royalty fees, to use, copy, modify, and distribute this
       
     8  * software and its documentation for any purpose, provided that the
       
     9  * above copyright notice and the following two paragraphs appear in
       
    10  * all copies of this software.
       
    11  *
       
    12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
       
    13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
       
    14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
       
    15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
       
    16  * DAMAGE.
       
    17  *
       
    18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
       
    19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
       
    20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
       
    21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
       
    22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
       
    23  *
       
    24  * Red Hat Author(s): Behdad Esfahbod
       
    25  */
       
    26 
       
    27 #ifndef HB_H_IN
       
    28 #error "Include <hb.h> instead."
       
    29 #endif
       
    30 
       
    31 #ifndef HB_BLOB_H
       
    32 #define HB_BLOB_H
       
    33 
       
    34 #include "hb-common.h"
       
    35 
       
    36 HB_BEGIN_DECLS
       
    37 
       
    38 
       
    39 /*
       
    40  * Note re various memory-modes:
       
    41  *
       
    42  * - In no case shall the HarfBuzz client modify memory
       
    43  *   that is passed to HarfBuzz in a blob.  If there is
       
    44  *   any such possibility, MODE_DUPLICATE should be used
       
    45  *   such that HarfBuzz makes a copy immediately,
       
    46  *
       
    47  * - Use MODE_READONLY otherse, unless you really really
       
    48  *   really know what you are doing,
       
    49  *
       
    50  * - MODE_WRITABLE is appropriate if you really made a
       
    51  *   copy of data solely for the purpose of passing to
       
    52  *   HarfBuzz and doing that just once (no reuse!),
       
    53  *
       
    54  * - If the font is mmap()ed, it's ok to use
       
    55  *   READONLY_MAY_MAKE_WRITABLE, however, using that mode
       
    56  *   correctly is very tricky.  Use MODE_READONLY instead.
       
    57  */
       
    58 typedef enum {
       
    59   HB_MEMORY_MODE_DUPLICATE,
       
    60   HB_MEMORY_MODE_READONLY,
       
    61   HB_MEMORY_MODE_WRITABLE,
       
    62   HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE
       
    63 } hb_memory_mode_t;
       
    64 
       
    65 typedef struct hb_blob_t hb_blob_t;
       
    66 
       
    67 hb_blob_t *
       
    68 hb_blob_create (const char        *data,
       
    69                 unsigned int       length,
       
    70                 hb_memory_mode_t   mode,
       
    71                 void              *user_data,
       
    72                 hb_destroy_func_t  destroy);
       
    73 
       
    74 /* Always creates with MEMORY_MODE_READONLY.
       
    75  * Even if the parent blob is writable, we don't
       
    76  * want the user of the sub-blob to be able to
       
    77  * modify the parent data as that data may be
       
    78  * shared among multiple sub-blobs.
       
    79  */
       
    80 hb_blob_t *
       
    81 hb_blob_create_sub_blob (hb_blob_t    *parent,
       
    82                          unsigned int  offset,
       
    83                          unsigned int  length);
       
    84 
       
    85 hb_blob_t *
       
    86 hb_blob_get_empty (void);
       
    87 
       
    88 hb_blob_t *
       
    89 hb_blob_reference (hb_blob_t *blob);
       
    90 
       
    91 void
       
    92 hb_blob_destroy (hb_blob_t *blob);
       
    93 
       
    94 hb_bool_t
       
    95 hb_blob_set_user_data (hb_blob_t          *blob,
       
    96                        hb_user_data_key_t *key,
       
    97                        void *              data,
       
    98                        hb_destroy_func_t   destroy,
       
    99                        hb_bool_t           replace);
       
   100 
       
   101 
       
   102 void *
       
   103 hb_blob_get_user_data (hb_blob_t          *blob,
       
   104                        hb_user_data_key_t *key);
       
   105 
       
   106 
       
   107 void
       
   108 hb_blob_make_immutable (hb_blob_t *blob);
       
   109 
       
   110 hb_bool_t
       
   111 hb_blob_is_immutable (hb_blob_t *blob);
       
   112 
       
   113 
       
   114 unsigned int
       
   115 hb_blob_get_length (hb_blob_t *blob);
       
   116 
       
   117 const char *
       
   118 hb_blob_get_data (hb_blob_t *blob, unsigned int *length);
       
   119 
       
   120 char *
       
   121 hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);
       
   122 
       
   123 
       
   124 HB_END_DECLS
       
   125 
       
   126 #endif /* HB_BLOB_H */