4 template<typename Stream>
5 void WriteCompactSize(Stream& os, uint64_t nSize)
9 unsigned char chSize = (unsigned char)nSize;
10 WRITEDATA(os, chSize);
12 else if (nSize <= std::numeric_limits<unsigned short>::max())
14 unsigned char chSize = 253;
15 unsigned short xSize = (unsigned short)nSize;
16 WRITEDATA(os, chSize);
19 else if (nSize <= std::numeric_limits<unsigned int>::max())
21 unsigned char chSize = 254;
22 unsigned int xSize = (unsigned int)nSize;
23 WRITEDATA(os, chSize);
28 unsigned char chSize = 255;
29 uint64_t xSize = nSize;
30 WRITEDATA(os, chSize);
37 template<typename Stream>
38 uint64_t ReadCompactSize(Stream& is)
42 uint64_t nSizeRet = 0;
47 else if (chSize == 253)
53 else if (chSize == 254)
65 if (nSizeRet > (uint64_t)MAX_SIZE)
66 throw std::ios_base::failure("ReadCompactSize() : size too large");
72 // Template instantiation
74 template void WriteCompactSize<CAutoFile>(CAutoFile&, uint64_t);
75 template void WriteCompactSize<CDataStream>(CDataStream&, uint64_t);
76 template void WriteCompactSize<CHashWriter>(CHashWriter&, uint64_t);
78 template uint64_t ReadCompactSize<CAutoFile>(CAutoFile&);
79 template uint64_t ReadCompactSize<CDataStream>(CDataStream&);