Group_AMOS.cc

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 #include "Group_AMOS.hh"
00011 using namespace AMOS;
00012 using namespace std;
00013 
00014 
00015 
00016 
00017 //================================================ Group_t =====================
00018 const NCode_t Group_t::NCODE = M_GROUP;
00019 
00020 
00021 //----------------------------------------------------- readMessage ------------
00022 void Group_t::readMessage (const Message_t & msg)
00023 {
00024   Universal_t::readMessage (msg);
00025 
00026   try {
00027 
00028     istringstream ss;
00029 
00030     if ( msg . exists (F_MEMBER) )
00031       {
00032         ID_t iid;
00033 
00034         ss . str (msg . getField (F_MEMBER));
00035 
00036         while ( ss )
00037           {
00038             ss >> iid;
00039             if ( ! ss . fail( ) )
00040               mems_m . push_back (iid);
00041           }
00042 
00043         if ( ! ss . eof( ) )
00044           AMOS_THROW_ARGUMENT ("Invalid member list format");
00045         ss . clear( );
00046       }
00047 
00048     if ( msg . exists (F_OBJECT) )
00049       {
00050         string str;
00051 
00052         ss . str (msg . getField (F_OBJECT));
00053         ss >> str;
00054         if ( !ss || str . length( ) != NCODE_SIZE )
00055           AMOS_THROW_ARGUMENT ("Invalid object type format");
00056         ss . clear( );
00057         memtype_m = Encode (str);
00058       }
00059   }
00060   catch (ArgumentException_t) {
00061     
00062     clear( );
00063     throw;
00064   }
00065 }
00066 
00067 
00068 //----------------------------------------------------- readRecord -------------
00069 void Group_t::readRecord (istream & fix, istream & var)
00070 {
00071   Universal_t::readRecord (fix, var);
00072 
00073   Size_t size;
00074   readLE (fix, &size);
00075   readLE (fix, &memtype_m);
00076 
00077   mems_m . resize (size, NULL_ID);
00078   for ( Pos_t i = 0; i < size; i ++ )
00079     readLE (var, &(mems_m [i]));
00080 }
00081 
00082 
00083 
00084 //----------------------------------------------------- readRecordFix ----------
00085 void Group_t::readRecordFix (istream & fix)
00086 {
00087   Universal_t::readRecordFix (fix);
00088 
00089   Size_t size;
00090   readLE (fix, &size);
00091   readLE (fix, &memtype_m);
00092 
00093   mems_m . clear();
00094 }
00095 
00096 
00097 //----------------------------------------------------- writeMessage -----------
00098 void Group_t::writeMessage (Message_t & msg) const
00099 {
00100   Universal_t::writeMessage (msg);
00101 
00102   try {
00103     ostringstream ss;
00104 
00105     msg . setMessageCode (Group_t::NCODE);
00106 
00107     if ( !mems_m . empty( ) )
00108       {
00109         string s;
00110         vector<ID_t>::const_iterator vi;
00111 
00112         for ( vi = mems_m . begin( ); vi != mems_m . end( ); vi ++ )
00113           {
00114             ss << *vi << endl;
00115             s . append (ss . str( ));
00116             ss . str (NULL_STRING);
00117           }
00118 
00119         msg . setField (F_MEMBER, s);
00120       }
00121 
00122     if ( memtype_m != NULL_NCODE )
00123       {
00124         msg . setField (F_OBJECT, Decode (memtype_m));
00125         ss . str (NULL_STRING);
00126       }
00127   }
00128   catch (ArgumentException_t) {
00129 
00130     msg . clear( );
00131     throw;
00132   }
00133 }
00134 
00135 
00136 //----------------------------------------------------- writeRecord ------------
00137 void Group_t::writeRecord (ostream & fix, ostream & var) const
00138 {
00139   Universal_t::writeRecord (fix, var);
00140 
00141   Size_t size = mems_m . size( );
00142   writeLE (fix, &size);
00143   writeLE (fix, &memtype_m);
00144 
00145   for ( Pos_t i = 0; i < size; i ++ )
00146     writeLE (var, &(mems_m [i]));
00147 }

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