00001
00002
00003
00005 inline bool DnaStr::isStop(int bp) const {
00006 if(length() < static_cast<unsigned>(bp+2) || bp < 1)
00007 return false;
00008 char a, b, c;
00009 if(getStrnd() == dsu::ePos) {
00010 a = (*this)[bp];
00011 b = (*this)[bp+1];
00012 c = (*this)[bp+2];
00013 } else {
00014 c = (*this)[bp];
00015 b = (*this)[bp+1];
00016 a = (*this)[bp+2];
00017 }
00018 bool firstIsU = isU(a);
00019 bool secIsA = isA(b);
00020 return
00021 (firstIsU && secIsA && isR(c)) ||
00022 (firstIsU && isR(b) && isA(c));
00023 }
00024
00025 inline bool DnaStr::isC(char c) {
00026 switch(c) {
00027 case 'C':
00028 case 'c':
00029 return true;
00030 default:
00031 return false;
00032 }
00033 }
00034
00035 inline bool DnaStr::isA(char c) {
00036 switch(c) {
00037 case 'A':
00038 case 'a':
00039 return true;
00040 default:
00041 return false;
00042 }
00043 }
00044
00045 inline bool DnaStr::isR(char c) {
00046 char lc = tolower(c);
00047 return lc=='r'||lc=='a'||lc=='g'?true:false;
00048 }
00049
00050 inline bool DnaStr::isU(char c) {
00051 return c=='T'||c=='t'||c=='u'||c=='U'?true:false;
00052 }
00053
00054 inline bool DnaStr::isG(char c) {
00055 switch(c) {
00056 case 'g':
00057 case 'G':
00058 return true;
00059 default:
00060 return false;
00061 }
00062 }
00063
00064 inline bool DnaStr::isStart(int bp) const {
00065 if(length() < static_cast<unsigned>(bp+2) || bp < 1)
00066 return false;
00067 if(getStrnd()==dsu::ePos) {
00068 return isA((*this)[bp]) && isU((*this)[bp+1]) && isG((*this)[bp+2]);
00069 } else {
00070 return isA((*this)[bp+2]) && isU((*this)[bp+1]) && isG((*this)[bp]);
00071 }
00072 }
00073
00074 inline bool DnaStr::isStart(const char codon[3]) const {
00075 if(getStrnd() == dsu::ePos)
00076 return isA(codon[0]) && isU(codon[1]) && isG(codon[2]);
00077 else
00078 return isA(codon[2]) && isU(codon[1]) && isG(codon[0]);
00079 }
00080
00081 inline bool DnaStr::isStop(const char codon[3]) const {
00082 const char* tmpPtr = codon;
00083 char a,b,c;
00084 if(getStrnd()==dsu::ePos) {
00085 a = *tmpPtr; b = *(++tmpPtr); c = *(++tmpPtr);
00086 } else {
00087 c = *tmpPtr; b = *(++tmpPtr); a = *(++tmpPtr);
00088 }
00089 bool firstIsU = isU(a);
00090 bool secIsA = isA(b);
00091
00092 return
00093 (firstIsU && secIsA && isR(c)) ||
00094 (firstIsU && isR(b) && isA(c));
00095 }