00001
00002 #ifndef vsl_map_io_txx_
00003 #define vsl_map_io_txx_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "vsl_map_io.h"
00015 #include <vsl/vsl_binary_io.h>
00016
00017
00018
00019 template <class Key, class T, class Compare>
00020 void vsl_b_write(vsl_b_ostream& s, const vcl_map<Key, T, Compare>& v)
00021 {
00022 const short version_no = 1;
00023 vsl_b_write(s, version_no);
00024 vsl_b_write(s, v.size());
00025 for (typename vcl_map<Key, T, Compare>::const_iterator iter = v.begin(); iter != v.end(); iter++)
00026 {
00027 vsl_b_write(s,(*iter).first);
00028 vsl_b_write(s,(*iter).second);
00029 }
00030 }
00031
00032
00033
00034 template <class Key, class T, class Compare>
00035 void vsl_b_read(vsl_b_istream& is, vcl_map<Key, T, Compare>& v)
00036 {
00037 if (!is) return;
00038
00039 v.clear();
00040 unsigned map_size;
00041 short ver;
00042 vsl_b_read(is, ver);
00043 switch (ver)
00044 {
00045 case 1:
00046 vsl_b_read(is, map_size);
00047 for (unsigned i=0; i<map_size; i++)
00048 {
00049 Key first_val;
00050 T second_val;
00051 vsl_b_read(is, first_val);
00052 vsl_b_read(is, second_val);
00053 v[first_val] = second_val;
00054 }
00055 break;
00056 default:
00057 vcl_cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, vcl_map<K, T>&)\n"
00058 << " Unknown version number "<< ver << '\n';
00059 is.is().clear(vcl_ios::badbit);
00060 return;
00061 }
00062 }
00063
00064
00065
00066 template <class Key, class T, class Compare>
00067 void vsl_print_summary(vcl_ostream& os, const vcl_map<Key, T, Compare> &v)
00068 {
00069 os << "Map size: " << v.size() << vcl_endl;
00070 unsigned i=0;
00071 for (typename vcl_map<Key, T, Compare>::const_iterator iter = v.begin();
00072 iter != v.end() && i< 5; ++iter,++i)
00073 {
00074 os << ' ' << i << ": ";
00075 vsl_print_summary(os, (*iter).first);
00076 os << ", ";
00077 vsl_print_summary(os, (*iter).second);
00078 os << vcl_endl;
00079 }
00080 if (v.size() > 5)
00081 os << " ...\n";
00082 }
00083
00084
00085 #define VSL_MAP_IO_INSTANTIATE(Key, T, Compare) \
00086 template void vsl_print_summary(vcl_ostream&, const vcl_map<Key, T, Compare >&); \
00087 template void vsl_b_write(vsl_b_ostream& s, const vcl_map<Key, T, Compare >& v); \
00088 template void vsl_b_read(vsl_b_istream& s, vcl_map<Key, T, Compare >& v)
00089
00090
00091
00092 template <class Key, class T, class Compare>
00093 void vsl_b_write(vsl_b_ostream& s, const vcl_multimap<Key, T, Compare>& v)
00094 {
00095 const short version_no = 1;
00096 vsl_b_write(s, version_no);
00097 vsl_b_write(s, v.size());
00098 for (typename vcl_multimap<Key, T, Compare>::const_iterator iter = v.begin();
00099 iter != v.end(); iter++)
00100 {
00101 vsl_b_write(s,(*iter).first);
00102 vsl_b_write(s,(*iter).second);
00103 }
00104 }
00105
00106
00107
00108 template <class Key, class T, class Compare>
00109 void vsl_b_read(vsl_b_istream& is, vcl_multimap<Key, T, Compare>& v)
00110 {
00111 if (!is) return;
00112
00113 v.clear();
00114 unsigned multimap_size;
00115 short ver;
00116 vsl_b_read(is, ver);
00117 switch (ver)
00118 {
00119 case 1:
00120 vsl_b_read(is, multimap_size);
00121 for (unsigned i=0; i<multimap_size; i++)
00122 {
00123 Key first_val;
00124 T second_val;
00125 vsl_b_read(is, first_val);
00126 vsl_b_read(is, second_val);
00127 v.insert( vcl_make_pair(first_val, second_val));
00128 }
00129 break;
00130 default:
00131 vcl_cerr << "I/O ERROR: vsl_b_read(vsl_b_istream&, vcl_multimap<K, T>&)\n"
00132 << " Unknown version number "<< ver << '\n';
00133 is.is().clear(vcl_ios::badbit);
00134 return;
00135 }
00136 }
00137
00138
00139
00140 template <class Key, class T, class Compare>
00141 void vsl_print_summary(vcl_ostream& os, const vcl_multimap<Key, T, Compare> &v)
00142 {
00143 os << "multimap size: " << v.size() << vcl_endl;
00144 unsigned i=0;
00145 for (typename vcl_multimap<Key, T, Compare>::const_iterator iter = v.begin();
00146 iter != v.end() && i< 5; ++iter,++i)
00147 {
00148 os << ' ' << i << ": ";
00149 vsl_print_summary(os, (*iter).first);
00150 os << ", ";
00151 vsl_print_summary(os, (*iter).second);
00152 os << vcl_endl;
00153 }
00154 if (v.size() > 5)
00155 os << " ...\n";
00156 }
00157
00158
00159 #define VSL_MULTIMAP_IO_INSTANTIATE(Key, T, Compare) \
00160 template void vsl_print_summary(vcl_ostream&, const vcl_multimap<Key, T, Compare >&); \
00161 template void vsl_b_write(vsl_b_ostream& s, const vcl_multimap<Key, T, Compare >& v); \
00162 template void vsl_b_read(vsl_b_istream& s, vcl_multimap<Key, T, Compare >& v)
00163
00164 #endif // vsl_map_io_txx_