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
00018 const NCode_t Group_t::NCODE =
M_GROUP;
00019
00020
00021
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
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 void Group_t::writeMessage (
Message_t & msg)
const
00085
{
00086
Universal_t::writeMessage (msg);
00087
00088
try {
00089 ostringstream ss;
00090
00091 msg . setMessageCode (Group_t::NCODE);
00092
00093
if ( !mems_m . empty( ) )
00094 {
00095 string s;
00096 vector<ID_t>::const_iterator vi;
00097
00098
for ( vi = mems_m . begin( ); vi != mems_m . end( ); vi ++ )
00099 {
00100 ss << *vi << endl;
00101 s . append (ss . str( ));
00102 ss . str (
NULL_STRING);
00103 }
00104
00105 msg . setField (
F_MEMBER, s);
00106 }
00107
00108
if ( memtype_m !=
NULL_NCODE )
00109 {
00110 msg . setField (
F_OBJECT,
Decode (memtype_m));
00111 ss . str (
NULL_STRING);
00112 }
00113 }
00114
catch (
ArgumentException_t) {
00115
00116 msg .
clear( );
00117
throw;
00118 }
00119 }
00120
00121
00122
00123 void Group_t::writeRecord (ostream & fix, ostream & var)
const
00124
{
00125
Universal_t::writeRecord (fix, var);
00126
00127
Size_t size = mems_m . size( );
00128
writeLE (fix, &size);
00129
writeLE (fix, &memtype_m);
00130
00131
for (
Pos_t i = 0; i < size; i ++ )
00132
writeLE (var, &(mems_m [i]));
00133 }