// Copyright 2020 The Pigweed Authors // // Licensed 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. #include #include "pw_bloat/bloat_this_binary.h" #include "pw_protobuf/decoder.h" namespace { // clang-format off constexpr uint8_t encoded_proto[] = { // type=int32, k=1, v=42 0x08, 0x2a, // type=sint32, k=2, v=-13 0x10, 0x19, }; // clang-format on } // namespace int* volatile non_optimizable_pointer; int main() { pw::bloat::BloatThisBinary(); int32_t test_int32, test_sint32; std::string_view str; float f; double d; uint32_t uint; pw::protobuf::Decoder decoder(pw::as_bytes(pw::span(encoded_proto))); while (decoder.Next().ok()) { switch (decoder.FieldNumber()) { case 1: decoder.ReadInt32(&test_int32).IgnoreError(); break; case 2: decoder.ReadSint32(&test_sint32).IgnoreError(); break; case 3: decoder.ReadString(&str).IgnoreError(); break; case 4: decoder.ReadFloat(&f).IgnoreError(); break; case 5: decoder.ReadDouble(&d).IgnoreError(); break; // Extra fields over decoder_full. case 21: decoder.ReadInt32(&test_int32).IgnoreError(); break; case 22: decoder.ReadUint32(&uint).IgnoreError(); break; case 23: decoder.ReadSint32(&test_sint32).IgnoreError(); break; } } *non_optimizable_pointer = test_int32 + test_sint32; return 0; }