|
gnCompare.hGo to the documentation of this file.00001 00002 // File: gnCompare.h 00003 // Purpose: Compares all sequences 00004 // Description: Compares sequences 00005 // Changes: 00006 // Version: libGenome 0.1.0 00007 // Author: Aaron Darling 00008 // Last Edited: April 15, 2001, 10:34:50pm 00009 // Modified by: 00010 // Copyright: (c) Aaron Darling 00011 // Licenses: Proprietary 00013 #ifndef _gnCompare_h_ 00014 #define _gnCompare_h_ 00015 00016 #include "gn/gnDefs.h" 00017 00018 #include <string> 00019 #include "gn/gnClone.h" 00020 00021 class GNDLLEXPORT gnCompare : public gnClone 00022 { 00023 public: 00024 00029 static const gnCompare *ProteinSeqCompare(); 00035 static const gnCompare *DNASeqCompare(); 00041 static const gnCompare *RNASeqCompare(); 00042 00043 enum gnCompareType{ 00044 ProteinSeqCompareType, 00045 DNASeqCompareType, 00046 RNASeqCompareType, 00047 }; 00048 00049 gnCompare(); 00058 gnCompare( const gnCompareType c_type ); 00059 gnCompare( const gnCompare& sf ); 00060 ~gnCompare(); 00061 00062 gnCompare* Clone() const; 00063 00064 string GetName() const; 00065 void SetName( string name ); 00066 00067 // Use less than comparisons since all other operators can be derived 00068 // gnSeqC less than operations 00069 boolean LessThan( gnSeqC ch, gnSeqC ch2, boolean case_sensitive = false) const; 00073 boolean Contains( gnSeqC ch, gnSeqC ch2, boolean case_sensitive = false ) const; 00074 // True if ch2 is general enough to equal ch 00075 // gnSeqC[] less than operations 00076 boolean LessThan( const gnSeqC* seq, const gnSeqC* seq2, const uint32 len, boolean case_sensitive = false ) const; 00077 boolean Contains( const gnSeqC* seq, const gnSeqC* seq2, const uint32 len, boolean case_sensitive = false ) const; 00078 // string 00079 boolean LessThan( const string &seq, const string &seq2, boolean case_sensitive = false) const; 00080 boolean Contains( const string &seq, const string &seq2, boolean case_sensitive = false) const; 00081 00082 // fill map 00083 00084 //adds a character which is equivalent to itself 00085 void SetSingle( const gnSeqC ch ); 00086 //adds a pair of equivalent characters 00087 void SetPair( const gnSeqC ch, const gnSeqC ch2 ); 00088 //adds ch as being wholly contained by ch2 00089 void SetContained( const gnSeqC ch, const gnSeqC ch2 ); 00090 00091 void RemoveSingle( const gnSeqC ch ); 00092 void RemovePair( const gnSeqC ch, const gnSeqC ch2 ); 00093 void RemoveContained( const gnSeqC ch, const gnSeqC ch2 ); 00094 00095 private: 00096 void CreateProteinComparator(); 00097 void CreateDNAComparator(); 00098 void CreateRNAComparator(); 00099 00100 void AddArrayEntry( gnSeqC *array[GNSEQC_MAX], const gnSeqC ch, const gnSeqC ch2); 00101 void DelArrayEntry( gnSeqC *array[GNSEQC_MAX], const gnSeqC ch, const gnSeqC ch2); 00102 00103 string m_name; 00104 boolean m_ignoreCase; 00105 00106 gnSeqC* m_pairArray[GNSEQC_MAX]; 00107 gnSeqC* m_containArray[GNSEQC_MAX]; 00108 00109 };//class gnCompare 00110 00111 inline 00112 gnCompare* gnCompare::Clone() const{ 00113 return new gnCompare(*this); 00114 } 00115 00116 inline 00117 string gnCompare::GetName() const{ 00118 return m_name; 00119 } 00120 inline 00121 void gnCompare::SetName( string name ){ 00122 m_name = name; 00123 } 00124 00125 // gnSeqC 00126 inline 00127 boolean gnCompare::LessThan( gnSeqC ch, gnSeqC ch2, boolean case_sensitive) const 00128 { 00129 if(!case_sensitive){ 00130 ch = toupper(ch); 00131 ch2 = toupper(ch2); 00132 } 00133 00134 if(strchr(m_pairArray[ch], ch2) == 0) 00135 return ch < ch2 ? true : false; 00136 return false; 00137 } 00138 00139 00140 // gnSeqC[] 00141 inline 00142 boolean gnCompare::LessThan( const gnSeqC* seq, const gnSeqC* seq2, const uint32 len, boolean case_sensitive ) const{ 00143 for( uint32 i=0; i < len ; ++i ) 00144 if(LessThan(seq[i], seq2[i], case_sensitive)) 00145 return true; 00146 return false; 00147 } 00148 00149 // string 00150 inline 00151 boolean gnCompare::LessThan( const string &seq, const string &seq2, boolean case_sensitive) const 00152 { 00153 gnSeqI shorter_len = seq.length() < seq2.length() ? seq.length() : seq2.length(); 00154 return LessThan( (gnSeqC*)seq.data(), (gnSeqC*)seq2.data(), shorter_len, case_sensitive ); 00155 } 00156 00157 // fill map 00158 inline 00159 void gnCompare::SetSingle( const gnSeqC ch ){ 00160 AddArrayEntry(m_pairArray, ch, ch); 00161 AddArrayEntry(m_containArray, ch, ch); 00162 } 00163 inline 00164 void gnCompare::SetPair( const gnSeqC ch, const gnSeqC ch2 ){ 00165 AddArrayEntry(m_pairArray, ch, ch2); 00166 AddArrayEntry(m_pairArray, ch2, ch); 00167 } 00168 inline 00169 void gnCompare::SetContained( const gnSeqC ch, const gnSeqC ch2 ){ 00170 AddArrayEntry(m_containArray, ch2, ch); 00171 } 00172 00173 inline 00174 void gnCompare::RemoveSingle( const gnSeqC ch ) 00175 { 00176 DelArrayEntry(m_pairArray, ch, ch); 00177 DelArrayEntry(m_containArray, ch, ch); 00178 } 00179 inline 00180 void gnCompare::RemovePair( const gnSeqC ch, const gnSeqC ch2 ) 00181 { 00182 DelArrayEntry(m_pairArray, ch, ch2); 00183 DelArrayEntry(m_pairArray, ch2, ch); 00184 } 00185 inline 00186 void gnCompare::RemoveContained( const gnSeqC ch, const gnSeqC ch2 ) 00187 { 00188 DelArrayEntry(m_containArray, ch2, ch); 00189 } 00190 00191 #endif 00192 // _gnSeqCompare_h_ Generated at Fri Nov 30 15:36:50 2001 for libGenome by 1.2.8.1 written by Dimitri van Heesch, © 1997-2001 |