Module: FFTW3::FFI

Defined in:
lib/fftw3/ffi/quad.rb,
lib/fftw3/ffi/float.rb,
lib/fftw3/ffi/types.rb,
lib/fftw3/ffi/double.rb,
lib/fftw3/ffi/long_double.rb,
lib/fftw3/ffi/library_loader.rb,
lib/fftw3/ffi/binding_template.rb

Defined Under Namespace

Modules: BindingTemplate, Double, Float, LibraryLoader, LongDouble, Quad, Types

Constant Summary collapse

PRECISION_CONFIG =
{
  double: { prefix: "fftw_", real_type: :double },
  float: { prefix: "fftwf_", real_type: :float },
  long_double: { prefix: "fftwl_", real_type: :long_double },
  quad: { prefix: "fftwq_", real_type: :float128 }
}.freeze

Class Method Summary collapse

Class Method Details

.module_for(precision) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/fftw3/ffi/library_loader.rb', line 69

def self.module_for(precision)
  case precision
  when :double      then Double
  when :float       then Float
  when :long_double then LongDouble
  when :quad        then Quad
  else raise FFTW3::Error::InvalidArgument, "Unknown precision: #{precision}"
  end
end

.prefix_for(precision) ⇒ Object



79
80
81
# File 'lib/fftw3/ffi/library_loader.rb', line 79

def self.prefix_for(precision)
  PRECISION_CONFIG.fetch(precision)[:prefix]
end

.string_constant(precision, name) ⇒ Object



83
84
85
86
87
88
# File 'lib/fftw3/ffi/library_loader.rb', line 83

def self.string_constant(precision, name)
  symbol = "#{prefix_for(precision)}#{name}"
  LibraryLoader.open(precision).find_variable(symbol).read_string
rescue FFTW3::Error::LibraryNotFound, LoadError, RuntimeError
  nil
end