libflame  revision_anchor
FLA_macro_ptr_defs.h
Go to the documentation of this file.
00001 /*
00002 
00003     Copyright (C) 2014, The University of Texas at Austin
00004 
00005     This file is part of libflame and is available under the 3-Clause
00006     BSD license, which can be found in the LICENSE file at the top-level
00007     directory, or at http://opensource.org/licenses/BSD-3-Clause
00008 
00009 */
00010 
00011 #include "FLA_type_defs.h"
00012 
00013 // --- Pointer-accessing FLAME macro definitions ------------------------------------
00014 
00015 #define FLA_CONSTANT_I_OFFSET  0
00016 #define FLA_CONSTANT_S_OFFSET  ( sizeof(double) )
00017 #define FLA_CONSTANT_D_OFFSET  ( sizeof(double) + sizeof(double) )
00018 #define FLA_CONSTANT_C_OFFSET  ( sizeof(double) + sizeof(double) + sizeof(double) )
00019 #define FLA_CONSTANT_Z_OFFSET  ( sizeof(double) + sizeof(double) + sizeof(double) + sizeof( scomplex ) )
00020 #define FLA_CONSTANT_SIZE      ( sizeof(double) + sizeof(double) + sizeof(double) + sizeof( scomplex ) + sizeof( dcomplex ) )
00021 
00022 #define FLA_INT_PTR( x ) \
00023   ( ((x).base)->datatype == FLA_CONSTANT ? \
00024     ( ( int * )      ( ( ( char * )     ((x).base)->buffer ) + FLA_CONSTANT_I_OFFSET             ) ) : \
00025                      ( ( ( int * )      ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \
00026                                                                ( size_t ) (x).offm * ((x).base)->rs ) )
00027 
00028 #define FLA_FLOAT_PTR( x ) \
00029   ( ((x).base)->datatype == FLA_CONSTANT ? \
00030     ( ( float * )    ( ( ( char * )     ((x).base)->buffer ) + FLA_CONSTANT_S_OFFSET             ) ) : \
00031                      ( ( ( float * )    ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \
00032                                                                ( size_t ) (x).offm * ((x).base)->rs ) )
00033 
00034 #define FLA_DOUBLE_PTR( x ) \
00035   ( ((x).base)->datatype == FLA_CONSTANT ? \
00036     ( ( double * )   ( ( ( char * )     ((x).base)->buffer ) + FLA_CONSTANT_D_OFFSET             ) ) : \
00037                      ( ( ( double * )   ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \
00038                                                                ( size_t ) (x).offm * ((x).base)->rs ) )
00039 
00040 #define FLA_COMPLEX_PTR( x ) \
00041   ( ((x).base)->datatype == FLA_CONSTANT ? \
00042     ( ( scomplex * ) ( ( ( char * )     ((x).base)->buffer ) + FLA_CONSTANT_C_OFFSET             ) ) : \
00043                      ( ( ( scomplex * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \
00044                                                                ( size_t ) (x).offm * ((x).base)->rs ) )
00045 
00046 #define FLA_DOUBLE_COMPLEX_PTR( x ) \
00047   ( ((x).base)->datatype == FLA_CONSTANT ? \
00048     ( ( dcomplex * ) ( ( ( char * )     ((x).base)->buffer ) + FLA_CONSTANT_Z_OFFSET             ) ) : \
00049                      ( ( ( dcomplex * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \
00050                                                                ( size_t ) (x).offm * ((x).base)->rs ) )
00051