protobuf.cpp revision c23fad2f9079f678eae15338f5e57e2a6bf7e391
11754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato/*
21754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Copyright (C) 2016 The Android Open Source Project
31754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
41754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
51754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * you may not use this file except in compliance with the License.
61754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * You may obtain a copy of the License at
71754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
81754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
91754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato *
101754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * Unless required by applicable law or agreed to in writing, software
111754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
121754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * See the License for the specific language governing permissions and
141754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato * limitations under the License.
151754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato */
161754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
17c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jin#include <android/util/protobuf.h>
181754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
19c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinnamespace android {
20c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinnamespace util {
21c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jin
22c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinuint8_t
23c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinread_wire_type(uint32_t varint)
2499c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin{
2599c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin    return (uint8_t) (varint & 0x07);
2699c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin}
2799c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin
28c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinuint32_t
29c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jinread_field_id(uint32_t varint)
3099c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin{
3199c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin    return varint >> 3;
3299c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jin}
330ed9b68a3fa8f6eab536a93cb18ce75d7d22b757Yi Jin
3499c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jinuint8_t*
351754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratowrite_raw_varint(uint8_t* buf, uint32_t val)
361754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
371754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    uint8_t* p = buf;
381754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    while (true) {
391754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        if ((val & ~0x7F) == 0) {
401754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            *p++ = (uint8_t)val;
411754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            return p;
421754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        } else {
431754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            *p++ = (uint8_t)((val & 0x7F) | 0x80);
441754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato            val >>= 7;
451754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato        }
461754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    }
471754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}
481754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
4999c248feb2d1f863b864bdfd1e3b37af17f18732Yi Jinuint8_t*
501754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onoratowrite_length_delimited_tag_header(uint8_t* buf, uint32_t fieldId, size_t size)
511754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato{
521754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    buf = write_raw_varint(buf, (fieldId << 3) | 2);
531754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    buf = write_raw_varint(buf, size);
541754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato    return buf;
551754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato}
561754d744a7a34731ffc07af1bc3dbfcb06864ab0Joe Onorato
57c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jin} // util
58c23fad2f9079f678eae15338f5e57e2a6bf7e391Yi Jin} // android
59