Download include/google/protobuf/generated_enum_util.h from Shenghong/dai_env: direct link, hf CLI and curl.
- Browser
- Download file 3.93 kB
-
https://huggingface.co/Shenghong/dai_env/resolve/main/include/google/protobuf/generated_enum_util.h
- Command line
-
hf download hf://Shenghong/dai_env/include/google/protobuf/generated_enum_util.h
-
curl -L -o generated_enum_util.h https://huggingface.co/Shenghong/dai_env/resolve/main/include/google/protobuf/generated_enum_util.h
3.93 kB
| // Protocol Buffers - Google's data interchange format | |
| // Copyright 2008 Google Inc. All rights reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file or at | |
| // https://developers.google.com/open-source/licenses/bsd | |
| // Must be included last. | |
| namespace google { | |
| namespace protobuf { | |
| // This type trait can be used to cause templates to only match proto2 enum | |
| // types. | |
| template <typename T> | |
| struct is_proto_enum : ::std::false_type {}; | |
| namespace internal { | |
| // The table entry format for storing enum name-to-value mapping used with lite | |
| // protos. This struct and the following related functions should only be used | |
| // by protobuf generated code. | |
| struct EnumEntry { | |
| absl::string_view name; | |
| int value; | |
| }; | |
| // Looks up a numeric enum value given the string name. | |
| PROTOBUF_EXPORT bool LookUpEnumValue(const EnumEntry* enums, size_t size, | |
| absl::string_view name, int* value); | |
| // Looks up an enum name given the numeric value. | |
| PROTOBUF_EXPORT int LookUpEnumName(const EnumEntry* enums, | |
| const int* sorted_indices, size_t size, | |
| int value); | |
| // Initializes the list of enum names in std::string form. | |
| PROTOBUF_EXPORT bool InitializeEnumStrings( | |
| const EnumEntry* enums, const int* sorted_indices, size_t size, | |
| internal::ExplicitlyConstructed<std::string>* enum_strings); | |
| // The enum validation format is split in 3 parts: | |
| // - A dense sequence, with start+length | |
| // - A variable size presence bitmap (in increments of 32 bits) | |
| // - A variable size sorted int32_t set for everything else. | |
| // | |
| // The values are as follows: | |
| // | |
| // 0 - [ sequence start (int16_t) ] | [ sequence size (uint16_t) ] << 16 | |
| // 1 - [ bitmap size in bits (uint16_t) ] | [ ordered size (uint16_t) ] << 16 | |
| // x - [ variable length bitmap ] | |
| // y - [ variable length of int32_t values ] | |
| // | |
| // where the bitmap starts right after the end of the sequence. | |
| PROTOBUF_EXPORT bool ValidateEnum(int value, const uint32_t* data); | |
| PROTOBUF_EXPORT std::vector<uint32_t> GenerateEnumData( | |
| absl::Span<const int32_t> values); | |
| inline PROTOBUF_ALWAYS_INLINE bool ValidateEnumInlined(int value, | |
| const uint32_t* data) { | |
| const int16_t min_seq = static_cast<int16_t>(data[0] & 0xFFFF); | |
| const uint16_t length_seq = static_cast<uint16_t>(data[0] >> 16); | |
| uint64_t adjusted = | |
| static_cast<uint64_t>(static_cast<int64_t>(value)) - min_seq; | |
| // Check if the value is within the sequential part. | |
| if (PROTOBUF_PREDICT_TRUE(adjusted < length_seq)) { | |
| return true; | |
| } | |
| const uint16_t length_bitmap = static_cast<uint16_t>(data[1] & 0xFFFF); | |
| adjusted -= length_seq; | |
| // Check if the value is within the bitmap. | |
| if (PROTOBUF_PREDICT_TRUE(adjusted < length_bitmap)) { | |
| return ((data[2 + (adjusted / 32)] >> (adjusted % 32)) & 1) == 1; | |
| } | |
| // Check if the value is on the ordered part. | |
| const uint16_t num_ordered = static_cast<uint16_t>(data[1] >> 16); | |
| data += 2 + length_bitmap / 32; | |
| size_t pos = 0; | |
| while (pos < num_ordered) { | |
| const int32_t sample = static_cast<int32_t>(data[pos]); | |
| if (sample == value) return true; | |
| pos = 2 * pos + (sample > value ? 1 : 2); | |
| } | |
| return false; | |
| } | |
| } // namespace internal | |
| } // namespace protobuf | |
| } // namespace google | |