diff options
Diffstat (limited to 'csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs')
-rw-r--r-- | csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs b/csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs new file mode 100644 index 00000000..c5a934a1 --- /dev/null +++ b/csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Google.Protobuf.Collections +{ + public static class RepeatedFieldExtensions + { + internal static uint CalculateSize<T>(this RepeatedField<T> list, Func<T, int> sizeComputer) + { + int size = 0; + foreach (var item in list) + { + size += sizeComputer(item); + } + return (uint)size; + } + + /* + /// <summary> + /// Calculates the serialized data size, including one tag per value. + /// </summary> + public static int CalculateTotalSize<T>(this RepeatedField<T> list, int tagSize, Func<T, int> sizeComputer) + { + if (list.Count == 0) + { + return 0; + } + return (int)(dataSize + tagSize * list.Count); + } + + /// <summary> + /// Calculates the serialized data size, as a packed array (tag, length, data). + /// </summary> + public static int CalculateTotalPackedSize(int tagSize) + { + if (Count == 0) + { + return 0; + } + uint dataSize = CalculateSize(); + return tagSize + CodedOutputStream.ComputeRawVarint32Size(dataSize) + (int)dataSize; + } + */ + } +} |