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

Generated on Mon Feb 22 17:36:27 2010 for libAMOS by  doxygen 1.4.7