1 /*
2  * hhbiterbimatrix-inl.h
3  *
4  *  Created on: Jun 16, 2014
5  *      Author: meiermark
6  */
7 
8 #ifndef HHBITERBIMATRIX_INL_H_
9 #define HHBITERBIMATRIX_INL_H_
10 
11 
hasCellOff()12 inline bool ViterbiMatrix::ViterbiMatrix::hasCellOff(){
13     return this->cellOff;
14 }
15 
16 
getRow(int row)17 inline unsigned char * ViterbiMatrix::ViterbiMatrix::getRow(int row){
18     return this->bCO_MI_DG_IM_GD_MM_vec[row];
19 }
20 
21 
setCellOff(bool value)22 inline void ViterbiMatrix::setCellOff(bool value){
23     this->cellOff = value;
24 }
25 
26 
setCellOff(int row,int col,int elem,bool value)27 inline void ViterbiMatrix::setCellOff(int row,int col,int elem,bool value){
28     if(value){
29         BIT_SET(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem],7);
30         this->setCellOff(true);
31     }else{
32         BIT_CLEAR(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem], 7);
33     }
34 }
35 
setMatIns(int row,int col,int elem,bool value)36 inline void ViterbiMatrix::setMatIns(int row,int col,int elem,bool value){
37     if(value){
38         BIT_SET(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem],6);
39     }else{
40         BIT_CLEAR(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem], 6);
41     }
42 }
43 
setDelGap(int row,int col,int elem,bool value)44 inline void ViterbiMatrix::setDelGap(int row,int col,int elem,bool value){
45     if(value){
46         BIT_SET(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem],5);
47     }else{
48         BIT_CLEAR(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem], 5);
49     }
50 }
51 
setInsMat(int row,int col,int elem,bool value)52 inline void ViterbiMatrix::setInsMat(int row,int col,int elem,bool value){
53     if(value){
54         BIT_SET(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem],4);
55     }else{
56         BIT_CLEAR(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem], 4);
57     }
58 }
59 
setGapDel(int row,int col,int elem,bool value)60 inline void ViterbiMatrix::setGapDel(int row,int col,int elem,bool value){
61     if(value){
62         BIT_SET(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem],3);
63     }else{
64         BIT_CLEAR(this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem], 3);
65     }
66 }
67 
68 
setMatMat(int row,int col,int elem,unsigned char value)69 inline void ViterbiMatrix::setMatMat(int row,int col,int elem,unsigned char value){
70     //0xF8 11111000
71 //    this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem]&=(0xF8 ^ value);
72         unsigned char c = 0xF8;
73         this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem] =
74                 (this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem] & c) | value;
75 }
76 
getCellOff(int row,int col,int elem)77 inline bool ViterbiMatrix::getCellOff(int row,int col,int elem){
78     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
79     return (bool) (vCO_MI_DG_GD_MM & 128);
80 }
81 
82 
getMatIns(int row,int col,int elem)83 inline bool ViterbiMatrix::getMatIns(int row,int col,int elem){
84     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
85     return (bool) (vCO_MI_DG_GD_MM & 64);
86 }
87 
88 
getDelGap(int row,int col,int elem)89 inline bool ViterbiMatrix::getDelGap(int row,int col,int elem){
90     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
91     return (bool) (vCO_MI_DG_GD_MM & 32);
92 }
93 
94 
getInsMat(int row,int col,int elem)95 inline bool ViterbiMatrix::getInsMat(int row,int col,int elem){
96     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
97     return (bool) (vCO_MI_DG_GD_MM & 16);
98 }
99 
100 
getGapDel(int row,int col,int elem)101 inline bool ViterbiMatrix::getGapDel(int row,int col,int elem){
102     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
103     return (bool) (vCO_MI_DG_GD_MM & 8);
104 }
105 
106 
getMatMat(int row,int col,int elem)107 inline int  ViterbiMatrix::getMatMat(int row,int col,int elem){
108     unsigned char vCO_MI_DG_GD_MM=this->bCO_MI_DG_IM_GD_MM_vec[row][(col*VECSIZE_FLOAT)+elem];
109     return (int) (vCO_MI_DG_GD_MM & 7);
110 }
111 
printCellOff(int row_size,int col_size,int elem)112 inline void ViterbiMatrix::printCellOff(int row_size,int col_size,int elem){
113     for(int row = 0; row < row_size; row++){
114         for(int col = 0; col < col_size;col++){
115             std::cout << getCellOff(row,col,elem) << " ";
116         }
117         std::cout << std::endl;
118     }
119 }
120 
121 #endif /* HHBITERBIMATRIX_INL_H_ */
122