LCOV - code coverage report
Current view: top level - HLT/BASE/HOMER - AliHLTHOMERData.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 73 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 24 0.0 %

          Line data    Source code
       1             : // XEMacs -*-C++-*-
       2             : #ifndef ALIHLTHOMERDATA_H
       3             : #define ALIHLTHOMERDATA_H
       4             : 
       5             : //************************************************************************
       6             : //*
       7             : //*
       8             : //* This file is property of and copyright by the Technical Computer
       9             : //* Science Group, Kirchhoff Institute for Physics, Ruprecht-Karls-
      10             : //* University, Heidelberg, Germany, 2001
      11             : //* This file has been written by Timm Morten Steinbeck, 
      12             : //* timm@kip.uni-heidelberg.de
      13             : //*
      14             : //*
      15             : //* See the file license.txt for details regarding usage, modification,
      16             : //* distribution and warranty.
      17             : //* Important: This file is provided without any warranty, including
      18             : //* fitness for any particular purpose.
      19             : //*
      20             : //*
      21             : //* Newer versions of this file's package will be made available from 
      22             : //* http://web.kip.uni-heidelberg.de/Hardwinf/L3/ 
      23             : //* or the corresponding page of the Heidelberg Alice Level 3 group.
      24             : //*
      25             : //************************************************************************/
      26             : 
      27             : /*
      28             : ***************************************************************************
      29             : **
      30             : ** $Author$ - Initial Version by Timm Morten Steinbeck
      31             : **
      32             : ** $Id$ 
      33             : **
      34             : ***************************************************************************
      35             : */
      36             : 
      37             : #ifdef USE_ROOT
      38             : #include "Rtypes.h"
      39             : #endif
      40             : #include <limits.h>
      41             : 
      42             : 
      43             : // Determine the sizes of the different integer type
      44             : // homer_uint32, homer_uint64
      45             : #if !defined(USE_ROOT) && !defined(__CINT__)
      46             : // First homer_uint32
      47             : #if USHRT_MAX==4294967295
      48             : typedef unsigned short homer_uint32;
      49             : #else // USHRT_MAX==4294967295
      50             : 
      51             : #if UINT_MAX==4294967295
      52             : typedef unsigned int homer_uint32;
      53             : #else // UINT_MAX==4294967295
      54             : 
      55             : #if ULONG_MAX==4294967295l
      56             : typedef unsigned long homer_uint32;
      57             : #else // ULONG_MAX==4294967295l
      58             : 
      59             : #error Could not typedef homer_uint32
      60             : 
      61             : #endif // ULONG_MAX==4294967295l
      62             : 
      63             : #endif // UINT_MAX==4294967295
      64             : 
      65             : #endif // USHRT_MAX==4294967295
      66             : 
      67             : // Then homer_uint16
      68             : #if USHRT_MAX==65535
      69             : typedef unsigned short homer_uint16;
      70             : #else // USHRT_MAX==65535
      71             : 
      72             : #if UINT_MAX==65535
      73             : typedef unsigned int homer_uint16;
      74             : #else // UINT_MAX==65535
      75             : 
      76             : #if ULONG_MAX==65535
      77             : typedef unsigned long homer_uint16;
      78             : #else // ULONG_MAX==65535
      79             : 
      80             : #error Could not typedef homer_uint16
      81             : 
      82             : #endif // ULONG_MAX==65535
      83             : 
      84             : #endif // UINT_MAX==65535
      85             : 
      86             : #endif // USHRT_MAX==65535
      87             : 
      88             : // Then homer_uint64
      89             : #if ULONG_MAX==18446744073709551615UL
      90             : typedef unsigned long homer_uint64;
      91             : #else // ULONG_MAX==18446744073709551615UL
      92             : 
      93             : #if defined __GNUC__
      94             : typedef unsigned long long homer_uint64;
      95             : #else // defined __GNUC__
      96             : 
      97             : #if defined __SUNPRO_CC
      98             : typedef unsigned long long homer_uint64;
      99             : #else // defined __SUNPRO_CC
     100             : 
     101             : #error Could not typedef homer_uint64
     102             : 
     103             : #endif // defined __SUNPRO_CC
     104             : #endif // defined __GNUC__
     105             : 
     106             : #endif // ULONG_MAX==18446744073709551615UL
     107             : 
     108             : typedef unsigned char homer_uint8;
     109             : 
     110             : #else // !USE_ROOT && !CINT
     111             : 
     112             : 
     113             : typedef UShort_t homer_uint16;
     114             : typedef UInt_t homer_uint32;
     115             : typedef ULong64_t homer_uint64;
     116             : typedef Byte_t homer_uint8;
     117             : 
     118             : #ifdef __CINT__
     119             : typedef int key_t;
     120             : #endif
     121             : 
     122             : #endif // USE_ROOT
     123             : 
     124             : //typedef homer_uint64 AliEventID_t;
     125             : 
     126             : 
     127             : #define kAttribute_8b_StartOffset     0
     128             : #define kByteOrderAttribute_8b_Offset kAttribute_8b_StartOffset+0
     129             : #define kVersionAttribute_8b_Offset   kAttribute_8b_StartOffset+1
     130             : #define kAlignment_8b_StartOffset     24
     131             : #define kUInt64Alignment_8b_Offset    kAlignment_8b_StartOffset+0
     132             : #define kUInt32Alignment_8b_Offset    kAlignment_8b_StartOffset+1
     133             : #define kUInt16Alignment_8b_Offset    kAlignment_8b_StartOffset+2
     134             : #define kUInt8Alignment_8b_Offset     kAlignment_8b_StartOffset+3
     135             : #define kDoubleAlignment_8b_Offset    kAlignment_8b_StartOffset+4
     136             : #define kFloatAlignment_8b_Offset     kAlignment_8b_StartOffset+5
     137             : 
     138             : 
     139             : #define kID_64b_Offset           1
     140             : #define kLength_64b_Offset       2
     141             : #define kType_64b_Offset         4
     142             : #define kSubType1_64b_Offset     5
     143             : #define kSubType2_64b_Offset     6
     144             : #define kBirth_s_64b_Offset      7
     145             : #define kBirth_us_64b_Offset     8
     146             : #define kProducerNode_64b_Offset 9
     147             : #define kOffset_64b_Offset      10
     148             : #define kSize_64b_Offset        11
     149             : #define kStatusFlags_64b_Offset 12
     150             : #define kEnd_64b_Offset         13
     151             : #define kCount_64b_Words        kEnd_64b_Offset
     152             : 
     153             : // Possible values for fAttributes[kByteOrderAttribute]
     154             : /* Keep this consistent with BCLNetworkData.hpp kLittleEndian/kBigEndian and AliHLTSubEventDataDescriptor.hpp */
     155             : const homer_uint8 kHOMERUnknownByteOrder      = 0;
     156             : const homer_uint8 kHOMERLittleEndianByteOrder = 1;
     157             : const homer_uint8 kHOMERBigEndianByteOrder    = 2;
     158             : #ifdef __i386__
     159             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     160             : #else
     161             : #ifdef __arm__
     162             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     163             : #else
     164             : #ifdef __x86_64__
     165             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     166             : #else
     167             : #ifdef __ia64__
     168             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     169             : #else
     170             : #if defined(__powerpc__)
     171             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERBigEndianByteOrder;
     172             : #else
     173             : #ifdef __CINT__
     174             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     175             : #warning Assuming little endian format for __CINT__
     176             : #else
     177             :     const homer_uint8 kHOMERNativeByteOrder = kHOMERLittleEndianByteOrder;
     178             : #warning Assuming little endian format for unknown architecture
     179             : //#error Byte format (little/big endian) currently not defined for platforms other than intel i386 compatible, x86-64 (AMD64) and arm...
     180             : #endif
     181             : #endif
     182             : #endif
     183             : #endif
     184             : #endif
     185             : #endif
     186             : 
     187             : 
     188             : //#define HOMER_BLOCK_DESCRIPTOR_TYPEID             (((homer_uint64)'HOBL')<<32 | 'KDES')
     189             : #define HOMER_BLOCK_DESCRIPTOR_TYPEID               ( (((homer_uint64)'H')<<56)|(((homer_uint64)'O')<<48)|(((homer_uint64)'B')<<40)|(((homer_uint64)'L')<<32)|(((homer_uint64)'K')<<24)|(((homer_uint64)'D')<<16)|(((homer_uint64)'E')<<8)|(((homer_uint64)'S')<<0) )
     190             : //#define HOMER_BLOCK_DESCRIPTOR_TYPEID            ( (((homer_uint64)'H')<<56)|(((homer_uint64)'O')<<48) )
     191             : #define HOMER_HEADER_CURRENT_VERSION              2
     192             : 
     193             : 
     194             : class AliHLTHOMERBlockDescriptor
     195             :     {
     196             :     public:
     197             : 
     198             :         static unsigned GetHOMERBlockDescriptorSize()
     199             :                 {
     200           0 :                 return sizeof(homer_uint64)*kCount_64b_Words;
     201             :                 }
     202             : 
     203             :         AliHLTHOMERBlockDescriptor( void* header = 0 )
     204           0 :           : fHeader(header)
     205           0 :                 {
     206           0 :                 }
     207             :         void UseHeader( void* header )
     208             :                 {
     209           0 :                 fHeader = header;
     210           0 :                 }
     211             :         void Initialize()
     212             :                 {
     213           0 :                 if ( fHeader )
     214             :                     {
     215           0 :                     for ( unsigned ii=0; ii<kCount_64b_Words; ii++ )
     216           0 :                         ((homer_uint64*)fHeader)[ ii ] = (homer_uint64)0;
     217           0 :                     ((homer_uint64*)fHeader)[ kID_64b_Offset ] = HOMER_BLOCK_DESCRIPTOR_TYPEID;
     218           0 :                     ((homer_uint64*)fHeader)[ kLength_64b_Offset ] = GetHOMERBlockDescriptorSize();
     219           0 :                     ((homer_uint8*)fHeader)[ kByteOrderAttribute_8b_Offset ] = kHOMERNativeByteOrder;
     220           0 :                     ((homer_uint8*)fHeader)[ kVersionAttribute_8b_Offset ] = HOMER_HEADER_CURRENT_VERSION;
     221           0 :                     }
     222           0 :                 }
     223             : 
     224             :         void SetByteOrder( homer_uint8 bo ) const
     225             :                 {
     226             :                 if ( fHeader )
     227             :                     ((homer_uint8*)fHeader)[ kByteOrderAttribute_8b_Offset ] = bo;
     228             :                 }
     229             :         homer_uint8 GetByteOrder() const 
     230             :                 {
     231             :                 if ( fHeader )
     232             :                     return ((homer_uint8*)fHeader)[ kByteOrderAttribute_8b_Offset ];
     233             :                 return 0xFF;
     234             :                 }
     235             :         void SetVersion( homer_uint8 v ) const
     236             :                 {
     237             :                 if ( fHeader )
     238             :                     ((homer_uint8*)fHeader)[ kVersionAttribute_8b_Offset ] = v;
     239             :                 }
     240             :         void SetID( homer_uint64 id  ) const
     241             :                 {
     242             :                 if ( fHeader )
     243             :                     ((homer_uint64*)fHeader)[ kID_64b_Offset ] = id;
     244             :                 }
     245             :         void SetHeaderLength( homer_uint64 l  ) const
     246             :                 {
     247             :                 if ( fHeader )
     248             :                     ((homer_uint64*)fHeader)[ kLength_64b_Offset ] = l;
     249             :                 }
     250             :         homer_uint64 GetHeaderLength() const
     251             :                 {
     252           0 :                 if ( fHeader )
     253           0 :                     return ((homer_uint64*)fHeader)[ kLength_64b_Offset ];
     254           0 :                 return 0;
     255           0 :                 }
     256             :         void SetAlignment( homer_uint8 type, homer_uint8 align ) const
     257             :                 {
     258             :                 if ( fHeader && type<6 )
     259             :                     ((homer_uint8*)fHeader)[ kAlignment_8b_StartOffset+type ] = align;
     260             :                 }
     261             :         void SetUInt64Alignment( homer_uint8 align ) const
     262             :                 {
     263           0 :                 if ( fHeader )
     264           0 :                     ((homer_uint8*)fHeader)[ kUInt64Alignment_8b_Offset ] = align;
     265           0 :                 }
     266             :         void SetUInt32Alignment( homer_uint8 align ) const
     267             :                 {
     268           0 :                 if ( fHeader )
     269           0 :                     ((homer_uint8*)fHeader)[ kUInt32Alignment_8b_Offset ] = align;
     270           0 :                 }
     271             :         void SetUInt16Alignment( homer_uint8 align ) const
     272             :                 {
     273           0 :                 if ( fHeader )
     274           0 :                     ((homer_uint8*)fHeader)[ kUInt16Alignment_8b_Offset ] = align;
     275           0 :                 }
     276             :         void SetUInt8Alignment( homer_uint8 align ) const
     277             :                 {
     278           0 :                 if ( fHeader )
     279           0 :                     ((homer_uint8*)fHeader)[ kUInt8Alignment_8b_Offset ] = align;
     280           0 :                 }
     281             :         void SetDoubleAlignment( homer_uint8 align ) const
     282             :                 {
     283           0 :                 if ( fHeader )
     284           0 :                     ((homer_uint8*)fHeader)[ kDoubleAlignment_8b_Offset ] = align;
     285           0 :                 }
     286             :         void SetFloatAlignment( homer_uint8 align ) const
     287             :                 {
     288           0 :                 if ( fHeader )
     289           0 :                     ((homer_uint8*)fHeader)[ kFloatAlignment_8b_Offset ] = align;
     290           0 :                 }
     291             :         void SetType( homer_uint64 t ) const
     292             :                 {
     293           0 :                 if ( fHeader )
     294           0 :                     ((homer_uint64*)fHeader)[ kType_64b_Offset ] = t;
     295           0 :                 }
     296             :         void SetSubType1( homer_uint64 st1 ) const
     297             :                 {
     298           0 :                 if ( fHeader )
     299           0 :                     ((homer_uint64*)fHeader)[ kSubType1_64b_Offset ] = st1;
     300           0 :                 }
     301             :         void SetSubType2( homer_uint64 st2 ) const
     302             :                 {
     303           0 :                 if ( fHeader )
     304           0 :                     ((homer_uint64*)fHeader)[ kSubType2_64b_Offset ] = st2;
     305           0 :                 }
     306             :         void SetBirth_s( homer_uint64 bs ) const
     307             :                 {
     308           0 :                 if ( fHeader )
     309           0 :                     ((homer_uint64*)fHeader)[ kBirth_s_64b_Offset ] = bs;
     310           0 :                 }
     311             :         void SetBirth_us( homer_uint64 bus ) const
     312             :                 {
     313           0 :                 if ( fHeader )
     314           0 :                     ((homer_uint64*)fHeader)[ kBirth_us_64b_Offset ] = bus;
     315           0 :                 }
     316             :         void SetProducerNode( homer_uint64 pn ) const
     317             :                 {
     318           0 :                 if ( fHeader )
     319           0 :                     ((homer_uint64*)fHeader)[ kProducerNode_64b_Offset ] = pn;
     320           0 :                 }
     321             :         void SetBlockOffset( homer_uint64 bo ) const
     322             :                 {
     323           0 :                 if ( fHeader )
     324           0 :                     ((homer_uint64*)fHeader)[ kOffset_64b_Offset ] = bo;
     325           0 :                 }
     326             :         homer_uint64 GetBlockOffset() const
     327             :                 {
     328           0 :                 if ( fHeader )
     329           0 :                     return ((homer_uint64*)fHeader)[ kOffset_64b_Offset ];
     330           0 :                 return 0;
     331           0 :                 }
     332             :         void SetBlockSize( homer_uint64 bs ) const
     333             :                 {
     334           0 :                 if ( fHeader )
     335           0 :                     ((homer_uint64*)fHeader)[ kSize_64b_Offset ] = bs;
     336           0 :                 }
     337             :         homer_uint64 GetBlockSize() const
     338             :                 {
     339           0 :                 if ( fHeader )
     340           0 :                     return ((homer_uint64*)fHeader)[ kSize_64b_Offset ];
     341           0 :                 return 0;
     342           0 :                 }
     343             :         void SetStatusFlags( homer_uint64 bs ) const
     344             :                 {
     345           0 :                 if ( fHeader )
     346           0 :                     ((homer_uint64*)fHeader)[ kStatusFlags_64b_Offset ] = bs;
     347           0 :                 }
     348             :         homer_uint64 GetStatusFlags() const
     349             :                 {
     350             :                 if ( fHeader )
     351             :                     return ((homer_uint64*)fHeader)[ kStatusFlags_64b_Offset ];
     352             :                 return 0;
     353             :                 }
     354             : 
     355             :         void* GetHeader() const
     356             :                 {
     357           0 :                 return fHeader;
     358             :                 }
     359             :                 
     360             :     protected:
     361             :       void* fHeader; //! transient
     362             :         
     363             :     private:
     364             :       /** copy constructor prohibited */
     365             :       AliHLTHOMERBlockDescriptor(const AliHLTHOMERBlockDescriptor&);
     366             :       /** assignment operator prohibited */
     367             :       AliHLTHOMERBlockDescriptor& operator=(const AliHLTHOMERBlockDescriptor&);
     368             :     };
     369             : 
     370             : // the HOMERBlockDescriptor is used in the code
     371             : typedef class AliHLTHOMERBlockDescriptor HOMERBlockDescriptor;
     372             : 
     373             : 
     374             : /*
     375             : ***************************************************************************
     376             : **
     377             : ** $Author$ - Initial Version by Timm Morten Steinbeck
     378             : **
     379             : ** $Id$ 
     380             : **
     381             : ***************************************************************************
     382             : */
     383             : 
     384             : #endif // ALIHLTHOMERDATA_H

Generated by: LCOV version 1.11