LCOV - code coverage report
Current view: top level - HLT/TPCLib/tracking-ca - MemoryAssignmentHelpers.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 16 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 26 0.0 %

          Line data    Source code
       1             : // **************************************************************************
       2             : // * This file is property of and copyright by the ALICE HLT Project        *
       3             : // * All rights reserved.                                                   *
       4             : // *                                                                        *
       5             : // * Primary Authors:                                                       *
       6             : // *     Copyright 2009       Matthias Kretz <kretz@kde.org>                *
       7             : // *                                                                        *
       8             : // * Permission to use, copy, modify and distribute this software and its   *
       9             : // * documentation strictly for non-commercial purposes is hereby granted   *
      10             : // * without fee, provided that the above copyright notice appears in all   *
      11             : // * copies and that both the copyright notice and this permission notice   *
      12             : // * appear in the supporting documentation. The authors make no claims     *
      13             : // * about the suitability of this software for any purpose. It is          *
      14             : // * provided "as is" without express or implied warranty.                  *
      15             : // **************************************************************************
      16             : 
      17             : #ifndef MEMORYASSIGNMENTHELPERS_H
      18             : #define MEMORYASSIGNMENTHELPERS_H
      19             : 
      20             : #ifndef assert
      21             : #include <assert.h>
      22             : #endif //!assert
      23             : 
      24             : template<unsigned int X>
      25             : GPUhd() static inline void AlignTo( char *&mem )
      26             : {
      27             :   STATIC_ASSERT( ( X & ( X - 1 ) ) == 0, X_needs_to_be_a_multiple_of_2 );
      28           0 :   const int offset = reinterpret_cast<unsigned long long>( mem ) & ( X - 1 );
      29           0 :   if ( offset > 0 ) {
      30           0 :     mem += ( X - offset );
      31           0 :   }
      32             :   //assert( ( reinterpret_cast<unsigned long>( mem ) & ( X - 1 ) ) == 0 );
      33           0 : }
      34             : 
      35             : template<unsigned int X>
      36             : GPUhd() static inline unsigned int NextMultipleOf( unsigned int value )
      37             : {
      38             :   STATIC_ASSERT( ( X & ( X - 1 ) ) == 0, X_needs_to_be_a_multiple_of_2 );
      39           0 :   const int offset = value & ( X - 1 );
      40           0 :   if ( offset > 0 ) {
      41           0 :     return value + X - offset;
      42             :   }
      43           0 :   return value;
      44           0 : }
      45             : 
      46             : template<typename T, unsigned int Alignment> static T *AssignMemory( char *&mem, unsigned int size )
      47             : {
      48             :   STATIC_ASSERT( ( Alignment & ( Alignment - 1 ) ) == 0, Alignment_needs_to_be_a_multiple_of_2 );
      49             :   AlignTo<Alignment> ( mem );
      50             :   T *r = reinterpret_cast<T *>( mem );
      51             :   mem += size * sizeof( T );
      52             :   return r;
      53             : }
      54             : 
      55             : template<typename T, unsigned int Alignment> static inline T *AssignMemory( char *&mem, unsigned int stride, unsigned int count )
      56             : {
      57             :   assert( 0 == ( stride & ( Alignment - 1 ) ) );
      58             :   return AssignMemory<T, Alignment>( mem, stride * count );
      59             : }
      60             : 
      61             : template<typename T, unsigned int Alignment> GPUhd() static T *_assignMemory( char *&mem, unsigned int size )
      62             : {
      63             :   STATIC_ASSERT( ( Alignment & ( Alignment - 1 ) ) == 0, Alignment_needs_to_be_a_multiple_of_2 );
      64           0 :   AlignTo<Alignment < sizeof( HLTCA_GPU_ROWALIGNMENT ) ? sizeof( HLTCA_GPU_ROWALIGNMENT ) : Alignment>( mem );
      65           0 :   T *r = reinterpret_cast<T *>( mem );
      66           0 :   mem += size * sizeof( T );
      67           0 :   return r;
      68             : }
      69             : 
      70             : template<typename T> GPUhd() static inline void AssignMemory( T *&dst, char *&mem, int count )
      71             : {
      72           0 :         dst = _assignMemory < T, ( sizeof( T ) & ( sizeof( T ) - 1 ) ) == 0 && sizeof( T ) <= 16 ? sizeof( T ) : sizeof( void * ) > ( mem, count );
      73           0 : }
      74             : 
      75             : #endif // MEMORYASSIGNMENTHELPERS_H

Generated by: LCOV version 1.11