@ -786,18 +786,18 @@ void SwapFieldHelper::SwapMessage(const Reflection* r, Message* lhs,
if ( * lhs_sub ! = nullptr & & * rhs_sub ! = nullptr ) {
if ( * lhs_sub ! = nullptr & & * rhs_sub ! = nullptr ) {
( * lhs_sub ) - > GetReflection ( ) - > Swap ( * lhs_sub , * rhs_sub ) ;
( * lhs_sub ) - > GetReflection ( ) - > Swap ( * lhs_sub , * rhs_sub ) ;
} else if ( * lhs_sub = = nullptr & & r - > HasBit ( * rhs , field ) ) {
} else if ( * lhs_sub = = nullptr & & r - > HasFieldSingular ( * rhs , field ) ) {
* lhs_sub = ( * rhs_sub ) - > New ( lhs_arena ) ;
* lhs_sub = ( * rhs_sub ) - > New ( lhs_arena ) ;
( * lhs_sub ) - > CopyFrom ( * * rhs_sub ) ;
( * lhs_sub ) - > CopyFrom ( * * rhs_sub ) ;
r - > ClearField ( rhs , field ) ;
r - > ClearField ( rhs , field ) ;
// Ensures has bit is unchanged after ClearField.
// Ensures has bit is unchanged after ClearField.
r - > SetBit ( rhs , field ) ;
r - > SetHas Bit ( rhs , field ) ;
} else if ( * rhs_sub = = nullptr & & r - > HasBit ( * lhs , field ) ) {
} else if ( * rhs_sub = = nullptr & & r - > HasFieldSingular ( * lhs , field ) ) {
* rhs_sub = ( * lhs_sub ) - > New ( rhs_arena ) ;
* rhs_sub = ( * lhs_sub ) - > New ( rhs_arena ) ;
( * rhs_sub ) - > CopyFrom ( * * lhs_sub ) ;
( * rhs_sub ) - > CopyFrom ( * * lhs_sub ) ;
r - > ClearField ( lhs , field ) ;
r - > ClearField ( lhs , field ) ;
// Ensures has bit is unchanged after ClearField.
// Ensures has bit is unchanged after ClearField.
r - > SetBit ( lhs , field ) ;
r - > SetHas Bit ( lhs , field ) ;
}
}
}
}
@ -1161,7 +1161,7 @@ void Reflection::SwapFieldsImpl(
// oneof already. This has to be done after SwapField, because SwapField
// oneof already. This has to be done after SwapField, because SwapField
// may depend on the information in has bits.
// may depend on the information in has bits.
if ( ! field - > is_repeated ( ) ) {
if ( ! field - > is_repeated ( ) ) {
SwapBit ( message1 , message2 , field ) ;
SwapHas Bit ( message1 , message2 , field ) ;
if ( field - > options ( ) . ctype ( ) = = FieldOptions : : STRING & &
if ( field - > options ( ) . ctype ( ) = = FieldOptions : : STRING & &
IsInlined ( field ) ) {
IsInlined ( field ) ) {
ABSL_DCHECK ( ! unsafe_shallow_swap | |
ABSL_DCHECK ( ! unsafe_shallow_swap | |
@ -1217,7 +1217,7 @@ bool Reflection::HasField(const Message& message,
if ( schema_ . InRealOneof ( field ) ) {
if ( schema_ . InRealOneof ( field ) ) {
return HasOneofField ( message , field ) ;
return HasOneofField ( message , field ) ;
} else {
} else {
return HasBit ( message , field ) ;
return HasFieldSingular ( message , field ) ;
}
}
}
}
}
}
@ -1363,8 +1363,8 @@ void Reflection::ClearField(Message* message,
ClearOneofField ( message , field ) ;
ClearOneofField ( message , field ) ;
return ;
return ;
}
}
if ( HasBit ( * message , field ) ) {
if ( HasFieldSingular ( * message , field ) ) {
ClearBit ( message , field ) ;
ClearHas Bit ( message , field ) ;
// We need to set the field back to its default value.
// We need to set the field back to its default value.
switch ( field - > cpp_type ( ) ) {
switch ( field - > cpp_type ( ) ) {
@ -1675,11 +1675,12 @@ void Reflection::ListFields(const Message& message,
append_to_output ( field ) ;
append_to_output ( field ) ;
}
}
} else if ( has_bits & & has_bits_indices [ i ] ! = static_cast < uint32_t > ( - 1 ) ) {
} else if ( has_bits & & has_bits_indices [ i ] ! = static_cast < uint32_t > ( - 1 ) ) {
// Equivalent to: HasBit (message, field)
// Equivalent to: HasFieldSingular (message, field)
if ( IsIndexInHasBitSet ( has_bits , has_bits_indices [ i ] ) ) {
if ( IsIndexInHasBitSet ( has_bits , has_bits_indices [ i ] ) ) {
append_to_output ( field ) ;
append_to_output ( field ) ;
}
}
} else if ( HasBit ( message , field ) ) { // Fall back on proto3-style HasBit.
} else if ( HasFieldSingular ( message , field ) ) {
// Fall back on proto3-style HasBit.
append_to_output ( field ) ;
append_to_output ( field ) ;
}
}
}
}
@ -2329,7 +2330,7 @@ Message* Reflection::MutableMessage(Message* message,
* result_holder = default_message - > New ( message - > GetArena ( ) ) ;
* result_holder = default_message - > New ( message - > GetArena ( ) ) ;
}
}
} else {
} else {
SetBit ( message , field ) ;
SetHas Bit ( message , field ) ;
}
}
if ( * result_holder = = nullptr ) {
if ( * result_holder = = nullptr ) {
@ -2363,9 +2364,9 @@ void Reflection::UnsafeArenaSetAllocatedMessage(
}
}
if ( sub_message = = nullptr ) {
if ( sub_message = = nullptr ) {
ClearBit ( message , field ) ;
ClearHas Bit ( message , field ) ;
} else {
} else {
SetBit ( message , field ) ;
SetHas Bit ( message , field ) ;
}
}
Message * * sub_message_holder = MutableRaw < Message * > ( message , field ) ;
Message * * sub_message_holder = MutableRaw < Message * > ( message , field ) ;
if ( message - > GetArena ( ) = = nullptr ) {
if ( message - > GetArena ( ) = = nullptr ) {
@ -2424,7 +2425,7 @@ Message* Reflection::UnsafeArenaReleaseMessage(Message* message,
factory ) ) ;
factory ) ) ;
} else {
} else {
if ( ! ( field - > is_repeated ( ) | | schema_ . InRealOneof ( field ) ) ) {
if ( ! ( field - > is_repeated ( ) | | schema_ . InRealOneof ( field ) ) ) {
ClearBit ( message , field ) ;
ClearHas Bit ( message , field ) ;
}
}
if ( schema_ . InRealOneof ( field ) ) {
if ( schema_ . InRealOneof ( field ) ) {
if ( HasOneofField ( * message , field ) ) {
if ( HasOneofField ( * message , field ) ) {
@ -2898,7 +2899,7 @@ void Reflection::SwapInlinedStringDonated(Message* lhs, Message* rhs,
}
}
// Simple accessors for manipulating has_bits_.
// Simple accessors for manipulating has_bits_.
bool Reflection : : HasBit ( const Message & message ,
bool Reflection : : HasFieldSingular ( const Message & message ,
const FieldDescriptor * field ) const {
const FieldDescriptor * field ) const {
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
if ( schema_ . HasBitIndex ( field ) ! = static_cast < uint32_t > ( - 1 ) ) {
if ( schema_ . HasBitIndex ( field ) ! = static_cast < uint32_t > ( - 1 ) ) {
@ -2962,12 +2963,13 @@ bool Reflection::HasBit(const Message& message,
// handled above; avoid warning
// handled above; avoid warning
break ;
break ;
}
}
ABSL_LOG ( FATAL ) < < " Reached impossible case in HasBit (). " ;
ABSL_LOG ( FATAL ) < < " Reached impossible case in HasFieldSingular (). " ;
return false ;
return false ;
}
}
}
}
void Reflection : : SetBit ( Message * message , const FieldDescriptor * field ) const {
void Reflection : : SetHasBit ( Message * message ,
const FieldDescriptor * field ) const {
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
const uint32_t index = schema_ . HasBitIndex ( field ) ;
const uint32_t index = schema_ . HasBitIndex ( field ) ;
if ( index = = static_cast < uint32_t > ( - 1 ) ) return ;
if ( index = = static_cast < uint32_t > ( - 1 ) ) return ;
@ -2975,7 +2977,7 @@ void Reflection::SetBit(Message* message, const FieldDescriptor* field) const {
( static_cast < uint32_t > ( 1 ) < < ( index % 32 ) ) ;
( static_cast < uint32_t > ( 1 ) < < ( index % 32 ) ) ;
}
}
void Reflection : : ClearBit ( Message * message ,
void Reflection : : ClearHas Bit ( Message * message ,
const FieldDescriptor * field ) const {
const FieldDescriptor * field ) const {
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
const uint32_t index = schema_ . HasBitIndex ( field ) ;
const uint32_t index = schema_ . HasBitIndex ( field ) ;
@ -2984,22 +2986,22 @@ void Reflection::ClearBit(Message* message,
~ ( static_cast < uint32_t > ( 1 ) < < ( index % 32 ) ) ;
~ ( static_cast < uint32_t > ( 1 ) < < ( index % 32 ) ) ;
}
}
void Reflection : : SwapBit ( Message * message1 , Message * message2 ,
void Reflection : : SwapHas Bit ( Message * message1 , Message * message2 ,
const FieldDescriptor * field ) const {
const FieldDescriptor * field ) const {
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
ABSL_DCHECK ( ! field - > options ( ) . weak ( ) ) ;
if ( ! schema_ . HasHasbits ( ) ) {
if ( ! schema_ . HasHasbits ( ) ) {
return ;
return ;
}
}
bool temp_has_bit = HasBit ( * message1 , field ) ;
bool temp_is_present = HasFieldSingular ( * message1 , field ) ;
if ( HasBit ( * message2 , field ) ) {
if ( HasFieldSingular ( * message2 , field ) ) {
SetBit ( message1 , field ) ;
SetHas Bit ( message1 , field ) ;
} else {
} else {
ClearBit ( message1 , field ) ;
ClearHas Bit ( message1 , field ) ;
}
}
if ( temp_has_bi t ) {
if ( temp_is_presen t ) {
SetBit ( message2 , field ) ;
SetHas Bit ( message2 , field ) ;
} else {
} else {
ClearBit ( message2 , field ) ;
ClearHas Bit ( message2 , field ) ;
}
}
}
}
@ -3127,14 +3129,14 @@ void Reflection::SetField(Message* message, const FieldDescriptor* field,
ClearOneof ( message , field - > containing_oneof ( ) ) ;
ClearOneof ( message , field - > containing_oneof ( ) ) ;
}
}
* MutableRaw < Type > ( message , field ) = value ;
* MutableRaw < Type > ( message , field ) = value ;
real_oneof ? SetOneofCase ( message , field ) : SetBit ( message , field ) ;
real_oneof ? SetOneofCase ( message , field ) : SetHas Bit ( message , field ) ;
}
}
template < typename Type >
template < typename Type >
Type * Reflection : : MutableField ( Message * message ,
Type * Reflection : : MutableField ( Message * message ,
const FieldDescriptor * field ) const {
const FieldDescriptor * field ) const {
schema_ . InRealOneof ( field ) ? SetOneofCase ( message , field )
schema_ . InRealOneof ( field ) ? SetOneofCase ( message , field )
: SetBit ( message , field ) ;
: SetHas Bit ( message , field ) ;
return MutableRaw < Type > ( message , field ) ;
return MutableRaw < Type > ( message , field ) ;
}
}