ROOT logo
//*-- Author : V. Pechenov
#include "hmdctbarray.h"

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////
// HMdcTBArray
//
//  LookupTable and some useful functions for working
//  with an array of two bits. 
//  For MDC it can be used for keeping information about
//  number of cell times:
// only time1 - 1
// only time2 - 2
// time1 & time2 - 3
//
//   void clear(UChar_t *pF, UChar_t *pL);
//   void set(UChar_t *pF, Int_t pos, UChar_t cont);
//   Int_t get(UChar_t *pF, Int_t pos);
//   void unset(UChar_t *pF, Int_t pos, UChar_t cont);
//   Int_t getNSet(UChar_t *pF, UChar_t *pL);
//   Int_t position(UChar_t *pF, UChar_t *pL, Int_t idx);
//        = content of two bits or =-1
//   Int_t first(UChar_t *pF, UChar_t *pL);
//        = content of two bits or =-1
//   Int_t last(UChar_t *pF, UChar_t *pL);
//        = content of two bits or =-1
//   Int_t next(UChar_t *pF, UChar_t *pL, Int_t prPos);
//        = content of two bits or =-1
//   Int_t previous(UChar_t *pF, UChar_t *pL, Int_t prPos);
//        = content of two bits or =-1
//   void shiftRight(UChar_t *pF, UChar_t *pL, UChar_t *pS);
//   void shiftLeft(UChar_t *pF, UChar_t *pL, UChar_t *pS);
//   Int_t compare(UChar_t *pF1, UChar_t *pF2, Int_t nBytes);
// 
// pF - pointer to the first byte of bytes array
// pL - pointer to the last byte of bytes array
// cont - content of two bits, can be = 0,1,2,3
// pos - position of element in two bit array (for examp. - num. cell MDC)
// idx - index of element
// prPos - position of the element, used for geting position of the
//         next or previous position aftre or before pos. prPos
// pS - pointer to the byte which mast be moved to *pL (shift to right)
//                                        or to *pT (shift to left)
// 
//////////////////////////////////////////////////////////////////////  


UChar_t HMdcTBArray::nextTBit[4]={0xFC,0xF0,0xC0,0x00};
UChar_t HMdcTBArray::prevTBit[4]={0x00,0x03,0x0F,0x3F};
UChar_t HMdcTBArray::nTBitLookUp[256]={
    0,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,
    1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,
    1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,
    2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,
    1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,
    2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,
    1,2,2,2,2,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,
    2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4,2,3,3,3,3,4,4,4,3,4,4,4,3,4,4,4};
UChar_t HMdcTBArray::pTBitLookUp[4][256]={
   {0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,
    2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},
   {0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,0,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    0,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,0,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    0,3,3,3,3,1,1,1,3,1,1,1,3,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    0,3,3,3,3,1,1,1,3,1,1,1,3,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    0,3,3,3,3,1,1,1,3,1,1,1,3,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,
    3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1,3,2,2,2,2,1,1,1,2,1,1,1,2,1,1,1},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,2,2,2,0,2,2,2,
    0,0,0,0,0,2,2,2,0,2,2,2,0,2,2,2,0,0,0,0,0,2,2,2,0,2,2,2,0,2,2,2,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,
    0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,
    0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,
    0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2,0,3,3,3,3,2,2,2,3,2,2,2,3,2,2,2},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,
    0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3}};
    
UChar_t HMdcBArray::setBitLUp[8]={1,2,4,8,16,32,64,128};
UChar_t HMdcBArray::unsetBitLUp[8]={254,253,251,247,239,223,191,127};
UChar_t HMdcBArray::nextBit[8]={254,252,248,240,224,192,128,0};
UChar_t HMdcBArray::prevBit[8]={0,1,3,7,15,31,63,127};
UChar_t HMdcBArray::nBitLookUp[256]={
    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};
    
UChar_t HMdcBArray::pBitLookUp[8][256]={
   {0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0},
   {0,0,0,1,0,2,2,1,0,3,3,1,3,2,2,1,0,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    0,5,5,1,5,2,2,1,5,3,3,1,3,2,2,1,5,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    0,6,6,1,6,2,2,1,6,3,3,1,3,2,2,1,6,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    6,5,5,1,5,2,2,1,5,3,3,1,3,2,2,1,5,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    0,7,7,1,7,2,2,1,7,3,3,1,3,2,2,1,7,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    7,5,5,1,5,2,2,1,5,3,3,1,3,2,2,1,5,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    7,6,6,1,6,2,2,1,6,3,3,1,3,2,2,1,6,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1,
    6,5,5,1,5,2,2,1,5,3,3,1,3,2,2,1,5,4,4,1,4,2,2,1,4,3,3,1,3,2,2,1},
   {0,0,0,0,0,0,0,2,0,0,0,3,0,3,3,2,0,0,0,4,0,4,4,2,0,4,4,3,4,3,3,2,
    0,0,0,5,0,5,5,2,0,5,5,3,5,3,3,2,0,5,5,4,5,4,4,2,5,4,4,3,4,3,3,2,
    0,0,0,6,0,6,6,2,0,6,6,3,6,3,3,2,0,6,6,4,6,4,4,2,6,4,4,3,4,3,3,2,
    0,6,6,5,6,5,5,2,6,5,5,3,5,3,3,2,6,5,5,4,5,4,4,2,5,4,4,3,4,3,3,2,
    0,0,0,7,0,7,7,2,0,7,7,3,7,3,3,2,0,7,7,4,7,4,4,2,7,4,4,3,4,3,3,2,
    0,7,7,5,7,5,5,2,7,5,5,3,5,3,3,2,7,5,5,4,5,4,4,2,5,4,4,3,4,3,3,2,
    0,7,7,6,7,6,6,2,7,6,6,3,6,3,3,2,7,6,6,4,6,4,4,2,6,4,4,3,4,3,3,2,
    7,6,6,5,6,5,5,2,6,5,5,3,5,3,3,2,6,5,5,4,5,4,4,2,5,4,4,3,4,3,3,2},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,4,0,4,4,3,
    0,0,0,0,0,0,0,5,0,0,0,5,0,5,5,3,0,0,0,5,0,5,5,4,0,5,5,4,5,4,4,3,
    0,0,0,0,0,0,0,6,0,0,0,6,0,6,6,3,0,0,0,6,0,6,6,4,0,6,6,4,6,4,4,3,
    0,0,0,6,0,6,6,5,0,6,6,5,6,5,5,3,0,6,6,5,6,5,5,4,6,5,5,4,5,4,4,3,
    0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,3,0,0,0,7,0,7,7,4,0,7,7,4,7,4,4,3,
    0,0,0,7,0,7,7,5,0,7,7,5,7,5,5,3,0,7,7,5,7,5,5,4,7,5,5,4,5,4,4,3,
    0,0,0,7,0,7,7,6,0,7,7,6,7,6,6,3,0,7,7,6,7,6,6,4,7,6,6,4,6,4,4,3,
    0,7,7,6,7,6,6,5,7,6,6,5,6,5,5,3,7,6,6,5,6,5,5,4,6,5,5,4,5,4,4,3},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,5,0,5,5,4,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,6,0,6,6,4,
    0,0,0,0,0,0,0,6,0,0,0,6,0,6,6,5,0,0,0,6,0,6,6,5,0,6,6,5,6,5,5,4,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,4,
    0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,5,0,0,0,7,0,7,7,5,0,7,7,5,7,5,5,4,
    0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,6,0,0,0,7,0,7,7,6,0,7,7,6,7,6,6,4,
    0,0,0,7,0,7,7,6,0,7,7,6,7,6,6,5,0,7,7,6,7,6,6,5,7,6,6,5,6,5,5,4},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,6,0,6,6,5,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,5,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,6,
    0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,6,0,0,0,7,0,7,7,6,0,7,7,6,7,6,6,5},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,7,0,7,7,6},
   {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7}};

UChar_t HMdcBArray::highBit[256]={    
    0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
    5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
    6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
    6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
    7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
    7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
    7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
    7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
    
UChar_t HMdcBArray::nLayOrientation[64]={
    0,1,1,2,1,2,2,3,1,2,2,3,1,2,2,3,1,2,2,3,2,3,3,4,2,3,3,4,2,3,3,4,
    1,2,2,3,2,3,3,4,2,3,3,4,2,3,3,4,2,3,3,4,3,4,4,5,3,4,4,5,3,4,4,5};

UChar_t HMdcBArray::is40degCross[64]={    
    0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,
    0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

/*void HMdcTBArray::initLookups(void) {
  //Initializes lookup tables
  Int_t j=0,shift;
  for (Int_t i=0;i<256;i++) {
    nTBitLookUp[i]=((i & 0x3)?1:0) + (((i>>2) & 0x3)?1:0) + 
                                     (((i>>4) & 0x3)?1:0) + 
                                     (((i>>6) & 0x3)?1:0);           
    shift=0; j=0;
    while (shift<4) {
      Int_t k=i>>(2*shift);
      if (k & 0x3)
	{ pTBitLookUp[j][i]=shift+0; shift++; } 
      else if (k & 0xC)
	{ pTBitLookUp[j][i]=shift+1; shift+=2;}
      else if (k & 0x30)
	{ pTBitLookUp[j][i]=shift+2; shift+=3; }
      else if (k & 0xC0)
	{ pTBitLookUp[j][i]=shift+3; shift+=4; }
      else
	{ pTBitLookUp[j][i]=0; shift+=4; }
      j++;
    }
  }
  lookUpsInitialized=kTRUE;
}*/


Int_t HMdcTBArray::next(const UChar_t *pF, const UChar_t *pL, Int_t prPos) {
  // prPos <0 eq. first
  // return -1 if next is absent
  const UChar_t *pB=pF;
  UChar_t next=*pB;
  if(prPos >=0 ) {
    pB+=prPos>>2;
    if(pB>pL) return -1;
    next=*pB & nextTBit[prPos&3];
  }
  for(; pB<=pL; next=*(++pB)) {
     if( next ) return ((pB-pF)<<2)+pTBitLookUp[0][next];
  }
  return -1;
}

UChar_t HMdcTBArray::next2Bits(const UChar_t *pF, const UChar_t *pL, Int_t& pos) {
  // prPos <0 eq. first
  // return 1 for time1, 2 for time2 or 3 for time1 and time2
  // return 0 if next is absent
  const UChar_t *pB=pF;
  UChar_t next=*pB;
  if(pos >=0 ) {
    pB+=pos>>2;
    if(pB>pL) return 0;
    next=*pB & nextTBit[pos&3];
  }
  for(; pB<=pL; next=*(++pB)) if( next ) {
    pos = ((pB-pF)<<2)+pTBitLookUp[0][next];
    return (next >> (pos&3)*2) &  0x3;;
  }
  return 0;
}

Int_t HMdcTBArray::previous(const UChar_t *pF,const  UChar_t *pL,Int_t prPos) {
  // prPos >size eq. last
  // return -1 if previous is absent
  if(prPos<0) return -1;
  const UChar_t *pB=pL;
  UChar_t next=*pB;
  if((prPos>>2)+pF <= pL) {
    pB=pF+(prPos>>2);
    next=*pB & prevTBit[prPos&3];
  }
  for(; pB>=pF; next=*(--pB)) {
    if(next) return ((pB-pF)<<2)+pTBitLookUp[nTBitLookUp[next]-1][next];
  }
  return -1;
}

    
ClassImp(HMdcTBArray)
ClassImp(HMdcBArray)  
 hmdctbarray.cc:1
 hmdctbarray.cc:2
 hmdctbarray.cc:3
 hmdctbarray.cc:4
 hmdctbarray.cc:5
 hmdctbarray.cc:6
 hmdctbarray.cc:7
 hmdctbarray.cc:8
 hmdctbarray.cc:9
 hmdctbarray.cc:10
 hmdctbarray.cc:11
 hmdctbarray.cc:12
 hmdctbarray.cc:13
 hmdctbarray.cc:14
 hmdctbarray.cc:15
 hmdctbarray.cc:16
 hmdctbarray.cc:17
 hmdctbarray.cc:18
 hmdctbarray.cc:19
 hmdctbarray.cc:20
 hmdctbarray.cc:21
 hmdctbarray.cc:22
 hmdctbarray.cc:23
 hmdctbarray.cc:24
 hmdctbarray.cc:25
 hmdctbarray.cc:26
 hmdctbarray.cc:27
 hmdctbarray.cc:28
 hmdctbarray.cc:29
 hmdctbarray.cc:30
 hmdctbarray.cc:31
 hmdctbarray.cc:32
 hmdctbarray.cc:33
 hmdctbarray.cc:34
 hmdctbarray.cc:35
 hmdctbarray.cc:36
 hmdctbarray.cc:37
 hmdctbarray.cc:38
 hmdctbarray.cc:39
 hmdctbarray.cc:40
 hmdctbarray.cc:41
 hmdctbarray.cc:42
 hmdctbarray.cc:43
 hmdctbarray.cc:44
 hmdctbarray.cc:45
 hmdctbarray.cc:46
 hmdctbarray.cc:47
 hmdctbarray.cc:48
 hmdctbarray.cc:49
 hmdctbarray.cc:50
 hmdctbarray.cc:51
 hmdctbarray.cc:52
 hmdctbarray.cc:53
 hmdctbarray.cc:54
 hmdctbarray.cc:55
 hmdctbarray.cc:56
 hmdctbarray.cc:57
 hmdctbarray.cc:58
 hmdctbarray.cc:59
 hmdctbarray.cc:60
 hmdctbarray.cc:61
 hmdctbarray.cc:62
 hmdctbarray.cc:63
 hmdctbarray.cc:64
 hmdctbarray.cc:65
 hmdctbarray.cc:66
 hmdctbarray.cc:67
 hmdctbarray.cc:68
 hmdctbarray.cc:69
 hmdctbarray.cc:70
 hmdctbarray.cc:71
 hmdctbarray.cc:72
 hmdctbarray.cc:73
 hmdctbarray.cc:74
 hmdctbarray.cc:75
 hmdctbarray.cc:76
 hmdctbarray.cc:77
 hmdctbarray.cc:78
 hmdctbarray.cc:79
 hmdctbarray.cc:80
 hmdctbarray.cc:81
 hmdctbarray.cc:82
 hmdctbarray.cc:83
 hmdctbarray.cc:84
 hmdctbarray.cc:85
 hmdctbarray.cc:86
 hmdctbarray.cc:87
 hmdctbarray.cc:88
 hmdctbarray.cc:89
 hmdctbarray.cc:90
 hmdctbarray.cc:91
 hmdctbarray.cc:92
 hmdctbarray.cc:93
 hmdctbarray.cc:94
 hmdctbarray.cc:95
 hmdctbarray.cc:96
 hmdctbarray.cc:97
 hmdctbarray.cc:98
 hmdctbarray.cc:99
 hmdctbarray.cc:100
 hmdctbarray.cc:101
 hmdctbarray.cc:102
 hmdctbarray.cc:103
 hmdctbarray.cc:104
 hmdctbarray.cc:105
 hmdctbarray.cc:106
 hmdctbarray.cc:107
 hmdctbarray.cc:108
 hmdctbarray.cc:109
 hmdctbarray.cc:110
 hmdctbarray.cc:111
 hmdctbarray.cc:112
 hmdctbarray.cc:113
 hmdctbarray.cc:114
 hmdctbarray.cc:115
 hmdctbarray.cc:116
 hmdctbarray.cc:117
 hmdctbarray.cc:118
 hmdctbarray.cc:119
 hmdctbarray.cc:120
 hmdctbarray.cc:121
 hmdctbarray.cc:122
 hmdctbarray.cc:123
 hmdctbarray.cc:124
 hmdctbarray.cc:125
 hmdctbarray.cc:126
 hmdctbarray.cc:127
 hmdctbarray.cc:128
 hmdctbarray.cc:129
 hmdctbarray.cc:130
 hmdctbarray.cc:131
 hmdctbarray.cc:132
 hmdctbarray.cc:133
 hmdctbarray.cc:134
 hmdctbarray.cc:135
 hmdctbarray.cc:136
 hmdctbarray.cc:137
 hmdctbarray.cc:138
 hmdctbarray.cc:139
 hmdctbarray.cc:140
 hmdctbarray.cc:141
 hmdctbarray.cc:142
 hmdctbarray.cc:143
 hmdctbarray.cc:144
 hmdctbarray.cc:145
 hmdctbarray.cc:146
 hmdctbarray.cc:147
 hmdctbarray.cc:148
 hmdctbarray.cc:149
 hmdctbarray.cc:150
 hmdctbarray.cc:151
 hmdctbarray.cc:152
 hmdctbarray.cc:153
 hmdctbarray.cc:154
 hmdctbarray.cc:155
 hmdctbarray.cc:156
 hmdctbarray.cc:157
 hmdctbarray.cc:158
 hmdctbarray.cc:159
 hmdctbarray.cc:160
 hmdctbarray.cc:161
 hmdctbarray.cc:162
 hmdctbarray.cc:163
 hmdctbarray.cc:164
 hmdctbarray.cc:165
 hmdctbarray.cc:166
 hmdctbarray.cc:167
 hmdctbarray.cc:168
 hmdctbarray.cc:169
 hmdctbarray.cc:170
 hmdctbarray.cc:171
 hmdctbarray.cc:172
 hmdctbarray.cc:173
 hmdctbarray.cc:174
 hmdctbarray.cc:175
 hmdctbarray.cc:176
 hmdctbarray.cc:177
 hmdctbarray.cc:178
 hmdctbarray.cc:179
 hmdctbarray.cc:180
 hmdctbarray.cc:181
 hmdctbarray.cc:182
 hmdctbarray.cc:183
 hmdctbarray.cc:184
 hmdctbarray.cc:185
 hmdctbarray.cc:186
 hmdctbarray.cc:187
 hmdctbarray.cc:188
 hmdctbarray.cc:189
 hmdctbarray.cc:190
 hmdctbarray.cc:191
 hmdctbarray.cc:192
 hmdctbarray.cc:193
 hmdctbarray.cc:194
 hmdctbarray.cc:195
 hmdctbarray.cc:196
 hmdctbarray.cc:197
 hmdctbarray.cc:198
 hmdctbarray.cc:199
 hmdctbarray.cc:200
 hmdctbarray.cc:201
 hmdctbarray.cc:202
 hmdctbarray.cc:203
 hmdctbarray.cc:204
 hmdctbarray.cc:205
 hmdctbarray.cc:206
 hmdctbarray.cc:207
 hmdctbarray.cc:208
 hmdctbarray.cc:209
 hmdctbarray.cc:210
 hmdctbarray.cc:211
 hmdctbarray.cc:212
 hmdctbarray.cc:213
 hmdctbarray.cc:214
 hmdctbarray.cc:215
 hmdctbarray.cc:216
 hmdctbarray.cc:217
 hmdctbarray.cc:218
 hmdctbarray.cc:219
 hmdctbarray.cc:220
 hmdctbarray.cc:221
 hmdctbarray.cc:222
 hmdctbarray.cc:223
 hmdctbarray.cc:224
 hmdctbarray.cc:225
 hmdctbarray.cc:226
 hmdctbarray.cc:227
 hmdctbarray.cc:228
 hmdctbarray.cc:229
 hmdctbarray.cc:230
 hmdctbarray.cc:231
 hmdctbarray.cc:232
 hmdctbarray.cc:233
 hmdctbarray.cc:234
 hmdctbarray.cc:235
 hmdctbarray.cc:236
 hmdctbarray.cc:237
 hmdctbarray.cc:238
 hmdctbarray.cc:239
 hmdctbarray.cc:240
 hmdctbarray.cc:241
 hmdctbarray.cc:242
 hmdctbarray.cc:243
 hmdctbarray.cc:244
 hmdctbarray.cc:245
 hmdctbarray.cc:246
 hmdctbarray.cc:247
 hmdctbarray.cc:248
 hmdctbarray.cc:249
 hmdctbarray.cc:250
 hmdctbarray.cc:251
 hmdctbarray.cc:252
 hmdctbarray.cc:253
 hmdctbarray.cc:254
 hmdctbarray.cc:255
 hmdctbarray.cc:256
 hmdctbarray.cc:257
 hmdctbarray.cc:258
 hmdctbarray.cc:259
 hmdctbarray.cc:260
 hmdctbarray.cc:261
 hmdctbarray.cc:262
 hmdctbarray.cc:263
 hmdctbarray.cc:264
 hmdctbarray.cc:265
 hmdctbarray.cc:266
 hmdctbarray.cc:267
 hmdctbarray.cc:268
 hmdctbarray.cc:269
 hmdctbarray.cc:270