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 void IEdge_t::writeMessage (
Message_t & msg)
const
00066
{
00067
try {
00068
00069
if ( !links_m . empty( ) )
00070 {
00071 string s;
00072 ostringstream ss;
00073 vector<ID_t>::const_iterator vi;
00074
00075
for ( vi = links_m . begin( ); vi != links_m . end( ); vi ++ )
00076 {
00077 ss << *vi << endl;
00078 s . append (ss . str( ));
00079 ss . str (
NULL_STRING);
00080 }
00081
00082 msg . setField (
F_LINK, s);
00083 }
00084 }
00085
catch (
ArgumentException_t) {
00086
00087 msg .
clear( );
00088
throw;
00089 }
00090 }
00091
00092
00093
00094 void IEdge_t::writeRecord (ostream & fix, ostream & var)
const
00095
{
00096
Size_t size = links_m . size( );
00097
writeLE (fix, &size);
00098
00099
for (
Pos_t i = 0; i < size; i ++ )
00100
writeLE (var, &(links_m [i]));
00101 }
00102
00103
00104
00105 const NCode_t Edge_t::NCODE =
M_EDGE;
00106
00107
00108
00109 void Edge_t::readMessage (
const Message_t & msg)
00110 {
00111
Link_t::readMessage (msg);
00112
IEdge_t::readMessage (msg);
00113 }
00114
00115
00116
00117 void Edge_t::readRecord (istream & fix, istream & var)
00118 {
00119
Link_t::readRecord (fix, var);
00120
IEdge_t::readRecord (fix, var);
00121 }
00122
00123
00124
00125 void Edge_t::writeMessage (
Message_t & msg)
const
00126
{
00127
Link_t::writeMessage (msg);
00128
IEdge_t::writeMessage (msg);
00129
00130
try {
00131
00132 msg . setMessageCode (Edge_t::NCODE);
00133
00134 }
00135
catch (
ArgumentException_t) {
00136
00137 msg .
clear( );
00138
throw;
00139 }
00140 }
00141
00142
00143
00144 void Edge_t::writeRecord (ostream & fix, ostream & var)
const
00145
{
00146
Link_t::writeRecord (fix, var);
00147
IEdge_t::writeRecord (fix, var);
00148 }