blob: 50c9ae3bcfaeb0ea86d07d4a3bcefc07bd1ed635 [file] [log] [blame]
Behdad Esfahbodf0954d12009-07-30 15:33:57 -04001/*
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -04002 * Copyright © 2009 Red Hat, Inc.
Behdad Esfahbodf0954d12009-07-30 15:33:57 -04003 *
Behdad Esfahbodc755cb32010-04-22 00:11:43 -04004 * This is part of HarfBuzz, a text shaping library.
Behdad Esfahbodf0954d12009-07-30 15:33:57 -04005 *
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_BLOB_H
28#define HB_BLOB_H
29
30#include "hb-common.h"
31
32HB_BEGIN_DECLS
33
Behdad Esfahbodacdba3f2010-07-23 15:11:18 -040034
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040035typedef enum {
36 HB_MEMORY_MODE_DUPLICATE,
37 HB_MEMORY_MODE_READONLY,
Behdad Esfahbod977eeb72009-08-19 16:17:24 -040038 HB_MEMORY_MODE_WRITABLE,
Behdad Esfahbod977eeb72009-08-19 16:17:24 -040039 HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040040} hb_memory_mode_t;
41
Behdad Esfahbod0cc7bc52009-08-01 21:38:39 -040042typedef struct _hb_blob_t hb_blob_t;
43
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040044hb_blob_t *
45hb_blob_create (const char *data,
Behdad Esfahboda2644242009-08-03 17:53:29 -040046 unsigned int length,
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040047 hb_memory_mode_t mode,
Behdad Esfahbode5847f72011-04-20 02:59:28 -040048 void *user_data,
49 hb_destroy_func_t destroy);
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040050
51hb_blob_t *
Behdad Esfahboda2644242009-08-03 17:53:29 -040052hb_blob_create_sub_blob (hb_blob_t *parent,
53 unsigned int offset,
54 unsigned int length);
55
56hb_blob_t *
Behdad Esfahbod49110622011-05-02 19:36:39 -040057hb_blob_get_empty (void);
Behdad Esfahboda2644242009-08-03 17:53:29 -040058
59hb_blob_t *
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040060hb_blob_reference (hb_blob_t *blob);
61
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040062void
63hb_blob_destroy (hb_blob_t *blob);
64
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040065hb_bool_t
66hb_blob_set_user_data (hb_blob_t *blob,
67 hb_user_data_key_t *key,
68 void * data,
Behdad Esfahbod33ccc772011-08-09 00:43:24 +020069 hb_destroy_func_t destroy,
70 hb_bool_t replace);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040071
72
73void *
74hb_blob_get_user_data (hb_blob_t *blob,
75 hb_user_data_key_t *key);
76
77
Behdad Esfahbod1c9f8712011-05-06 22:28:26 -040078void
79hb_blob_make_immutable (hb_blob_t *blob);
80
81hb_bool_t
82hb_blob_is_immutable (hb_blob_t *blob);
83
84
Behdad Esfahbodfc6c9402009-08-03 21:27:08 -040085unsigned int
86hb_blob_get_length (hb_blob_t *blob);
87
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040088const char *
Behdad Esfahbod1c9f8712011-05-06 22:28:26 -040089hb_blob_get_data (hb_blob_t *blob, unsigned int *length);
Behdad Esfahbodfc6c9402009-08-03 21:27:08 -040090
Behdad Esfahbod1c9f8712011-05-06 22:28:26 -040091char *
92hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040093
Behdad Esfahbodacdba3f2010-07-23 15:11:18 -040094
Behdad Esfahbodf0954d12009-07-30 15:33:57 -040095HB_END_DECLS
96
97#endif /* HB_BLOB_H */