@ -57,14 +57,20 @@ namespace internal {
// message type does not get linked into the binary.
class PROTOBUF_EXPORT ImplicitWeakMessage : public MessageLite {
public :
ImplicitWeakMessage ( ) : data_ ( new std : : string ) { }
ImplicitWeakMessage ( ) : ImplicitWeakMessage ( nullptr ) { }
explicit constexpr ImplicitWeakMessage ( ConstantInitialized )
: data_ ( nullptr ) { }
explicit ImplicitWeakMessage ( Arena * arena )
: MessageLite ( arena ) , data_ ( new std : : string ) { }
ImplicitWeakMessage ( const ImplicitWeakMessage & ) = delete ;
ImplicitWeakMessage & operator = ( const ImplicitWeakMessage & ) = delete ;
// Arena enabled constructors: for internal use only.
ImplicitWeakMessage ( internal : : InternalVisibility , Arena * arena )
: ImplicitWeakMessage ( arena ) { }
// TODO(b/290091828): make this constructor private
explicit ImplicitWeakMessage ( Arena * arena )
: MessageLite ( arena ) , data_ ( new std : : string ) { }
~ ImplicitWeakMessage ( ) override {
// data_ will be null in the default instance, but we can safely call delete
// here because the default instance will never be destroyed.
@ -156,8 +162,21 @@ struct WeakRepeatedPtrField {
using DestructorSkippable_ = void ;
using TypeHandler = internal : : ImplicitWeakTypeHandler < T > ;
constexpr WeakRepeatedPtrField ( ) : weak ( ) { }
WeakRepeatedPtrField ( const WeakRepeatedPtrField & rhs )
: WeakRepeatedPtrField ( nullptr , rhs ) { }
// Arena enabled constructors: for internal use only.
WeakRepeatedPtrField ( internal : : InternalVisibility , Arena * arena )
: WeakRepeatedPtrField ( arena ) { }
WeakRepeatedPtrField ( internal : : InternalVisibility , Arena * arena ,
const WeakRepeatedPtrField & rhs )
: WeakRepeatedPtrField ( arena , rhs ) { }
// TODO(b/290091828): make this constructor private
explicit WeakRepeatedPtrField ( Arena * arena ) : weak ( arena ) { }
~ WeakRepeatedPtrField ( ) { weak . template Destroy < TypeHandler > ( ) ; }
typedef internal : : RepeatedPtrIterator < MessageLite > iterator ;
@ -208,6 +227,12 @@ struct WeakRepeatedPtrField {
union {
RepeatedPtrField < T > weak ;
} ;
private :
WeakRepeatedPtrField ( Arena * arena , const WeakRepeatedPtrField & rhs )
: WeakRepeatedPtrField ( arena ) {
MergeFrom ( rhs ) ;
}
} ;
} // namespace protobuf