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