annotate src/fftw-3.3.8/api/fftw3.h @ 82:d0c2a83c1364

Add FFTW 3.3.8 source, and a Linux build
author Chris Cannam
date Tue, 19 Nov 2019 14:52:55 +0000
parents
children
rev   line source
Chris@82 1 /*
Chris@82 2 * Copyright (c) 2003, 2007-14 Matteo Frigo
Chris@82 3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
Chris@82 4 *
Chris@82 5 * The following statement of license applies *only* to this header file,
Chris@82 6 * and *not* to the other files distributed with FFTW or derived therefrom:
Chris@82 7 *
Chris@82 8 * Redistribution and use in source and binary forms, with or without
Chris@82 9 * modification, are permitted provided that the following conditions
Chris@82 10 * are met:
Chris@82 11 *
Chris@82 12 * 1. Redistributions of source code must retain the above copyright
Chris@82 13 * notice, this list of conditions and the following disclaimer.
Chris@82 14 *
Chris@82 15 * 2. Redistributions in binary form must reproduce the above copyright
Chris@82 16 * notice, this list of conditions and the following disclaimer in the
Chris@82 17 * documentation and/or other materials provided with the distribution.
Chris@82 18 *
Chris@82 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
Chris@82 20 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Chris@82 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Chris@82 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
Chris@82 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Chris@82 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
Chris@82 25 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
Chris@82 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
Chris@82 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
Chris@82 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Chris@82 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Chris@82 30 */
Chris@82 31
Chris@82 32 /***************************** NOTE TO USERS *********************************
Chris@82 33 *
Chris@82 34 * THIS IS A HEADER FILE, NOT A MANUAL
Chris@82 35 *
Chris@82 36 * If you want to know how to use FFTW, please read the manual,
Chris@82 37 * online at http://www.fftw.org/doc/ and also included with FFTW.
Chris@82 38 * For a quick start, see the manual's tutorial section.
Chris@82 39 *
Chris@82 40 * (Reading header files to learn how to use a library is a habit
Chris@82 41 * stemming from code lacking a proper manual. Arguably, it's a
Chris@82 42 * *bad* habit in most cases, because header files can contain
Chris@82 43 * interfaces that are not part of the public, stable API.)
Chris@82 44 *
Chris@82 45 ****************************************************************************/
Chris@82 46
Chris@82 47 #ifndef FFTW3_H
Chris@82 48 #define FFTW3_H
Chris@82 49
Chris@82 50 #include <stdio.h>
Chris@82 51
Chris@82 52 #ifdef __cplusplus
Chris@82 53 extern "C"
Chris@82 54 {
Chris@82 55 #endif /* __cplusplus */
Chris@82 56
Chris@82 57 /* If <complex.h> is included, use the C99 complex type. Otherwise
Chris@82 58 define a type bit-compatible with C99 complex */
Chris@82 59 #if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I)
Chris@82 60 # define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C
Chris@82 61 #else
Chris@82 62 # define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2]
Chris@82 63 #endif
Chris@82 64
Chris@82 65 #define FFTW_CONCAT(prefix, name) prefix ## name
Chris@82 66 #define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name)
Chris@82 67 #define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name)
Chris@82 68 #define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name)
Chris@82 69 #define FFTW_MANGLE_QUAD(name) FFTW_CONCAT(fftwq_, name)
Chris@82 70
Chris@82 71 /* IMPORTANT: for Windows compilers, you should add a line
Chris@82 72 #define FFTW_DLL
Chris@82 73 here and in kernel/ifftw.h if you are compiling/using FFTW as a
Chris@82 74 DLL, in order to do the proper importing/exporting, or
Chris@82 75 alternatively compile with -DFFTW_DLL or the equivalent
Chris@82 76 command-line flag. This is not necessary under MinGW/Cygwin, where
Chris@82 77 libtool does the imports/exports automatically. */
Chris@82 78 #if defined(FFTW_DLL) && (defined(_WIN32) || defined(__WIN32__))
Chris@82 79 /* annoying Windows syntax for shared-library declarations */
Chris@82 80 # if defined(COMPILING_FFTW) /* defined in api.h when compiling FFTW */
Chris@82 81 # define FFTW_EXTERN extern __declspec(dllexport)
Chris@82 82 # else /* user is calling FFTW; import symbol */
Chris@82 83 # define FFTW_EXTERN extern __declspec(dllimport)
Chris@82 84 # endif
Chris@82 85 #else
Chris@82 86 # define FFTW_EXTERN extern
Chris@82 87 #endif
Chris@82 88
Chris@82 89 /* specify calling convention (Windows only) */
Chris@82 90 #if defined(_WIN32) || defined(__WIN32__)
Chris@82 91 # define FFTW_CDECL __cdecl
Chris@82 92 #else
Chris@82 93 # define FFTW_CDECL
Chris@82 94 #endif
Chris@82 95
Chris@82 96 enum fftw_r2r_kind_do_not_use_me {
Chris@82 97 FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2,
Chris@82 98 FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6,
Chris@82 99 FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10
Chris@82 100 };
Chris@82 101
Chris@82 102 struct fftw_iodim_do_not_use_me {
Chris@82 103 int n; /* dimension size */
Chris@82 104 int is; /* input stride */
Chris@82 105 int os; /* output stride */
Chris@82 106 };
Chris@82 107
Chris@82 108 #include <stddef.h> /* for ptrdiff_t */
Chris@82 109 struct fftw_iodim64_do_not_use_me {
Chris@82 110 ptrdiff_t n; /* dimension size */
Chris@82 111 ptrdiff_t is; /* input stride */
Chris@82 112 ptrdiff_t os; /* output stride */
Chris@82 113 };
Chris@82 114
Chris@82 115 typedef void (FFTW_CDECL *fftw_write_char_func_do_not_use_me)(char c, void *);
Chris@82 116 typedef int (FFTW_CDECL *fftw_read_char_func_do_not_use_me)(void *);
Chris@82 117
Chris@82 118 /*
Chris@82 119 huge second-order macro that defines prototypes for all API
Chris@82 120 functions. We expand this macro for each supported precision
Chris@82 121
Chris@82 122 X: name-mangling macro
Chris@82 123 R: real data type
Chris@82 124 C: complex data type
Chris@82 125 */
Chris@82 126
Chris@82 127 #define FFTW_DEFINE_API(X, R, C) \
Chris@82 128 \
Chris@82 129 FFTW_DEFINE_COMPLEX(R, C); \
Chris@82 130 \
Chris@82 131 typedef struct X(plan_s) *X(plan); \
Chris@82 132 \
Chris@82 133 typedef struct fftw_iodim_do_not_use_me X(iodim); \
Chris@82 134 typedef struct fftw_iodim64_do_not_use_me X(iodim64); \
Chris@82 135 \
Chris@82 136 typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \
Chris@82 137 \
Chris@82 138 typedef fftw_write_char_func_do_not_use_me X(write_char_func); \
Chris@82 139 typedef fftw_read_char_func_do_not_use_me X(read_char_func); \
Chris@82 140 \
Chris@82 141 FFTW_EXTERN void \
Chris@82 142 FFTW_CDECL X(execute)(const X(plan) p); \
Chris@82 143 \
Chris@82 144 FFTW_EXTERN X(plan) \
Chris@82 145 FFTW_CDECL X(plan_dft)(int rank, const int *n, \
Chris@82 146 C *in, C *out, int sign, unsigned flags); \
Chris@82 147 \
Chris@82 148 FFTW_EXTERN X(plan) \
Chris@82 149 FFTW_CDECL X(plan_dft_1d)(int n, C *in, C *out, int sign, \
Chris@82 150 unsigned flags); \
Chris@82 151 FFTW_EXTERN X(plan) \
Chris@82 152 FFTW_CDECL X(plan_dft_2d)(int n0, int n1, \
Chris@82 153 C *in, C *out, int sign, unsigned flags); \
Chris@82 154 FFTW_EXTERN X(plan) \
Chris@82 155 FFTW_CDECL X(plan_dft_3d)(int n0, int n1, int n2, \
Chris@82 156 C *in, C *out, int sign, unsigned flags); \
Chris@82 157 \
Chris@82 158 FFTW_EXTERN X(plan) \
Chris@82 159 FFTW_CDECL X(plan_many_dft)(int rank, const int *n, \
Chris@82 160 int howmany, \
Chris@82 161 C *in, const int *inembed, \
Chris@82 162 int istride, int idist, \
Chris@82 163 C *out, const int *onembed, \
Chris@82 164 int ostride, int odist, \
Chris@82 165 int sign, unsigned flags); \
Chris@82 166 \
Chris@82 167 FFTW_EXTERN X(plan) \
Chris@82 168 FFTW_CDECL X(plan_guru_dft)(int rank, const X(iodim) *dims, \
Chris@82 169 int howmany_rank, \
Chris@82 170 const X(iodim) *howmany_dims, \
Chris@82 171 C *in, C *out, \
Chris@82 172 int sign, unsigned flags); \
Chris@82 173 FFTW_EXTERN X(plan) \
Chris@82 174 FFTW_CDECL X(plan_guru_split_dft)(int rank, const X(iodim) *dims, \
Chris@82 175 int howmany_rank, \
Chris@82 176 const X(iodim) *howmany_dims, \
Chris@82 177 R *ri, R *ii, R *ro, R *io, \
Chris@82 178 unsigned flags); \
Chris@82 179 \
Chris@82 180 FFTW_EXTERN X(plan) \
Chris@82 181 FFTW_CDECL X(plan_guru64_dft)(int rank, \
Chris@82 182 const X(iodim64) *dims, \
Chris@82 183 int howmany_rank, \
Chris@82 184 const X(iodim64) *howmany_dims, \
Chris@82 185 C *in, C *out, \
Chris@82 186 int sign, unsigned flags); \
Chris@82 187 FFTW_EXTERN X(plan) \
Chris@82 188 FFTW_CDECL X(plan_guru64_split_dft)(int rank, \
Chris@82 189 const X(iodim64) *dims, \
Chris@82 190 int howmany_rank, \
Chris@82 191 const X(iodim64) *howmany_dims, \
Chris@82 192 R *ri, R *ii, R *ro, R *io, \
Chris@82 193 unsigned flags); \
Chris@82 194 \
Chris@82 195 FFTW_EXTERN void \
Chris@82 196 FFTW_CDECL X(execute_dft)(const X(plan) p, C *in, C *out); \
Chris@82 197 \
Chris@82 198 FFTW_EXTERN void \
Chris@82 199 FFTW_CDECL X(execute_split_dft)(const X(plan) p, R *ri, R *ii, \
Chris@82 200 R *ro, R *io); \
Chris@82 201 \
Chris@82 202 FFTW_EXTERN X(plan) \
Chris@82 203 FFTW_CDECL X(plan_many_dft_r2c)(int rank, const int *n, \
Chris@82 204 int howmany, \
Chris@82 205 R *in, const int *inembed, \
Chris@82 206 int istride, int idist, \
Chris@82 207 C *out, const int *onembed, \
Chris@82 208 int ostride, int odist, \
Chris@82 209 unsigned flags); \
Chris@82 210 \
Chris@82 211 FFTW_EXTERN X(plan) \
Chris@82 212 FFTW_CDECL X(plan_dft_r2c)(int rank, const int *n, \
Chris@82 213 R *in, C *out, unsigned flags); \
Chris@82 214 \
Chris@82 215 FFTW_EXTERN X(plan) \
Chris@82 216 FFTW_CDECL X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags); \
Chris@82 217 \
Chris@82 218 FFTW_EXTERN X(plan) \
Chris@82 219 FFTW_CDECL X(plan_dft_r2c_2d)(int n0, int n1, \
Chris@82 220 R *in, C *out, unsigned flags); \
Chris@82 221 \
Chris@82 222 FFTW_EXTERN X(plan) \
Chris@82 223 FFTW_CDECL X(plan_dft_r2c_3d)(int n0, int n1, \
Chris@82 224 int n2, \
Chris@82 225 R *in, C *out, unsigned flags); \
Chris@82 226 \
Chris@82 227 FFTW_EXTERN X(plan) \
Chris@82 228 FFTW_CDECL X(plan_many_dft_c2r)(int rank, const int *n, \
Chris@82 229 int howmany, \
Chris@82 230 C *in, const int *inembed, \
Chris@82 231 int istride, int idist, \
Chris@82 232 R *out, const int *onembed, \
Chris@82 233 int ostride, int odist, \
Chris@82 234 unsigned flags); \
Chris@82 235 \
Chris@82 236 FFTW_EXTERN X(plan) \
Chris@82 237 FFTW_CDECL X(plan_dft_c2r)(int rank, const int *n, \
Chris@82 238 C *in, R *out, unsigned flags); \
Chris@82 239 \
Chris@82 240 FFTW_EXTERN X(plan) \
Chris@82 241 FFTW_CDECL X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags); \
Chris@82 242 \
Chris@82 243 FFTW_EXTERN X(plan) \
Chris@82 244 FFTW_CDECL X(plan_dft_c2r_2d)(int n0, int n1, \
Chris@82 245 C *in, R *out, unsigned flags); \
Chris@82 246 \
Chris@82 247 FFTW_EXTERN X(plan) \
Chris@82 248 FFTW_CDECL X(plan_dft_c2r_3d)(int n0, int n1, \
Chris@82 249 int n2, \
Chris@82 250 C *in, R *out, unsigned flags); \
Chris@82 251 \
Chris@82 252 FFTW_EXTERN X(plan) \
Chris@82 253 FFTW_CDECL X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims, \
Chris@82 254 int howmany_rank, \
Chris@82 255 const X(iodim) *howmany_dims, \
Chris@82 256 R *in, C *out, \
Chris@82 257 unsigned flags); \
Chris@82 258 \
Chris@82 259 FFTW_EXTERN X(plan) \
Chris@82 260 FFTW_CDECL X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims, \
Chris@82 261 int howmany_rank, \
Chris@82 262 const X(iodim) *howmany_dims, \
Chris@82 263 C *in, R *out, \
Chris@82 264 unsigned flags); \
Chris@82 265 \
Chris@82 266 FFTW_EXTERN X(plan) \
Chris@82 267 FFTW_CDECL X(plan_guru_split_dft_r2c)(int rank, const X(iodim) *dims, \
Chris@82 268 int howmany_rank, \
Chris@82 269 const X(iodim) *howmany_dims, \
Chris@82 270 R *in, R *ro, R *io, \
Chris@82 271 unsigned flags); \
Chris@82 272 \
Chris@82 273 FFTW_EXTERN X(plan) \
Chris@82 274 FFTW_CDECL X(plan_guru_split_dft_c2r)(int rank, const X(iodim) *dims, \
Chris@82 275 int howmany_rank, \
Chris@82 276 const X(iodim) *howmany_dims, \
Chris@82 277 R *ri, R *ii, R *out, \
Chris@82 278 unsigned flags); \
Chris@82 279 \
Chris@82 280 FFTW_EXTERN X(plan) \
Chris@82 281 FFTW_CDECL X(plan_guru64_dft_r2c)(int rank, \
Chris@82 282 const X(iodim64) *dims, \
Chris@82 283 int howmany_rank, \
Chris@82 284 const X(iodim64) *howmany_dims, \
Chris@82 285 R *in, C *out, \
Chris@82 286 unsigned flags); \
Chris@82 287 \
Chris@82 288 FFTW_EXTERN X(plan) \
Chris@82 289 FFTW_CDECL X(plan_guru64_dft_c2r)(int rank, \
Chris@82 290 const X(iodim64) *dims, \
Chris@82 291 int howmany_rank, \
Chris@82 292 const X(iodim64) *howmany_dims, \
Chris@82 293 C *in, R *out, \
Chris@82 294 unsigned flags); \
Chris@82 295 \
Chris@82 296 FFTW_EXTERN X(plan) \
Chris@82 297 FFTW_CDECL X(plan_guru64_split_dft_r2c)(int rank, const X(iodim64) *dims, \
Chris@82 298 int howmany_rank, \
Chris@82 299 const X(iodim64) *howmany_dims, \
Chris@82 300 R *in, R *ro, R *io, \
Chris@82 301 unsigned flags); \
Chris@82 302 FFTW_EXTERN X(plan) \
Chris@82 303 FFTW_CDECL X(plan_guru64_split_dft_c2r)(int rank, const X(iodim64) *dims, \
Chris@82 304 int howmany_rank, \
Chris@82 305 const X(iodim64) *howmany_dims, \
Chris@82 306 R *ri, R *ii, R *out, \
Chris@82 307 unsigned flags); \
Chris@82 308 \
Chris@82 309 FFTW_EXTERN void \
Chris@82 310 FFTW_CDECL X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \
Chris@82 311 \
Chris@82 312 FFTW_EXTERN void \
Chris@82 313 FFTW_CDECL X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \
Chris@82 314 \
Chris@82 315 FFTW_EXTERN void \
Chris@82 316 FFTW_CDECL X(execute_split_dft_r2c)(const X(plan) p, \
Chris@82 317 R *in, R *ro, R *io); \
Chris@82 318 \
Chris@82 319 FFTW_EXTERN void \
Chris@82 320 FFTW_CDECL X(execute_split_dft_c2r)(const X(plan) p, \
Chris@82 321 R *ri, R *ii, R *out); \
Chris@82 322 \
Chris@82 323 FFTW_EXTERN X(plan) \
Chris@82 324 FFTW_CDECL X(plan_many_r2r)(int rank, const int *n, \
Chris@82 325 int howmany, \
Chris@82 326 R *in, const int *inembed, \
Chris@82 327 int istride, int idist, \
Chris@82 328 R *out, const int *onembed, \
Chris@82 329 int ostride, int odist, \
Chris@82 330 const X(r2r_kind) *kind, unsigned flags); \
Chris@82 331 \
Chris@82 332 FFTW_EXTERN X(plan) \
Chris@82 333 FFTW_CDECL X(plan_r2r)(int rank, const int *n, R *in, R *out, \
Chris@82 334 const X(r2r_kind) *kind, unsigned flags); \
Chris@82 335 \
Chris@82 336 FFTW_EXTERN X(plan) \
Chris@82 337 FFTW_CDECL X(plan_r2r_1d)(int n, R *in, R *out, \
Chris@82 338 X(r2r_kind) kind, unsigned flags); \
Chris@82 339 \
Chris@82 340 FFTW_EXTERN X(plan) \
Chris@82 341 FFTW_CDECL X(plan_r2r_2d)(int n0, int n1, R *in, R *out, \
Chris@82 342 X(r2r_kind) kind0, X(r2r_kind) kind1, \
Chris@82 343 unsigned flags); \
Chris@82 344 \
Chris@82 345 FFTW_EXTERN X(plan) \
Chris@82 346 FFTW_CDECL X(plan_r2r_3d)(int n0, int n1, int n2, \
Chris@82 347 R *in, R *out, X(r2r_kind) kind0, \
Chris@82 348 X(r2r_kind) kind1, X(r2r_kind) kind2, \
Chris@82 349 unsigned flags); \
Chris@82 350 \
Chris@82 351 FFTW_EXTERN X(plan) \
Chris@82 352 FFTW_CDECL X(plan_guru_r2r)(int rank, const X(iodim) *dims, \
Chris@82 353 int howmany_rank, \
Chris@82 354 const X(iodim) *howmany_dims, \
Chris@82 355 R *in, R *out, \
Chris@82 356 const X(r2r_kind) *kind, unsigned flags); \
Chris@82 357 \
Chris@82 358 FFTW_EXTERN X(plan) \
Chris@82 359 FFTW_CDECL X(plan_guru64_r2r)(int rank, const X(iodim64) *dims, \
Chris@82 360 int howmany_rank, \
Chris@82 361 const X(iodim64) *howmany_dims, \
Chris@82 362 R *in, R *out, \
Chris@82 363 const X(r2r_kind) *kind, unsigned flags); \
Chris@82 364 \
Chris@82 365 FFTW_EXTERN void \
Chris@82 366 FFTW_CDECL X(execute_r2r)(const X(plan) p, R *in, R *out); \
Chris@82 367 \
Chris@82 368 FFTW_EXTERN void \
Chris@82 369 FFTW_CDECL X(destroy_plan)(X(plan) p); \
Chris@82 370 \
Chris@82 371 FFTW_EXTERN void \
Chris@82 372 FFTW_CDECL X(forget_wisdom)(void); \
Chris@82 373 FFTW_EXTERN void \
Chris@82 374 FFTW_CDECL X(cleanup)(void); \
Chris@82 375 \
Chris@82 376 FFTW_EXTERN void \
Chris@82 377 FFTW_CDECL X(set_timelimit)(double t); \
Chris@82 378 \
Chris@82 379 FFTW_EXTERN void \
Chris@82 380 FFTW_CDECL X(plan_with_nthreads)(int nthreads); \
Chris@82 381 \
Chris@82 382 FFTW_EXTERN int \
Chris@82 383 FFTW_CDECL X(init_threads)(void); \
Chris@82 384 \
Chris@82 385 FFTW_EXTERN void \
Chris@82 386 FFTW_CDECL X(cleanup_threads)(void); \
Chris@82 387 \
Chris@82 388 FFTW_EXTERN void \
Chris@82 389 FFTW_CDECL X(make_planner_thread_safe)(void); \
Chris@82 390 \
Chris@82 391 FFTW_EXTERN int \
Chris@82 392 FFTW_CDECL X(export_wisdom_to_filename)(const char *filename); \
Chris@82 393 \
Chris@82 394 FFTW_EXTERN void \
Chris@82 395 FFTW_CDECL X(export_wisdom_to_file)(FILE *output_file); \
Chris@82 396 \
Chris@82 397 FFTW_EXTERN char * \
Chris@82 398 FFTW_CDECL X(export_wisdom_to_string)(void); \
Chris@82 399 \
Chris@82 400 FFTW_EXTERN void \
Chris@82 401 FFTW_CDECL X(export_wisdom)(X(write_char_func) write_char, \
Chris@82 402 void *data); \
Chris@82 403 FFTW_EXTERN int \
Chris@82 404 FFTW_CDECL X(import_system_wisdom)(void); \
Chris@82 405 \
Chris@82 406 FFTW_EXTERN int \
Chris@82 407 FFTW_CDECL X(import_wisdom_from_filename)(const char *filename); \
Chris@82 408 \
Chris@82 409 FFTW_EXTERN int \
Chris@82 410 FFTW_CDECL X(import_wisdom_from_file)(FILE *input_file); \
Chris@82 411 \
Chris@82 412 FFTW_EXTERN int \
Chris@82 413 FFTW_CDECL X(import_wisdom_from_string)(const char *input_string); \
Chris@82 414 \
Chris@82 415 FFTW_EXTERN int \
Chris@82 416 FFTW_CDECL X(import_wisdom)(X(read_char_func) read_char, void *data); \
Chris@82 417 \
Chris@82 418 FFTW_EXTERN void \
Chris@82 419 FFTW_CDECL X(fprint_plan)(const X(plan) p, FILE *output_file); \
Chris@82 420 \
Chris@82 421 FFTW_EXTERN void \
Chris@82 422 FFTW_CDECL X(print_plan)(const X(plan) p); \
Chris@82 423 \
Chris@82 424 FFTW_EXTERN char * \
Chris@82 425 FFTW_CDECL X(sprint_plan)(const X(plan) p); \
Chris@82 426 \
Chris@82 427 FFTW_EXTERN void * \
Chris@82 428 FFTW_CDECL X(malloc)(size_t n); \
Chris@82 429 \
Chris@82 430 FFTW_EXTERN R * \
Chris@82 431 FFTW_CDECL X(alloc_real)(size_t n); \
Chris@82 432 FFTW_EXTERN C * \
Chris@82 433 FFTW_CDECL X(alloc_complex)(size_t n); \
Chris@82 434 \
Chris@82 435 FFTW_EXTERN void \
Chris@82 436 FFTW_CDECL X(free)(void *p); \
Chris@82 437 \
Chris@82 438 FFTW_EXTERN void \
Chris@82 439 FFTW_CDECL X(flops)(const X(plan) p, \
Chris@82 440 double *add, double *mul, double *fmas); \
Chris@82 441 FFTW_EXTERN double \
Chris@82 442 FFTW_CDECL X(estimate_cost)(const X(plan) p); \
Chris@82 443 \
Chris@82 444 FFTW_EXTERN double \
Chris@82 445 FFTW_CDECL X(cost)(const X(plan) p); \
Chris@82 446 \
Chris@82 447 FFTW_EXTERN int \
Chris@82 448 FFTW_CDECL X(alignment_of)(R *p); \
Chris@82 449 \
Chris@82 450 FFTW_EXTERN const char X(version)[]; \
Chris@82 451 FFTW_EXTERN const char X(cc)[]; \
Chris@82 452 FFTW_EXTERN const char X(codelet_optim)[];
Chris@82 453
Chris@82 454
Chris@82 455 /* end of FFTW_DEFINE_API macro */
Chris@82 456
Chris@82 457 FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex)
Chris@82 458 FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex)
Chris@82 459 FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex)
Chris@82 460
Chris@82 461 /* __float128 (quad precision) is a gcc extension on i386, x86_64, and ia64
Chris@82 462 for gcc >= 4.6 (compiled in FFTW with --enable-quad-precision) */
Chris@82 463 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) \
Chris@82 464 && !(defined(__ICC) || defined(__INTEL_COMPILER) || defined(__CUDACC__) || defined(__PGI)) \
Chris@82 465 && (defined(__i386__) || defined(__x86_64__) || defined(__ia64__))
Chris@82 466 # if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I)
Chris@82 467 /* note: __float128 is a typedef, which is not supported with the _Complex
Chris@82 468 keyword in gcc, so instead we use this ugly __attribute__ version.
Chris@82 469 However, we can't simply pass the __attribute__ version to
Chris@82 470 FFTW_DEFINE_API because the __attribute__ confuses gcc in pointer
Chris@82 471 types. Hence redefining FFTW_DEFINE_COMPLEX. Ugh. */
Chris@82 472 # undef FFTW_DEFINE_COMPLEX
Chris@82 473 # define FFTW_DEFINE_COMPLEX(R, C) typedef _Complex float __attribute__((mode(TC))) C
Chris@82 474 # endif
Chris@82 475 FFTW_DEFINE_API(FFTW_MANGLE_QUAD, __float128, fftwq_complex)
Chris@82 476 #endif
Chris@82 477
Chris@82 478 #define FFTW_FORWARD (-1)
Chris@82 479 #define FFTW_BACKWARD (+1)
Chris@82 480
Chris@82 481 #define FFTW_NO_TIMELIMIT (-1.0)
Chris@82 482
Chris@82 483 /* documented flags */
Chris@82 484 #define FFTW_MEASURE (0U)
Chris@82 485 #define FFTW_DESTROY_INPUT (1U << 0)
Chris@82 486 #define FFTW_UNALIGNED (1U << 1)
Chris@82 487 #define FFTW_CONSERVE_MEMORY (1U << 2)
Chris@82 488 #define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */
Chris@82 489 #define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */
Chris@82 490 #define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */
Chris@82 491 #define FFTW_ESTIMATE (1U << 6)
Chris@82 492 #define FFTW_WISDOM_ONLY (1U << 21)
Chris@82 493
Chris@82 494 /* undocumented beyond-guru flags */
Chris@82 495 #define FFTW_ESTIMATE_PATIENT (1U << 7)
Chris@82 496 #define FFTW_BELIEVE_PCOST (1U << 8)
Chris@82 497 #define FFTW_NO_DFT_R2HC (1U << 9)
Chris@82 498 #define FFTW_NO_NONTHREADED (1U << 10)
Chris@82 499 #define FFTW_NO_BUFFERING (1U << 11)
Chris@82 500 #define FFTW_NO_INDIRECT_OP (1U << 12)
Chris@82 501 #define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */
Chris@82 502 #define FFTW_NO_RANK_SPLITS (1U << 14)
Chris@82 503 #define FFTW_NO_VRANK_SPLITS (1U << 15)
Chris@82 504 #define FFTW_NO_VRECURSE (1U << 16)
Chris@82 505 #define FFTW_NO_SIMD (1U << 17)
Chris@82 506 #define FFTW_NO_SLOW (1U << 18)
Chris@82 507 #define FFTW_NO_FIXED_RADIX_LARGE_N (1U << 19)
Chris@82 508 #define FFTW_ALLOW_PRUNING (1U << 20)
Chris@82 509
Chris@82 510 #ifdef __cplusplus
Chris@82 511 } /* extern "C" */
Chris@82 512 #endif /* __cplusplus */
Chris@82 513
Chris@82 514 #endif /* FFTW3_H */