00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _gnFileContig_h_
00013 #define _gnFileContig_h_
00014
00015 #include "gn/gnDefs.h"
00016
00017 #include <string>
00018 #include "gn/gnClone.h"
00019 #include <utility>
00020
00021
00022
00023
00024
00025
00026
00027
00028 class GNDLLEXPORT gnFileContig : public gnClone
00029 {
00030 public:
00031 gnFileContig();
00032 gnFileContig( string nameStr, const uint64 pos, const uint64 len );
00033 gnFileContig( const gnFileContig& fc );
00034 ~gnFileContig();
00035
00036 gnFileContig* Clone() const;
00037 void Clear();
00038
00039 string GetName() const;
00040 gnSeqI GetSeqLength() const;
00041 pair<uint64,uint64> GetFileStartEnd() const;
00042 uint64 GetFileLength() const;
00043 pair<uint64,uint64> GetSectStartEnd( const gnContigSection i ) const;
00044 uint64 GetSectLength( gnContigSection i ) const;
00045 boolean HasRepeatSeqGap() const;
00046 pair<uint32,uint32> GetRepeatSeqGapSize() const;
00047
00048 boolean SetName( string nameStr );
00049 boolean SetSeqLength( const gnSeqI len );
00050 boolean AddToSeqLength( const gnSeqI len );
00051 boolean SetFileStart( const uint64 s );
00052 boolean SetFileEnd( const uint64 e );
00053 boolean SetFileStartEnd( const pair<uint64,uint64> se );
00054 boolean SetSectStart( const gnContigSection i, const uint64 s );
00055 boolean SetSectEnd( const gnContigSection i, const uint64 e );
00056 boolean SetSectStartEnd( const gnContigSection i, const pair<uint64,uint64> se);
00057 boolean SetRepeatSeqGap( const boolean rsg );
00058 boolean SetRepeatSeqGapSize( const pair<uint64,uint64> rsgSize );
00059 boolean SetRepeatSeqSize( const uint64 seqSize );
00060 boolean SetRepeatGapSize( const uint64 gapSize );
00061 private:
00062 string m_name;
00063 gnSeqI m_seqLength;
00064 pair<uint64,uint64> m_fileStartEnd;
00065
00066 pair<uint64,uint64> m_startEndArray[CONTIG_SECTION_SIZE];
00067
00068 boolean m_repeatSeqGap;
00069 pair< uint64, uint64 > m_repeatSeqGapSize;
00070 };
00071
00072
00073 inline
00074 gnFileContig* gnFileContig::Clone() const
00075 {
00076 return new gnFileContig( *this );
00077 }
00078
00079 inline
00080 string gnFileContig::GetName() const
00081 {
00082 return m_name;
00083 }
00084 inline
00085 gnSeqI gnFileContig::GetSeqLength() const
00086 {
00087 return m_seqLength;
00088 }
00089 inline
00090 pair<uint64,uint64> gnFileContig::GetFileStartEnd() const
00091 {
00092 return m_fileStartEnd;
00093 }
00094 inline
00095 uint64 gnFileContig::GetFileLength() const
00096 {
00097 return m_fileStartEnd.second - m_fileStartEnd.first + 1;
00098 }
00099 inline
00100 pair<uint64,uint64> gnFileContig::GetSectStartEnd( const gnContigSection i ) const
00101 {
00102 if( (uint32)i < CONTIG_SECTION_SIZE )
00103 return m_startEndArray[(uint32)i];
00104 return pair<uint64,uint64>(0,0);
00105 }
00106 inline
00107 uint64 gnFileContig::GetSectLength( gnContigSection i ) const
00108 {
00109 if( (uint32)i < CONTIG_SECTION_SIZE )
00110 return m_startEndArray[(uint32)i].second - m_startEndArray[(uint32)i].first + 1;
00111 return 0;
00112 }
00113 inline
00114 boolean gnFileContig::HasRepeatSeqGap() const
00115 {
00116 return m_repeatSeqGap;
00117 }
00118 inline
00119 pair<uint32,uint32> gnFileContig::GetRepeatSeqGapSize() const
00120 {
00121 return m_repeatSeqGapSize;
00122 }
00123
00124 inline
00125 boolean gnFileContig::SetName( string nameStr )
00126 {
00127 m_name = nameStr;
00128 return true;
00129 }
00130 inline
00131 boolean gnFileContig::SetSeqLength( const gnSeqI len )
00132 {
00133 m_seqLength = len;
00134 return true;
00135 }
00136 inline
00137 boolean gnFileContig::AddToSeqLength( const gnSeqI len )
00138 {
00139 m_seqLength += len;
00140 return true;
00141 }
00142 inline
00143 boolean gnFileContig::SetFileStart( const uint64 s )
00144 {
00145 m_fileStartEnd.first = s;
00146 return true;
00147 }
00148 inline
00149 boolean gnFileContig::SetFileEnd( const uint64 e )
00150 {
00151 m_fileStartEnd.second = e;
00152 return true;
00153 }
00154 inline
00155 boolean gnFileContig::SetFileStartEnd( const pair<uint64,uint64> se )
00156 {
00157 m_fileStartEnd = se;
00158 return true;
00159 }
00160 inline
00161 boolean gnFileContig::SetSectStart( const gnContigSection i, const uint64 s )
00162 {
00163 if( (uint32)i < CONTIG_SECTION_SIZE )
00164 {
00165 m_startEndArray[(uint32)i].first = s;
00166 return true;
00167 }
00168 return false;
00169 }
00170 inline
00171 boolean gnFileContig::SetSectEnd( const gnContigSection i, const uint64 e )
00172 {
00173 if( (uint32)i < CONTIG_SECTION_SIZE )
00174 {
00175 m_startEndArray[(uint32)i].second = e;
00176 return true;
00177 }
00178 return false;
00179 }
00180 inline
00181 boolean gnFileContig::SetSectStartEnd( const gnContigSection i, const pair<uint64,uint64> se )
00182 {
00183 if( (uint32)i < CONTIG_SECTION_SIZE )
00184 {
00185 m_startEndArray[(uint32)i] = se;
00186 return true;
00187 }
00188 return false;
00189 }
00190 inline
00191 boolean gnFileContig::SetRepeatSeqGap( const boolean rsg )
00192 {
00193 m_repeatSeqGap = rsg;
00194 return true;
00195 }
00196 inline
00197 boolean gnFileContig::SetRepeatSeqGapSize( const pair<uint64,uint64> rsgSize )
00198 {
00199 return SetRepeatSeqSize( rsgSize.first ) &&
00200 SetRepeatGapSize( rsgSize.second );
00201 }
00202
00203
00204 #endif
00205