|  | // 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 <stddef.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #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_ |