23#include<gsl/gsl_bst.h>
48 explicit workspace( gsl_bst_type
const* T, gsl_bst_allocator
const* allocator,
49 gsl_bst_cmp_function* compare,
void* params ){
50 ccgsl_pointer = gsl_bst_alloc( T, allocator, compare, params );
52 try { count =
new size_t; }
catch( std::bad_alloc& e ){
54 gsl_bst_free( ccgsl_pointer );
65 explicit workspace( gsl_bst_workspace* v ){
76 workspace( workspace
const& v ){ ccgsl_pointer = v.ccgsl_pointer;
77 count = v.count;
if( count != 0 ) ++*count; }
83 workspace& operator=( workspace
const& v ){
85 if( count == 0 or --*count == 0 ){
86 if( ccgsl_pointer != 0 ) gsl_bst_free( ccgsl_pointer );
89 ccgsl_pointer = v.ccgsl_pointer; count = v.count;
if( count != 0 ) ++*count;
return *
this;
96 if( count == 0 or --*count == 0 ){
98 if( ccgsl_pointer != 0 ) gsl_bst_free( ccgsl_pointer );
102#ifdef __GXX_EXPERIMENTAL_CXX0X__
107 workspace( workspace&& v ) : ccgsl_pointer( v.ccgsl_pointer ), count( nullptr ){
108 std::swap( count, v.count );
109 v.ccgsl_pointer =
nullptr;
116 workspace& operator=( workspace&& v ){
117 workspace( std::move( v ) ).swap( *
this );
129 bool operator==( workspace
const& v )
const {
return ccgsl_pointer == v.ccgsl_pointer; }
137 bool operator!=( workspace
const& v )
const {
return not operator==( v ); }
149 bool operator<( workspace
const& v )
const {
return ccgsl_pointer < v.ccgsl_pointer; }
159 bool operator>( workspace
const& v )
const {
return ccgsl_pointer > v.ccgsl_pointer; }
169 bool operator<=( workspace
const& v )
const {
return ccgsl_pointer <= v.ccgsl_pointer; }
179 bool operator>=( workspace
const& v )
const {
return ccgsl_pointer >= v.ccgsl_pointer; }
184 bool empty()
const {
return ccgsl_pointer == 0; }
191 void swap( workspace& v ){
192 std::swap( ccgsl_pointer, v.ccgsl_pointer );
193 std::swap( count, v.count );
199 gsl_bst_workspace* ccgsl_pointer;
210 gsl_bst_workspace*
get()
const {
return ccgsl_pointer; }
216 bool unique()
const {
return count != 0 and *count == 1; }
221 size_t use_count()
const {
return count == 0 ? 0 : *count; }
227#ifdef __GXX_EXPERIMENTAL_CXX0X__
230 operator bool()
const {
return ccgsl_pointer != 0; }
237 inline int empty( workspace& w ){
return gsl_bst_empty( w.get() ); }
243 inline void* insert(
void* item, workspace& w ){
return gsl_bst_insert( item, w.get() ); }
249 inline void* find(
void const* item, workspace& w ){
return gsl_bst_find( item, w.get() ); }
255 inline void* remove(
void const* item, workspace& w ){
256 return gsl_bst_remove( item, w.get() ); }
262 inline size_t nodes( workspace& w ){
return gsl_bst_nodes( w.get() ); }
268 inline size_t node_size( workspace& w ){
return gsl_bst_node_size( w.get() ); }
274 inline char const*
name( workspace& w ){
return gsl_bst_name( w.get() ); }
281 inline int trav_init( gsl_bst_trav* trav, workspace& w ){
282 return gsl_bst_trav_init( trav, w.get() ); }
288 inline void* trav_first( gsl_bst_trav* trav, workspace& w ){
289 return gsl_bst_trav_first( trav, w.get() ); }
295 inline void* trav_last( gsl_bst_trav* trav, workspace& w ){
296 return gsl_bst_trav_last( trav, w.get() ); }
303 inline void* trav_find(
void const* item, gsl_bst_trav* trav, workspace& w ){
304 return gsl_bst_trav_find( item, trav, w.get() ); }
311 inline void* trav_insert(
void* item, gsl_bst_trav* trav, workspace& w ){
312 return gsl_bst_trav_insert( item, trav, w.get() ); }
318 inline void* trav_copy( gsl_bst_trav* dest, gsl_bst_trav
const* src ){
319 return gsl_bst_trav_copy( dest, src ); }
324 inline void* trav_next( gsl_bst_trav* trav ){
return gsl_bst_trav_next( trav ); }
329 inline void* trav_prev( gsl_bst_trav* trav ){
return gsl_bst_trav_prev( trav ); }
334 inline void* trav_cur( gsl_bst_trav
const* trav ){
return gsl_bst_trav_cur( trav ); }
340 inline void* trav_replace( gsl_bst_trav* trav,
void* new_item ){
341 return gsl_bst_trav_replace( trav, new_item ); }
char const * name(workspace const &w)
C++ version of gsl_multifit_nlinear_name().
double get(quantile_workspace &w)
C++ version of gsl_rstat_quantile_get().
The gsl package creates an interface to the GNU Scientific Library for C++.