19#ifndef CCGSL_SPMATRIX_HPP
20#define CCGSL_SPMATRIX_HPP
23#include<gsl/gsl_spmatrix.h>
44 COO = GSL_SPMATRIX_COO,
46 CSC = GSL_SPMATRIX_CSC,
48 CSR = GSL_SPMATRIX_CSR,
52 CCS = GSL_SPMATRIX_CCS,
54 CRS = GSL_SPMATRIX_CRS
71 if( n1 > 0 and n2 > 0 )
ccgsl_pointer = gsl_spmatrix_complex_long_double_alloc( n1, n2 );
75 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
77 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_complex_long_double_free(
ccgsl_pointer );
92 if( n1 > 0 and n2 > 0 )
97 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
99 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_complex_long_double_free(
ccgsl_pointer );
116#ifdef __GXX_EXPERIMENTAL_CXX0X__
122 size_t const n1 = initializer_list.size();
123 size_t const n2 = initializer_list.begin()->size();
124 for(
auto l : initializer_list ){
125 if( l.size() != n2 ){
126 gsl::exception e(
"matrix_complex_long_double rows have unequal sizes", __FILE__, __LINE__,
131 ccgsl_pointer = gsl_spmatrix_complex_long_double_alloc( n1, n2 );
133 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
135 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_complex_long_double_free(
ccgsl_pointer );
142 for(
auto row : initializer_list ){
144 for(
auto x : row ){
set( r, c, x ); ++c; }
185 gsl_spmatrix_complex_long_double_memcpy( copy.
get(),
get() );
228#ifdef __GXX_EXPERIMENTAL_CXX0X__
234 std::swap(
count, v.count );
235 v.ccgsl_pointer =
nullptr;
274 if(
ccgsl_pointer == 0 ) gsl_error(
"null vector_complex_long_double", __FILE__, __LINE__, GSL_EFAULT );
280 long double const*
data()
const {
281 if(
ccgsl_pointer == 0 ) gsl_error(
"null vector_complex_long_double", __FILE__, __LINE__, GSL_EFAULT );
302 size_t nnz()
const {
return gsl_spmatrix_complex_long_double_nnz(
get() ); }
307 char const*
type()
const {
return gsl_spmatrix_complex_long_double_type(
get() ); }
312 int set_zero(){
return gsl_spmatrix_complex_long_double_set_zero(
get() ); }
325 gsl_spmatrix_complex_long_double_csc( dest.get(),
get() );
335 gsl_spmatrix_complex_long_double_csr( dest.get(),
get() );
379 int fprintf( FILE* stream,
char const* format )
const {
380 return gsl_spmatrix_complex_long_double_fprintf( stream,
get(), format ); }
387 return gsl_spmatrix_complex_long_double_fwrite( stream,
get() ); }
394 return gsl_spmatrix_complex_long_double_fread( stream,
get() ); }
402 return gsl_spmatrix_complex_long_double_get(
get(), i, j ); }
411 return gsl_spmatrix_complex_long_double_set(
get(), i, j, x ); }
418 gsl_complex_long_double*
ptr(
size_t const i,
size_t const j )
const {
419 return gsl_spmatrix_complex_long_double_ptr(
get(), i, j ); }
433 return gsl_spmatrix_complex_long_double_scale_columns(
get(), x.
get() ); }
440 return gsl_spmatrix_complex_long_double_scale_rows(
get(), x.
get() ); }
451 int transpose(){
return gsl_spmatrix_complex_long_double_transpose(
get() ); }
456 int transpose2(){
return gsl_spmatrix_complex_long_double_transpose2(
get() ); }
466 return gsl_spmatrix_complex_long_double_realloc(
nzmax, spMatrix.
get() ); }
473 return gsl_spmatrix_complex_long_double_nnz( spMatrix.
get() ); }
480 return gsl_spmatrix_complex_long_double_type( spMatrix.
get() ); }
487 return gsl_spmatrix_complex_long_double_set_zero( spMatrix.
get() ); }
494 return gsl_spmatrix_complex_long_double_tree_rebuild( spMatrix.
get() ); }
503 gsl_spmatrix_complex_long_double_csc( dest.get(), spMatrix.
get() );
513 gsl_spmatrix_complex_long_double_csr( dest.get(), spMatrix.
get() );
555 return gsl_spmatrix_complex_long_double_memcpy( dest.
get(), src.
get() ); }
564 return gsl_spmatrix_complex_long_double_fprintf( stream, spMatrix.
get(), format ); }
579 return gsl_spmatrix_complex_long_double_fwrite( stream, spMatrix.
get() ); }
587 return gsl_spmatrix_complex_long_double_fread( stream, spMatrix.
get() ); }
596 return gsl_spmatrix_complex_long_double_add( c.
get(),
a.get(),
b.get() ); }
605 gsl_spmatrix_complex_long_double_add( c.get(),
a.get(),
b.get() );
608#ifndef GSL_DISABLE_DEPRECATED
616 return gsl_spmatrix_complex_long_double_add_to_dense(
a.get(),
b.get() ); }
625 return gsl_spmatrix_complex_long_double_dense_add(
a.get(),
b.get() ); }
633 return gsl_spmatrix_complex_long_double_dense_sub(
a.get(),
b.get() ); }
641 return gsl_spmatrix_complex_long_double_d2sp( S.
get(), A.
get() ); }
649 return gsl_spmatrix_complex_long_double_sp2d( A.
get(), S.
get() ); }
657 return gsl_spmatrix_complex_long_double_equal(
a.get(),
b.get() ); }
677 return gsl_spmatrix_complex_long_double_transpose_memcpy( dest.
get(), src.
get() ); }
715#ifdef __GXX_EXPERIMENTAL_CXX0X__
This class handles complex_long_double numbers.
This class is used to handle gsl exceptions so that gsl can use these rather than the GSL error handl...
@ GSL_EBADLEN
matrix, vector lengths are not conformant
This class handles matrix_complex_long_double objects as shared handles.
gsl_matrix_complex_long_double * get()
Get the gsl_matrix_complex_long_double.
This class handles sparse matrix_complex_long_double objects as shared handles.
size_t nzmax() const
The maximum number of nonzero elements.
static spmatrix_complex_long_double compcol(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_compcol().
static spmatrix_complex_long_double compress(spmatrix_complex_long_double const &spMatrix, int const sptype)
C++ version of gsl_spmatrix_complex_long_double_compress().
spmatrix_complex_long_double compress(int const sptype) const
C++ version of gsl_spmatrix_complex_long_double_compress().
int equal(spmatrix_complex_long_double const &b) const
C++ version of gsl_spmatrix_complex_long_double_equal().
@ TRIPLET
GSL_SPMATRIX_TRIPLET.
spmatrix_complex_long_double compcol() const
C++ version of gsl_spmatrix_complex_long_double_compcol().
spmatrix_complex_long_double crs() const
C++ version of gsl_spmatrix_complex_long_double_crs().
int fprintf(FILE *stream, char const *format) const
C++ version of gsl_spmatrix_complex_long_double_fprintf().
static int sp2d(gsl::matrix_complex_long_double &A, spmatrix_complex_long_double const &S)
C++ version of gsl_spmatrix_complex_long_double_sp2d().
static spmatrix_complex_long_double csc(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_csc().
static int transpose_memcpy(spmatrix_complex_long_double &dest, spmatrix_complex_long_double const &src)
C++ version of gsl_spmatrix_complex_long_double_transpose_memcpy().
spmatrix_complex_long_double & operator=(spmatrix_complex_long_double &&v)
Move operator.
int fread(FILE *stream)
C++ version of gsl_spmatrix_complex_long_double_fread().
size_t size1() const
The number of rows of the matrix_complex_long_double.
static spmatrix_complex_long_double fscanf(FILE *stream)
C++ version of gsl_spmatrix_complex_long_double_fscanf().
spmatrix_complex_long_double ccs() const
C++ version of gsl_spmatrix_complex_long_double_ccs().
spmatrix_complex_long_double()
The default constructor is only really useful for assigning to.
static int memcpy(spmatrix_complex_long_double &dest, spmatrix_complex_long_double const &src)
C++ version of gsl_spmatrix_complex_long_double_memcpy().
static int fwrite(FILE *stream, spmatrix_complex_long_double &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_fwrite().
static int transpose(spmatrix_complex_long_double &a)
C++ version of gsl_spmatrix_complex_long_double_transpose().
static size_t nnz(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_nnz().
int set(size_t const i, size_t const j, complex_long_double const x)
C++ version of gsl_spmatrix_complex_long_double_set().
static int d2sp(gsl::spmatrix_complex_long_double &S, gsl::matrix_complex_long_double const &A)
C++ version of gsl_spmatrix_complex_long_double_d2sp().
size_t use_count() const
Find how many spmatrix_complex_long_double objects share this pointer.
static spmatrix_complex_long_double add(spmatrix_complex_long_double const &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_complex_long_double_add().
spmatrix_complex_long_double(gsl_spmatrix_complex_long_double *v)
Could construct from a gsl_spmatrix_complex_long_double.
spmatrix_complex_long_double(std::initializer_list< std::initializer_list< complex_long_double > > initializer_list)
Could construct from a std::initializer_list in C++11 and later.
spmatrix_complex_long_double clone() const
The clone function.
int tree_rebuild()
C++ version of gsl_spmatrix_complex_long_double_tree_rebuild().
spmatrix_complex_long_double(size_t const n1, size_t const n2)
This constructor creates a new matrix_complex_long_double with n1 rows and n2 columns.
static int fread(FILE *stream, spmatrix_complex_long_double &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_fread().
spmatrix_complex_long_double(size_t const n1, size_t const n2, size_t nzmax, size_t sptype)
This constructor creates a new matrix_complex_long_double with n1 rows and n2 columns.
int scale(complex_long_double const x)
C++ version of gsl_spmatrix_complex_long_double_scale().
int transpose()
C++ version of gsl_spmatrix_complex_long_double_transpose().
static int tree_rebuild(spmatrix_complex_long_double &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_tree_rebuild().
long double const * data() const
Give access to the data block.
static spmatrix_complex_long_double crs(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_crs().
static int dense_sub(gsl::matrix_complex_long_double &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_dense_sub().
static int realloc(size_t const nzmax, gsl::spmatrix_complex_long_double &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_realloc(): matches a function in gsl that is intended...
int set_zero()
C++ version of gsl_spmatrix_complex_long_double_set_zero().
gsl_spmatrix_complex_long_double * get()
Get the gsl_spmatrix_complex_long_double.
int realloc(size_t const nzmax)
C++ version of gsl_spmatrix_complex_long_double_realloc().
int memcpy(spmatrix_complex_long_double &dest) const
C++ version of gsl_spmatrix_complex_long_double_memcpy().
spmatrix_complex_long_double(spmatrix_complex_long_double const &v)
The copy constructor.
int fwrite(FILE *stream) const
C++ version of gsl_spmatrix_complex_long_double_fwrite().
static int set_zero(spmatrix_complex_long_double &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_set_zero().
bool unique() const
Find if this is the only object sharing the gsl_spmatrix_complex_long_double.
spmatrix_complex_long_double csc() const
C++ version of gsl_spmatrix_complex_long_double_csc().
void swap(spmatrix_complex_long_double &m)
Swap two spmatrix_complex_long_double objects.
static int transpose2(spmatrix_complex_long_double &a)
C++ version of gsl_spmatrix_complex_long_double_transpose2().
static int add_to_dense(gsl::matrix_complex_long_double &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_add_to_dense().
size_t size2() const
The number of columns of the matrix_complex_long_double.
gsl_spmatrix_complex_long_double * ccgsl_pointer
The shared pointer.
void wrap_gsl_spmatrix_complex_long_double_without_ownership(gsl_spmatrix_complex_long_double *v)
This function is intended mainly for internal use.
static int dense_add(gsl::matrix_complex_long_double &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_dense_add().
static spmatrix_complex_long_double csr(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_csr().
static char const * type(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_type().
size_t * count
The shared reference count.
int scale_rows(gsl::vector_complex_long_double const &x)
C++ version of gsl_spmatrix_complex_long_double_scale_rows().
static spmatrix_complex_long_double ccs(spmatrix_complex_long_double const &spMatrix)
C++ version of gsl_spmatrix_complex_long_double_ccs().
static int add(spmatrix_complex_long_double &c, spmatrix_complex_long_double const &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_complex_long_double_add().
static int fprintf(FILE *stream, spmatrix_complex_long_double const &spMatrix, char const *format)
C++ version of gsl_spmatrix_complex_long_double_fprintf().
gsl_complex_long_double * ptr(size_t const i, size_t const j) const
C++ version of gsl_spmatrix_complex_long_double_ptr().
~spmatrix_complex_long_double()
The destructor only deletes the pointers if count reaches zero.
spmatrix_complex_long_double(spmatrix_complex_long_double &&v)
Move constructor.
complex_long_double get(size_t const i, size_t const j) const
C++ version of gsl_spmatrix_complex_long_double_get().
int transpose2()
C++ version of gsl_spmatrix_complex_long_double_transpose2().
char const * type() const
C++ version of gsl_spmatrix_complex_long_double_type().
gsl_spmatrix_complex_long_double const * get() const
Get the gsl_spmatrix_complex_long_double.
static int equal(spmatrix_complex_long_double const &a, spmatrix_complex_long_double const &b)
C++ version of gsl_spmatrix_complex_long_double_equal().
size_t nnz() const
C++ version of gsl_spmatrix_complex_long_double_nnz().
spmatrix_complex_long_double csr() const
C++ version of gsl_spmatrix_complex_long_double_csr().
int scale_columns(gsl::vector_complex_long_double const &x)
C++ version of gsl_spmatrix_complex_long_double_scale_columns().
spmatrix_complex_long_double & operator=(spmatrix_complex_long_double const &v)
The assignment operator.
void reset()
Stop sharing ownership of the shared pointer.
long double * data()
Give access to the data block.
int sptype() const
The type of the spmatrix_complex_long_double.
This class handles vector_complex_long_double objects as shared handles.
gsl_vector_complex_long_double * get()
Get the gsl_vector_complex_long_double.
double b(int order, double qq)
C++ version of gsl_sf_mathieu_b().
double a(int order, double qq)
C++ version of gsl_sf_mathieu_a().
The gsl package creates an interface to the GNU Scientific Library for C++.