|
|
|
@ -26,12 +26,11 @@ namespace Google.ProtocolBuffers { |
|
|
|
|
public abstract class AbstractMessage<TMessage, TBuilder> : IMessage<TMessage, TBuilder> |
|
|
|
|
where TMessage : AbstractMessage<TMessage, TBuilder> |
|
|
|
|
where TBuilder : AbstractBuilder<TMessage, TBuilder> { |
|
|
|
|
// TODO(jonskeet): Cleaner to use a Nullable<int>? |
|
|
|
|
/// <summary> |
|
|
|
|
/// The serialized size if it's already been computed, or -1 |
|
|
|
|
/// The serialized size if it's already been computed, or null |
|
|
|
|
/// if we haven't computed it yet. |
|
|
|
|
/// </summary> |
|
|
|
|
private int memoizedSize = -1; |
|
|
|
|
private int? memoizedSize = null; |
|
|
|
|
|
|
|
|
|
#region Unimplemented members of IMessage |
|
|
|
|
public abstract MessageDescriptor DescriptorForType { get; } |
|
|
|
@ -113,12 +112,11 @@ namespace Google.ProtocolBuffers { |
|
|
|
|
|
|
|
|
|
public virtual int SerializedSize { |
|
|
|
|
get { |
|
|
|
|
int size = memoizedSize; |
|
|
|
|
if (size != -1) { |
|
|
|
|
return size; |
|
|
|
|
if (memoizedSize != null) { |
|
|
|
|
return memoizedSize.Value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
size = 0; |
|
|
|
|
int size = 0; |
|
|
|
|
foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields) { |
|
|
|
|
FieldDescriptor field = entry.Key; |
|
|
|
|
if (field.IsRepeated) { |
|
|
|
|