Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Fragment_AMOS.cc

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #include "Fragment_AMOS.hh" 00011 using namespace AMOS; 00012 using namespace std; 00013 00014 00015 00016 00017 //================================================ Fragment_t ================== 00018 const NCode_t Fragment_t::NCODE = M_FRAGMENT; 00019 const FragmentType_t Fragment_t::NULL_FRAGMENT = 0; 00020 const FragmentType_t Fragment_t::OTHER = 'X'; 00021 const FragmentType_t Fragment_t::BAC = 'B'; 00022 const FragmentType_t Fragment_t::INSERT = 'I'; 00023 const FragmentType_t Fragment_t::TRANSPOSON = 'T'; 00024 const FragmentType_t Fragment_t::WALK = 'W'; 00025 00026 00027 //----------------------------------------------------- clear ------------------ 00028 void Fragment_t::clear ( ) 00029 { 00030 Universal_t::clear( ); 00031 size_m = 0; 00032 library_m = source_m . first = reads_m . first = reads_m . second = NULL_ID; 00033 source_m . second = NULL_NCODE; 00034 type_m = NULL_FRAGMENT; 00035 } 00036 00037 00038 //----------------------------------------------------- readMessage------------- 00039 void Fragment_t::readMessage (const Message_t & msg) 00040 { 00041 Universal_t::readMessage (msg); 00042 00043 try { 00044 istringstream ss; 00045 00046 if ( msg . exists (F_LIBRARY) ) 00047 { 00048 ss . str (msg . getField (F_LIBRARY)); 00049 ss >> library_m; 00050 if ( !ss ) 00051 AMOS_THROW_ARGUMENT ("Invalid library link format"); 00052 ss . clear( ); 00053 } 00054 00055 if ( msg . exists (F_SIZE) ) 00056 { 00057 ss . str (msg . getField (F_SIZE)); 00058 ss >> size_m; 00059 if ( !ss ) 00060 AMOS_THROW_ARGUMENT ("Invalid size format"); 00061 ss . clear( ); 00062 } 00063 00064 if ( msg . exists (F_SOURCE) ) 00065 { 00066 string str; 00067 00068 ss . str (msg . getField (F_SOURCE)); 00069 ss >> source_m . first; 00070 ss . ignore ( ); 00071 ss >> str; 00072 if ( !ss || str . length( ) != NCODE_SIZE ) 00073 AMOS_THROW_ARGUMENT ("Invalid source format"); 00074 ss . clear( ); 00075 source_m . second = Encode (str); 00076 } 00077 00078 if ( msg . exists (F_READS) ) 00079 { 00080 ss . str (msg . getField (F_READS)); 00081 ss >> reads_m . first; 00082 ss . ignore( ); 00083 ss >> reads_m . second; 00084 if ( !ss ) 00085 AMOS_THROW_ARGUMENT ("Invalid nodes format"); 00086 ss . clear( ); 00087 } 00088 00089 if ( msg . exists (F_TYPE) ) 00090 { 00091 ss . str (msg . getField (F_TYPE)); 00092 setType (ss . get( )); 00093 ss . clear( ); 00094 } 00095 } 00096 catch (ArgumentException_t) { 00097 00098 clear( ); 00099 throw; 00100 } 00101 } 00102 00103 00104 //----------------------------------------------------- readRecord ------------- 00105 void Fragment_t::readRecord (istream & fix, istream & var) 00106 { 00107 Universal_t::readRecord (fix, var); 00108 00109 readLE (fix, &library_m); 00110 readLE (fix, &size_m); 00111 readLE (fix, &(source_m . first)); 00112 readLE (fix, &(source_m . second)); 00113 readLE (fix, &(reads_m . first)); 00114 readLE (fix, &(reads_m . second)); 00115 type_m = fix . get( ); 00116 } 00117 00118 00119 //----------------------------------------------------- setType ---------------- 00120 void Fragment_t::setType (FragmentType_t type) 00121 { 00122 switch (type) 00123 { 00124 case NULL_FRAGMENT: 00125 case OTHER: 00126 case BAC: 00127 case INSERT: 00128 case TRANSPOSON: 00129 case WALK: 00130 type_m = type; 00131 break; 00132 default: 00133 AMOS_THROW_ARGUMENT ((string)"Invalid fragment type " + type); 00134 } 00135 } 00136 00137 00138 //----------------------------------------------------- writeMessage ----------- 00139 void Fragment_t::writeMessage (Message_t & msg) const 00140 { 00141 Universal_t::writeMessage (msg); 00142 00143 try { 00144 ostringstream ss; 00145 00146 msg . setMessageCode (Fragment_t::NCODE); 00147 00148 if ( library_m != NULL_ID ) 00149 { 00150 ss << library_m; 00151 msg . setField (F_LIBRARY, ss . str( )); 00152 ss . str (NULL_STRING); 00153 } 00154 00155 if ( size_m != 0 ) 00156 { 00157 ss << size_m; 00158 msg . setField (F_SIZE, ss . str( )); 00159 ss .str (NULL_STRING); 00160 } 00161 00162 if ( source_m . first != NULL_ID || source_m . second != NULL_NCODE ) 00163 { 00164 ss << source_m . first << ',' << Decode (source_m . second); 00165 msg . setField (F_SOURCE, ss . str( )); 00166 ss . str (NULL_STRING); 00167 } 00168 00169 if ( reads_m . first != NULL_ID || reads_m . second != NULL_ID ) 00170 { 00171 ss << reads_m . first << ',' << reads_m . second; 00172 msg . setField (F_READS, ss . str( )); 00173 ss . str (NULL_STRING); 00174 } 00175 00176 if ( type_m != NULL_FRAGMENT ) 00177 { 00178 ss << type_m; 00179 msg . setField (F_TYPE, ss . str( )); 00180 ss . str (NULL_STRING); 00181 } 00182 } 00183 catch (ArgumentException_t) { 00184 00185 msg . clear( ); 00186 throw; 00187 } 00188 } 00189 00190 00191 //----------------------------------------------------- writeRecord ------------ 00192 void Fragment_t::writeRecord (ostream & fix, ostream & var) const 00193 { 00194 Universal_t::writeRecord (fix, var); 00195 00196 writeLE (fix, &library_m); 00197 writeLE (fix, &size_m); 00198 writeLE (fix, &(source_m . first)); 00199 writeLE (fix, &(source_m . second)); 00200 writeLE (fix, &(reads_m . first)); 00201 writeLE (fix, &(reads_m . second)); 00202 fix . put (type_m); 00203 }

Generated on Tue May 17 15:19:01 2005 for libAMOS by doxygen 1.3.8