littleendian_strings.h File Reference

Go to the source code of this file.

Defines

#define minos_letohl(x)   UInt_abcd_dcba(x)
#define minos_htolel(x)   UInt_abcd_dcba(x)

Functions

static UInt_t UInt_abcd_dcba (UInt_t x)
UInt_t nwords_in_string (const Char_t *x)
void pack_string_in_lel (Int_t *dest_i, const Char_t *src_c)
Char_t * unpack_lel_to_string (const Int_t *src_i, UInt_t nwd)

Define Documentation

#define minos_htolel (  )     UInt_abcd_dcba(x)

Definition at line 37 of file littleendian_strings.h.

Referenced by pack_string_in_lel().

#define minos_letohl (  )     UInt_abcd_dcba(x)

Definition at line 36 of file littleendian_strings.h.

Referenced by unpack_lel_to_string().


Function Documentation

UInt_t nwords_in_string ( const Char_t *  x  ) 

Definition at line 7 of file littleendian_strings.cxx.

Referenced by pack_string_in_lel(), RawConfigFilesBlock::RawConfigFilesBlock(), RawRunCommentBlock::RawRunCommentBlock(), and RawRunConfigBlock::RawRunConfigBlock().

00007                                          {
00008    // add 1 for \0, pad up to the next Int_t
00009    UInt_t csize = strlen(x);
00010    return ((csize+1)+(sizeof(Int_t)-1))/sizeof(Int_t);
00011 }

void pack_string_in_lel ( Int_t *  dest_i,
const Char_t *  src_c 
)

Definition at line 14 of file littleendian_strings.cxx.

References minos_htolel, and nwords_in_string().

Referenced by RawConfigFilesBlock::RawConfigFilesBlock(), RawRunCommentBlock::RawRunCommentBlock(), and RawRunConfigBlock::RawRunConfigBlock().

00014                                                             {
00015    // Put string in an array of little endian long words (32 bit)
00016    // pad out to full word as necessary
00017    // Assume destination has sufficient space
00018 
00019    UInt_t nchar = strlen(src_c);
00020    UInt_t nwd   = nwords_in_string(src_c);
00021 
00022    Char_t* dest_c = (Char_t*) dest_i;
00023 
00024    dest_i[nwd-1] = 0;           // pad out last full word to zeros
00025    memcpy(dest_c,src_c,nchar);  // copy up to '\0'
00026 
00027    // byte swap as necessary to get little endian ordering
00028    for (UInt_t i=0; i<nwd; ++i) 
00029       dest_i[i] = (Int_t)minos_htolel((UInt_t)dest_i[i]);
00030 }

static UInt_t UInt_abcd_dcba ( UInt_t  x  )  [static]

Definition at line 30 of file littleendian_strings.h.

00031 {
00032    return ( (x << 24)           | ((x & 0xff00) << 8) | 
00033             ((x >> 8) & 0xff00) | (x >> 24) );
00034 }

Char_t* unpack_lel_to_string ( const Int_t *  src_i,
UInt_t  nwd 
)

Definition at line 33 of file littleendian_strings.cxx.

References minos_letohl.

Referenced by RawConfigFilesBlock::GetConfigFile(), RawRunCommentBlock::GetRunComment(), and RawRunConfigBlock::GetRunConfig().

00033                                                              {
00034    // return the string that is packed into an array of little endian
00035    // long words (32 bit)
00036    // NOTE: the user is responsible for deleting this memory
00037   
00038    const UInt_t cperl = sizeof(Int_t)/sizeof(Char_t);
00039 
00040    UInt_t nchar = nwd*cperl;
00041 
00042    Char_t* dest_c = new Char_t [nchar];
00043    Int_t*  dest_i = (Int_t*) dest_c;
00044    const Char_t* src_c  = (const Char_t*) src_i;
00045    memcpy(dest_c,src_c,nchar);
00046 
00047    // byte swap as necessary to deal with original little endian-ness
00048    for (UInt_t i=0; i<nwd; ++i) 
00049       dest_i[i] = (Int_t)minos_letohl((UInt_t)dest_i[i]);
00050 
00051    return dest_c;
00052 }


Generated on 8 Jul 2019 for loon by  doxygen 1.6.1