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