ccgsl 2.7.2
C++wrappersforGnuScientificLibrary
spmatrix_uchar.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010, 2011, 2012, 2019, 2020, 2021 John D Lamb
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or (at
7 * your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19#ifndef CCGSL_SPMATRIX_HPP
20#define CCGSL_SPMATRIX_HPP
21
22#include<cstddef>
23#include<gsl/gsl_spmatrix.h>
24#include<new>
25
26#include"exception.hpp"
27#include"vector_uchar.hpp"
28#include"matrix_uchar.hpp"
29
30namespace gsl {
38 public:
42 enum {
44 COO = GSL_SPMATRIX_COO,
46 CSC = GSL_SPMATRIX_CSC,
48 CSR = GSL_SPMATRIX_CSR,
50 TRIPLET = GSL_SPMATRIX_TRIPLET,
52 CCS = GSL_SPMATRIX_CCS,
54 CRS = GSL_SPMATRIX_CRS
55 };
60 ccgsl_pointer = 0;
61 count = 0; // initially nullptr will do
62 }
63 // Refines random access container
64 // Refines assignable
70 explicit spmatrix_uchar( size_t const n1, size_t const n2 ){
71 if( n1 > 0 and n2 > 0 ) ccgsl_pointer = gsl_spmatrix_uchar_alloc( n1, n2 );
72 else { ccgsl_pointer = new gsl_spmatrix_uchar; ccgsl_pointer->size1 = n1;
73 ccgsl_pointer->size2 = n2; ccgsl_pointer->data = 0; }
74 // just plausibly we could allocate spmatrix_uchar but not count
75 try { count = new size_t; } catch( std::bad_alloc& e ){
76 // try to tidy up before rethrowing
77 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_uchar_free( ccgsl_pointer );
78 else delete ccgsl_pointer;
79 throw e;
80 }
81 *count = 1; // initially there is just one reference to ccgsl_pointer
82 }
91 explicit spmatrix_uchar( size_t const n1, size_t const n2, size_t nzmax, size_t sptype ){
92 if( n1 > 0 and n2 > 0 )
93 ccgsl_pointer = gsl_spmatrix_uchar_alloc_nzmax( n1, n2, nzmax, sptype );
94 else { ccgsl_pointer = new gsl_spmatrix_uchar; ccgsl_pointer->size1 = n1;
95 ccgsl_pointer->size2 = n2; ccgsl_pointer->data = 0; }
96 // just plausibly we could allocate spmatrix_uchar but not count
97 try { count = new size_t; } catch( std::bad_alloc& e ){
98 // try to tidy up before rethrowing
99 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_uchar_free( ccgsl_pointer );
100 else delete ccgsl_pointer;
101 throw e;
102 }
103 *count = 1; // initially there is just one reference to ccgsl_pointer
104 }
110 explicit spmatrix_uchar( gsl_spmatrix_uchar* v ){
111 ccgsl_pointer = v;
112 // just plausibly we could fail to allocate count: no further action needed.
113 count = new size_t;
114 *count = 1; // initially there is just one reference to ccgsl_pointer
115 }
116#ifdef __GXX_EXPERIMENTAL_CXX0X__
121 spmatrix_uchar( std::initializer_list<std::initializer_list<unsigned char> > initializer_list ){
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_uchar rows have unequal sizes", __FILE__, __LINE__,
128 throw( e );
129 }
130 }
131 ccgsl_pointer = gsl_spmatrix_uchar_alloc( n1, n2 );
132 // just plausibly we could allocate spmatrix_uchar but not count
133 try { count = new size_t; } catch( std::bad_alloc& e ){
134 // try to tidy up before rethrowing
135 if( n1 > 0 and n2 > 0 ) gsl_spmatrix_uchar_free( ccgsl_pointer );
136 else delete ccgsl_pointer;
137 throw e;
138 }
139 *count = 1; // initially there is just one reference to ccgsl_pointer
140 // now copy
141 int r = 0;
142 for( auto row : initializer_list ){
143 size_t c = 0;
144 for( auto x : row ){ set( r, c, x ); ++c; }
145 ++r;
146 }
147 }
148#endif
149 // copy constructor
155 if( count != 0 ) ++*count; // spmatrix_uchar is now shared.
156 }
157 // assignment operator
163 // first, possibly delete anything pointed to by this
164 if( count == 0 or --*count == 0 ){
165 if( ccgsl_pointer != 0 and ccgsl_pointer->size1 > 0
166 and ccgsl_pointer->size2 > 0 ) gsl_spmatrix_uchar_free( ccgsl_pointer );
167 else delete ccgsl_pointer;
168 delete count;
169 }
170 // Then copy
172 count = v.count;
173 if( count != 0 ) ++*count; // block is now shared.
174 return *this;
175 }
176 // clone()
183 spmatrix_uchar copy( get()->size1, get()->size2 );
184 // Now copy
185 gsl_spmatrix_uchar_memcpy( copy.get(), get() );
186 // return new object
187 return copy;
188 }
189 // destructor
194 if( count != 0 and --*count == 0 ){
195 // could have allocated null pointer
196 if( ccgsl_pointer != 0 ){
197 if( ccgsl_pointer->size1 > 0 and ccgsl_pointer->size2 > 0 )
198 gsl_spmatrix_uchar_free( ccgsl_pointer );
199 else delete ccgsl_pointer; }
200 delete count;
201 }
202 }
203 // Allow possibility of assigning from gsl_spmatrix_uchar without sharing
212 void wrap_gsl_spmatrix_uchar_without_ownership( gsl_spmatrix_uchar* v ){
213 if( count != 0 and --*count == 0 ){
214 // could have allocated null pointer
215 if( ccgsl_pointer != 0 ){
216 if( ccgsl_pointer->size1 != 0 and ccgsl_pointer->size1 != 0 )
217 gsl_spmatrix_uchar_free( ccgsl_pointer );
218 else delete ccgsl_pointer; }
219 }
220 ccgsl_pointer = v;
221 if(0 == count) count = new size_t;
222 *count = 2; // should never be able to delete ccgsl_pointer
223 }
227 void reset(){ spmatrix_uchar().swap( *this ); }
228#ifdef __GXX_EXPERIMENTAL_CXX0X__
234 std::swap( count, v.count );
235 v.ccgsl_pointer = nullptr;
236 }
243 spmatrix_uchar( std::move( v ) ).swap( *this );
244 return *this;
245 }
246#endif
247 public:
248 // Sizes
253 size_t size1() const { return ccgsl_pointer == 0 ? 0 : ccgsl_pointer->size1; }
258 size_t size2() const { return ccgsl_pointer == 0 ? 0 : ccgsl_pointer->size2; }
263 size_t nzmax() const { return ccgsl_pointer == 0 ? 0 : ccgsl_pointer->nzmax; }
268 int sptype() const { return ccgsl_pointer == 0 ? 0 : ccgsl_pointer->sptype; }
273 unsigned char* data() {
274 if( ccgsl_pointer == 0 ) gsl_error( "null vector_uchar", __FILE__, __LINE__, GSL_EFAULT );
275 return ccgsl_pointer->data; }
280 unsigned char const* data() const {
281 if( ccgsl_pointer == 0 ) gsl_error( "null vector_uchar", __FILE__, __LINE__, GSL_EFAULT );
282 return ccgsl_pointer->data; }
289 std::swap( ccgsl_pointer, m.ccgsl_pointer );
290 std::swap( count, m.count );
291 }
297 int realloc( size_t const nzmax ){ return gsl_spmatrix_uchar_realloc( nzmax, get() ); }
302 size_t nnz() const { return gsl_spmatrix_uchar_nnz( get() ); }
307 char const* type() const { return gsl_spmatrix_uchar_type( get() ); }
312 int set_zero(){ return gsl_spmatrix_uchar_set_zero( get() ); }
317 int tree_rebuild(){ return gsl_spmatrix_uchar_tree_rebuild( get() ); }
324 spmatrix_uchar dest { size1(), size2() };
325 gsl_spmatrix_uchar_csc( dest.get(), get() );
326 return dest;
327 }
334 spmatrix_uchar dest { size1(), size2() };
335 gsl_spmatrix_uchar_csr( dest.get(), get() );
336 return dest;
337 }
343 spmatrix_uchar compress( int const sptype ) const {
344 spmatrix_uchar dest { gsl_spmatrix_uchar_compress( get(), sptype ) };
345 return dest; }
351 spmatrix_uchar dest { gsl_spmatrix_uchar_compcol( get() ) };
352 return dest; }
358 spmatrix_uchar dest { gsl_spmatrix_uchar_ccs( get() ) };
359 return dest; }
365 spmatrix_uchar dest { gsl_spmatrix_uchar_crs( get() ) };
366 return dest; }
372 int memcpy( spmatrix_uchar& dest ) const { return gsl_spmatrix_uchar_memcpy( dest.get(), get() ); }
379 int fprintf( FILE* stream, char const* format ) const {
380 return gsl_spmatrix_uchar_fprintf( stream, get(), format ); }
386 int fwrite( FILE* stream ) const {
387 return gsl_spmatrix_uchar_fwrite( stream, get() ); }
393 int fread( FILE* stream ){
394 return gsl_spmatrix_uchar_fread( stream, get() ); }
401 unsigned char get( size_t const i, size_t const j ) const {
402 return gsl_spmatrix_uchar_get( get(), i, j ); }
410 int set( size_t const i, size_t const j, unsigned char const x ){
411 return gsl_spmatrix_uchar_set( get(), i, j, x ); }
418 unsigned char* ptr( size_t const i, size_t const j ) const {
419 return gsl_spmatrix_uchar_ptr( get(), i, j ); }
426 int minmax( unsigned char& min_out, unsigned char& max_out ) const {
427 return gsl_spmatrix_uchar_minmax( get(), &min_out, &max_out ); }
434 int min_index( size_t& imin_out, size_t& jmin_out ) const {
435 return gsl_spmatrix_uchar_min_index( get(), &imin_out, &jmin_out ); }
441 int scale( unsigned char const x ){ return gsl_spmatrix_uchar_scale( get(), x ); }
448 return gsl_spmatrix_uchar_scale_columns( get(), x.get() ); }
455 return gsl_spmatrix_uchar_scale_rows( get(), x.get() ); }
461 int equal( spmatrix_uchar const& b ) const { return gsl_spmatrix_uchar_equal( get(), b.get() ); }
466 int transpose(){ return gsl_spmatrix_uchar_transpose( get() ); }
471 int transpose2(){ return gsl_spmatrix_uchar_transpose2( get() ); }
472 // Now the static functions
480 static int realloc( size_t const nzmax, gsl::spmatrix_uchar& spMatrix ){
481 return gsl_spmatrix_uchar_realloc( nzmax, spMatrix.get() ); }
487 static size_t nnz( spmatrix_uchar const& spMatrix ){
488 return gsl_spmatrix_uchar_nnz( spMatrix.get() ); }
494 static char const* type( spmatrix_uchar const& spMatrix ){
495 return gsl_spmatrix_uchar_type( spMatrix.get() ); }
501 static int set_zero( spmatrix_uchar& spMatrix ){
502 return gsl_spmatrix_uchar_set_zero( spMatrix.get() ); }
508 static int tree_rebuild( spmatrix_uchar& spMatrix ){
509 return gsl_spmatrix_uchar_tree_rebuild( spMatrix.get() ); }
516 static spmatrix_uchar csc( spmatrix_uchar const& spMatrix ){
517 spmatrix_uchar dest { spMatrix.size1(), spMatrix.size2() };
518 gsl_spmatrix_uchar_csc( dest.get(), spMatrix.get() );
519 return dest; }
526 static spmatrix_uchar csr( spmatrix_uchar const& spMatrix ){
527 spmatrix_uchar dest { spMatrix.size1(), spMatrix.size2() };
528 gsl_spmatrix_uchar_csr( dest.get(), spMatrix.get() );
529 return dest; }
536 static spmatrix_uchar compress( spmatrix_uchar const& spMatrix, int const sptype ){
537 spmatrix_uchar dest { gsl_spmatrix_uchar_compress( spMatrix.get(), sptype ) };
538 return dest; }
544 static spmatrix_uchar compcol( spmatrix_uchar const& spMatrix ){
545 spmatrix_uchar dest { gsl_spmatrix_uchar_compcol( spMatrix.get() ) };
546 return dest; }
552 static spmatrix_uchar ccs( spmatrix_uchar const& spMatrix ){
553 spmatrix_uchar dest { gsl_spmatrix_uchar_ccs( spMatrix.get() ) };
554 return dest; }
560 static spmatrix_uchar crs( spmatrix_uchar const& spMatrix ){
561 spmatrix_uchar dest { gsl_spmatrix_uchar_crs( spMatrix.get() ) };
562 return dest; }
569 static int memcpy( spmatrix_uchar& dest, spmatrix_uchar const& src ){
570 return gsl_spmatrix_uchar_memcpy( dest.get(), src.get() ); }
578 static int fprintf( FILE* stream, spmatrix_uchar const& spMatrix, char const* format ){
579 return gsl_spmatrix_uchar_fprintf( stream, spMatrix.get(), format ); }
585 static spmatrix_uchar fscanf( FILE* stream ){
586 return spmatrix_uchar { gsl_spmatrix_uchar_fscanf( stream ) }; }
593 static int fwrite( FILE* stream, spmatrix_uchar& spMatrix ){
594 return gsl_spmatrix_uchar_fwrite( stream, spMatrix.get() ); }
601 static int fread( FILE* stream, spmatrix_uchar& spMatrix ){
602 return gsl_spmatrix_uchar_fread( stream, spMatrix.get() ); }
610 static int add( spmatrix_uchar& c, spmatrix_uchar const& a, spmatrix_uchar const& b ){
611 return gsl_spmatrix_uchar_add( c.get(), a.get(), b.get() ); }
619 spmatrix_uchar c { a.size1(), a.size2() };
620 gsl_spmatrix_uchar_add( c.get(), a.get(), b.get() );
621 return c;
622 }
623#ifndef GSL_DISABLE_DEPRECATED
631 return gsl_spmatrix_uchar_add_to_dense( a.get(), b.get() ); }
632#endif
640 return gsl_spmatrix_uchar_dense_add( a.get(), b.get() ); }
648 return gsl_spmatrix_uchar_dense_sub( a.get(), b.get() ); }
654 static uchar norm1( gsl::spmatrix_uchar const& a ){
655 return gsl_spmatrix_uchar_norm1( a.get() ); }
662 static int d2sp( gsl::spmatrix_uchar& S, gsl::matrix_uchar const& A ){
663 return gsl_spmatrix_uchar_d2sp( S.get(), A.get() ); }
670 static int sp2d( gsl::matrix_uchar& A, spmatrix_uchar const& S ){
671 return gsl_spmatrix_uchar_sp2d( A.get(), S.get() ); }
678 static int equal( spmatrix_uchar const& a, spmatrix_uchar const& b ){
679 return gsl_spmatrix_uchar_equal( a.get(), b.get() ); }
685 static int transpose( spmatrix_uchar& a ){ return gsl_spmatrix_uchar_transpose( a.get() ); }
691 static int transpose2( spmatrix_uchar& a ){ return gsl_spmatrix_uchar_transpose2( a.get() ); }
698 static int transpose_memcpy( spmatrix_uchar& dest, spmatrix_uchar const& src ){
699 return gsl_spmatrix_uchar_transpose_memcpy( dest.get(), src.get() ); }
700 private:
704 gsl_spmatrix_uchar* ccgsl_pointer;
708 size_t* count;
709 public:
710 // shared reference functions
715 gsl_spmatrix_uchar* get(){ return ccgsl_pointer; }
720 gsl_spmatrix_uchar const* get() const { return ccgsl_pointer; }
726 bool unique() const { return count != 0 and *count == 1; }
731 size_t use_count() const { return count == 0 ? 0 : *count; }
737#ifdef __GXX_EXPERIMENTAL_CXX0X__
738 explicit
739#endif
740 operator bool() const { return ccgsl_pointer != 0; }
741 };
742}
743#endif
This class is used to handle gsl exceptions so that gsl can use these rather than the GSL error handl...
Definition: exception.hpp:387
@ GSL_EBADLEN
matrix, vector lengths are not conformant
Definition: exception.hpp:490
This class handles matrix_uchar objects as shared handles.
gsl_matrix_uchar * get()
Get the gsl_matrix_uchar.
This class handles sparse matrix_uchar objects as shared handles.
spmatrix_uchar ccs() const
C++ version of gsl_spmatrix_uchar_ccs().
static spmatrix_uchar crs(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_crs().
int sptype() const
The type of the spmatrix_uchar.
static int fprintf(FILE *stream, spmatrix_uchar const &spMatrix, char const *format)
C++ version of gsl_spmatrix_uchar_fprintf().
static spmatrix_uchar csc(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_csc().
spmatrix_uchar csc() const
C++ version of gsl_spmatrix_uchar_csc().
int realloc(size_t const nzmax)
C++ version of gsl_spmatrix_uchar_realloc().
@ CRS
GSL_SPMATRIX_CRS.
@ CCS
GSL_SPMATRIX_CCS.
@ CSC
GSL_SPMATRIX_CSC.
@ COO
GSL_SPMATRIX_COO.
@ CSR
GSL_SPMATRIX_CSR.
@ TRIPLET
GSL_SPMATRIX_TRIPLET.
static spmatrix_uchar fscanf(FILE *stream)
C++ version of gsl_spmatrix_uchar_fscanf().
spmatrix_uchar(gsl_spmatrix_uchar *v)
Could construct from a gsl_spmatrix_uchar.
spmatrix_uchar(std::initializer_list< std::initializer_list< unsigned char > > initializer_list)
Could construct from a std::initializer_list in C++11 and later.
static int memcpy(spmatrix_uchar &dest, spmatrix_uchar const &src)
C++ version of gsl_spmatrix_uchar_memcpy().
int scale_rows(gsl::vector_uchar const &x)
C++ version of gsl_spmatrix_uchar_scale_rows().
static int fwrite(FILE *stream, spmatrix_uchar &spMatrix)
C++ version of gsl_spmatrix_uchar_fwrite().
spmatrix_uchar compress(int const sptype) const
C++ version of gsl_spmatrix_uchar_compress().
int scale(unsigned char const x)
C++ version of gsl_spmatrix_uchar_scale().
int fwrite(FILE *stream) const
C++ version of gsl_spmatrix_uchar_fwrite().
static spmatrix_uchar csr(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_csr().
int transpose()
C++ version of gsl_spmatrix_uchar_transpose().
static int realloc(size_t const nzmax, gsl::spmatrix_uchar &spMatrix)
C++ version of gsl_spmatrix_uchar_realloc(): matches a function in gsl that is intended for internal ...
int fread(FILE *stream)
C++ version of gsl_spmatrix_uchar_fread().
int scale_columns(gsl::vector_uchar const &x)
C++ version of gsl_spmatrix_uchar_scale_columns().
static int add(spmatrix_uchar &c, spmatrix_uchar const &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_uchar_add().
static int fread(FILE *stream, spmatrix_uchar &spMatrix)
C++ version of gsl_spmatrix_uchar_fread().
spmatrix_uchar & operator=(spmatrix_uchar const &v)
The assignment operator.
static int d2sp(gsl::spmatrix_uchar &S, gsl::matrix_uchar const &A)
C++ version of gsl_spmatrix_uchar_d2sp().
int set(size_t const i, size_t const j, unsigned char const x)
C++ version of gsl_spmatrix_uchar_set().
static int tree_rebuild(spmatrix_uchar &spMatrix)
C++ version of gsl_spmatrix_uchar_tree_rebuild().
int min_index(size_t &imin_out, size_t &jmin_out) const
C++ version of gsl_spmatrix_uchar_min_index().
~spmatrix_uchar()
The destructor only deletes the pointers if count reaches zero.
unsigned char * ptr(size_t const i, size_t const j) const
C++ version of gsl_spmatrix_uchar_ptr().
gsl_spmatrix_uchar * ccgsl_pointer
The shared pointer.
static int set_zero(spmatrix_uchar &spMatrix)
C++ version of gsl_spmatrix_uchar_set_zero().
char const * type() const
C++ version of gsl_spmatrix_uchar_type().
size_t nnz() const
C++ version of gsl_spmatrix_uchar_nnz().
static spmatrix_uchar compcol(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_compcol().
int transpose2()
C++ version of gsl_spmatrix_uchar_transpose2().
static spmatrix_uchar compress(spmatrix_uchar const &spMatrix, int const sptype)
C++ version of gsl_spmatrix_uchar_compress().
size_t size2() const
The number of columns of the matrix_uchar.
size_t nzmax() const
The maximum number of nonzero elements.
static char const * type(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_type().
size_t use_count() const
Find how many spmatrix_uchar objects share this pointer.
unsigned char get(size_t const i, size_t const j) const
C++ version of gsl_spmatrix_uchar_get().
static int dense_add(gsl::matrix_uchar &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_dense_add().
size_t size1() const
The number of rows of the matrix_uchar.
int memcpy(spmatrix_uchar &dest) const
C++ version of gsl_spmatrix_uchar_memcpy().
int fprintf(FILE *stream, char const *format) const
C++ version of gsl_spmatrix_uchar_fprintf().
static int dense_sub(gsl::matrix_uchar &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_dense_sub().
spmatrix_uchar csr() const
C++ version of gsl_spmatrix_uchar_csr().
static spmatrix_uchar ccs(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_ccs().
int minmax(unsigned char &min_out, unsigned char &max_out) const
C++ version of gsl_spmatrix_uchar_minmax().
static int transpose(spmatrix_uchar &a)
C++ version of gsl_spmatrix_uchar_transpose().
gsl_spmatrix_uchar const * get() const
Get the gsl_spmatrix_uchar.
static int transpose2(spmatrix_uchar &a)
C++ version of gsl_spmatrix_uchar_transpose2().
spmatrix_uchar compcol() const
C++ version of gsl_spmatrix_uchar_compcol().
void reset()
Stop sharing ownership of the shared pointer.
int set_zero()
C++ version of gsl_spmatrix_uchar_set_zero().
spmatrix_uchar crs() const
C++ version of gsl_spmatrix_uchar_crs().
spmatrix_uchar(size_t const n1, size_t const n2, size_t nzmax, size_t sptype)
This constructor creates a new matrix_uchar with n1 rows and n2 columns.
static int add_to_dense(gsl::matrix_uchar &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_add_to_dense().
static uchar norm1(gsl::spmatrix_uchar const &a)
C++ version of gsl_spmatrix_uchar_norm1().
int tree_rebuild()
C++ version of gsl_spmatrix_uchar_tree_rebuild().
unsigned char const * data() const
Give access to the data block.
unsigned char * data()
Give access to the data block.
spmatrix_uchar()
The default constructor is only really useful for assigning to.
spmatrix_uchar clone() const
The clone function.
bool unique() const
Find if this is the only object sharing the gsl_spmatrix_uchar.
size_t * count
The shared reference count.
gsl_spmatrix_uchar * get()
Get the gsl_spmatrix_uchar.
static size_t nnz(spmatrix_uchar const &spMatrix)
C++ version of gsl_spmatrix_uchar_nnz().
spmatrix_uchar(spmatrix_uchar const &v)
The copy constructor.
static int transpose_memcpy(spmatrix_uchar &dest, spmatrix_uchar const &src)
C++ version of gsl_spmatrix_uchar_transpose_memcpy().
static spmatrix_uchar add(spmatrix_uchar const &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_uchar_add().
static int equal(spmatrix_uchar const &a, spmatrix_uchar const &b)
C++ version of gsl_spmatrix_uchar_equal().
spmatrix_uchar(spmatrix_uchar &&v)
Move constructor.
void swap(spmatrix_uchar &m)
Swap two spmatrix_uchar objects.
void wrap_gsl_spmatrix_uchar_without_ownership(gsl_spmatrix_uchar *v)
This function is intended mainly for internal use.
spmatrix_uchar(size_t const n1, size_t const n2)
This constructor creates a new matrix_uchar with n1 rows and n2 columns.
spmatrix_uchar & operator=(spmatrix_uchar &&v)
Move operator.
int equal(spmatrix_uchar const &b) const
C++ version of gsl_spmatrix_uchar_equal().
static int sp2d(gsl::matrix_uchar &A, spmatrix_uchar const &S)
C++ version of gsl_spmatrix_uchar_sp2d().
This class handles vector_uchar objects as shared handles.
gsl_vector_uchar * get()
Get the gsl_vector_uchar.
double b(int order, double qq)
C++ version of gsl_sf_mathieu_b().
Definition: sf_mathieu.hpp:298
double a(int order, double qq)
C++ version of gsl_sf_mathieu_a().
Definition: sf_mathieu.hpp:272
The gsl package creates an interface to the GNU Scientific Library for C++.
Definition: blas.hpp:34