annotate src/fftw-3.3.8/api/fftw3.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents d0c2a83c1364
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 */