19#ifndef CCGSL_VECTOR_UCHAR_HPP
20#define CCGSL_VECTOR_UCHAR_HPP
22#include<gsl/gsl_vector_uchar.h>
64 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
78 if(
n > 0 )
ccgsl_pointer = gsl_vector_uchar_alloc(
static_cast<size_t>(
n ) );
80 gsl_error(
"failed tring to make a vector of negative length",
84 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
98 explicit vector_uchar( gsl_vector_uchar* v ) : owns_data(true){
104#ifdef __GXX_EXPERIMENTAL_CXX0X__
109 vector_uchar( std::initializer_list<unsigned char> initializer_list ) : owns_data(true){
110 size_t const n = initializer_list.size();
111 ccgsl_pointer = gsl_vector_uchar_alloc(
n );
113 try { count =
new size_t; }
catch( std::bad_alloc& e ){
115 if(
n > 0 ) gsl_vector_uchar_free( ccgsl_pointer );
116 else delete ccgsl_pointer;
122 for(
auto x : initializer_list ){ *p = x; ++p; }
131 if( count != 0 ) ++*count;
138 ccgsl_pointer( v.ccgsl_pointer ), count( v.count ){
139 if( count != 0 ) ++*count;
148 if( count == 0 or --*count == 0 ){
149 if( ccgsl_pointer != 0 ){
150 if( ccgsl_pointer->size > 0 ) gsl_vector_uchar_free( ccgsl_pointer );
151 else delete ccgsl_pointer; }
158 if( count != 0 ) ++*count;
173 template<
typename V>
vector_uchar( V& v,
size_t const stride = 1 ) : owns_data(true){
174 size_t const n = v.size() / stride;
175 ccgsl_pointer =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
176 ccgsl_pointer->size =
n;
177 ccgsl_pointer->stride = stride;
178 ccgsl_pointer->data = v.data();
179 ccgsl_pointer->block = 0;
180 ccgsl_pointer->owner = 0;
182 try { count =
new size_t; }
catch( std::bad_alloc& e ){
184 if(
n > 0 ) gsl_vector_uchar_free( ccgsl_pointer );
185 else delete ccgsl_pointer;
199 gsl_vector_uchar_memcpy( copy.
get(),
get() );
208 if( count != 0 and --*count == 0 ){
210 if( ccgsl_pointer != 0 and owns_data ){
211 if( ccgsl_pointer->size > 0 ) gsl_vector_uchar_free( ccgsl_pointer );
212 else delete ccgsl_pointer; }
227 if( count != 0 and --*count == 0 ){
229 if( ccgsl_pointer != 0 ){
230 if( ccgsl_pointer->size != 0 ) gsl_vector_uchar_free( ccgsl_pointer );
231 else delete ccgsl_pointer; }
234 if(0 == count) count =
new size_t;
250 if( (ccgsl_pointer == 0) != (v.
ccgsl_pointer == 0 ) )
return false;
252 if( ccgsl_pointer->size != v.
ccgsl_pointer->size )
return false;
254 for(
size_t i = 0; i < ccgsl_pointer->size; ++i )
255 if( gsl_vector_uchar_get( ccgsl_pointer, i ) != gsl_vector_uchar_get( v.
ccgsl_pointer, i ) )
return false;
262#ifdef __GXX_EXPERIMENTAL_CXX0X__
268 std::swap( count, v.count );
269 v.ccgsl_pointer =
nullptr;
306 size_t const size = ccgsl_pointer->size;
309 for(
size_t i = 0; i <
min; ++i ){
310 unsigned char const t = gsl_vector_uchar_get( ccgsl_pointer, i );
311 unsigned char const u =gsl_vector_uchar_get( v.
ccgsl_pointer, i );
312 if( t < u )
return true;
313 if( u < t )
return false;
316 return size < v_size;
329 if( ccgsl_pointer == 0 )
return false;
333 size_t const size = ccgsl_pointer->size;
336 for(
size_t i = 0; i <
min; ++i ){
337 unsigned char const t = gsl_vector_uchar_get( ccgsl_pointer, i );
338 unsigned char const u =gsl_vector_uchar_get( v.
ccgsl_pointer, i );
339 if( t > u )
return true;
340 if( u > t )
return false;
343 return size > v_size;
355 return operator<( v ) or operator==( v );
367 return operator>( v ) or operator==( v );
401 template<
typename container,
typename content,
bool reverse_t>
class iterator_base {
433 static content something = 0;
438 }
else if( v->ccgsl_pointer == 0 ){
464 }
else if( v->ccgsl_pointer == 0 ){
488 static content something = 0;
493 }
else if( v->ccgsl_pointer == 0 ){
508 return *(v->ccgsl_pointer->data + p * v->ccgsl_pointer->stride);
518 if( v == 0 or i.
v == 0 ){
521 }
else if( v->ccgsl_pointer == 0 or i.
v->ccgsl_pointer == 0 ){
526 if( v->ccgsl_pointer != i.
v->ccgsl_pointer ){
527 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
549 return not this->operator==( i );
560 if( v == 0 or i.
v == 0 ){
565 if( v->ccgsl_pointer != i.
v->ccgsl_pointer ){
566 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
582 }
else if( v->ccgsl_pointer == 0 ){
599 }
else if( v->ccgsl_pointer == 0 ){
616 }
else if( v->ccgsl_pointer == 0 ){
764 if( this->v == 0 or i.
v == 0 ){
767 }
else if( this->v->ccgsl_pointer == 0 or i.
v->
ccgsl_pointer == 0 ){
773 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
793 return not this->operator==( i );
802 if( this->v == 0 or i.
v == 0 ){
808 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
833 :
public iterator_base<vector_uchar const,unsigned char,reverse_t>{
950 if( this->v == 0 or i.
v == 0 ){
953 }
else if( this->v->ccgsl_pointer == 0 or i.
v->
ccgsl_pointer == 0 ){
959 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
991 return not this->operator==( i );
1000 if( this->v == 0 or i.
v == 0 ){
1006 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
1026 return not this->operator==( i );
1035 if( this->v == 0 or i.
v == 0 ){
1041 gsl_error(
"trying to take difference of iterators for different vector_uchar objects", __FILE__, __LINE__,
1106 if( ccgsl_pointer == 0 )
return iterator(
this, 0 );
1131 if( ccgsl_pointer == 0 ) gsl_error(
"null vector_uchar", __FILE__, __LINE__, GSL_EFAULT );
1132#ifndef GSL_RANGE_CHECK_OFF
1133 if( ccgsl_pointer->stride != 1 )
1134 gsl_error(
"vector_uchar does not have stride of size 1", __FILE__, __LINE__, GSL_EBADLEN );
1136 return ccgsl_pointer->data; }
1144 unsigned char const*
data()
const {
1145 if( ccgsl_pointer == 0 ) gsl_error(
"null vector_uchar", __FILE__, __LINE__, GSL_EFAULT );
1146#ifndef GSL_RANGE_CHECK_OFF
1147 if( ccgsl_pointer->stride != 1 )
1148 gsl_error(
"vector_uchar does not have stride of size 1", __FILE__, __LINE__, GSL_EBADLEN );
1150 return ccgsl_pointer->data; }
1163 bool empty()
const {
return ccgsl_pointer == 0 or ccgsl_pointer->size == 0; }
1172 std::swap( count, v.
count );
1215 static unsigned char something = 0;
1217 if( ccgsl_pointer == 0 ){
1221#ifndef GSL_RANGE_CHECK_OFF
1224 gsl_error(
"trying to read beyond end of vector_uchar", __FILE__, __LINE__,
exception::GSL_EINVAL );
1229 return *(ccgsl_pointer->data +
n * ccgsl_pointer->stride);
1238 static unsigned char something = 0;
1240 if( ccgsl_pointer == 0 ){
1244#ifndef GSL_RANGE_CHECK_OFF
1247 gsl_error(
"trying to read beyond end of vector_uchar", __FILE__, __LINE__,
exception::GSL_EINVAL );
1252 return *(ccgsl_pointer->data +
n * ccgsl_pointer->stride);
1273 gsl_vector_uchar*
get() {
return ccgsl_pointer; }
1278 gsl_vector_uchar
const*
get()
const {
return ccgsl_pointer; }
1284 bool unique()
const {
return count != 0 and *count == 1; }
1289 size_t use_count()
const {
return count == 0 ? 0 : *count; }
1295#ifdef __GXX_EXPERIMENTAL_CXX0X__
1298 operator bool()
const {
return ccgsl_pointer != 0; }
1316 void set_all(
unsigned char x ){ gsl_vector_uchar_set_all(
get(), x ); }
1322 int set_basis(
size_t i ){
return gsl_vector_uchar_set_basis(
get(), i ); }
1341 return gsl_vector_uchar_swap_elements(
get(), i, j ); }
1346 unsigned char max()
const {
return gsl_vector_uchar_max(
get() ); }
1351 unsigned char min()
const {
return gsl_vector_uchar_min(
get() ); }
1357 void minmax(
unsigned char* min_out,
unsigned char* max_out )
const {
1358 gsl_vector_uchar_minmax(
get(), min_out, max_out ); }
1364 void minmax(
unsigned char& min_out,
unsigned char& max_out )
const {
1365 gsl_vector_uchar_minmax(
get(), &min_out, &max_out ); }
1382 gsl_vector_uchar_minmax_index(
get(), imin, imax ); }
1412 int scale(
unsigned char const x ){
return gsl_vector_uchar_scale(
get(), x ); }
1418 int add_constant(
unsigned char const x ){
return gsl_vector_uchar_add_constant(
get(), x ); }
1427 unsigned char const beta ){
1428 return gsl_vector_uchar_axpby( alpha, x.
get(),
beta,
get() );
1440 int isnull()
const {
return gsl_vector_uchar_isnull(
get() ); }
1445 int ispos()
const {
return gsl_vector_uchar_ispos(
get() ); }
1450 int isneg()
const {
return gsl_vector_uchar_isneg(
get() ); }
1461 unsigned char get(
size_t const i )
const {
return gsl_vector_uchar_get(
get(), i ); }
1467 void set(
size_t const i,
unsigned char x ){ gsl_vector_uchar_set(
get(), i, x ); }
1473 unsigned char*
ptr(
size_t const i ){
return gsl_vector_uchar_ptr(
get(), i ); }
1479 unsigned char const*
const_ptr(
size_t const i )
const {
return gsl_vector_uchar_const_ptr(
get(), i ); }
1485 int fread( FILE* stream ){
return gsl_vector_uchar_fread( stream,
get() ); }
1491 int fwrite( FILE* stream )
const {
return gsl_vector_uchar_fwrite( stream,
get() ); }
1497 int fscanf( FILE* stream ){
return gsl_vector_uchar_fscanf( stream,
get() ); }
1504 int fprintf( FILE* stream,
char const* format )
const {
1505 return gsl_vector_uchar_fprintf( stream,
get(), format ); }
1514 ccgsl_pointer = gsl_vector_uchar_alloc_from_block(
b.get(), offset,
n, stride );
1516 try { count =
new size_t; }
catch( std::bad_alloc& e ){
1518 gsl_vector_uchar_free( ccgsl_pointer );
1531 ccgsl_pointer = gsl_vector_uchar_alloc_from_vector( v.
get(), offset,
n, stride );
1533 try { count =
new size_t; }
catch( std::bad_alloc& e ){
1535 gsl_vector_uchar_free( ccgsl_pointer );
1547 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1548 *w = gsl_vector_uchar_view_array( v,
n ).vector;
1561 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1562 *w = gsl_vector_uchar_view_array_with_stride( base, stride,
n ).vector;
1574 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar *
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1575 *w = gsl_vector_uchar_const_view_array( v,
n ).vector;
1588 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1589 *w = gsl_vector_uchar_const_view_array_with_stride( base, stride,
n ).vector;
1601 static vector_uchar const view_array(
unsigned char const* v,
size_t n ){
1602 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1603 *w = gsl_vector_uchar_const_view_array( v,
n ).vector;
1617 static vector_uchar
const view_array_with_stride(
unsigned char const* base,
size_t stride,
size_t n ){
1618 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1619 *w = gsl_vector_uchar_const_view_array_with_stride( base, stride,
n ).vector;
1620 return vector_uchar( w );
1632 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1633 *w = gsl_vector_uchar_subvector(
get(), i,
n ).vector;
1646 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1647 *w = gsl_vector_uchar_subvector_with_stride(
get(), i, stride,
n ).vector;
1659 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1660 *w = gsl_vector_uchar_const_subvector(
get(), i,
n ).vector;
1673 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1674 *w = gsl_vector_uchar_const_subvector_with_stride(
get(), i, stride,
n ).vector;
1687 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1688 *w = gsl_vector_uchar_const_subvector(
get(), i,
n ).vector;
1702 vector_uchar
const subvector_with_stride(
size_t i,
size_t stride,
size_t n )
const {
1703 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1704 *w = gsl_vector_uchar_const_subvector_with_stride(
get(), i, stride,
n ).vector;
1705 return vector_uchar( w );
1716 template<
typename ARRAY>
1722 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1723 *w = gsl_vector_uchar_view_array( v.data(),
n ).vector;
1735 template<
typename ARRAY>
1738 n = base.size()/stride;
1739 if((
n-1)*stride > base.size())
1741 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1742 *w = gsl_vector_uchar_view_array_with_stride( base.data(), stride,
n ).vector;
1753 template<
typename ARRAY>
1759 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar *
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1760 *w = gsl_vector_uchar_const_view_array( v.data(),
n ).vector;
1772 template<
typename ARRAY>
1775 n = base.size()/stride;
1776 if((
n-1)*stride > base.size())
1778 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1779 *w = gsl_vector_uchar_const_view_array_with_stride( base.data(), stride,
n ).vector;
1791 template<
typename ARRAY>
1792 static vector_uchar const view_array( ARRAY
const& v,
size_t n=0 ){
1797 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1798 *w = gsl_vector_uchar_const_view_array( v.data(),
n ).vector;
1812 template<
typename ARRAY>
1813 static vector_uchar
const view_array_with_stride( ARRAY
const& base,
size_t stride,
size_t n ){
1815 n = base.size()/stride;
1816 if((
n-1)*stride > base.size())
1818 gsl_vector_uchar* w =
static_cast<gsl_vector_uchar*
>( malloc(
sizeof( gsl_vector_uchar ) ) );
1819 *w = gsl_vector_uchar_const_view_array_with_stride( base.data(), stride,
n ).vector;
1820 return vector_uchar( w );
This class handles vector_uchars as shared handles.
@ GSL_EDOM
input domain error, e.g sqrt(-1)
@ GSL_EFAILED
generic failure
@ GSL_EINVAL
invalid argument supplied by user
@ GSL_EBADLEN
matrix, vector lengths are not conformant
@ GSL_EFAULT
invalid pointer
This class handles matrix_uchar objects as shared handles.
A class template for the const iterators.
const_iterator_t< reverse_t > & operator=(const_iterator_t< reverse_t > const &i)
We can assign one output iterator from another.
const_iterator_t< reverse_t > & operator--()
The prefix – operator.
const_iterator_t< reverse_t > operator++(int)
The postfix ++ operator.
bool operator!=(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
const_iterator_t< reverse_t > operator--(int)
The postfix – operator.
const_iterator_t< reverse_t > & operator+=(difference_type const n)
The += operator.
bool operator==(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
const_iterator_t()
The default constructor.
const_iterator_t< reverse_t > & operator++()
The prefix ++ operator.
bool operator==(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
bool operator<(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
bool operator<(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
const_iterator_t< reverse_t > & operator-=(difference_type const n)
The -= operator.
bool operator!=(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
const_iterator_t< reverse_t > operator+(difference_type const n) const
The + operator.
const_iterator_t< reverse_t > operator-(difference_type const n) const
The - operator: subtract distance from iterator.
const_iterator_t(vector_uchar const *v, difference_type position)
This constructor allows vector_uchar to create non-default iterators.
iterator_base< vector_ucharconst, unsignedchar, reverse_t >::difference_type difference_type
Difference type.
difference_type operator-(iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
const_iterator_t(iterator_t< reverse_t > const &i)
A copy constructor.
difference_type operator-(const_iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
The container must have iterator types.
iterator_base(container *v, difference_type position)
This constructor allows vector_uchar to create non-default iterators.
value_type & reference
An iterator must have a reference type.
reference operator[](difference_type const n) const
Get element at i + n by reference ([] operator).
reference operator*() const
Dereference the pointer.
unsigned char value_type
An iterator must have a value type.
value_type * pointer
An iterator must have a pointer typea.
bool operator<(iterator_base< container, content, reverse_t > const &i) const
The < operator is used to compare iterators.
iterator_base()
The iterator is default constructible.
pointer operator->() const
Dereference the pointer.
difference_type position
Mark position of iterator within vector_uchar.
container * v
Store a pointer to a vector_uchar we can iterate over: 0 if no vector_uchar.
void shift(difference_type const n)
Shift iterator n places.
std::random_access_iterator_tag iterator_category
An iterator must have an iterator category.
void decrement()
Decrement the iterator.
void increment()
Increment the iterator.
ptrdiff_t difference_type
An iterator must have a difference_type.
bool operator==(iterator_base< container, content, reverse_t > const &i) const
The == operator.
difference_type operator-(iterator_base< container, content, reverse_t > const &i) const
The - operator: find distance between two iterators.
bool operator!=(iterator_base< container, content, reverse_t > const &i) const
The != operator.
A class template for the two non-const iterators.
iterator_t< reverse_t > & operator=(iterator_t< reverse_t > const &i)
We can assign one output iterator from another.
iterator_t< reverse_t > operator--(int)
The postfix – operator.
iterator_t()
The default constructor.
iterator_t< reverse_t > & operator+=(difference_type const n)
The += operator.
iterator_t< reverse_t > & operator-=(difference_type const n)
The -= operator.
iterator_t(vector_uchar *v, difference_type position)
This constructor allows vector_uchar to create non-default iterators.
bool operator<(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
iterator_t< reverse_t > & operator++()
The prefix ++ operator.
iterator_t< reverse_t > operator-(difference_type const n) const
The - operator: subtract distance from iterator.
bool operator!=(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
iterator_base< vector_uchar, unsignedchar, reverse_t >::difference_type difference_type
Difference type.
difference_type operator-(const_iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
iterator_t< reverse_t > operator++(int)
The postfix ++ operator.
bool operator==(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
difference_type operator-(iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
iterator_t< reverse_t > operator+(difference_type const n) const
The + operator.
iterator_t< reverse_t > & operator--()
The prefix – operator.
This class handles vector_uchar objects as shared handles.
const_reverse_iterator rbegin() const
Get iterator pointing to first vector_uchar element.
static vector_uchar alloc_col_from_matrix(matrix_uchar &m, size_t const j)
C++ version of gsl_vector_uchar_alloc_col_from_matrix().
const_iterator end() const
Get iterator pointing beyond last vector_uchar element.
unsigned char const * data() const
Give access to the data block_uchar.
size_t size_type
A container must have a size_type.
void set(size_t const i, unsigned char x)
C++ version of gsl_vector_uchar_set().
unsigned char get(size_t const i) const
C++ version of gsl_vector_uchar_get().
void set_all(unsigned char x)
C++ version of gsl_vector_uchar_set_all().
bool operator>=(vector_uchar const &v) const
A container needs to define an ordering for sorting.
iterator_t< true > reverse_iterator
The reverse_iterator type.
vector_uchar()
The default constructor is only really useful for assigning to.
~vector_uchar()
The destructor only deletes the pointers if count reaches zero.
int fread(FILE *stream)
C++ version of gsl_vector_uchar_fread().
vector_uchar(V &v, size_t const stride=1)
Construct from an object that implements data() and size().
vector_uchar subvector_with_stride(size_t i, size_t stride, size_t n)
C++ version of gsl_vector_uchar_subvector_with_stride().
const_iterator_t< true > const_reverse_iterator
The const_reverse_t type.
int isnull() const
C++ version of gsl_vector_uchar_isnull().
int sub(vector_uchar const &b)
C++ version of gsl_vector_uchar_sub().
vector_uchar(vector_uchar const &v)
The copy constructor.
unsigned char value_type
A container must have a value_type.
void minmax(unsigned char *min_out, unsigned char *max_out) const
C++ version of gsl_vector_uchar_minmax().
size_t * count
The shared reference count.
vector_uchar & operator=(vector_uchar &&v)
Move operator.
void wrap_gsl_vector_uchar_without_ownership(gsl_vector_uchar *v)
This function is intended mainly for internal use.
size_type size() const
The size (number of elements) of the vector_uchar.
int isnonneg() const
C++ version of gsl_vector_uchar_isnonneg().
int scale(unsigned char const x)
C++ version of gsl_vector_uchar_scale().
static vector_uchar const const_view_array_with_stride(unsigned char const *base, size_t stride, size_t n)
C++ version of gsl_vector_uchar_const_view_array_with_stride().
iterator begin()
Get iterator pointing to first vector_uchar element.
size_t min_index() const
C++ version of gsl_vector_uchar_min_index().
static vector_uchar view_array(unsigned char *v, size_t n)
C++ version of gsl_vector_uchar_view_array().
bool operator!=(vector_uchar const &v) const
Two vector_uchar objects are different equal if their elements are not identical.
const_iterator_t< false > const_iterator
The const_iterator type.
reverse_iterator rend()
Get iterator pointing beyond last vector_uchar element.
void reset()
Stop sharing ownership of the shared pointer.
static vector_uchar const const_view_array(unsigned char const *v, size_t n)
C++ version of gsl_vector_uchar _const_view_array().
vector_uchar const const_subvector_with_stride(size_t i, size_t stride, size_t n) const
C++ version of gsl_vector_uchar_const_subvector_with_stride().
static vector_uchar alloc_row_from_matrix(matrix_uchar &m, size_t const i)
C++ version of gsl_vector_uchar_alloc_row_from_matrix().
vector_uchar clone() const
The clone function.
void minmax(unsigned char &min_out, unsigned char &max_out) const
C++ version of gsl_vector_uchar_minmax().
bool operator<(vector_uchar const &v) const
A container needs to define an ordering for sorting.
int mul(vector_uchar const &b)
C++ version of gsl_vector_uchar_mul().
int add(vector_uchar const &b)
C++ version of gsl_vector_uchar_add().
vector_uchar & operator=(vector_uchar const &v)
The assignment operator.
unsigned char const & operator[](size_t const n) const
Get element at position n by reference ([] operator).
static vector_uchar view_array(ARRAY &v, size_t n=0)
C++ version of gsl_vector_uchar_view_array().
void set_zero()
C++ version of gsl_vector_uchar_set_zero().
iterator end()
Get iterator pointing beyond last vector_uchar element.
void swap(vector_uchar &v)
Swap two vector_uchar objects.
bool owns_data
Used to allow a vector that does not own its data.
int swap_elements(size_t const i, size_t const j)
C++ version of gsl_vector_uchar_swap_elements().
bool operator<=(vector_uchar const &v) const
A container needs to define an ordering for sorting.
static vector_uchar const const_view_array_with_stride(ARRAY const &base, size_t stride, size_t n=0)
C++ version of gsl_vector_uchar_const_view_array_with_stride().
const_reverse_iterator rend() const
Get iterator pointing beyond last vector_uchar element.
reverse_iterator rbegin()
Get iterator pointing to first vector_uchar element.
unsigned char max() const
C++ version of gsl_vector_uchar_max().
int axpby(unsigned char const alpha, vector_uchar const &x, unsigned char const beta)
C++ version of gsl_vector_uchar_axpby().
const_iterator::difference_type difference_type
A container must have a difference_type.
vector_uchar const const_subvector(size_t i, size_t n) const
C++ version of gsl_vector_uchar_const_subvector().
bool unique() const
Find if this is the only object sharing the gsl_vector_uchar.
value_type * pointer
A container must have a pointer type.
vector_uchar(size_t const n)
The default constructor creates a new vector_uchar with n elements.
bool operator==(vector_uchar const &v) const
Two vector_uchar objects are identically equal if their elements are identical.
size_t max_index() const
C++ version of gsl_vector_uchar_max_index().
int ispos() const
C++ version of gsl_vector_uchar_ispos().
static vector_uchar const const_view_array(ARRAY const &v, size_t n=0)
C++ version of gsl_vector_uchar _const_view_array().
vector_uchar subvector(size_t i, size_t n)
C++ version of gsl_vector_uchar_subvector().
size_t use_count() const
Find how many vector_uchar objects share this pointer.
unsigned char * data()
Give access to the data block_uchar.
vector_uchar(vector_uchar &v, size_t const offset, size_t const n, size_t const stride=1)
C++ version of gsl_vector_uchar_alloc_from_vector().
bool empty() const
Find if the vector_uchar is empty.
int set_basis(size_t i)
C++ version of gsl_vector_uchar_set_basis().
int fscanf(FILE *stream)
C++ version of gsl_vector_uchar_fscanf().
int fwrite(FILE *stream) const
C++ version of gsl_vector_uchar_fwrite().
int memcpy(vector_uchar const &src)
C++ version of gsl_vector_uchar_memcpy().
vector_uchar(block_uchar &b, size_t const offset, size_t const n, size_t const stride=1)
C++ version of gsl_vector_uchar_alloc_from_block().
vector_uchar(std::initializer_list< unsigned char > initializer_list)
Could construct from a std::initializer_list in C++11.
int div(vector_uchar const &b)
C++ version of gsl_vector_uchar_div().
size_type max_size() const
The max size (number of elements) of the vector_uchar.
gsl_vector_uchar * get()
Get the gsl_vector_uchar.
static vector_uchar view_array_with_stride(unsigned char *base, size_t stride, size_t n)
C++ version of gsl_vector_uchar_view_array_with_stride().
gsl_vector_uchar * ccgsl_pointer
The shared pointer.
vector_uchar(vector_uchar &v)
The copy constructor.
const_iterator begin() const
Get iterator pointing to first vector_uchar element.
iterator_t< false > iterator
The iterator type.
int isneg() const
C++ version of gsl_vector_uchar_isneg().
static vector_uchar calloc(size_t const n)
C++ version of gsl_vector_uchar_calloc().
unsigned char * ptr(size_t const i)
C++ version of gsl_vector_uchar_ptr().
static vector_uchar view_array_with_stride(ARRAY &base, size_t stride, size_t n=0)
C++ version of gsl_vector_uchar_view_array_with_stride().
bool operator>(vector_uchar const &v) const
A container needs to define an ordering for sorting.
unsigned char const * const_ptr(size_t const i) const
C++ version of gsl_vector_uchar_const_ptr().
unsigned char sum(vector_uchar const &a) const
C++ version of gsl_vector_uchar_sum().
value_type & reference
A container must have a reference type.
int add_constant(unsigned char const x)
C++ version of gsl_vector_uchar_add_constant().
gsl_vector_uchar const * get() const
Get the gsl_vector_uchar.
int fprintf(FILE *stream, char const *format) const
C++ version of gsl_vector_uchar_fprintf().
void minmax_index(size_t *imin, size_t *imax) const
C++ version of gsl_vector_uchar_minmax_index().
vector_uchar(vector_uchar &&v)
Move constructor.
unsigned char min() const
C++ version of gsl_vector_uchar_min().
int reverse()
C++ version of gsl_vector_uchar_reverse().
value_type const & const_reference
A container must have a constant reference type.
unsigned char & operator[](size_t const n)
Get element at position n by reference ([] operator).
value_type const * const_pointer
A container must have a constant pointer type.
gsl_vector * ccgsl_pointer
The shared pointer.
size_t size(series const &cs)
C++ version of gsl_cheb_size().
int min(movstat::end_t const endtype, vector const &x, vector &y, workspace &w)
C++ version of gsl_movstat_min().
vector position(workspace const &w)
C++ version of gsl_multifit_nlinear_position().
double beta(rng const &r, double const a, double const b)
C++ version of gsl_ran_beta().
double get(quantile_workspace &w)
C++ version of gsl_rstat_quantile_get().
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
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().
gsl_sf_result result
Typedef for gsl_sf_result.
The gsl package creates an interface to the GNU Scientific Library for C++.