cube_ptrs_outcheck< glue_type, GlueCube< T1, T2, glue_type > > Struct Template Reference
[Glue_cube_metaprog]

#include <glue_cube_metaprog.hpp>

List of all members.

Public Types

typedef T1::elem_type elem_type

Static Public Member Functions

static void get_ptrs (const Cube< elem_type > **ptrs, bool *del, const GlueCube< T1, T2, glue_type > &X, const Cube< elem_type > *out_ptr)

Static Public Attributes

static const u32 num = 1 + cube_ptrs_outcheck<glue_type, T1>::num

Detailed Description

template<typename glue_type, typename T1, typename T2>
struct cube_ptrs_outcheck< glue_type, GlueCube< T1, T2, glue_type > >

Definition at line 199 of file glue_cube_metaprog.hpp.


Member Typedef Documentation

template<typename glue_type , typename T1 , typename T2 >
typedef T1::elem_type cube_ptrs_outcheck< glue_type, GlueCube< T1, T2, glue_type > >::elem_type

Definition at line 201 of file glue_cube_metaprog.hpp.


Member Function Documentation

template<typename glue_type , typename T1 , typename T2 >
static void cube_ptrs_outcheck< glue_type, GlueCube< T1, T2, glue_type > >::get_ptrs ( const Cube< elem_type > **  ptrs,
bool *  del,
const GlueCube< T1, T2, glue_type > &  X,
const Cube< elem_type > *  out_ptr 
) [inline, static]

Definition at line 209 of file glue_cube_metaprog.hpp.

References GlueCube< T1, T2, glue_type >::A, GlueCube< T1, T2, glue_type >::B, cube_ptrs_outcheck< glue_type, T1 >::get_ptrs(), and cube_ptrs_outcheck< glue_type, T1 >::num.

00215     {
00216     isnt_same_type<typename T1::elem_type, typename T2::elem_type>::check();
00217     
00218     cube_ptrs_outcheck<glue_type, T1>::get_ptrs(ptrs, del, X.A, out_ptr);
00219     
00220     const bool same_ptr =
00221       (
00222       is_Cube<T2>::value ?
00223         (
00224         (out_ptr == reinterpret_cast<const Cube<elem_type>*>(&X.B)) ?
00225           true
00226         :
00227           false
00228         )
00229       :
00230         false
00231       );
00232     
00233     
00234     ptrs[num]  = 
00235       (
00236       same_ptr ?
00237         new Cube<elem_type>(X.B)
00238       :
00239         (
00240         is_Cube<T2>::value ?
00241           reinterpret_cast<const Cube<elem_type>*>(&X.B)
00242         :
00243           new Cube<elem_type>(X.B)
00244         )
00245       );
00246     
00247     
00248     del[num] = 
00249       (
00250       same_ptr ?
00251         true
00252       :
00253         (
00254         is_Cube<T2>::value ?
00255           false
00256         :
00257           true
00258         )
00259       );
00260     }


Member Data Documentation

template<typename glue_type , typename T1 , typename T2 >
const u32 cube_ptrs_outcheck< glue_type, GlueCube< T1, T2, glue_type > >::num = 1 + cube_ptrs_outcheck<glue_type, T1>::num [static]

Definition at line 203 of file glue_cube_metaprog.hpp.