PiperOrigin-RevId: 582150596pull/14700/head
parent
b01bd1ba17
commit
8849deab91
10 changed files with 171 additions and 135 deletions
@ -0,0 +1,77 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2023 Google LLC. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
///
|
||||
// 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_MESSAGE_INTERNAL_SIZE_LOG2_H_ |
||||
#define UPB_MESSAGE_INTERNAL_SIZE_LOG2_H_ |
||||
|
||||
#include <stddef.h> |
||||
#include <stdint.h> |
||||
|
||||
#include "upb/base/descriptor_constants.h" |
||||
|
||||
// Must be last.
|
||||
#include "upb/port/def.inc" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
// Return the log2 of the storage size in bytes for a upb_CType
|
||||
UPB_INLINE int upb_SizeLog2_CType(upb_CType c_type) { |
||||
static const int8_t size[] = { |
||||
0, // kUpb_CType_Bool
|
||||
2, // kUpb_CType_Float
|
||||
2, // kUpb_CType_Int32
|
||||
2, // kUpb_CType_UInt32
|
||||
2, // kUpb_CType_Enum
|
||||
UPB_SIZE(2, 3), // kUpb_CType_Message
|
||||
3, // kUpb_CType_Double
|
||||
3, // kUpb_CType_Int64
|
||||
3, // kUpb_CType_UInt64
|
||||
UPB_SIZE(3, 4), // kUpb_CType_String
|
||||
UPB_SIZE(3, 4), // kUpb_CType_Bytes
|
||||
}; |
||||
|
||||
// -1 here because the enum is one-based but the table is zero-based.
|
||||
return size[c_type - 1]; |
||||
} |
||||
|
||||
// Return the log2 of the storage size in bytes for a upb_FieldType
|
||||
UPB_INLINE int upb_SizeLog2_FieldType(upb_FieldType field_type) { |
||||
static const int8_t size[] = { |
||||
3, // kUpb_FieldType_Double
|
||||
2, // kUpb_FieldType_Float
|
||||
3, // kUpb_FieldType_Int64
|
||||
3, // kUpb_FieldType_UInt64
|
||||
2, // kUpb_FieldType_Int32
|
||||
3, // kUpb_FieldType_Fixed64
|
||||
2, // kUpb_FieldType_Fixed32
|
||||
0, // kUpb_FieldType_Bool
|
||||
UPB_SIZE(3, 4), // kUpb_FieldType_String
|
||||
UPB_SIZE(2, 3), // kUpb_FieldType_Group
|
||||
UPB_SIZE(2, 3), // kUpb_FieldType_Message
|
||||
UPB_SIZE(3, 4), // kUpb_FieldType_Bytes
|
||||
2, // kUpb_FieldType_UInt32
|
||||
2, // kUpb_FieldType_Enum
|
||||
2, // kUpb_FieldType_SFixed32
|
||||
3, // kUpb_FieldType_SFixed64
|
||||
2, // kUpb_FieldType_SInt32
|
||||
3, // kUpb_FieldType_SInt64
|
||||
}; |
||||
|
||||
// -1 here because the enum is one-based but the table is zero-based.
|
||||
return size[field_type - 1]; |
||||
} |
||||
|
||||
#ifdef __cplusplus |
||||
} /* extern "C" */ |
||||
#endif |
||||
|
||||
#include "upb/port/undef.inc" |
||||
|
||||
#endif /* UPB_MESSAGE_INTERNAL_SIZE_LOG2_H_ */ |
Loading…
Reference in new issue