+ uint16_t rv_u = ReadU16();
+ if( rv_u < 0x8000 )
+ return rv_u;
+ else
+ return ~rv_u + 1;
+}
+
+::uint32_t CDeserialiser::ReadU32()
+{
+ uint32_t rv = ReadU16();
+ rv |= (uint32_t)ReadU16() << 16;
+ return rv;
+}
+
+::uint64_t CDeserialiser::ReadU64()
+{
+ uint64_t rv = ReadU32();
+ rv |= (uint64_t)ReadU32() << 32;
+ return rv;
+}
+
+const ::std::vector<uint8_t> CDeserialiser::ReadBuffer()
+{
+ RangeCheck("CDeserialiser::ReadBuffer(len)", 2);
+ size_t size = ReadU16();
+
+ auto range_start = m_vect.begin() + int(m_offset);
+ ::std::vector<uint8_t> ret( range_start, range_start + int(size) );
+ m_offset += size;
+ return ret;