~ubuntu-branches/ubuntu/feisty/fpc/feisty

« back to all changes in this revision

Viewing changes to packages/extra/fftw/fftw_s.pas

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2007-01-27 20:08:50 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070127200850-9mrptaqqjsx9nwa7
Tags: 2.0.4-5
* Fixed Build-Depends.
* Add myself to Uploaders in debian/control.
* Make sure that the sources are really patched before building them.
* Build unit 'libc' on powerpc too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
unit fftw_s;
 
2
{
 
3
   FFTW - Fastest Fourier Transform in the West library
 
4
 
 
5
   This interface unit is (C) 2005 by Daniel Mantione
 
6
     member of the Free Pascal development team.
 
7
 
 
8
   See the file COPYING.FPC, included in this distribution,
 
9
   for details about the copyright.
 
10
 
 
11
   This file carries, as a independend work calling a well
 
12
   documented binary interface, the Free Pascal LGPL license
 
13
   with static linking exception.
 
14
 
 
15
   Note that the FFTW library itself carries the GPL license
 
16
   and can therefore not be used in non-GPL software.
 
17
}
 
18
 
 
19
{*****************************************************************************}
 
20
                                    interface
 
21
{*****************************************************************************}
 
22
 
 
23
{$CALLING cdecl} {Saves some typing.}
 
24
 
 
25
{$MACRO on}
 
26
{$INLINE on}
 
27
 
 
28
type    complex_single=record
 
29
          re,im:single;
 
30
        end;
 
31
        Pcomplex_single=^complex_single;
 
32
 
 
33
        fftw_plan_single=type pointer;
 
34
 
 
35
        fftw_sign=(fftw_backward=1,fftw_forward=$ffffffff);
 
36
 
 
37
        fftw_flag=(fftw_measure,            {generated optimized algorithm}
 
38
                   fftw_destroy_input,      {default}
 
39
                   fftw_unaligned,          {data is unaligned}
 
40
                   fftw_conserve_memory,    {needs no explanation}
 
41
                   fftw_exhaustive,         {search optimal algorithm}
 
42
                   fftw_preserve_input,     {don't overwrite input}
 
43
                   fftw_patient,            {generate highly optimized alg.}
 
44
                   fftw_estimate);          {don't optimize, just use an alg.}
 
45
        fftw_flagset=set of fftw_flag;
 
46
                   
 
47
 
 
48
{Complex to complex transformations.}
 
49
function fftw_plan_dft_1d(n:cardinal;i,o:Pcomplex_single;
 
50
                          sign:fftw_sign;flags:fftw_flagset):fftw_plan_single;
 
51
         external 'fftw3f' name 'fftwf_plan_dft_1d';
 
52
function fftw_plan_dft_2d(nx,ny:cardinal;i,o:Pcomplex_single;
 
53
                          sign:fftw_sign;flags:fftw_flagset):fftw_plan_single;
 
54
         external 'fftw3f' name 'fftwf_plan_dft_2d';
 
55
function fftw_plan_dft_3d(nx,ny,nz:cardinal;i,o:Pcomplex_single;
 
56
                          sign:fftw_sign;flags:fftw_flagset):fftw_plan_single;
 
57
         external 'fftw3f' name 'fftwf_plan_dft_3d';
 
58
 
 
59
function fftw_plan_dft(rank:cardinal;n:Pcardinal;i,o:Pcomplex_single;
 
60
                       sign:fftw_sign;flags:fftw_flagset):fftw_plan_single;
 
61
         external 'fftw3f' name 'fftwf_plan_dft';
 
62
 
 
63
{Real to complex transformations.}
 
64
function fftw_plan_dft_1d(n:cardinal;i:Psingle;o:Pcomplex_single;
 
65
                          flags:fftw_flagset):fftw_plan_single;
 
66
         external 'fftw3f' name 'fftwf_plan_dft_r2c_1d';
 
67
function fftw_plan_dft_2d(nx,ny:cardinal;i:Psingle;o:Pcomplex_single;
 
68
                          flags:fftw_flagset):fftw_plan_single;
 
69
         external 'fftw3f' name 'fftwf_plan_dft_r2c_2d';
 
70
function fftw_plan_dft_3d(nx,ny,nz:cardinal;i:Psingle;o:Pcomplex_single;
 
71
                          flags:fftw_flagset):fftw_plan_single;
 
72
         external 'fftw3f' name 'fftwf_plan_dft_r2c_3d';
 
73
function fftw_plan_dft(rank:cardinal;n:Pcardinal;i:Psingle;o:Pcomplex_single;
 
74
                       flags:fftw_flagset):fftw_plan_single;
 
75
         external 'fftw3f' name 'fftwf_plan_dft_r2c';
 
76
 
 
77
{Complex to real transformations.}
 
78
function fftw_plan_dft_1d(n:cardinal;i:Pcomplex_single;o:Psingle;
 
79
                          flags:fftw_flagset):fftw_plan_single;
 
80
         external 'fftw3f' name 'fftwf_plan_dft_c2r_1d';
 
81
function fftw_plan_dft_2d(nx,ny:cardinal;i:Pcomplex_single;o:Psingle;
 
82
                          flags:fftw_flagset):fftw_plan_single;
 
83
         external 'fftw3f' name 'fftwf_plan_dft_c2r_2d';
 
84
function fftw_plan_dft_3d(nx,ny,nz:cardinal;i:Pcomplex_single;o:Psingle;
 
85
                          flags:fftw_flagset):fftw_plan_single;
 
86
         external 'fftw3f' name 'fftwf_plan_dft_c2r_3d';
 
87
function fftw_plan_dft(rank:cardinal;n:Pcardinal;i:Pcomplex_single;o:Psingle;
 
88
                       flags:fftw_flagset):fftw_plan_single;
 
89
         external 'fftw3f' name 'fftwf_plan_dft_c2r';
 
90
 
 
91
 
 
92
procedure fftw_destroy_plan(plan:fftw_plan_single);
 
93
          external 'fftw3f' name 'fftwf_destroy_plan';
 
94
procedure fftw_execute(plan:fftw_plan_single);
 
95
          external 'fftw3f' name 'fftwf_execute';
 
96
 
 
97
{*****************************************************************************}
 
98
                                  implementation
 
99
{*****************************************************************************}
 
100
 
 
101
{$LINKLIB fftw3f}
 
102
 
 
103
{Required libraries by libfftw3}
 
104
{$LINKLIB gcc}
 
105
{$LINKLIB c}
 
106
{$LINKLIB m}
 
107
 
 
108
{$calling register} {Back to normal!}
 
109
 
 
110
{Better don't use fftw_malloc and fftw_free, but provide Pascal replacements.}
 
111
 
 
112
{$IF defined(cpui386) or defined(cpupowerpc)}
 
113
  {$DEFINE align:=16}
 
114
{$ENDIF}
 
115
 
 
116
procedure fftw_getmem(var p:pointer;size:sizeint);
 
117
 
 
118
begin
 
119
{$IFDEF align}
 
120
  getmem(p,size+16-1);
 
121
  ptruint(p):=(ptruint(p)+align-1) and not (align-1);
 
122
{$ELSE}
 
123
  getmem(p,size);
 
124
{$ENDIF}
 
125
end;
 
126
 
 
127
procedure fftw_freemem(p:pointer);inline;
 
128
 
 
129
begin
 
130
  freemem(p);
 
131
end;
 
132
 
 
133
end.