00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00032 #if !defined( OESS_1__IO__CUSTOM__STL__SET_HPP )
00033 #define OESS_1__IO__CUSTOM__STL__SET_HPP
00034
00035 #include <set>
00036
00037 #include <oess_1/defs/h/quantity.hpp>
00038
00039 #include <oess_1/io/h/stream.hpp>
00040
00041 namespace oess_1
00042 {
00043
00044 namespace io
00045 {
00046
00051 template< class T >
00052 oess_1::io::istream_t &
00053 operator>>( oess_1::io::istream_t & s, std::set< T > & o )
00054 {
00055 oess_1::defs::quantity_t q;
00056 s >> q;
00057 std::set< T > tmp;
00058 for( oess_1::uint_t c = q.value(); c; --c )
00059 {
00060 T next;
00061 s >> next;
00062 tmp.insert( next );
00063 }
00064
00065 tmp.swap( o );
00066
00067 return s;
00068 }
00069
00074 template< class T >
00075 oess_1::io::istream_t &
00076 operator>>( oess_1::io::istream_t & s, std::multiset< T > & o )
00077 {
00078 oess_1::defs::quantity_t q;
00079 s >> q;
00080 std::multiset< T > tmp;
00081 for( oess_1::uint_t c = q.value(); c; --c )
00082 {
00083 T next;
00084 s >> next;
00085 tmp.insert( next );
00086 }
00087
00088 tmp.swap( o );
00089
00090 return s;
00091 }
00092
00097 template< class T >
00098 oess_1::io::ostream_t &
00099 operator<<( oess_1::io::ostream_t & s, const std::set< T > & o )
00100 {
00101 oess_1::defs::quantity_t q( o.size() );
00102 s << q;
00103 for( typename std::set< T >::const_iterator i = o.begin(), end = o.end();
00104 i != end; ++i )
00105 {
00106 s << *i;
00107 }
00108 return s;
00109 }
00110
00115 template< class T >
00116 oess_1::io::ostream_t &
00117 operator<<( oess_1::io::ostream_t & s, const std::multiset< T > & o )
00118 {
00119 oess_1::defs::quantity_t q( o.size() );
00120 s << q;
00121 for( typename std::multiset< T >::const_iterator i = o.begin(), end = o.end();
00122 i != end; ++i )
00123 {
00124 s << *i;
00125 }
00126 return s;
00127 }
00128
00129 }
00130
00131 }
00132
00133 #endif
00134