message: Add COMPACTSIZE wrapper similar to VARINT for serialization
  backports bitcoin@5249daca5a8c4ebdc6c9a3090af0e1bdddcfba1b
diff: @@ -413,6 +413,7 @@ I ReadVarInt(Stream& is)
  #define FLATDATA(obj) REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj)))
  #define VARINT(obj) REF(WrapVarInt(REF(obj)))
  +#define COMPACTSIZE(obj) REF(CCompactSize(REF(obj)))
  #define LIMITED_STRING(obj, n) REF(LimitedString<n>(REF(obj)))
  /**
  @@ -488,6 +489,28 @@ public:
  }
  };
  +class CCompactSize
  +{
  +protected:
  + uint64_t &n;
  +public:
  + CCompactSize(uint64_t& nIn) : n(nIn) { }
  +
  + unsigned int GetSerializeSize(int, int) const {
  + return GetSizeOfCompactSize(n);
  + }
  +
  + template<typename Stream>
  + void Serialize(Stream &s, int, int) const {
  + WriteCompactSize<Stream>(s, n);
  + }
  +
  + template<typename Stream>
  + void Unserialize(Stream& s, int, int) {
  + n = ReadCompactSize<Stream>(s);
  + }
  +};
  +
  template <size_t Limit>
  class LimitedString
  {
  