1 /** D bindings for GSL.
2     Authors:    Chibisi Chima-Okereke
3     Copyright:  Copyright (c) 2016, Chibisi Chima-Okereke. All rights reserved.
4     License:    Boost License 1.0
5 */
6 
7 module gsl.wavelet;
8 import gsl.errno;
9 import gsl.vector;
10 import gsl.matrix;
11 import gsl.wavelet;
12 
13 extern (C):
14 
15 //gsl_wavelet
16 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_daubechies;
17 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_daubechies_centered;
18 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_haar;
19 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_haar_centered;
20 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_bspline;
21 extern __gshared const(gsl_wavelet_type)* gsl_wavelet_bspline_centered;
22 
23 enum gsl_wavelet_direction
24 {
25     gsl_wavelet_forward = 1,
26     gsl_wavelet_backward = -1
27 }
28 
29 struct gsl_wavelet_type
30 {
31     const(char)* name;
32     int function (const(double*)*, const(double*)*, const(double*)*, const(double*)*, size_t*, size_t*, size_t) init;
33 }
34 
35 struct gsl_wavelet
36 {
37     const(gsl_wavelet_type)* type;
38     const(double)* h1;
39     const(double)* g1;
40     const(double)* h2;
41     const(double)* g2;
42     size_t nc;
43     size_t offset;
44 }
45 
46 struct gsl_wavelet_workspace
47 {
48     double* scratch;
49     size_t n;
50 }
51 
52 gsl_wavelet* gsl_wavelet_alloc (const(gsl_wavelet_type)* T, size_t k);
53 void gsl_wavelet_free (gsl_wavelet* w);
54 const(char)* gsl_wavelet_name (const(gsl_wavelet)* w);
55 gsl_wavelet_workspace* gsl_wavelet_workspace_alloc (size_t n);
56 void gsl_wavelet_workspace_free (gsl_wavelet_workspace* work);
57 int gsl_wavelet_transform (const(gsl_wavelet)* w, double* data, size_t stride, size_t n, gsl_wavelet_direction dir, gsl_wavelet_workspace* work);
58 int gsl_wavelet_transform_forward (const(gsl_wavelet)* w, double* data, size_t stride, size_t n, gsl_wavelet_workspace* work);
59 int gsl_wavelet_transform_inverse (const(gsl_wavelet)* w, double* data, size_t stride, size_t n, gsl_wavelet_workspace* work);
60 
61 //gsl_wavelet2d
62 int gsl_wavelet2d_transform (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace* work);
63 int gsl_wavelet2d_transform_forward (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace* work);
64 int gsl_wavelet2d_transform_inverse (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace* work);
65 int gsl_wavelet2d_nstransform (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_direction dir, gsl_wavelet_workspace* work);
66 int gsl_wavelet2d_nstransform_forward (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace* work);
67 int gsl_wavelet2d_nstransform_inverse (const(gsl_wavelet)* w, double* data, size_t tda, size_t size1, size_t size2, gsl_wavelet_workspace* work);
68 int gsl_wavelet2d_transform_matrix (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_direction dir, gsl_wavelet_workspace* work);
69 int gsl_wavelet2d_transform_matrix_forward (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_workspace* work);
70 int gsl_wavelet2d_transform_matrix_inverse (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_workspace* work);
71 int gsl_wavelet2d_nstransform_matrix (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_direction dir, gsl_wavelet_workspace* work);
72 int gsl_wavelet2d_nstransform_matrix_forward (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_workspace* work);
73 int gsl_wavelet2d_nstransform_matrix_inverse (const(gsl_wavelet)* w, gsl_matrix* a, gsl_wavelet_workspace* work);