|
|
@ -525,7 +525,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastGtR2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularFixed( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularFixed( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -555,7 +555,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastF64S2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedFixed( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedFixed( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -590,7 +590,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastF64R2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
template <typename LayoutType, typename TagType> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedFixed( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedFixed( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -721,7 +721,7 @@ inline int64_t ZigZagDecodeHelper<int64_t, true>(int64_t value) { |
|
|
|
|
|
|
|
|
|
|
|
// Prefetch the enum data, if necessary.
|
|
|
|
// Prefetch the enum data, if necessary.
|
|
|
|
// We can issue the prefetch before we start parsing the ints.
|
|
|
|
// We can issue the prefetch before we start parsing the ints.
|
|
|
|
PROTOBUF_ALWAYS_INLINE void PrefetchEnumData(uint16_t xform_val, |
|
|
|
inline PROTOBUF_ALWAYS_INLINE void PrefetchEnumData(uint16_t xform_val, |
|
|
|
TcParseTableBase::FieldAux aux) { |
|
|
|
TcParseTableBase::FieldAux aux) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -733,7 +733,7 @@ PROTOBUF_ALWAYS_INLINE void PrefetchEnumData(uint16_t xform_val, |
|
|
|
// way more common than the kTvEnum cases. It is also called from places that
|
|
|
|
// way more common than the kTvEnum cases. It is also called from places that
|
|
|
|
// already have out-of-line functions (like MpVarint) so an extra out-of-line
|
|
|
|
// already have out-of-line functions (like MpVarint) so an extra out-of-line
|
|
|
|
// call to `ValidateEnum` does not affect much.
|
|
|
|
// call to `ValidateEnum` does not affect much.
|
|
|
|
PROTOBUF_ALWAYS_INLINE bool EnumIsValidAux(int32_t val, uint16_t xform_val, |
|
|
|
inline PROTOBUF_ALWAYS_INLINE bool EnumIsValidAux(int32_t val, uint16_t xform_val, |
|
|
|
TcParseTableBase::FieldAux aux) { |
|
|
|
TcParseTableBase::FieldAux aux) { |
|
|
|
if (xform_val == field_layout::kTvRange) { |
|
|
|
if (xform_val == field_layout::kTvRange) { |
|
|
|
auto lo = aux.enum_range.start; |
|
|
|
auto lo = aux.enum_range.start; |
|
|
@ -749,7 +749,7 @@ PROTOBUF_ALWAYS_INLINE bool EnumIsValidAux(int32_t val, uint16_t xform_val, |
|
|
|
} // namespace
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularVarint( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularVarint( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -810,7 +810,7 @@ PROTOBUF_NOINLINE const char* TcParser::SingularVarBigint( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename FieldType> |
|
|
|
template <typename FieldType> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::FastVarintS1( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::FastVarintS1( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
using TagType = uint8_t; |
|
|
|
using TagType = uint8_t; |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
@ -893,7 +893,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastZ64S2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedVarint( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedVarint( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -958,7 +958,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastZ64R2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
template <typename FieldType, typename TagType, bool zigzag> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedVarint( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedVarint( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1060,7 +1060,7 @@ PROTOBUF_NOINLINE const char* TcParser::MpUnknownEnumFallback( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularEnum( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularEnum( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1102,7 +1102,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastEvS2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedEnum( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedEnum( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1154,7 +1154,7 @@ PROTOBUF_NOINLINE void TcParser::AddUnknownEnum(MessageLite* msg, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
template <typename TagType, uint16_t xform_val> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedEnum( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedEnum( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1211,7 +1211,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastEvP2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularEnumSmallRange( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularEnumSmallRange( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1249,7 +1249,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastEr1S2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedEnumSmallRange( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedEnumSmallRange( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1291,7 +1291,7 @@ PROTOBUF_NOINLINE const char* TcParser::FastEr1R2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
template <typename TagType, uint8_t min> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedEnumSmallRange( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::PackedEnumSmallRange( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1406,7 +1406,7 @@ PROTOBUF_ALWAYS_INLINE inline bool IsValidUTF8(ArenaStringPtr& field) { |
|
|
|
} // namespace
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, typename FieldType, TcParser::Utf8Type utf8> |
|
|
|
template <typename TagType, typename FieldType, TcParser::Utf8Type utf8> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularString( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::SingularString( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -1514,7 +1514,7 @@ const char* TcParser::FastUcS2(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename TagType, typename FieldType, TcParser::Utf8Type utf8> |
|
|
|
template <typename TagType, typename FieldType, TcParser::Utf8Type utf8> |
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedString( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::RepeatedString( |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_TC_PARAM_DECL) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) { |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
@ -2208,7 +2208,7 @@ PROTOBUF_NOINLINE const char* TcParser::MpString(PROTOBUF_TC_PARAM_DECL) { |
|
|
|
PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PROTOBUF_ALWAYS_INLINE const char* TcParser::ParseRepeatedStringOnce( |
|
|
|
inline PROTOBUF_ALWAYS_INLINE const char* TcParser::ParseRepeatedStringOnce( |
|
|
|
const char* ptr, SerialArena* serial_arena, ParseContext* ctx, |
|
|
|
const char* ptr, SerialArena* serial_arena, ParseContext* ctx, |
|
|
|
RepeatedPtrField<std::string>& field) { |
|
|
|
RepeatedPtrField<std::string>& field) { |
|
|
|
int size = ReadSize(&ptr); |
|
|
|
int size = ReadSize(&ptr); |
|
|
|