Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/harfbuzz/src/hb-blob.h
9904 views
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
#if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)
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
* hb_memory_mode_t:
41
* @HB_MEMORY_MODE_DUPLICATE: HarfBuzz immediately makes a copy of the data.
42
* @HB_MEMORY_MODE_READONLY: HarfBuzz client will never modify the data,
43
* and HarfBuzz will never modify the data.
44
* @HB_MEMORY_MODE_WRITABLE: HarfBuzz client made a copy of the data solely
45
* for HarfBuzz, so HarfBuzz may modify the data.
46
* @HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE: See above
47
*
48
* Data type holding the memory modes available to
49
* client programs.
50
*
51
* Regarding these various memory-modes:
52
*
53
* - In no case shall the HarfBuzz client modify memory
54
* that is passed to HarfBuzz in a blob. If there is
55
* any such possibility, @HB_MEMORY_MODE_DUPLICATE should be used
56
* such that HarfBuzz makes a copy immediately,
57
*
58
* - Use @HB_MEMORY_MODE_READONLY otherwise, unless you really really
59
* really know what you are doing,
60
*
61
* - @HB_MEMORY_MODE_WRITABLE is appropriate if you really made a
62
* copy of data solely for the purpose of passing to
63
* HarfBuzz and doing that just once (no reuse!),
64
*
65
* - If the font is mmap()ed, it's okay to use
66
* @HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, however, using that mode
67
* correctly is very tricky. Use @HB_MEMORY_MODE_READONLY instead.
68
**/
69
typedef enum {
70
HB_MEMORY_MODE_DUPLICATE,
71
HB_MEMORY_MODE_READONLY,
72
HB_MEMORY_MODE_WRITABLE,
73
HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE
74
} hb_memory_mode_t;
75
76
/**
77
* hb_blob_t:
78
*
79
* Data type for blobs. A blob wraps a chunk of binary
80
* data and facilitates its lifecycle management between
81
* a client program and HarfBuzz.
82
*
83
**/
84
typedef struct hb_blob_t hb_blob_t;
85
86
HB_EXTERN hb_blob_t *
87
hb_blob_create (const char *data,
88
unsigned int length,
89
hb_memory_mode_t mode,
90
void *user_data,
91
hb_destroy_func_t destroy);
92
93
HB_EXTERN hb_blob_t *
94
hb_blob_create_or_fail (const char *data,
95
unsigned int length,
96
hb_memory_mode_t mode,
97
void *user_data,
98
hb_destroy_func_t destroy);
99
100
HB_EXTERN hb_blob_t *
101
hb_blob_create_from_file (const char *file_name);
102
103
HB_EXTERN hb_blob_t *
104
hb_blob_create_from_file_or_fail (const char *file_name);
105
106
/* Always creates with MEMORY_MODE_READONLY.
107
* Even if the parent blob is writable, we don't
108
* want the user of the sub-blob to be able to
109
* modify the parent data as that data may be
110
* shared among multiple sub-blobs.
111
*/
112
HB_EXTERN hb_blob_t *
113
hb_blob_create_sub_blob (hb_blob_t *parent,
114
unsigned int offset,
115
unsigned int length);
116
117
HB_EXTERN hb_blob_t *
118
hb_blob_copy_writable_or_fail (hb_blob_t *blob);
119
120
HB_EXTERN hb_blob_t *
121
hb_blob_get_empty (void);
122
123
HB_EXTERN hb_blob_t *
124
hb_blob_reference (hb_blob_t *blob);
125
126
HB_EXTERN void
127
hb_blob_destroy (hb_blob_t *blob);
128
129
HB_EXTERN hb_bool_t
130
hb_blob_set_user_data (hb_blob_t *blob,
131
hb_user_data_key_t *key,
132
void * data,
133
hb_destroy_func_t destroy,
134
hb_bool_t replace);
135
136
137
HB_EXTERN void *
138
hb_blob_get_user_data (const hb_blob_t *blob,
139
hb_user_data_key_t *key);
140
141
142
HB_EXTERN void
143
hb_blob_make_immutable (hb_blob_t *blob);
144
145
HB_EXTERN hb_bool_t
146
hb_blob_is_immutable (hb_blob_t *blob);
147
148
149
HB_EXTERN unsigned int
150
hb_blob_get_length (hb_blob_t *blob);
151
152
HB_EXTERN const char *
153
hb_blob_get_data (hb_blob_t *blob, unsigned int *length);
154
155
HB_EXTERN char *
156
hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);
157
158
HB_END_DECLS
159
160
#endif /* HB_BLOB_H */
161
162