ROOT logo
#ifndef HMDCTBARRAY_H
#define HMDCTBARRAY_H

#include "Rtypes.h"

class HMdcTBArray {
  protected:
    static UChar_t nTBitLookUp[256];         
    static UChar_t pTBitLookUp[4][256];
    static UChar_t nextTBit[4];
    static UChar_t prevTBit[4];
  public: 
    inline static void    clear(UChar_t *pF, UChar_t *pL);
    inline static void    set(UChar_t *, Int_t pos, UChar_t cont);
    inline static UChar_t get(const UChar_t *, Int_t pos); 
    inline static void    unset(UChar_t *, Int_t pos, UChar_t cont);
    inline static Int_t   getNSet(const UChar_t *pF, const UChar_t *pL); 
    inline static Int_t   position(const UChar_t *pF,const UChar_t *pL,
                                   Int_t idx);
    inline static Int_t   first(const UChar_t *pF, const UChar_t *pL);
    inline static Int_t   last(const UChar_t *pF, const UChar_t *pL);
    inline static void    shiftRight(UChar_t *pF, UChar_t *pL, UChar_t *pS);
    inline static void    shiftLeft(UChar_t *pF, UChar_t *pL, UChar_t *pS);
    inline static Int_t   compare(const UChar_t *pF1, const UChar_t *pF2, 
                                  Int_t nBytes);
    inline static Int_t   andArr(const UChar_t *pF1, const UChar_t *pF2,
                                 Int_t nBytes, UChar_t *pOut);
    inline static Int_t   xorArr(const UChar_t *pF1, const UChar_t *pF2,
                                 Int_t nBytes,UChar_t *pOut);
    inline static Int_t   andArrAndUnset(UChar_t *pNoId, const UChar_t *pEx,
                                       Int_t nBytes,UChar_t *pIdnt);
    inline static Bool_t  isIdenBits(const UChar_t *pF1, const UChar_t *pF2,
                                     Int_t nBytes);
    static Int_t   next(const UChar_t *pF, const UChar_t *pL, Int_t prPos);
    static Int_t   previous(const UChar_t *pF, const UChar_t *pL, Int_t prPos);
    static UChar_t next2Bits(const UChar_t *pF, const UChar_t *pL, Int_t& pos);
  private:
    HMdcTBArray(void) {}
    virtual ~HMdcTBArray(void) {}

  ClassDef(HMdcTBArray,0) //A group of cells in layers
};

class HMdcBArray {
  protected:
    static UChar_t nBitLookUp[256];
    static UChar_t setBitLUp[8];
    static UChar_t unsetBitLUp[8];
    static UChar_t pBitLookUp[8][256];
    static UChar_t highBit[256];
    static UChar_t nextBit[8];
    static UChar_t prevBit[8];
    static UChar_t nLayOrientation[64];
    static UChar_t is40degCross[64];
  public: 
    inline static void    clear(UChar_t *pF, UChar_t *pL);
    inline static void    set(UChar_t *, Int_t pos);
    inline static UChar_t get(const UChar_t *, Int_t pos); 
    inline static void    unset(UChar_t *, Int_t pos);
    inline static Bool_t  testAndUnset(UChar_t *, Int_t pos); 
    inline static Int_t   getNSet(const UChar_t *pF, const UChar_t *pL);
    inline static UChar_t getNSet(const UChar_t *pF);    //One byte
    inline static UChar_t getNSet(const UChar_t byte);   //One byte
    inline static UChar_t getNLayOrientation(UChar_t list);
    inline static Bool_t  is40DegWireCross(UChar_t list);
    inline static Int_t   getNSet2B(const UChar_t *pF);  //Two bytes
    inline static Int_t   position(const UChar_t *pF,const UChar_t *pL,
                                   Int_t idx);
    inline static Int_t   first(const UChar_t *pF, const UChar_t *pL);
    inline static Int_t   last(const UChar_t *pF, const UChar_t *pL);
    inline static Int_t   next(const UChar_t *pF,const UChar_t *pL,Int_t prPos);
    inline static Int_t   nextAndUnset(UChar_t *pF, UChar_t *pL, Int_t prPos);
    inline static Int_t   previous(const UChar_t *pF, const UChar_t *pL, 
                                   Int_t prPos);
    inline static Int_t   prevAndUnset(UChar_t *pF, UChar_t *pL, Int_t prPos);
    inline static void    shiftRight(UChar_t *pF, UChar_t *pL, UChar_t *pS);
    inline static void    shiftLeft(UChar_t *pF, UChar_t *pL, UChar_t *pS);
    inline static Int_t   compare(const UChar_t *pF1, const UChar_t *pF2, 
                                  Int_t nBytes);
    inline static Int_t   andArr(const UChar_t *pF1, const UChar_t *pF2,
                                 Int_t nBytes, UChar_t *pOut);
    inline static Int_t   xorArr(const UChar_t *pF1, const UChar_t *pF2,
                                 Int_t nBytes,UChar_t *pOut);
    inline static Int_t   andArrAndUnset(UChar_t *pNoId, const UChar_t *pEx,
                                       Int_t nBytes,UChar_t *pIdnt);
  private:
    HMdcBArray(void) {}
    virtual ~HMdcBArray(void) {}

    ClassDef(HMdcBArray,0) //A group of cells in layers
};

//----------------------- Inlines HMdcTBarray------------------------------
inline void HMdcTBArray::clear(UChar_t *pF, UChar_t *pL) {
  while( pF<=pL ) *(pF++)=0;
}

inline Int_t HMdcTBArray::getNSet(const UChar_t *pF, const UChar_t *pL) {
  Int_t nTBits=0;
  while(pF <= pL) nTBits+=nTBitLookUp[*(pF++)];
  return nTBits;
}

inline void HMdcTBArray::set(UChar_t *pF, Int_t pos, UChar_t cont) {
  pF[pos>>2] |= (cont & 0x3) << (pos&3)*2;
}

inline void HMdcTBArray::unset(UChar_t *pF, Int_t pos, UChar_t cont) {
  pF[pos>>2] &= ~(( cont & 0x3 ) << (pos&3)*2);
}

inline Int_t HMdcTBArray::position(const UChar_t *pF, const UChar_t *pL, Int_t idx) {
  // return: >=0 - ok.!;
  if(idx<0) return -1;
  for(const UChar_t *pB=pF; pB<=pL; pB++) {
    Int_t idn=idx-nTBitLookUp[*pB];
    if( idn < 0 ) return ((pB-pF)<<2)+pTBitLookUp[idx][*pB];
    idx=idn;
  }
  return -1;
}

inline Int_t HMdcTBArray::first(const UChar_t *pF, const UChar_t *pL) {
  // return: -1 - num.cells=0
  for(const UChar_t *pB=pF; pB<=pL; pB++) {
     if( *pB > 0 ) return ((pB-pF)<<2)+pTBitLookUp[0][*pB];
  }
  return -1;
}

inline Int_t HMdcTBArray::last(const UChar_t *pF, const UChar_t *pL) {
    // return: >=0 - ok.!; -2 - num. of cells =0
  for(const UChar_t *pB=pL; pB>=pF; pB--) {
    if(*pB > 0) return ((pB-pF)<<2)+pTBitLookUp[nTBitLookUp[*pB]-1][*pB];
  }
  return -1;
}

inline void HMdcTBArray::shiftRight(UChar_t *pF, UChar_t *pL, UChar_t *pS) {
  // pF - pointer to first element, pL - pointer to last el.
  // pS - pointer to element which must be moved to *pL ((pL-pS) - shift)
  while( pS>=pF ) *(pL--)=*(pS--);
  clear(pF, pL);
}

inline void HMdcTBArray::shiftLeft(UChar_t *pT, UChar_t *pL, UChar_t *pS) {
  // pT - pointer to the first elelement, pL - pointer to last el.
  // pS - pointer to element which must be moved to *pT
  while( pS<=pL ) *(pT++)=*(pS++);
  clear(pT, pL);
}

inline UChar_t HMdcTBArray::get(const UChar_t *pF, Int_t pos) {
  // Returns 1 for time1, 2 for time2 and 3 for time1 and time2 in cell
  return (pF[pos>>2] >> (pos&3)*2) &  0x3;
}

inline Int_t HMdcTBArray::compare(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes) {
  Int_t nTBits=0;
  const UChar_t *pF1End = pF1+nBytes;
  for(;pF1<pF1End;pF1++,pF2++) nTBits += nTBitLookUp[*pF1 & *pF2];
  return nTBits;
}

inline Bool_t HMdcTBArray::isIdenBits(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes) {
  //return kTRUE if at list one the same bit is setted on both arrays
  while((nBytes--)>0) if( *(pF1++) & *(pF2++) ) return kTRUE;
  return kFALSE;
}

inline Int_t HMdcTBArray::andArr(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes,UChar_t *pOut) {
  // Function produce list of identical for pF1 & ppF2 bits - pOut
  // return number of the same cells(!)
  Int_t nTBits=0;
  while((nBytes--)>0) {
    *pOut=*(pF1++) & *(pF2++);
    nTBits+=nTBitLookUp[*pOut];
    pOut++;
  }
  return nTBits;
}

inline Int_t HMdcTBArray::andArrAndUnset(UChar_t *pNoId, const UChar_t *pEx,
    Int_t nBytes,UChar_t *pIdnt) {
  // Function produce list of identical for pNoId & ppEx bits - pIdnt
  // and unset identical bits in pNoId
  // return number of the same cells(!)
  Int_t nIBits=0;
  const UChar_t *pExEnd = pEx + nBytes;
  for(;pEx<pExEnd;pEx++,pIdnt++,pNoId++) {
    *pIdnt  = *pNoId & *pEx;
    *pNoId ^= *pIdnt;
    nIBits += nTBitLookUp[*pIdnt];
  }
  return nIBits;
}

inline Int_t HMdcTBArray::xorArr(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes,UChar_t *pOut) {
  // Function produce list of nonidentical for pF1 & ppF2 bits - pOut
  // return number of the same cells(!)
  Int_t nTBits=0;
  while((nBytes--)>0) {
    *pOut=*(pF1++) ^ *(pF2++);
    nTBits+=nTBitLookUp[*pOut];
    pOut++;
  }
  return nTBits;
}

//----------------------- Inlines HMdcBArray------------------------------

inline void HMdcBArray::clear(UChar_t *pF, UChar_t *pL) {
  while( pF<=pL ) *(pF++)=0;
}

inline Int_t HMdcBArray::getNSet(const UChar_t *pF, const UChar_t *pL) {
  Int_t nBits=0;
  while(pF <= pL) nBits+=nBitLookUp[*(pF++)];
  return nBits;
}

inline UChar_t HMdcBArray::getNSet(const UChar_t *pF) {
  return nBitLookUp[*pF];
}

inline UChar_t HMdcBArray::getNSet(const UChar_t byte) {
  return nBitLookUp[byte];
}

inline Int_t HMdcBArray::getNSet2B(const UChar_t *pF) {
  return nBitLookUp[*pF]+nBitLookUp[*(pF+1)];
}

inline void HMdcBArray::set(UChar_t *pF, Int_t pos) {
  pF[pos>>3] |= setBitLUp[pos&7];
}

inline UChar_t HMdcBArray::getNLayOrientation(UChar_t list) {
  // list - list of layers: 6 bits, one bit per layer
  return nLayOrientation[list&63];
}

inline Bool_t HMdcBArray::is40DegWireCross(UChar_t list) {
  // list - list of layers: 6 bits, one bit per layer
  return is40degCross[list&63]!=0;
}

inline void HMdcBArray::unset(UChar_t *pF, Int_t pos) {
  pF[pos>>3] &= unsetBitLUp[pos&7];
}

inline Int_t HMdcBArray::position(const UChar_t *pF, const UChar_t *pL, Int_t idx) {
  // return: >=0 - ok.!;
  if(idx<0) return -1;
  for(const UChar_t *pB=pF; pB<=pL; pB++) {
    Int_t idn=idx-nBitLookUp[*pB];
    if( idn < 0 ) return ((pB-pF)<<3)+pBitLookUp[idx][*pB];
    idx=idn;
  }
  return -1;
}

inline Int_t HMdcBArray::first(const UChar_t *pF, const UChar_t *pL) {
  // return: -1 - num.cells=0
  for(const UChar_t *pB=pF; pB<=pL; pB++) {
     if( *pB > 0 ) return ((pB-pF)<<3)+pBitLookUp[0][*pB];
  }
  return -1;
}

inline Int_t HMdcBArray::last(const UChar_t *pF, const UChar_t *pL) {
    // return: >=0 - ok.!; -2 - num. of cells =0
  for(const UChar_t *pB=pL; pB>=pF; pB--) {
    if(*pB > 0) return ((pB-pF)<<3)+pBitLookUp[nBitLookUp[*pB]-1][*pB];
  }
  return -1;
}

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

inline Int_t HMdcBArray::nextAndUnset(UChar_t *pF, UChar_t *pL, Int_t prPos) {
  // The function search next seted bit after prPos in array, unset this
  // bin and return a position of this one.
  // The bit prPos must be unseted (=0), if not - function will return 
  // the same position!
  // prPos <0 = seach first seted bin
  // return: -1 next is absent
  UChar_t* pB=pF;
  if(prPos>7) pB += prPos>>3;
  for(; pB<=pL; pB++) {
    if(*pB) {
      UChar_t bitN=pBitLookUp[0][*pB];
      *pB &= unsetBitLUp[bitN];   // Bin unsetting
      return ((pB-pF)<<3)+bitN;
    }
  }
  return -1;
}

inline Int_t HMdcBArray::previous(const UChar_t *pF, const UChar_t *pL, Int_t prPos) {
  // prPos >size = start from latest bit
  // return: -1 previous is absent
  if(prPos<0) return -1;
  const UChar_t *pB=pL;
  UChar_t next=*pB;
  if((prPos>>3)+pF <= pL) {
    pB=pF+(prPos>>3);
    next=*pB & prevBit[prPos&7];
  }
  for(; pB>=pF; next=*(--pB)) {
    if(next) return ((pB-pF)<<3)+pBitLookUp[nBitLookUp[next]-1][next];
  }
  return -1;
}

inline Int_t HMdcBArray::prevAndUnset(UChar_t *pF, UChar_t *pL, Int_t prPos) {
  // The same as nextAndUnset but do it back order.
  // prPos >= (pL-pF+1)*8 = start from latest bit
  // return: -1 next is absent
  if(prPos<0) return -1;
  UChar_t* pB=pF + (prPos>>3);  // = prPos/8
  if(pB>pL) pB=pL;
  for(; pB>=pF; pB-- ) {
    if(*pB) {
      UChar_t bitN=highBit[*pB];
      *pB &= unsetBitLUp[bitN];   // Bin unsetting
      return ((pB-pF)<<3)+bitN;
    }
  }
  return -1;
}

inline void HMdcBArray::shiftRight(UChar_t *pF, UChar_t *pL, UChar_t *pS) {
  // pF - pointer to first el., pL - pointer to last el.
  // pS - pointer to el. which must be moved to *pL ((pL-pS) - shift)
  while( pS>=pF ) *(pL--)=*(pS--);
  clear(pF, pL);
}

inline void HMdcBArray::shiftLeft(UChar_t *pT, UChar_t *pL, UChar_t *pS) {
  // pT - pointer to first el., pL - pointer to last el.
  // pS - pointer to el. which must be moved to *pT
  while( pS<=pL ) *(pT++)=*(pS++);
  clear(pT, pL);
}

inline UChar_t HMdcBArray::get(const UChar_t *pF, Int_t pos) {
  //Returns 1 if bit is seted, 0 if not
  return (pF[pos>>3] >> (pos&7)) & 1;
}

inline Bool_t HMdcBArray::testAndUnset(UChar_t *pF, Int_t pos) {
  // Bit n=pos will unseted. 
  // Returns kTRUE if bit was seted, kFALSE if not
  UChar_t mask=1<<(pos&7);
  pF+=(pos>>3);             // = pos/8
  if(*pF & mask) {
    *pF &= ~mask;
    return kTRUE;
  }
  return kFALSE;
}

inline Int_t HMdcBArray::compare(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes) {
  Int_t nBits=0;
  while((nBytes--)>0) nBits+=nBitLookUp[*(pF1++) & *(pF2++)];
  return nBits;
}

inline Int_t HMdcBArray::andArr(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes,UChar_t *pOut) {
  // Function produce list of identical for pF1 & ppF2 bits - pOut
  // return number of identical bits
  Int_t nTBits=0;
  while((nBytes--)>0) {
    *pOut=*(pF1++) & *(pF2++);
    nTBits+=nBitLookUp[*pOut];
    pOut++;
  }
  return nTBits;
}

inline Int_t HMdcBArray::andArrAndUnset(UChar_t *pNoId, const UChar_t *pEx,
    Int_t nBytes,UChar_t *pIdnt) {
  // Function produce list of identical for pNoId & ppEx bits - pIdnt
  // and unset identical bits in pNoId
  // return number of identical bits
//   Int_t nIBits=0;
//   const UChar_t *pExEnd = pEx + nBytes;
//   for(;pEx<pExEnd;pEx++,pIdnt++,pNoId++) {
//     *pIdnt  = *pNoId & *pEx;
//     *pNoId ^= *pIdnt;
//     nIBits += nBitLookUp[*pIdnt];
//   }
  
  UChar_t *pId    = pIdnt;
  UChar_t *pIdEnd = pIdnt + nBytes;
  Int_t nInt = nBytes>>2;
  if(nInt>0) {
    const UInt_t* pEx4    = (UInt_t*)pEx;
    const UInt_t* pEx4End = pEx4+nInt;
    UInt_t* pIdnt4  = (UInt_t*)pIdnt;
    UInt_t* pNoId4  = (UInt_t*)pNoId;
    for(;pEx4<pEx4End;pEx4++,pIdnt4++,pNoId4++) {
      *pIdnt4  = *pNoId4 & *pEx4;
      *pNoId4 ^= *pIdnt4;
    }
    pEx   = (UChar_t*)pEx4;
    pIdnt = (UChar_t*)pIdnt4;
    pNoId = (UChar_t*)pNoId4;
  }
  for(;pIdnt<pIdEnd;pEx++,pIdnt++,pNoId++) {
    *pIdnt  = *pNoId & *pEx;
    *pNoId ^= *pIdnt;
  }
  
  Int_t nIBits=0;
  for(;pId<pIdEnd;pId++) nIBits += nBitLookUp[*pId];
  
  return nIBits;
}

inline Int_t HMdcBArray::xorArr(const UChar_t *pF1, const UChar_t *pF2,
    Int_t nBytes,UChar_t *pOut) {
  // Function produce list of nonidentical for pF1 & ppF2 bits - pOut
  // return number of not identical bits in pF1 and pF2
  Int_t nTBits=0;
  while((nBytes--)>0) {
    *pOut   = *(pF1++) ^ *(pF2++);
    nTBits += nBitLookUp[*pOut];
    pOut++;
  }
  return nTBits;
}

#endif
 hmdctbarray.h:1
 hmdctbarray.h:2
 hmdctbarray.h:3
 hmdctbarray.h:4
 hmdctbarray.h:5
 hmdctbarray.h:6
 hmdctbarray.h:7
 hmdctbarray.h:8
 hmdctbarray.h:9
 hmdctbarray.h:10
 hmdctbarray.h:11
 hmdctbarray.h:12
 hmdctbarray.h:13
 hmdctbarray.h:14
 hmdctbarray.h:15
 hmdctbarray.h:16
 hmdctbarray.h:17
 hmdctbarray.h:18
 hmdctbarray.h:19
 hmdctbarray.h:20
 hmdctbarray.h:21
 hmdctbarray.h:22
 hmdctbarray.h:23
 hmdctbarray.h:24
 hmdctbarray.h:25
 hmdctbarray.h:26
 hmdctbarray.h:27
 hmdctbarray.h:28
 hmdctbarray.h:29
 hmdctbarray.h:30
 hmdctbarray.h:31
 hmdctbarray.h:32
 hmdctbarray.h:33
 hmdctbarray.h:34
 hmdctbarray.h:35
 hmdctbarray.h:36
 hmdctbarray.h:37
 hmdctbarray.h:38
 hmdctbarray.h:39
 hmdctbarray.h:40
 hmdctbarray.h:41
 hmdctbarray.h:42
 hmdctbarray.h:43
 hmdctbarray.h:44
 hmdctbarray.h:45
 hmdctbarray.h:46
 hmdctbarray.h:47
 hmdctbarray.h:48
 hmdctbarray.h:49
 hmdctbarray.h:50
 hmdctbarray.h:51
 hmdctbarray.h:52
 hmdctbarray.h:53
 hmdctbarray.h:54
 hmdctbarray.h:55
 hmdctbarray.h:56
 hmdctbarray.h:57
 hmdctbarray.h:58
 hmdctbarray.h:59
 hmdctbarray.h:60
 hmdctbarray.h:61
 hmdctbarray.h:62
 hmdctbarray.h:63
 hmdctbarray.h:64
 hmdctbarray.h:65
 hmdctbarray.h:66
 hmdctbarray.h:67
 hmdctbarray.h:68
 hmdctbarray.h:69
 hmdctbarray.h:70
 hmdctbarray.h:71
 hmdctbarray.h:72
 hmdctbarray.h:73
 hmdctbarray.h:74
 hmdctbarray.h:75
 hmdctbarray.h:76
 hmdctbarray.h:77
 hmdctbarray.h:78
 hmdctbarray.h:79
 hmdctbarray.h:80
 hmdctbarray.h:81
 hmdctbarray.h:82
 hmdctbarray.h:83
 hmdctbarray.h:84
 hmdctbarray.h:85
 hmdctbarray.h:86
 hmdctbarray.h:87
 hmdctbarray.h:88
 hmdctbarray.h:89
 hmdctbarray.h:90
 hmdctbarray.h:91
 hmdctbarray.h:92
 hmdctbarray.h:93
 hmdctbarray.h:94
 hmdctbarray.h:95
 hmdctbarray.h:96
 hmdctbarray.h:97
 hmdctbarray.h:98
 hmdctbarray.h:99
 hmdctbarray.h:100
 hmdctbarray.h:101
 hmdctbarray.h:102
 hmdctbarray.h:103
 hmdctbarray.h:104
 hmdctbarray.h:105
 hmdctbarray.h:106
 hmdctbarray.h:107
 hmdctbarray.h:108
 hmdctbarray.h:109
 hmdctbarray.h:110
 hmdctbarray.h:111
 hmdctbarray.h:112
 hmdctbarray.h:113
 hmdctbarray.h:114
 hmdctbarray.h:115
 hmdctbarray.h:116
 hmdctbarray.h:117
 hmdctbarray.h:118
 hmdctbarray.h:119
 hmdctbarray.h:120
 hmdctbarray.h:121
 hmdctbarray.h:122
 hmdctbarray.h:123
 hmdctbarray.h:124
 hmdctbarray.h:125
 hmdctbarray.h:126
 hmdctbarray.h:127
 hmdctbarray.h:128
 hmdctbarray.h:129
 hmdctbarray.h:130
 hmdctbarray.h:131
 hmdctbarray.h:132
 hmdctbarray.h:133
 hmdctbarray.h:134
 hmdctbarray.h:135
 hmdctbarray.h:136
 hmdctbarray.h:137
 hmdctbarray.h:138
 hmdctbarray.h:139
 hmdctbarray.h:140
 hmdctbarray.h:141
 hmdctbarray.h:142
 hmdctbarray.h:143
 hmdctbarray.h:144
 hmdctbarray.h:145
 hmdctbarray.h:146
 hmdctbarray.h:147
 hmdctbarray.h:148
 hmdctbarray.h:149
 hmdctbarray.h:150
 hmdctbarray.h:151
 hmdctbarray.h:152
 hmdctbarray.h:153
 hmdctbarray.h:154
 hmdctbarray.h:155
 hmdctbarray.h:156
 hmdctbarray.h:157
 hmdctbarray.h:158
 hmdctbarray.h:159
 hmdctbarray.h:160
 hmdctbarray.h:161
 hmdctbarray.h:162
 hmdctbarray.h:163
 hmdctbarray.h:164
 hmdctbarray.h:165
 hmdctbarray.h:166
 hmdctbarray.h:167
 hmdctbarray.h:168
 hmdctbarray.h:169
 hmdctbarray.h:170
 hmdctbarray.h:171
 hmdctbarray.h:172
 hmdctbarray.h:173
 hmdctbarray.h:174
 hmdctbarray.h:175
 hmdctbarray.h:176
 hmdctbarray.h:177
 hmdctbarray.h:178
 hmdctbarray.h:179
 hmdctbarray.h:180
 hmdctbarray.h:181
 hmdctbarray.h:182
 hmdctbarray.h:183
 hmdctbarray.h:184
 hmdctbarray.h:185
 hmdctbarray.h:186
 hmdctbarray.h:187
 hmdctbarray.h:188
 hmdctbarray.h:189
 hmdctbarray.h:190
 hmdctbarray.h:191
 hmdctbarray.h:192
 hmdctbarray.h:193
 hmdctbarray.h:194
 hmdctbarray.h:195
 hmdctbarray.h:196
 hmdctbarray.h:197
 hmdctbarray.h:198
 hmdctbarray.h:199
 hmdctbarray.h:200
 hmdctbarray.h:201
 hmdctbarray.h:202
 hmdctbarray.h:203
 hmdctbarray.h:204
 hmdctbarray.h:205
 hmdctbarray.h:206
 hmdctbarray.h:207
 hmdctbarray.h:208
 hmdctbarray.h:209
 hmdctbarray.h:210
 hmdctbarray.h:211
 hmdctbarray.h:212
 hmdctbarray.h:213
 hmdctbarray.h:214
 hmdctbarray.h:215
 hmdctbarray.h:216
 hmdctbarray.h:217
 hmdctbarray.h:218
 hmdctbarray.h:219
 hmdctbarray.h:220
 hmdctbarray.h:221
 hmdctbarray.h:222
 hmdctbarray.h:223
 hmdctbarray.h:224
 hmdctbarray.h:225
 hmdctbarray.h:226
 hmdctbarray.h:227
 hmdctbarray.h:228
 hmdctbarray.h:229
 hmdctbarray.h:230
 hmdctbarray.h:231
 hmdctbarray.h:232
 hmdctbarray.h:233
 hmdctbarray.h:234
 hmdctbarray.h:235
 hmdctbarray.h:236
 hmdctbarray.h:237
 hmdctbarray.h:238
 hmdctbarray.h:239
 hmdctbarray.h:240
 hmdctbarray.h:241
 hmdctbarray.h:242
 hmdctbarray.h:243
 hmdctbarray.h:244
 hmdctbarray.h:245
 hmdctbarray.h:246
 hmdctbarray.h:247
 hmdctbarray.h:248
 hmdctbarray.h:249
 hmdctbarray.h:250
 hmdctbarray.h:251
 hmdctbarray.h:252
 hmdctbarray.h:253
 hmdctbarray.h:254
 hmdctbarray.h:255
 hmdctbarray.h:256
 hmdctbarray.h:257
 hmdctbarray.h:258
 hmdctbarray.h:259
 hmdctbarray.h:260
 hmdctbarray.h:261
 hmdctbarray.h:262
 hmdctbarray.h:263
 hmdctbarray.h:264
 hmdctbarray.h:265
 hmdctbarray.h:266
 hmdctbarray.h:267
 hmdctbarray.h:268
 hmdctbarray.h:269
 hmdctbarray.h:270
 hmdctbarray.h:271
 hmdctbarray.h:272
 hmdctbarray.h:273
 hmdctbarray.h:274
 hmdctbarray.h:275
 hmdctbarray.h:276
 hmdctbarray.h:277
 hmdctbarray.h:278
 hmdctbarray.h:279
 hmdctbarray.h:280
 hmdctbarray.h:281
 hmdctbarray.h:282
 hmdctbarray.h:283
 hmdctbarray.h:284
 hmdctbarray.h:285
 hmdctbarray.h:286
 hmdctbarray.h:287
 hmdctbarray.h:288
 hmdctbarray.h:289
 hmdctbarray.h:290
 hmdctbarray.h:291
 hmdctbarray.h:292
 hmdctbarray.h:293
 hmdctbarray.h:294
 hmdctbarray.h:295
 hmdctbarray.h:296
 hmdctbarray.h:297
 hmdctbarray.h:298
 hmdctbarray.h:299
 hmdctbarray.h:300
 hmdctbarray.h:301
 hmdctbarray.h:302
 hmdctbarray.h:303
 hmdctbarray.h:304
 hmdctbarray.h:305
 hmdctbarray.h:306
 hmdctbarray.h:307
 hmdctbarray.h:308
 hmdctbarray.h:309
 hmdctbarray.h:310
 hmdctbarray.h:311
 hmdctbarray.h:312
 hmdctbarray.h:313
 hmdctbarray.h:314
 hmdctbarray.h:315
 hmdctbarray.h:316
 hmdctbarray.h:317
 hmdctbarray.h:318
 hmdctbarray.h:319
 hmdctbarray.h:320
 hmdctbarray.h:321
 hmdctbarray.h:322
 hmdctbarray.h:323
 hmdctbarray.h:324
 hmdctbarray.h:325
 hmdctbarray.h:326
 hmdctbarray.h:327
 hmdctbarray.h:328
 hmdctbarray.h:329
 hmdctbarray.h:330
 hmdctbarray.h:331
 hmdctbarray.h:332
 hmdctbarray.h:333
 hmdctbarray.h:334
 hmdctbarray.h:335
 hmdctbarray.h:336
 hmdctbarray.h:337
 hmdctbarray.h:338
 hmdctbarray.h:339
 hmdctbarray.h:340
 hmdctbarray.h:341
 hmdctbarray.h:342
 hmdctbarray.h:343
 hmdctbarray.h:344
 hmdctbarray.h:345
 hmdctbarray.h:346
 hmdctbarray.h:347
 hmdctbarray.h:348
 hmdctbarray.h:349
 hmdctbarray.h:350
 hmdctbarray.h:351
 hmdctbarray.h:352
 hmdctbarray.h:353
 hmdctbarray.h:354
 hmdctbarray.h:355
 hmdctbarray.h:356
 hmdctbarray.h:357
 hmdctbarray.h:358
 hmdctbarray.h:359
 hmdctbarray.h:360
 hmdctbarray.h:361
 hmdctbarray.h:362
 hmdctbarray.h:363
 hmdctbarray.h:364
 hmdctbarray.h:365
 hmdctbarray.h:366
 hmdctbarray.h:367
 hmdctbarray.h:368
 hmdctbarray.h:369
 hmdctbarray.h:370
 hmdctbarray.h:371
 hmdctbarray.h:372
 hmdctbarray.h:373
 hmdctbarray.h:374
 hmdctbarray.h:375
 hmdctbarray.h:376
 hmdctbarray.h:377
 hmdctbarray.h:378
 hmdctbarray.h:379
 hmdctbarray.h:380
 hmdctbarray.h:381
 hmdctbarray.h:382
 hmdctbarray.h:383
 hmdctbarray.h:384
 hmdctbarray.h:385
 hmdctbarray.h:386
 hmdctbarray.h:387
 hmdctbarray.h:388
 hmdctbarray.h:389
 hmdctbarray.h:390
 hmdctbarray.h:391
 hmdctbarray.h:392
 hmdctbarray.h:393
 hmdctbarray.h:394
 hmdctbarray.h:395
 hmdctbarray.h:396
 hmdctbarray.h:397
 hmdctbarray.h:398
 hmdctbarray.h:399
 hmdctbarray.h:400
 hmdctbarray.h:401
 hmdctbarray.h:402
 hmdctbarray.h:403
 hmdctbarray.h:404
 hmdctbarray.h:405
 hmdctbarray.h:406
 hmdctbarray.h:407
 hmdctbarray.h:408
 hmdctbarray.h:409
 hmdctbarray.h:410
 hmdctbarray.h:411
 hmdctbarray.h:412
 hmdctbarray.h:413
 hmdctbarray.h:414
 hmdctbarray.h:415
 hmdctbarray.h:416
 hmdctbarray.h:417
 hmdctbarray.h:418
 hmdctbarray.h:419
 hmdctbarray.h:420
 hmdctbarray.h:421
 hmdctbarray.h:422
 hmdctbarray.h:423
 hmdctbarray.h:424
 hmdctbarray.h:425
 hmdctbarray.h:426
 hmdctbarray.h:427
 hmdctbarray.h:428
 hmdctbarray.h:429
 hmdctbarray.h:430
 hmdctbarray.h:431
 hmdctbarray.h:432
 hmdctbarray.h:433
 hmdctbarray.h:434
 hmdctbarray.h:435
 hmdctbarray.h:436
 hmdctbarray.h:437
 hmdctbarray.h:438
 hmdctbarray.h:439
 hmdctbarray.h:440
 hmdctbarray.h:441
 hmdctbarray.h:442
 hmdctbarray.h:443
 hmdctbarray.h:444
 hmdctbarray.h:445
 hmdctbarray.h:446
 hmdctbarray.h:447
 hmdctbarray.h:448
 hmdctbarray.h:449
 hmdctbarray.h:450
 hmdctbarray.h:451
 hmdctbarray.h:452
 hmdctbarray.h:453
 hmdctbarray.h:454
 hmdctbarray.h:455