@ -288,21 +288,6 @@ namespace Google.Protobuf.Collections
/// </summary>
public bool IsReadOnly = > false ;
// TODO: Remove this overload and just handle it in the one below, at execution time?
/// <summary>
/// Adds all of the specified values into this collection.
/// </summary>
/// <param name="values">The values to add to this collection.</param>
public void Add ( RepeatedField < T > values )
{
ProtoPreconditions . CheckNotNull ( values , nameof ( values ) ) ;
EnsureSize ( count + values . count ) ;
// We know that all the values will be valid, because it's a RepeatedField.
Array . Copy ( values . array , 0 , array , count , values . count ) ;
count + = values . count ;
}
/// <summary>
/// Adds all of the specified values into this collection.
/// </summary>
@ -311,8 +296,19 @@ namespace Google.Protobuf.Collections
{
ProtoPreconditions . CheckNotNull ( values , nameof ( values ) ) ;
// Optimize the case where we know the size and can ask the collection to
// copy itself.
// Optimization 1: If the collection we're adding is already a RepeatedField<T>,
// we know the values are valid.
var otherRepeatedField = values as RepeatedField < T > ;
if ( otherRepeatedField ! = null )
{
EnsureSize ( count + otherRepeatedField . count ) ;
Array . Copy ( otherRepeatedField . array , 0 , array , count , otherRepeatedField . count ) ;
count + = otherRepeatedField . count ;
return ;
}
// Optimization 2: The collection is an ICollection, so we can expand
// just once and ask the collection to copy itself into the array.
var collection = values as ICollection ;
if ( collection ! = null )
{