1 /* Copyright (C) 2001-2019 Artifex Software, Inc.
2    All Rights Reserved.
3 
4    This software is provided AS-IS with no warranty, either express or
5    implied.
6 
7    This software is distributed under license and may not be copied,
8    modified or distributed except as expressly authorized under the terms
9    of the license contained in the file LICENSE in this distribution.
10 
11    Refer to licensing information at http://www.artifex.com or contact
12    Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
13    CA 94945, U.S.A., +1(415)492-9861, for further information.
14 */
15 
16 #ifndef jmemcust_h_INCLUDED
17 #  define jmemcust_h_INCLUDED
18 
19 #include "std.h" /* FILE needed by jpeglib.h */
20 #include "jpeglib.h"
21 #include "jmemsys.h"
22 
23 typedef JMETHOD(long, j_custmem_init_ptr, (j_common_ptr cinfo));
24 typedef JMETHOD(void, j_custmem_term_ptr, (j_common_ptr cinfo));
25 typedef JMETHOD(long, j_custmem_avail_ptr, (j_common_ptr cinfo));
26 typedef JMETHOD(void *, j_custmem_get_small_ptr,
27     (j_common_ptr cinfo, size_t size));
28 typedef JMETHOD(void, j_custmem_free_small_ptr,
29     (j_common_ptr cinfo, void *object, size_t size));
30 typedef JMETHOD(void *, j_cust_mem_get_large_ptr,
31     (j_common_ptr cinfo, size_t size));
32 typedef JMETHOD(void, j_custmem_free_large_ptr,
33     (j_common_ptr cinfo, void *object, size_t size));
34 typedef JMETHOD(void, j_custmem_open_backing_store_ptr,
35     (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed));
36 
37 typedef struct {
38   j_custmem_init_ptr               j_mem_init;
39   j_custmem_term_ptr               j_mem_term;
40   j_custmem_avail_ptr              j_mem_avail;
41   j_custmem_get_small_ptr          j_mem_get_small;
42   j_custmem_free_small_ptr         j_mem_free_small;
43   j_cust_mem_get_large_ptr         j_mem_get_large;
44   j_custmem_free_large_ptr         j_mem_free_large;
45   j_custmem_open_backing_store_ptr j_mem_open_backing_store;
46   void                             *priv;
47 } jpeg_cust_mem_data;
48 
49 #define GET_CUST_MEM_DATA(c) ((jpeg_cust_mem_data *)c->client_data)
50 
51 GLOBAL(jpeg_cust_mem_data *)
52 jpeg_cust_mem_init(jpeg_cust_mem_data *custm, void *priv,
53     j_custmem_init_ptr               init,
54     j_custmem_term_ptr               term,
55     j_custmem_avail_ptr              avail,
56     j_custmem_get_small_ptr          get_small,
57     j_custmem_free_small_ptr         free_small,
58     j_cust_mem_get_large_ptr         get_large,
59     j_custmem_free_large_ptr         free_large,
60     j_custmem_open_backing_store_ptr open_backing_store);
61 
62 GLOBAL(jpeg_cust_mem_data *)
63 jpeg_cust_mem_set_private(jpeg_cust_mem_data *custm, void *priv);
64 
65 #endif
66