#ifndef INCLUDE_PERFETTO_PROTOZERO_GEN_FIELD_HELPERS_H_
#define INCLUDE_PERFETTO_PROTOZERO_GEN_FIELD_HELPERS_H_
#include "perfetto/protozero/message.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/protozero/proto_utils.h"
#include "perfetto/protozero/scattered_heap_buffer.h"
namespace protozero {
namespace internal {
namespace gen_helpers {
void DeserializeString(const protozero::Field& field, std::string* dst);
template <proto_utils::ProtoWireType wire_type, typename CppType>
bool DeserializePackedRepeated(const protozero::Field& field,
std::vector<CppType>* dst) { … }
extern template bool
DeserializePackedRepeated<proto_utils::ProtoWireType::kVarInt, uint64_t>(
const protozero::Field& field,
std::vector<uint64_t>* dst);
extern template bool
DeserializePackedRepeated<proto_utils::ProtoWireType::kVarInt, int64_t>(
const protozero::Field& field,
std::vector<int64_t>* dst);
extern template bool
DeserializePackedRepeated<proto_utils::ProtoWireType::kVarInt, uint32_t>(
const protozero::Field& field,
std::vector<uint32_t>* dst);
extern template bool
DeserializePackedRepeated<proto_utils::ProtoWireType::kVarInt, int32_t>(
const protozero::Field& field,
std::vector<int32_t>* dst);
void SerializeTinyVarInt(uint32_t field_id, bool value, Message* msg);
template <typename T>
void SerializeExtendedVarInt(uint32_t field_id, T value, Message* msg) { … }
extern template void SerializeExtendedVarInt<uint64_t>(uint32_t field_id,
uint64_t value,
Message* msg);
extern template void SerializeExtendedVarInt<uint32_t>(uint32_t field_id,
uint32_t value,
Message* msg);
template <typename T>
void SerializeVarInt(uint32_t field_id, T value, Message* msg) { … }
template <typename T>
void SerializeSignedVarInt(uint32_t field_id, T value, Message* msg) { … }
template <typename T>
void SerializeFixed(uint32_t field_id, T value, Message* msg) { … }
extern template void SerializeFixed<double>(uint32_t field_id,
double value,
Message* msg);
extern template void SerializeFixed<float>(uint32_t field_id,
float value,
Message* msg);
extern template void SerializeFixed<uint64_t>(uint32_t field_id,
uint64_t value,
Message* msg);
extern template void SerializeFixed<int64_t>(uint32_t field_id,
int64_t value,
Message* msg);
extern template void SerializeFixed<uint32_t>(uint32_t field_id,
uint32_t value,
Message* msg);
extern template void SerializeFixed<int32_t>(uint32_t field_id,
int32_t value,
Message* msg);
void SerializeString(uint32_t field_id, const std::string& value, Message* msg);
void SerializeUnknownFields(const std::string& unknown_fields, Message* msg);
class MessageSerializer { … };
template <typename T>
bool EqualsField(const T& a, const T& b) { … }
extern template bool EqualsField<std::string>(const std::string&,
const std::string&);
}
}
}
#endif