Layout_AMOS.cc

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 #include "Layout_AMOS.hh"
00011 using namespace AMOS;
00012 using namespace std;
00013 
00014 
00015 
00016 
00017 //================================================ Layout_t ====================
00018 const NCode_t Layout_t::NCODE = M_LAYOUT;
00019 
00020 
00021 //----------------------------------------------------- getSpan ----------------
00022 Size_t Layout_t::getSpan ( ) const
00023 {
00024   Pos_t hi,lo;
00025 
00026   if ( tiles_m . empty( ) )
00027     {
00028       hi = 0;
00029       lo = 0;
00030     }
00031   else
00032     {
00033       hi = -(MAX_POS);
00034       lo = MAX_POS;
00035     }
00036 
00037   vector<Tile_t>::const_iterator ti;
00038   for ( ti = tiles_m . begin( ); ti != tiles_m . end( ); ++ ti )
00039     {
00040       if ( ti -> offset < lo )
00041         lo = ti -> offset;
00042       if ( ti -> offset + ti -> range . getLength( ) > hi )
00043         hi = ti -> offset + ti -> range . getLength( );
00044     }
00045 
00046   return hi - lo;
00047 }
00048 
00049 
00050 //----------------------------------------------------- readMessage ------------
00051 void Layout_t::readMessage (const Message_t & msg)
00052 {
00053   Universal_t::readMessage (msg);
00054 
00055   try {
00056     Tile_t tile;
00057     vector<Message_t>::const_iterator vi;
00058 
00059     for ( vi  = msg . getSubMessages( ) . begin( );
00060           vi != msg . getSubMessages( ) . end( ); vi ++ )
00061       {
00062         if ( vi -> getMessageCode( ) == M_TILE )
00063           {
00064             tile . readMessage (*vi);
00065             tiles_m . push_back (tile);
00066           }
00067       }
00068   }
00069   catch (ArgumentException_t) {
00070     
00071     clear( );
00072     throw;
00073   }
00074 }
00075 
00076 
00077 //----------------------------------------------------- readRecord -------------
00078 void Layout_t::readRecord (istream & fix, istream & var)
00079 {
00080   Universal_t::readRecord (fix, var);
00081 
00082   Size_t size;
00083   readLE (fix, &size);
00084 
00085   tiles_m . resize (size);
00086   for ( Pos_t i = 0; i < size; i ++ )
00087     tiles_m [i] . readRecord (var);
00088 }
00089 
00090 
00091 
00092 //----------------------------------------------------- readRecordFix ----------
00093 void Layout_t::readRecordFix (istream & fix)
00094 {
00095   Universal_t::readRecordFix (fix);
00096 
00097   Size_t size;
00098   readLE (fix, &size);
00099 
00100   tiles_m . clear();
00101 }
00102 
00103 
00104 //----------------------------------------------------- writeMessage -----------
00105 void Layout_t::writeMessage (Message_t & msg) const
00106 {
00107   Universal_t::writeMessage (msg);
00108 
00109   try {
00110 
00111     msg . setMessageCode (Layout_t::NCODE);
00112 
00113     if ( !tiles_m . empty( ) )
00114       {
00115         vector<Tile_t>::const_iterator tvi;
00116         Pos_t begin = msg . getSubMessages( ) . size( );
00117         Pos_t end = begin + tiles_m . size( );
00118         msg . getSubMessages( ) . resize (end);
00119 
00120         for ( tvi = tiles_m . begin( ); tvi != tiles_m . end( ); tvi ++ )
00121           tvi -> writeMessage (msg . getSubMessages( ) [begin ++]);
00122       }
00123   }
00124   catch (ArgumentException_t) {
00125 
00126     msg . clear( );
00127     throw;
00128   }
00129 }
00130 
00131 
00132 //----------------------------------------------------- writeRecord ------------
00133 void Layout_t::writeRecord (ostream & fix, ostream & var) const
00134 {
00135   Universal_t::writeRecord (fix, var);
00136 
00137   Size_t size = tiles_m . size( );
00138   writeLE (fix, &size);
00139 
00140   for ( Pos_t i = 0; i < size; i ++ )
00141     tiles_m [i] . writeRecord (var);
00142 }

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