@ -3,8 +3,6 @@
// General includes.
// General includes.
# include "cl_sysdep.h"
# include "cl_sysdep.h"
CL_PROVIDE ( cl_SV_ringelt )
// Specification.
// Specification.
# include "cln/SV_ringelt.h"
# include "cln/SV_ringelt.h"
@ -22,16 +20,22 @@ static void cl_svector_ringelt_destructor (cl_heap* pointer)
# endif
# endif
}
}
cl_class cl_class_svector_ringelt = {
cl_svector_ringelt_destructor ,
0
} ;
// XXX: this ought to be static const, but it would be impossible to
// set the printing function (see cl_SV_ringelt_debug.cc)
cl_class & cl_class_svector_ringelt ( )
{
static cl_class instance = {
cl_svector_ringelt_destructor ,
0
} ;
return instance ;
}
cl_heap_SV_ringelt * cl_make_heap_SV_ringelt_uninit ( uintC len )
cl_heap_SV_ringelt * cl_make_heap_SV_ringelt_uninit ( uintC len )
{
{
var cl_heap_SV_ringelt * hv = ( cl_heap_SV_ringelt * ) malloc_hook ( sizeof ( cl_heap_SV_ringelt ) + sizeof ( _cl_ring_element ) * len ) ;
var cl_heap_SV_ringelt * hv = ( cl_heap_SV_ringelt * ) malloc_hook ( sizeof ( cl_heap_SV_ringelt ) + sizeof ( _cl_ring_element ) * len ) ;
hv - > refcount = 1 ;
hv - > refcount = 1 ;
hv - > type = & cl_class_svector_ringelt ;
hv - > type = & cl_class_svector_ringelt ( ) ;
new ( & hv - > v ) cl_SV_inner < _cl_ring_element > ( len ) ;
new ( & hv - > v ) cl_SV_inner < _cl_ring_element > ( len ) ;
// Have to fill hv->v[i] (0 <= i < len) yourself.
// Have to fill hv->v[i] (0 <= i < len) yourself.
return hv ;
return hv ;
@ -41,7 +45,7 @@ cl_heap_SV_ringelt* cl_make_heap_SV_ringelt (uintC len)
{
{
var cl_heap_SV_ringelt * hv = ( cl_heap_SV_ringelt * ) malloc_hook ( sizeof ( cl_heap_SV_ringelt ) + sizeof ( _cl_ring_element ) * len ) ;
var cl_heap_SV_ringelt * hv = ( cl_heap_SV_ringelt * ) malloc_hook ( sizeof ( cl_heap_SV_ringelt ) + sizeof ( _cl_ring_element ) * len ) ;
hv - > refcount = 1 ;
hv - > refcount = 1 ;
hv - > type = & cl_class_svector_ringelt ;
hv - > type = & cl_class_svector_ringelt ( ) ;
new ( & hv - > v ) cl_SV_inner < _cl_ring_element > ( len ) ;
new ( & hv - > v ) cl_SV_inner < _cl_ring_element > ( len ) ;
for ( var uintC i = 0 ; i < len ; i + + )
for ( var uintC i = 0 ; i < len ; i + + )
init1 ( _cl_ring_element , hv - > v [ i ] ) ( ) ;
init1 ( _cl_ring_element , hv - > v [ i ] ) ( ) ;
@ -49,8 +53,22 @@ cl_heap_SV_ringelt* cl_make_heap_SV_ringelt (uintC len)
}
}
// An empty vector.
// An empty vector.
const cl_SV_ringelt cl_null_SV_ringelt = cl_SV_ringelt ( ( uintC ) 0 ) ;
const cl_SV_ringelt cl_null_SV_ringelt = cl_null_SV_ringelt ;
int cl_SV_ringelt_init_helper : : count = 0 ;
cl_SV_ringelt_init_helper : : cl_SV_ringelt_init_helper ( )
{
if ( count + + = = 0 )
new ( ( void * ) & cl_null_SV_ringelt ) cl_SV_ringelt ( ( uintC ) 0 ) ;
}
cl_SV_ringelt_init_helper : : ~ cl_SV_ringelt_init_helper ( )
{
if ( - - count = = 0 ) {
// Nothing to clean up here
}
}
} // namespace cln
} // namespace cln
CL_PROVIDE_END ( cl_SV_ringelt )