bool decodeBytesWithReader()

in hessian2/basic_codec/byte_codec.cc [23:73]


bool decodeBytesWithReader(std::vector<uint8_t> &output, ReaderPtr &reader) {
  uint8_t code = reader->read<uint8_t>().second;
  switch (code) {
    case 0x20:
    case 0x21:
    case 0x22:
    case 0x23:
    case 0x24:
    case 0x25:
    case 0x26:
    case 0x27:
    case 0x28:
    case 0x29:
    case 0x2a:
    case 0x2b:
    case 0x2c:
    case 0x2d:
    case 0x2e:
    case 0x2f:
      if (!readBytes(output, reader, code - 0x20, true)) {
        return false;
      }
      return true;
    case 0x34:
    case 0x35:
    case 0x36:
    case 0x37: {
      auto res = reader->read<uint8_t>();
      if (!res.first ||
          !readBytes(output, reader, ((code - 0x34) << 8) + res.second, true)) {
        return false;
      }
      return true;
    }
    case 0x42: {
      auto res = reader->readBE<uint16_t>();
      if (!res.first) {
        return false;
      }
      return readBytes(output, reader, res.second, true);
    }
    case 0x41: {
      auto res = reader->readBE<uint16_t>();
      if (!res.first) {
        return false;
      }
      return readBytes(output, reader, res.second, false);
    }
  }
  return false;
}