fftw3.h   fftw3.h 
/* /*
* Copyright (c) 2003 Matteo Frigo * Copyright (c) 2003, 2006 Matteo Frigo
* Copyright (c) 2003 Massachusetts Institute of Technology * Copyright (c) 2003, 2006 Massachusetts Institute of Technology
* *
* This program is free software; you can redistribute it and/or modify * The following statement of license applies *only* to this header file,
* it under the terms of the GNU General Public License as published by * and *not* to the other files distributed with FFTW or derived therefrom:
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * Redistribution and use in source and binary forms, with or without
* but WITHOUT ANY WARRANTY; without even the implied warranty of * modification, are permitted provided that the following conditions
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * are met:
* GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * 1. Redistributions of source code must retain the above copyright
* along with this program; if not, write to the Free Software * notice, this list of conditions and the following disclaimer.
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US *
A * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* *
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
/***************************** NOTE TO USERS ******************************
***
*
* THIS IS A HEADER FILE, NOT A MANUAL
*
* If you want to know how to use FFTW, please read the manual,
* online at http://www.fftw.org/doc/ and also included with FFTW.
* For a quick start, see the manual's tutorial section.
*
* (Reading header files to learn how to use a library is a habit
* stemming from code lacking a proper manual. Arguably, it's a
* *bad* habit in most cases, because header files can contain
* interfaces that are not part of the public, stable API.)
*
**************************************************************************
**/
/* header file for fftw3 */ /* header file for fftw3 */
/* $Id: fftw3.h,v 1.60 2003/04/15 18:53:44 stevenj Exp $ */ /* (The following is the CVS ID for this file, *not* the version
number of FFTW:) */
/* $Id: fftw3.h,v 1.90 2006-01-17 04:03:33 stevenj Exp $ */
#ifndef FFTW3_H #ifndef FFTW3_H
#define FFTW3_H #define FFTW3_H
#include <stdio.h> #include <stdio.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
{ {
#endif /* __cplusplus */ #endif /* __cplusplus */
/* If <complex.h> is included, use the C99 complex type. Otherwise /* If <complex.h> is included, use the C99 complex type. Otherwise
define a type bit-compatible with C99 complex */ define a type bit-compatible with C99 complex */
#ifdef _Complex_I #if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I)
# define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C # define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C
#else #else
# define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2] # define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2]
#endif #endif
#define FFTW_CONCAT(prefix, name) prefix ## name #define FFTW_CONCAT(prefix, name) prefix ## name
#define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name) #define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name)
#define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name) #define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name)
#define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name) #define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name)
/* IMPORTANT: for Windows compilers, you should add a line
#define FFTW_DLL
here and in kernel/ifftw.h if you are compiling/using FFTW as a
DLL, in order to do the proper importing/exporting, or
alternatively compile with -DFFTW_DLL or the equivalent
command-line flag. This is not necessary under MinGW/Cygwin, where
libtool does the imports/exports automatically. */
#if defined(FFTW_DLL) && (defined(_WIN32) || defined(__WIN32__))
/* annoying Windows syntax for shared-library declarations */
# if defined(COMPILING_FFTW) /* defined in api.h when compiling FFTW */
# define FFTW_EXTERN extern __declspec(dllexport)
# else /* user is calling FFTW; import symbol */
# define FFTW_EXTERN extern __declspec(dllimport)
# endif
#else
# define FFTW_EXTERN extern
#endif
enum fftw_r2r_kind_do_not_use_me { enum fftw_r2r_kind_do_not_use_me {
FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2,
FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6,
FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10
}; };
struct fftw_iodim_do_not_use_me { struct fftw_iodim_do_not_use_me {
int n; /* dimension size */ int n; /* dimension size */
int is; /* input stride */ int is; /* input stride */
int os; /* output stride */ int os; /* output stride */
skipping to change at line 68 skipping to change at line 114
/* /*
huge second-order macro that defines prototypes for all API huge second-order macro that defines prototypes for all API
functions. We expand this macro for each supported precision functions. We expand this macro for each supported precision
X: name-mangling macro X: name-mangling macro
R: real data type R: real data type
C: complex data type C: complex data type
*/ */
#define FFTW_DEFINE_API(X, R, C) \ #define FFTW_DEFINE_API(X, R, C) \
\ \
FFTW_DEFINE_COMPLEX(R, C); \ FFTW_DEFINE_COMPLEX(R, C); \
\ \
typedef struct X(plan_s) *X(plan); \ typedef struct X(plan_s) *X(plan); \
\ \
typedef struct fftw_iodim_do_not_use_me X(iodim); \ typedef struct fftw_iodim_do_not_use_me X(iodim); \
\ \
typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \ typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \
\ \
void X(execute)(const X(plan) p); \ FFTW_EXTERN void X(execute)(const X(plan) p); \
\ \
X(plan) X(plan_dft)(int rank, const int *n, \ FFTW_EXTERN X(plan) X(plan_dft)(int rank, const int *n,
C *in, C *out, int sign, unsigned flags); \ \
\ C *in, C *out, int sign, unsigned flags); \
X(plan) X(plan_dft_1d)(int n, C *in, C *out, int sign, \ \
unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_1d)(int n, C *in, C *out, int sign, \
X(plan) X(plan_dft_2d)(int nx, int ny, \ unsigned flags); \
C *in, C *out, int sign, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_2d)(int nx, int ny, \
X(plan) X(plan_dft_3d)(int nx, int ny, int nz, \ C *in, C *out, int sign, unsigned flags); \
C *in, C *out, int sign, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_3d)(int nx, int ny, int nz, \
\ C *in, C *out, int sign, unsigned flags); \
X(plan) X(plan_many_dft)(int rank, const int *n, \ \
int howmany, \ FFTW_EXTERN X(plan) X(plan_many_dft)(int rank, const int *n, \
C *in, const int *inembed, \ int howmany, \
int istride, int idist, \ C *in, const int *inembed, \
C *out, const int *onembed, \ int istride, int idist, \
int ostride, int odist, \ C *out, const int *onembed, \
int sign, unsigned flags); \ int ostride, int odist, \
\ int sign, unsigned flags); \
X(plan) X(plan_guru_dft)(int rank, const X(iodim) *dims, \ \
int howmany_rank, \ FFTW_EXTERN X(plan) X(plan_guru_dft)(int rank, const X(iodim) *dims, \
const X(iodim) *howmany_dims, \ int howmany_rank, \
C *in, C *out, \ const X(iodim) *howmany_dims, \
int sign, unsigned flags); \ C *in, C *out, \
X(plan) X(plan_guru_split_dft)(int rank, const X(iodim) *dims, \ int sign, unsigned flags); \
int howmany_rank, \ FFTW_EXTERN X(plan) X(plan_guru_split_dft)(int rank, const X(iodim) *dims,
const X(iodim) *howmany_dims, \ \
R *ri, R *ii, R *ro, R *io, \ int howmany_rank, \
unsigned flags); \ const X(iodim) *howmany_dims, \
\ R *ri, R *ii, R *ro, R *io, \
void X(execute_dft)(const X(plan) p, C *in, C *out); \ unsigned flags); \
void X(execute_split_dft)(const X(plan) p, R *ri, R *ii, R *ro, R *io); \
\ FFTW_EXTERN void X(execute_dft)(const X(plan) p, C *in, C *out); \
\ FFTW_EXTERN void X(execute_split_dft)(const X(plan) p, R *ri, R *ii, \
X(plan) X(plan_many_dft_r2c)(int rank, const int *n, \ R *ro, R *io); \
int howmany, \ \
R *in, const int *inembed, FFTW_EXTERN X(plan) X(plan_many_dft_r2c)(int rank, const int *n, \
\ int howmany, \
int istride, int idist, \ R *in, const int *inembed,
C *out, const int *onembed, \ \
int ostride, int odist, \ int istride, int idist, \
unsigned flags); \ C *out, const int *onembed, \
\ int ostride, int odist, \
X(plan) X(plan_dft_r2c)(int rank, const int *n, unsigned flags); \
\ \
R *in, C *out, unsigned flags); FFTW_EXTERN X(plan) X(plan_dft_r2c)(int rank, const int *n, \
\ R *in, C *out, unsigned flags);
\ \
X(plan) X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags); \ \
X(plan) X(plan_dft_r2c_2d)(int nx, int ny, \ FFTW_EXTERN X(plan) X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags);
R *in, C *out, unsigned flags); \ \
X(plan) X(plan_dft_r2c_3d)(int nx, int ny, \ FFTW_EXTERN X(plan) X(plan_dft_r2c_2d)(int nx, int ny, \
int nz, \ R *in, C *out, unsigned flags); \
R *in, C *out, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_r2c_3d)(int nx, int ny, \
\ int nz, \
\ R *in, C *out, unsigned flags); \
X(plan) X(plan_many_dft_c2r)(int rank, const int *n, \ \
int howmany, \ \
C *in, const int *inembed, \ FFTW_EXTERN X(plan) X(plan_many_dft_c2r)(int rank, const int *n, \
int istride, int idist, \ int howmany, \
R *out, const int *onembed, \ C *in, const int *inembed, \
int ostride, int odist, \ int istride, int idist, \
unsigned flags); \ R *out, const int *onembed, \
\ int ostride, int odist, \
X(plan) X(plan_dft_c2r)(int rank, const int *n, unsigned flags); \
\ \
C *in, R *out, unsigned flags); FFTW_EXTERN X(plan) X(plan_dft_c2r)(int rank, const int *n, \
\ C *in, R *out, unsigned flags);
\ \
X(plan) X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags); \ \
X(plan) X(plan_dft_c2r_2d)(int nx, int ny, \ FFTW_EXTERN X(plan) X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags);
C *in, R *out, unsigned flags); \ \
X(plan) X(plan_dft_c2r_3d)(int nx, int ny, \ FFTW_EXTERN X(plan) X(plan_dft_c2r_2d)(int nx, int ny, \
int nz, \ C *in, R *out, unsigned flags); \
C *in, R *out, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_c2r_3d)(int nx, int ny, \
\ int nz, \
X(plan) X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims, \ C *in, R *out, unsigned flags); \
int howmany_rank, \ \
const X(iodim) *howmany_dims, \ FFTW_EXTERN X(plan) X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims,
R *in, C *out, \ \
unsigned flags); \ int howmany_rank, \
X(plan) X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims, \ const X(iodim) *howmany_dims, \
int howmany_rank, \ R *in, C *out, \
const X(iodim) *howmany_dims, \ unsigned flags); \
C *in, R *out, \ FFTW_EXTERN X(plan) X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims,
unsigned flags); \ \
\ int howmany_rank, \
X(plan) X(plan_guru_split_dft_r2c)(int rank, const X(iodim) *dims, \ const X(iodim) *howmany_dims, \
int howmany_rank, \ C *in, R *out, \
const X(iodim) *howmany_dims, \ unsigned flags); \
R *in, R *ro, R *io, \ \
unsigned flags); \ FFTW_EXTERN X(plan) X(plan_guru_split_dft_r2c)(
X(plan) X(plan_guru_split_dft_c2r)(int rank, const X(iodim) *dims, \ \
int howmany_rank, \ int rank, const X(iodim) *dims, \
const X(iodim) *howmany_dims, \ int howmany_rank, \
R *ri, R *ii, R *out, \ const X(iodim) *howmany_dims, \
unsigned flags); \ R *in, R *ro, R *io, \
\ unsigned flags); \
void X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \ FFTW_EXTERN X(plan) X(plan_guru_split_dft_c2r)(
void X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \ \
\ int rank, const X(iodim) *dims, \
void X(execute_split_dft_r2c)(const X(plan) p, R *in, R *ro, R *io); \ int howmany_rank, \
void X(execute_split_dft_c2r)(const X(plan) p, R *ri, R *ii, R *out); \ const X(iodim) *howmany_dims, \
\ R *ri, R *ii, R *out, \
X(plan) X(plan_many_r2r)(int rank, const int *n, \ unsigned flags); \
int howmany, \ \
R *in, const int *inembed, \ FFTW_EXTERN void X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \
int istride, int idist, \ FFTW_EXTERN void X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \
R *out, const int *onembed, \ \
int ostride, int odist, \ FFTW_EXTERN void X(execute_split_dft_r2c)(const X(plan) p, \
const X(r2r_kind) *kind, unsigned flags); \ R *in, R *ro, R *io);
\ \
X(plan) X(plan_r2r)(int rank, const int *n, R *in, R *out, \ FFTW_EXTERN void X(execute_split_dft_c2r)(const X(plan) p, \
const X(r2r_kind) *kind, unsigned flags); \ R *ri, R *ii, R *out); \
\ \
X(plan) X(plan_r2r_1d)(int n, R *in, R *out, \ FFTW_EXTERN X(plan) X(plan_many_r2r)(int rank, const int *n, \
X(r2r_kind) kind, unsigned flags); \ int howmany, \
X(plan) X(plan_r2r_2d)(int nx, int ny, R *in, R *out, \ R *in, const int *inembed, \
X(r2r_kind) kindx, X(r2r_kind) kindy, \ int istride, int idist, \
unsigned flags); R *out, const int *onembed, \
\ int ostride, int odist, \
X(plan) X(plan_r2r_3d)(int nx, int ny, int nz, \ const X(r2r_kind) *kind, unsigned flags); \
R *in, R *out, X(r2r_kind) kindx, \ \
X(r2r_kind) kindy, X(r2r_kind) kindz, \ FFTW_EXTERN X(plan) X(plan_r2r)(int rank, const int *n, R *in, R *out, \
unsigned flags); const X(r2r_kind) *kind, unsigned flags); \
\ \
\ FFTW_EXTERN X(plan) X(plan_r2r_1d)(int n, R *in, R *out, \
X(plan) X(plan_guru_r2r)(int rank, const X(iodim) *dims, \ X(r2r_kind) kind, unsigned flags); \
int howmany_rank, \ FFTW_EXTERN X(plan) X(plan_r2r_2d)(int nx, int ny, R *in, R *out, \
const X(iodim) *howmany_dims, \ X(r2r_kind) kindx, X(r2r_kind) kindy, \
R *in, R *out, unsigned flags);
\ \
const X(r2r_kind) *kind, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_r2r_3d)(int nx, int ny, int nz, \
void X(execute_r2r)(const X(plan) p, R *in, R *out); \ R *in, R *out, X(r2r_kind) kindx, \
\ X(r2r_kind) kindy, X(r2r_kind) kindz, \
void X(destroy_plan)(X(plan) p); \ unsigned flags);
void X(forget_wisdom)(void); \ \
void X(cleanup)(void); \ \
\ FFTW_EXTERN X(plan) X(plan_guru_r2r)(int rank, const X(iodim) *dims, \
void X(plan_with_nthreads)(int nthreads); \ int howmany_rank, \
int X(init_threads)(void); \ const X(iodim) *howmany_dims, \
void X(cleanup_threads)(void); \ R *in, R *out,
\ \
void X(export_wisdom_to_file)(FILE *output_file); \ const X(r2r_kind) *kind, unsigned flags); \
char *X(export_wisdom_to_string)(void); FFTW_EXTERN void X(execute_r2r)(const X(plan) p, R *in, R *out); \
\ \
void X(export_wisdom)(void (*write_char)(char c, void *), void *data); \ FFTW_EXTERN void X(destroy_plan)(X(plan) p); \
int X(import_system_wisdom)(void); \ FFTW_EXTERN void X(forget_wisdom)(void); \
int X(import_wisdom_from_file)(FILE *input_file); \ FFTW_EXTERN void X(cleanup)(void); \
int X(import_wisdom_from_string)(const char *input_string); \ \
int X(import_wisdom)(int (*read_char)(void *), void *data); \ FFTW_EXTERN void X(set_timelimit)(double); \
\ \
void X(fprint_plan)(const X(plan) p, FILE *output_file); \ FFTW_EXTERN void X(plan_with_nthreads)(int nthreads); \
void X(print_plan)(const X(plan) p); \ FFTW_EXTERN int X(init_threads)(void); \
\ FFTW_EXTERN void X(cleanup_threads)(void); \
void *X(malloc)(size_t n); \ \
void X(free)(void *p); \ FFTW_EXTERN void X(export_wisdom_to_file)(FILE *output_file); \
\ FFTW_EXTERN char *X(export_wisdom_to_string)(void); \
void X(flops)(const X(plan) p, double *add, double *mul, double *fma); \ FFTW_EXTERN void X(export_wisdom)(void (*write_char)(char c, void *), \
\ void *data); \
extern const char X(version)[]; FFTW_EXTERN int X(import_system_wisdom)(void); \
\ FFTW_EXTERN int X(import_wisdom_from_file)(FILE *input_file); \
extern const char X(cc)[]; \ FFTW_EXTERN int X(import_wisdom_from_string)(const char *input_string);
extern const char X(codelet_optim)[]; \
FFTW_EXTERN int X(import_wisdom)(int (*read_char)(void *), void *data);
\
\
FFTW_EXTERN void X(fprint_plan)(const X(plan) p, FILE *output_file); \
FFTW_EXTERN void X(print_plan)(const X(plan) p); \
\
FFTW_EXTERN void *X(malloc)(size_t n); \
FFTW_EXTERN void X(free)(void *p); \
\
FFTW_EXTERN void X(flops)(const X(plan) p, \
double *add, double *mul, double *fmas); \
FFTW_EXTERN double X(estimate_cost)(const X(plan) p); \
\
FFTW_EXTERN const char X(version)[]; \
FFTW_EXTERN const char X(cc)[];
\
FFTW_EXTERN const char X(codelet_optim)[];
/* end of FFTW_DEFINE_API macro */ /* end of FFTW_DEFINE_API macro */
FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex) FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex)
FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex) FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex)
FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex) FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex)
#define FFTW_FORWARD (-1) #define FFTW_FORWARD (-1)
#define FFTW_BACKWARD (+1) #define FFTW_BACKWARD (+1)
#define FFTW_NO_TIMELIMIT (-1.0)
/* documented flags */ /* documented flags */
#define FFTW_MEASURE (0U) #define FFTW_MEASURE (0U)
#define FFTW_DESTROY_INPUT (1U << 0) #define FFTW_DESTROY_INPUT (1U << 0)
#define FFTW_UNALIGNED (1U << 1) #define FFTW_UNALIGNED (1U << 1)
#define FFTW_CONSERVE_MEMORY (1U << 2) #define FFTW_CONSERVE_MEMORY (1U << 2)
#define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */ #define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */
#define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */ #define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */
#define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */ #define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */
#define FFTW_ESTIMATE (1U << 6) #define FFTW_ESTIMATE (1U << 6)
/* undocumented beyond-guru flags */ /* undocumented beyond-guru flags */
#define FFTW_ESTIMATE_PATIENT (1U << 7) #define FFTW_ESTIMATE_PATIENT (1U << 7)
#define FFTW_BELIEVE_PCOST (1U << 8) #define FFTW_BELIEVE_PCOST (1U << 8)
#define FFTW_DFT_R2HC_ICKY (1U << 9) #define FFTW_NO_DFT_R2HC (1U << 9)
#define FFTW_NONTHREADED_ICKY (1U << 10) #define FFTW_NO_NONTHREADED (1U << 10)
#define FFTW_NO_BUFFERING (1U << 11) #define FFTW_NO_BUFFERING (1U << 11)
#define FFTW_NO_INDIRECT_OP (1U << 12) #define FFTW_NO_INDIRECT_OP (1U << 12)
#define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */ #define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */
#define FFTW_NO_RANK_SPLITS (1U << 14) #define FFTW_NO_RANK_SPLITS (1U << 14)
#define FFTW_NO_VRANK_SPLITS (1U << 15) #define FFTW_NO_VRANK_SPLITS (1U << 15)
#define FFTW_NO_VRECURSE (1U << 16) #define FFTW_NO_VRECURSE (1U << 16)
#define FFTW_NO_SIMD (1U << 17) #define FFTW_NO_SIMD (1U << 17)
#define FFTW_NO_SLOW (1U << 18)
#define FFTW_NO_FIXED_RADIX_LARGE_N (1U << 19)
#define FFTW_ALLOW_PRUNING (1U << 20)
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* FFTW3_H */ #endif /* FFTW3_H */
 End of changes. 14 change blocks. 
194 lines changed or deleted 262 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/