diff options
author | thegeorg <thegeorg@yandex-team.ru> | 2022-02-10 16:45:08 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:08 +0300 |
commit | 4e839db24a3bbc9f1c610c43d6faaaa99824dcca (patch) | |
tree | 506dac10f5df94fab310584ee51b24fc5a081c22 /contrib/libs/apache/avro/api/Reader.hh | |
parent | 2d37894b1b037cf24231090eda8589bbb44fb6fc (diff) | |
download | ydb-4e839db24a3bbc9f1c610c43d6faaaa99824dcca.tar.gz |
Restoring authorship annotation for <thegeorg@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/apache/avro/api/Reader.hh')
-rw-r--r-- | contrib/libs/apache/avro/api/Reader.hh | 418 |
1 files changed, 209 insertions, 209 deletions
diff --git a/contrib/libs/apache/avro/api/Reader.hh b/contrib/libs/apache/avro/api/Reader.hh index 4f514fbbe9..26488145a2 100644 --- a/contrib/libs/apache/avro/api/Reader.hh +++ b/contrib/libs/apache/avro/api/Reader.hh @@ -1,209 +1,209 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef avro_Reader_hh__ -#define avro_Reader_hh__ - -#include <stdint.h> -#include <vector> -#include <array> -#include <boost/noncopyable.hpp> - -#include "Config.hh" -#include "Zigzag.hh" -#include "Types.hh" -#include "Validator.hh" -#include "buffer/BufferReader.hh" - -namespace avro { - -/// -/// Parses from an avro encoding to the requested type. Assumes the next item -/// in the avro binary data is the expected type. -/// - -template<class ValidatorType> -class ReaderImpl : private boost::noncopyable -{ - - public: - - explicit ReaderImpl(const InputBuffer &buffer) : - reader_(buffer) - {} - - ReaderImpl(const ValidSchema &schema, const InputBuffer &buffer) : - validator_(schema), - reader_(buffer) - {} - - void readValue(Null &) { - validator_.checkTypeExpected(AVRO_NULL); - } - - void readValue(bool &val) { - validator_.checkTypeExpected(AVRO_BOOL); - uint8_t ival = 0; - reader_.read(ival); - val = (ival != 0); - } - - void readValue(int32_t &val) { - validator_.checkTypeExpected(AVRO_INT); - uint32_t encoded = static_cast<uint32_t>(readVarInt()); - val = decodeZigzag32(encoded); - } - - void readValue(int64_t &val) { - validator_.checkTypeExpected(AVRO_LONG); - uint64_t encoded = readVarInt(); - val = decodeZigzag64(encoded); - } - - void readValue(float &val) { - validator_.checkTypeExpected(AVRO_FLOAT); - union { - float f; - uint32_t i; - } v; - reader_.read(v.i); - val = v.f; - } - - void readValue(double &val) { - validator_.checkTypeExpected(AVRO_DOUBLE); - union { - double d; - uint64_t i; - } v; - reader_.read(v.i); - val = v.d; - } - - void readValue(std::string &val) { - validator_.checkTypeExpected(AVRO_STRING); - size_t size = static_cast<size_t>(readSize()); - reader_.read(val, size); - } - - void readBytes(std::vector<uint8_t> &val) { - validator_.checkTypeExpected(AVRO_BYTES); - size_t size = static_cast<size_t>(readSize()); - val.resize(size); - reader_.read(reinterpret_cast<char *>(val.data()), size); - } - - void readFixed(uint8_t *val, size_t size) { - validator_.checkFixedSizeExpected(size); - reader_.read(reinterpret_cast<char *>(val), size); - } - - template <size_t N> - void readFixed(uint8_t (&val)[N]) { - this->readFixed(val, N); - } - - template <size_t N> - void readFixed(std::array<uint8_t, N> &val) { - this->readFixed(val.data(), N); - } - - void readRecord() { - validator_.checkTypeExpected(AVRO_RECORD); - validator_.checkTypeExpected(AVRO_LONG); - validator_.setCount(1); - } - - void readRecordEnd() { - validator_.checkTypeExpected(AVRO_RECORD); - validator_.checkTypeExpected(AVRO_LONG); - validator_.setCount(0); - } - - int64_t readArrayBlockSize() { - validator_.checkTypeExpected(AVRO_ARRAY); - return readCount(); - } - - int64_t readUnion() { - validator_.checkTypeExpected(AVRO_UNION); - return readCount(); - } - - int64_t readEnum() { - validator_.checkTypeExpected(AVRO_ENUM); - return readCount(); - } - - int64_t readMapBlockSize() { - validator_.checkTypeExpected(AVRO_MAP); - return readCount(); - } - - Type nextType() const { - return validator_.nextTypeExpected(); - } - - bool currentRecordName(std::string &name) const { - return validator_.getCurrentRecordName(name); - } - - bool nextFieldName(std::string &name) const { - return validator_.getNextFieldName(name); - } - - private: - - uint64_t readVarInt() { - uint64_t encoded = 0; - uint8_t val = 0; - int shift = 0; - do { - reader_.read(val); - uint64_t newbits = static_cast<uint64_t>(val & 0x7f) << shift; - encoded |= newbits; - shift += 7; - } while (val & 0x80); - - return encoded; - } - - int64_t readSize() { - uint64_t encoded = readVarInt(); - int64_t size = decodeZigzag64(encoded); - return size; - } - - int64_t readCount() { - validator_.checkTypeExpected(AVRO_LONG); - int64_t count = readSize(); - validator_.setCount(count); - return count; - } - - ValidatorType validator_; - BufferReader reader_; - -}; - -typedef ReaderImpl<NullValidator> Reader; -typedef ReaderImpl<Validator> ValidatingReader; - -} // namespace avro - -#endif +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef avro_Reader_hh__ +#define avro_Reader_hh__ + +#include <stdint.h> +#include <vector> +#include <array> +#include <boost/noncopyable.hpp> + +#include "Config.hh" +#include "Zigzag.hh" +#include "Types.hh" +#include "Validator.hh" +#include "buffer/BufferReader.hh" + +namespace avro { + +/// +/// Parses from an avro encoding to the requested type. Assumes the next item +/// in the avro binary data is the expected type. +/// + +template<class ValidatorType> +class ReaderImpl : private boost::noncopyable +{ + + public: + + explicit ReaderImpl(const InputBuffer &buffer) : + reader_(buffer) + {} + + ReaderImpl(const ValidSchema &schema, const InputBuffer &buffer) : + validator_(schema), + reader_(buffer) + {} + + void readValue(Null &) { + validator_.checkTypeExpected(AVRO_NULL); + } + + void readValue(bool &val) { + validator_.checkTypeExpected(AVRO_BOOL); + uint8_t ival = 0; + reader_.read(ival); + val = (ival != 0); + } + + void readValue(int32_t &val) { + validator_.checkTypeExpected(AVRO_INT); + uint32_t encoded = static_cast<uint32_t>(readVarInt()); + val = decodeZigzag32(encoded); + } + + void readValue(int64_t &val) { + validator_.checkTypeExpected(AVRO_LONG); + uint64_t encoded = readVarInt(); + val = decodeZigzag64(encoded); + } + + void readValue(float &val) { + validator_.checkTypeExpected(AVRO_FLOAT); + union { + float f; + uint32_t i; + } v; + reader_.read(v.i); + val = v.f; + } + + void readValue(double &val) { + validator_.checkTypeExpected(AVRO_DOUBLE); + union { + double d; + uint64_t i; + } v; + reader_.read(v.i); + val = v.d; + } + + void readValue(std::string &val) { + validator_.checkTypeExpected(AVRO_STRING); + size_t size = static_cast<size_t>(readSize()); + reader_.read(val, size); + } + + void readBytes(std::vector<uint8_t> &val) { + validator_.checkTypeExpected(AVRO_BYTES); + size_t size = static_cast<size_t>(readSize()); + val.resize(size); + reader_.read(reinterpret_cast<char *>(val.data()), size); + } + + void readFixed(uint8_t *val, size_t size) { + validator_.checkFixedSizeExpected(size); + reader_.read(reinterpret_cast<char *>(val), size); + } + + template <size_t N> + void readFixed(uint8_t (&val)[N]) { + this->readFixed(val, N); + } + + template <size_t N> + void readFixed(std::array<uint8_t, N> &val) { + this->readFixed(val.data(), N); + } + + void readRecord() { + validator_.checkTypeExpected(AVRO_RECORD); + validator_.checkTypeExpected(AVRO_LONG); + validator_.setCount(1); + } + + void readRecordEnd() { + validator_.checkTypeExpected(AVRO_RECORD); + validator_.checkTypeExpected(AVRO_LONG); + validator_.setCount(0); + } + + int64_t readArrayBlockSize() { + validator_.checkTypeExpected(AVRO_ARRAY); + return readCount(); + } + + int64_t readUnion() { + validator_.checkTypeExpected(AVRO_UNION); + return readCount(); + } + + int64_t readEnum() { + validator_.checkTypeExpected(AVRO_ENUM); + return readCount(); + } + + int64_t readMapBlockSize() { + validator_.checkTypeExpected(AVRO_MAP); + return readCount(); + } + + Type nextType() const { + return validator_.nextTypeExpected(); + } + + bool currentRecordName(std::string &name) const { + return validator_.getCurrentRecordName(name); + } + + bool nextFieldName(std::string &name) const { + return validator_.getNextFieldName(name); + } + + private: + + uint64_t readVarInt() { + uint64_t encoded = 0; + uint8_t val = 0; + int shift = 0; + do { + reader_.read(val); + uint64_t newbits = static_cast<uint64_t>(val & 0x7f) << shift; + encoded |= newbits; + shift += 7; + } while (val & 0x80); + + return encoded; + } + + int64_t readSize() { + uint64_t encoded = readVarInt(); + int64_t size = decodeZigzag64(encoded); + return size; + } + + int64_t readCount() { + validator_.checkTypeExpected(AVRO_LONG); + int64_t count = readSize(); + validator_.setCount(count); + return count; + } + + ValidatorType validator_; + BufferReader reader_; + +}; + +typedef ReaderImpl<NullValidator> Reader; +typedef ReaderImpl<Validator> ValidatingReader; + +} // namespace avro + +#endif |