OpenJPEG
1.5.0
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
builddir
build
BUILD
openjpeg-1.5.0
libopenjpeg
opj_malloc.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005, Herve Drolon, FreeImage Team
3
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
16
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
* POSSIBILITY OF SUCH DAMAGE.
26
*/
27
#ifndef __OPJ_MALLOC_H
28
#define __OPJ_MALLOC_H
29
38
41
/* ----------------------------------------------------------------------- */
42
48
#ifdef ALLOC_PERF_OPT
49
void
*
OPJ_CALLCONV
opj_malloc
(
size_t
size);
50
#else
51
#define opj_malloc(size) malloc(size)
52
#endif
53
60
#ifdef ALLOC_PERF_OPT
61
void
*
OPJ_CALLCONV
opj_calloc
(
size_t
_NumOfElements,
size_t
_SizeOfElements);
62
#else
63
#define opj_calloc(num, size) calloc(num, size)
64
#endif
65
71
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
72
#ifdef _WIN32
73
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
74
#ifdef __GNUC__
75
#include <mm_malloc.h>
76
#define HAVE_MM_MALLOC
77
#else
/* MSVC, Intel C++ */
78
#include <malloc.h>
79
#ifdef _mm_malloc
80
#define HAVE_MM_MALLOC
81
#endif
82
#endif
83
#else
/* Not _WIN32 */
84
#if defined(__sun)
85
#define HAVE_MEMALIGN
86
/* Linux x86_64 and OSX always align allocations to 16 bytes */
87
#elif !defined(__amd64__) && !defined(__APPLE__)
88
#define HAVE_MEMALIGN
89
#include <malloc.h>
90
#endif
91
#endif
92
93
#define opj_aligned_malloc(size) malloc(size)
94
#define opj_aligned_free(m) free(m)
95
96
#ifdef HAVE_MM_MALLOC
97
#undef opj_aligned_malloc
98
#define opj_aligned_malloc(size) _mm_malloc(size, 16)
99
#undef opj_aligned_free
100
#define opj_aligned_free(m) _mm_free(m)
101
#endif
102
103
#ifdef HAVE_MEMALIGN
104
extern
void
*
memalign
(
size_t
,
size_t
);
105
#undef opj_aligned_malloc
106
#define opj_aligned_malloc(size) memalign(16, (size))
107
#undef opj_aligned_free
108
#define opj_aligned_free(m) free(m)
109
#endif
110
111
#ifdef HAVE_POSIX_MEMALIGN
112
#undef opj_aligned_malloc
113
extern
int
posix_memalign(
void
**,
size_t
,
size_t
);
114
115
static
INLINE
void
*
__attribute__
((malloc))
opj_aligned_malloc
(
size_t
size){
116
void
* mem = NULL;
117
posix_memalign(&mem, 16, size);
118
return
mem;
119
}
120
#undef opj_aligned_free
121
#define opj_aligned_free(m) free(m)
122
#endif
123
124
#ifdef ALLOC_PERF_OPT
125
#undef opj_aligned_malloc
126
#define opj_aligned_malloc(size) opj_malloc(size)
127
#undef opj_aligned_free
128
#define opj_aligned_free(m) opj_free(m)
129
#endif
130
137
#ifdef ALLOC_PERF_OPT
138
void
*
OPJ_CALLCONV
opj_realloc
(
void
* m,
size_t
s);
139
#else
140
#define opj_realloc(m, s) realloc(m, s)
141
#endif
142
147
#ifdef ALLOC_PERF_OPT
148
void
OPJ_CALLCONV
opj_free
(
void
* m);
149
#else
150
#define opj_free(m) free(m)
151
#endif
152
153
#ifdef __GNUC__
154
#pragma GCC poison malloc calloc realloc free
155
#endif
156
157
/* ----------------------------------------------------------------------- */
161
162
#endif
/* __OPJ_MALLOC_H */
163
Generated on Tue Oct 2 2012 20:48:25 for OpenJPEG by
1.8.1.2