// Protocol Buffers - Google's data interchange format // Copyright 2025 Google LLC. 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 #ifndef UPB_WIRE_INTERNAL_DECODE_FAST_SELECT_H_ #define UPB_WIRE_INTERNAL_DECODE_FAST_SELECT_H_ #include #include #include "upb/mini_table/internal/message.h" #include "upb/mini_table/message.h" // Must be last. #include "upb/port/def.inc" #ifdef __cplusplus extern "C" { #endif typedef struct { // The function that will be called to parse this field. The function // pointer for it must be placed into _upb_FastTable_Entry.field_parser. // // The function pointer can be either looked up at runtime via // upb_DecodeFast_GetFunctionPointer(), or be referenced in generated code via // upb_DecodeFast_GetFunctionName(). uint32_t function_idx; // The associated data that will be passed to the function. This must be // placed into _upb_FastTable_Entry.field_data. uint64_t function_data; } upb_DecodeFast_TableEntry; // Builds the fasttable for the given message. The table will be written into // the given array. Returns the number of entries in the table that were // actually used, and should be written to the MiniTable (this number may be // less than 32). // // This function will assume that the lower a field number, the hotter the field // is. If at some point we get access to more information about field usage, // we should consider using that instead. int upb_DecodeFast_BuildTable(const upb_MiniTable* m, upb_DecodeFast_TableEntry table[32]); // Returns the mask that should be placed into the table_mask field of the // mini table for the given table size. uint8_t upb_DecodeFast_GetTableMask(int table_size); // Translates a function index into the canonical function name which can be // emitted into generated code. const char* upb_DecodeFast_GetFunctionName(uint32_t function_idx); // Returns a function pointer for the given function index. _upb_FieldParser* upb_DecodeFast_GetFunctionPointer(uint32_t function_idx); #ifdef __cplusplus } // extern "C" #endif #include "upb/port/undef.inc" #endif // UPB_WIRE_INTERNAL_DECODE_FAST_SELECT_H_