1 // Copyright 2021 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 #pragma once 15 16 #include <cstdint> 17 #include <limits> 18 19 #include "pw_status/status_with_size.h" 20 #include "pw_stream/stream.h" 21 22 namespace pw { 23 namespace varint { 24 25 // Reads a varint-encoded value from a pw::stream. If reading into a signed 26 // integer, the value is ZigZag decoded. 27 // 28 // Returns the number of bytes read from the stream if successful, OutOfRange 29 // if the varint does not fit in a int64_t / uint64_t or if the input is 30 // exhausted before the number terminates. Reads a maximum of 10 bytes or 31 // max_size, whichever is smaller. 32 StatusWithSize Read(stream::Reader& reader, 33 int64_t* output, 34 size_t max_size = std::numeric_limits<size_t>::max()); 35 StatusWithSize Read(stream::Reader& reader, 36 uint64_t* output, 37 size_t max_size = std::numeric_limits<size_t>::max()); 38 39 } // namespace varint 40 } // namespace pw 41