// Auto-generated, do not edit.

extern "C" {
cufftResult CUFFTAPI cufftPlan1d(cufftHandle *plan, 
                                 int nx, 
                                 cufftType type, 
                                 int batch) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle *, int, cufftType, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftPlan1d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, type, batch);
}

cufftResult CUFFTAPI cufftPlan2d(cufftHandle *plan, 
                                 int nx, int ny,
                                 cufftType type) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle *, int, int, cufftType);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftPlan2d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, ny, type);
}

cufftResult CUFFTAPI cufftPlan3d(cufftHandle *plan, 
                                 int nx, int ny, int nz, 
                                 cufftType type) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle *, int, int, int, cufftType);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftPlan3d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, ny, nz, type);
}

cufftResult CUFFTAPI cufftPlanMany(cufftHandle *plan,
                                   int rank,
                                   int *n,
                                   int *inembed, int istride, int idist,
                                   int *onembed, int ostride, int odist,
                                   cufftType type,
                                   int batch) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle *, int, int *, int *, int, int, int *, int, int, cufftType, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftPlanMany");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch);
}

cufftResult CUFFTAPI cufftMakePlan1d(cufftHandle plan, 
                                     int nx, 
                                     cufftType type, 
                                     int batch,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftMakePlan1d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, type, batch, workSize);
}

cufftResult CUFFTAPI cufftMakePlan2d(cufftHandle plan, 
                                     int nx, int ny,
                                     cufftType type,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftMakePlan2d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, ny, type, workSize);
}

cufftResult CUFFTAPI cufftMakePlan3d(cufftHandle plan, 
                                     int nx, int ny, int nz, 
                                     cufftType type,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftMakePlan3d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, nx, ny, nz, type, workSize);
}

cufftResult CUFFTAPI cufftMakePlanMany(cufftHandle plan,
                                       int rank,
                                       int *n,
                                       int *inembed, int istride, int idist,
                                       int *onembed, int ostride, int odist,
                                       cufftType type,
                                       int batch,
                                       size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int *, int *, int, int, int *, int, int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftMakePlanMany");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch, workSize);
}

cufftResult CUFFTAPI cufftMakePlanMany64(cufftHandle plan, 
                                         int rank, 
                                         long long int *n,
                                         long long int *inembed, 
                                         long long int istride, 
                                         long long int idist,
                                         long long int *onembed, 
                                         long long int ostride, long long int odist,
                                         cufftType type, 
                                         long long int batch,
                                         size_t * workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, long long *, long long *, long long, long long, long long *, long long, long long, cufftType, long long, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftMakePlanMany64");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch, workSize);
}

cufftResult CUFFTAPI cufftGetSizeMany64(cufftHandle plan,
                                        int rank,
                                        long long int *n,
                                        long long int *inembed, 
                                        long long int istride, long long int idist,
                                        long long int *onembed, 
                                        long long int ostride, long long int odist,
                                        cufftType type,
                                        long long int batch,
                                        size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, long long *, long long *, long long, long long, long long *, long long, long long, cufftType, long long, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSizeMany64");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch, workSize);
}

cufftResult CUFFTAPI cufftEstimate1d(int nx, 
                                     cufftType type, 
                                     int batch,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftEstimate1d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(nx, type, batch, workSize);
}

cufftResult CUFFTAPI cufftEstimate2d(int nx, int ny,
                                     cufftType type,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftEstimate2d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(nx, ny, type, workSize);
}

cufftResult CUFFTAPI cufftEstimate3d(int nx, int ny, int nz, 
                                     cufftType type,
                                     size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(int, int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftEstimate3d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(nx, ny, nz, type, workSize);
}

cufftResult CUFFTAPI cufftEstimateMany(int rank,
                                       int *n,
                                       int *inembed, int istride, int idist,
                                       int *onembed, int ostride, int odist,
                                       cufftType type,
                                       int batch,
                                       size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(int, int *, int *, int, int, int *, int, int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftEstimateMany");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch, workSize);
}

cufftResult CUFFTAPI cufftCreate(cufftHandle * handle) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cufftResult CUFFTAPI cufftGetSize1d(cufftHandle handle, 
                                    int nx, 
                                    cufftType type, 
                                    int batch,
                                    size_t *workSize ) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSize1d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, nx, type, batch, workSize);
}

cufftResult CUFFTAPI cufftGetSize2d(cufftHandle handle, 
                                    int nx, int ny,
                                    cufftType type,
                                    size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSize2d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, nx, ny, type, workSize);
}

cufftResult CUFFTAPI cufftGetSize3d(cufftHandle handle,
                                    int nx, int ny, int nz, 
                                    cufftType type,
                                    size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int, int, cufftType, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSize3d");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, nx, ny, nz, type, workSize);
}

cufftResult CUFFTAPI cufftGetSizeMany(cufftHandle handle, 
                                      int rank, int *n,
                                      int *inembed, int istride, int idist,
                                      int *onembed, int ostride, int odist,
                                      cufftType type, int batch, size_t *workArea) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int, int *, int *, int, int, int *, int, int, cufftType, int, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSizeMany");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, rank, n, inembed, istride, idist, onembed, ostride, odist, type, batch, workArea);
}

cufftResult CUFFTAPI cufftGetSize(cufftHandle handle, size_t *workSize) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, size_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, workSize);
}

cufftResult CUFFTAPI cufftSetWorkArea(cufftHandle plan, void *workArea) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, void *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftSetWorkArea");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, workArea);
}

cufftResult CUFFTAPI cufftSetAutoAllocation(cufftHandle plan, int autoAllocate) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftSetAutoAllocation");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, autoAllocate);
}

cufftResult CUFFTAPI cufftExecC2C(cufftHandle plan, 
                                  cufftComplex *idata,
                                  cufftComplex *odata,
                                  int direction) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftComplex *, cufftComplex *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecC2C");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata, direction);
}

cufftResult CUFFTAPI cufftExecR2C(cufftHandle plan, 
                                  cufftReal *idata,
                                  cufftComplex *odata) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftReal *, cufftComplex *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecR2C");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata);
}

cufftResult CUFFTAPI cufftExecC2R(cufftHandle plan, 
                                  cufftComplex *idata,
                                  cufftReal *odata) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftComplex *, cufftReal *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecC2R");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata);
}

cufftResult CUFFTAPI cufftExecZ2Z(cufftHandle plan, 
                                  cufftDoubleComplex *idata,
                                  cufftDoubleComplex *odata,
                                  int direction) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftDoubleComplex *, cufftDoubleComplex *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecZ2Z");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata, direction);
}

cufftResult CUFFTAPI cufftExecD2Z(cufftHandle plan, 
                                  cufftDoubleReal *idata,
                                  cufftDoubleComplex *odata) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftDoubleReal *, cufftDoubleComplex *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecD2Z");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata);
}

cufftResult CUFFTAPI cufftExecZ2D(cufftHandle plan, 
                                  cufftDoubleComplex *idata,
                                  cufftDoubleReal *odata) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cufftDoubleComplex *, cufftDoubleReal *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftExecZ2D");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, idata, odata);
}

cufftResult CUFFTAPI cufftSetStream(cufftHandle plan,
                                    cudaStream_t stream) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle, cudaStream_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftSetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan, stream);
}

cufftResult CUFFTAPI cufftDestroy(cufftHandle plan) {
  using FuncPtr = cufftResult (CUFFTAPI *)(cufftHandle);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(plan);
}

cufftResult CUFFTAPI cufftGetVersion(int *version) {
  using FuncPtr = cufftResult (CUFFTAPI *)(int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetVersion");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(version);
}

cufftResult CUFFTAPI cufftGetProperty(libraryPropertyType type,
                                      int *value) {
  using FuncPtr = cufftResult (CUFFTAPI *)(libraryPropertyType, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cufftGetProperty");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(type, value);
}

}  // extern "C"
