27 #ifndef __k2VectorStreaming__ 28 #define __k2VectorStreaming__ 30 #include "IPMStream.h" 31 #include "KeyValuePair.h" 34 #include "WideString.h" 45 inline void K2Write(
IPMStream* stream, int8 n)
47 unsigned char temp = n;
51 inline void K2Read(
IPMStream* stream, int8& n)
53 unsigned char temp(0);
59 inline void K2Write(
IPMStream* stream, int16 n)
64 inline void K2Read(
IPMStream* stream, int16& n)
70 inline void K2Write(
IPMStream* stream, int32 n)
75 inline void K2Read(
IPMStream* stream, int32& n)
81 inline void K2Write(
IPMStream* stream, uint8 n)
86 inline void K2Read(
IPMStream* stream, uint8& n)
92 inline void K2Write(
IPMStream* stream, uint16 n)
98 inline void K2Read(
IPMStream* stream, uint16& n)
106 inline void K2Write(
IPMStream* stream, uint32 n)
112 inline void K2Read(
IPMStream* stream, uint32& n)
133 K2Write(stream, n.
X());
134 K2Write(stream, n.
Y());
139 K2Read(stream, n.
X());
140 K2Read(stream, n.
Y());
146 K2Write(stream, n.
Top());
147 K2Write(stream, n.
Left());
148 K2Write(stream, n.
Bottom());
149 K2Write(stream, n.
Right());
154 K2Read(stream, n.
Top());
155 K2Read(stream, n.
Left());
156 K2Read(stream, n.
Bottom());
157 K2Read(stream, n.
Right());
162 #define DEFINEK2READWRITE( K2TYPE ) \ 163 inline void K2Write(IPMStream* stream, const K2TYPE& n) { K2TYPE& temp = const_cast<K2TYPE&>(n); temp.ReadWrite(stream); } \ 164 inline void K2Read(IPMStream* stream, K2TYPE& n) { n.ReadWrite(stream); } 186 template <
class _T1,
class _T2>
190 K2Write( s, temp.fKey ) ;
191 K2Write( s, temp.fValue ) ;
194 template <
class _T1,
class _T2>
197 K2Read( s, kvp.fKey ) ;
198 K2Read( s, kvp.fValue ) ;
203 void K2WriteBlock(
IPMStream* stream, uint32 count,
const T* block)
205 for (uint32 i = 0; i < count; ++i)
206 K2Write(stream, block[i]);
210 void K2ReadBlock(
IPMStream* stream, uint32 count, T* block)
212 for (uint32 i = 0; i < count; ++i)
213 K2Read(stream, block[i]);
218 inline void K2WriteBlock(
IPMStream* stream, uint32 count,
const char* block)
220 stream->
XferByte((uint8*) block, count*
sizeof(
char));
224 inline void K2ReadBlock(
IPMStream* stream, uint32 count,
char* block)
226 stream->
XferByte((uint8*) block, count*
sizeof(
char));
231 void K2WriteBlock(
IPMStream* stream, uint32 count,
const int16* block);
234 void K2ReadBlock(
IPMStream* stream, uint32 count, int16* block);
238 void K2WriteBlock(
IPMStream* stream, uint32 count,
const uint16* block);
241 void K2ReadBlock(
IPMStream* stream, uint32 count, uint16* block);
245 void K2WriteBlock(
IPMStream* stream, uint32 count,
const int32* block);
248 void K2ReadBlock(
IPMStream* stream, uint32 count, int32* block);
251 #if 1 // $$$ not safe while UIDs are uint32's 253 void K2WriteBlock(
IPMStream* stream, uint32 count,
const uint32* block);
256 void K2ReadBlock(
IPMStream* stream, uint32 count, uint32* block);
266 template <
class T,
class A>
269 ASSERT(stream != nil);
272 using namespace K2Meta;
275 int32 count = v.size();
278 K2WriteBlock(stream, count, v.begin());
281 template <
class T,
class A>
284 ASSERT(stream != nil);
287 using namespace K2Meta;
292 v.resize(count, T());
294 K2ReadBlock(stream, count, v.begin());
302 template <
class T,
class A>
324 #endif // __k2VectorStreaming__