20#ifndef CCGSL_WAVELET_HPP
21#define CCGSL_WAVELET_HPP
24#include<gsl/gsl_wavelet.h>
35 typedef gsl_wavelet_type
const*
type;
53 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
103#ifdef __GXX_EXPERIMENTAL_CXX0X__
109 std::swap(
count, v.count );
110 v.ccgsl_pointer =
nullptr;
118 wavelet( std::move( v ) ).swap( *
this );
228#ifdef __GXX_EXPERIMENTAL_CXX0X__
236 std::string
name()
const {
return gsl_wavelet_name(
get() ); }
289 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
339#ifdef __GXX_EXPERIMENTAL_CXX0X__
345 std::swap(
count, v.count );
346 v.ccgsl_pointer =
nullptr;
354 workspace( std::move( v ) ).swap( *
this );
464#ifdef __GXX_EXPERIMENTAL_CXX0X__
474 inline gsl_wavelet_direction
forward()
const {
return gsl_wavelet_forward; }
479 inline gsl_wavelet_direction
backward()
const {
return gsl_wavelet_backward; }
491 int transform(
double* data,
size_t stride,
size_t n, gsl_wavelet_direction dir,
492 workspace& work )
const {
493 return gsl_wavelet_transform(
get(), data, stride,
n, dir, work.get() ); }
503 int transform_forward(
double* data,
size_t stride,
size_t n, workspace& work )
const {
504 return gsl_wavelet_transform_forward(
get(), data, stride,
n, work.get() ); }
514 int transform_inverse(
double* data,
size_t stride,
size_t n, workspace& work )
const {
515 return gsl_wavelet_transform_inverse(
get(), data, stride,
n, work.get() ); }
527 template<
typename DATA>
528 int transform( DATA& data,
size_t stride, gsl_wavelet_direction dir,
530 return gsl_wavelet_transform(
get(), data.data(), stride, data.size() / stride, dir, work.
get() ); }
540 template<
typename DATA>
542 return gsl_wavelet_transform_forward(
get(), data.data(), stride, data.size() / stride, work.
get() ); }
552 template<
typename DATA>
554 return gsl_wavelet_transform_inverse(
get(), data.data(), stride, data.size() / stride, work.
get() ); }
564 template<
typename DATA>
567 return gsl_wavelet_transform(
get(), data.data(), 1, data.size(), dir, work.
get() ); }
576 template<
typename DATA>
578 return gsl_wavelet_transform_forward(
get(), data.data(), 1, data.size(), work.
get() ); }
587 template<
typename DATA>
589 return gsl_wavelet_transform_inverse(
get(), data.data(), 1, data.size(), work.
get() ); }
workspace(size_t const n)
The default constructor creates a new workspace with n elements.
bool operator<=(workspace const &v) const
A container needs to define an ordering for sorting.
size_t use_count() const
Find how many workspace objects share this pointer.
bool operator>=(workspace const &v) const
A container needs to define an ordering for sorting.
~workspace()
The destructor only deletes the pointers if count reaches zero.
workspace(gsl_wavelet_workspace *v)
Could construct from a gsl_wavelet_workspace.
bool operator!=(workspace const &v) const
Two workspace are different if their elements are not identical.
workspace(workspace const &v)
The copy constructor.
workspace()
The default constructor is only really useful for assigning to.
size_t * count
The shared reference count.
workspace(workspace &&v)
Move constructor.
bool operator<(workspace const &v) const
A container needs to define an ordering for sorting.
gsl_wavelet_workspace * ccgsl_pointer
The shared pointer.
workspace & operator=(workspace &&v)
Move operator.
bool operator==(workspace const &v) const
Two workspace are identically equal if their elements are identical.
bool empty() const
Find if the workspace is empty.
bool operator>(workspace const &v) const
A container needs to define an ordering for sorting.
workspace & operator=(workspace const &v)
The assignment operator.
void swap(workspace &v)
Swap two workspace objects.
gsl_wavelet_workspace * get() const
Get the gsl_wavelet_workspace.
bool unique() const
Find if this is the only object sharing the gsl_wavelet_workspace.
Wavelets in one dimension.
bool unique() const
Find if this is the only object sharing the gsl_wavelet.
gsl_wavelet_type const * type
Define gsl::wavelet::static type.
wavelet & operator=(wavelet const &v)
The assignment operator.
gsl_wavelet * get() const
Get the gsl_wavelet.
wavelet(gsl_wavelet *v)
Could construct from a gsl_wavelet.
static type daubechies_centered()
Wavelet static type.
bool operator>=(wavelet const &v) const
A container needs to define an ordering for sorting.
static type haar()
Wavelet static type.
wavelet(wavelet const &v)
The copy constructor.
wavelet & operator=(wavelet &&v)
Move operator.
static type bspline_centered()
Wavelet static type.
static type bspline()
Wavelet static type.
void swap(wavelet &v)
Swap two wavelet objects.
int transform(DATA &data, size_t stride, gsl_wavelet_direction dir, workspace &work) const
C++ version of gsl_wavelet_transform().
bool operator<(wavelet const &v) const
A container needs to define an ordering for sorting.
bool operator>(wavelet const &v) const
A container needs to define an ordering for sorting.
bool operator!=(wavelet const &v) const
Two wavelet are different if their elements are not identical.
size_t use_count() const
Find how many wavelet objects share this pointer.
~wavelet()
The destructor only deletes the pointers if count reaches zero.
size_t * count
The shared reference count.
int transform_inverse(DATA &data, workspace &work) const
C++ version of gsl_wavelet_transform_inverse().
std::string name() const
C++ version of gsl_wavelet_name().
int transform_inverse(DATA &data, size_t stride, workspace &work) const
C++ version of gsl_wavelet_transform_inverse().
wavelet(wavelet &&v)
Move constructor.
bool operator<=(wavelet const &v) const
A container needs to define an ordering for sorting.
int transform_forward(DATA &data, workspace &work) const
C++ version of gsl_wavelet_transform_forward().
gsl_wavelet_direction forward() const
Access direction.
int transform_forward(DATA &data, size_t stride, workspace &work) const
C++ version of gsl_wavelet_transform_forward().
int transform(DATA &data, gsl_wavelet_direction dir, workspace &work) const
C++ version of gsl_wavelet_transform().
static type daubechies()
Wavelet static type.
bool empty() const
Find if the wavelet is empty.
bool operator==(wavelet const &v) const
Two wavelet are identically equal if their elements are identical.
wavelet(type T, size_t const k)
The default constructor creates a new wavelet with n elements.
gsl_wavelet_direction backward() const
Access direction.
static type haar_centered()
Wavelet static type.
wavelet()
The default constructor is only really useful for assigning to.
gsl_wavelet * ccgsl_pointer
The shared pointer.
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
The gsl package creates an interface to the GNU Scientific Library for C++.