1 /*
2  * Copyright (c) 2007-2011, Lloyd Hilaiel <lloyd@hilaiel.com>
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #ifndef __YAJL_COMMON_H__
18 #define __YAJL_COMMON_H__
19 
20 #include <stddef.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #define YAJL_MAX_DEPTH 128
27 
28 /* msft dll export gunk.  To build a DLL on windows, you
29  * must define WIN32, YAJL_SHARED, and YAJL_BUILD.  To use a shared
30  * DLL, you must define YAJL_SHARED and WIN32 */
31 #if (defined(_WIN32) || defined(WIN32)) && defined(YAJL_SHARED)
32 #  ifdef YAJL_BUILD
33 #    define YAJL_API __declspec(dllexport)
34 #  else
35 #    define YAJL_API __declspec(dllimport)
36 #  endif
37 #else
38 #  if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
39 #    define YAJL_API __attribute__ ((visibility("default")))
40 #  else
41 #    define YAJL_API
42 #  endif
43 #endif
44 
45 /** pointer to a malloc function, supporting client overriding memory
46  *  allocation routines */
47 typedef void * (*yajl_malloc_func)(void *ctx, size_t sz);
48 
49 /** pointer to a free function, supporting client overriding memory
50  *  allocation routines */
51 typedef void (*yajl_free_func)(void *ctx, void * ptr);
52 
53 /** pointer to a realloc function which can resize an allocation. */
54 typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, size_t sz);
55 
56 /** A structure which can be passed to yajl_*_alloc routines to allow the
57  *  client to specify memory allocation functions to be used. */
58 typedef struct
59 {
60     /** pointer to a function that can allocate uninitialized memory */
61     yajl_malloc_func malloc;
62     /** pointer to a function that can resize memory allocations */
63     yajl_realloc_func realloc;
64     /** pointer to a function that can free memory allocated using
65      *  reallocFunction or mallocFunction */
66     yajl_free_func free;
67     /** a context pointer that will be passed to above allocation routines */
68     void * ctx;
69 } yajl_alloc_funcs;
70 
71 #ifdef __cplusplus
72 }
73 #endif
74 
75 #endif
76