125 lines
3.9 KiB
C#
125 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Google.Protobuf
|
|
{
|
|
// Token: 0x02000007 RID: 7
|
|
public sealed class FieldCodec<T>
|
|
{
|
|
// Token: 0x060000AE RID: 174 RVA: 0x000042E0 File Offset: 0x000024E0
|
|
static FieldCodec()
|
|
{
|
|
if (typeof(T) == typeof(string))
|
|
{
|
|
FieldCodec<T>.DefaultDefault = (T)((object)"");
|
|
return;
|
|
}
|
|
if (typeof(T) == typeof(ByteString))
|
|
{
|
|
FieldCodec<T>.DefaultDefault = (T)((object)ByteString.Empty);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060000AF RID: 175 RVA: 0x0000434E File Offset: 0x0000254E
|
|
internal static bool IsPackedRepeatedField(uint tag)
|
|
{
|
|
return FieldCodec<T>.TypeSupportsPacking && WireFormat.GetTagWireType(tag) == WireFormat.WireType.LengthDelimited;
|
|
}
|
|
|
|
// Token: 0x1700000D RID: 13
|
|
// (get) Token: 0x060000B0 RID: 176 RVA: 0x00004362 File Offset: 0x00002562
|
|
internal bool PackedRepeatedField { get; }
|
|
|
|
// Token: 0x1700000E RID: 14
|
|
// (get) Token: 0x060000B1 RID: 177 RVA: 0x0000436A File Offset: 0x0000256A
|
|
internal Action<CodedOutputStream, T> ValueWriter { get; }
|
|
|
|
// Token: 0x1700000F RID: 15
|
|
// (get) Token: 0x060000B2 RID: 178 RVA: 0x00004372 File Offset: 0x00002572
|
|
internal Func<T, int> ValueSizeCalculator { get; }
|
|
|
|
// Token: 0x17000010 RID: 16
|
|
// (get) Token: 0x060000B3 RID: 179 RVA: 0x0000437A File Offset: 0x0000257A
|
|
internal Func<CodedInputStream, T> ValueReader { get; }
|
|
|
|
// Token: 0x17000011 RID: 17
|
|
// (get) Token: 0x060000B4 RID: 180 RVA: 0x00004382 File Offset: 0x00002582
|
|
internal int FixedSize { get; }
|
|
|
|
// Token: 0x17000012 RID: 18
|
|
// (get) Token: 0x060000B5 RID: 181 RVA: 0x0000438A File Offset: 0x0000258A
|
|
internal uint Tag { get; }
|
|
|
|
// Token: 0x17000013 RID: 19
|
|
// (get) Token: 0x060000B6 RID: 182 RVA: 0x00004392 File Offset: 0x00002592
|
|
internal T DefaultValue { get; }
|
|
|
|
// Token: 0x060000B7 RID: 183 RVA: 0x0000439C File Offset: 0x0000259C
|
|
internal FieldCodec(Func<CodedInputStream, T> reader, Action<CodedOutputStream, T> writer, int fixedSize, uint tag)
|
|
: this(reader, writer, (T _) => fixedSize, tag)
|
|
{
|
|
this.FixedSize = fixedSize;
|
|
}
|
|
|
|
// Token: 0x060000B8 RID: 184 RVA: 0x000043D8 File Offset: 0x000025D8
|
|
internal FieldCodec(Func<CodedInputStream, T> reader, Action<CodedOutputStream, T> writer, Func<T, int> sizeCalculator, uint tag)
|
|
: this(reader, writer, sizeCalculator, tag, FieldCodec<T>.DefaultDefault)
|
|
{
|
|
}
|
|
|
|
// Token: 0x060000B9 RID: 185 RVA: 0x000043EC File Offset: 0x000025EC
|
|
internal FieldCodec(Func<CodedInputStream, T> reader, Action<CodedOutputStream, T> writer, Func<T, int> sizeCalculator, uint tag, T defaultValue)
|
|
{
|
|
this.ValueReader = reader;
|
|
this.ValueWriter = writer;
|
|
this.ValueSizeCalculator = sizeCalculator;
|
|
this.FixedSize = 0;
|
|
this.Tag = tag;
|
|
this.DefaultValue = defaultValue;
|
|
this.tagSize = CodedOutputStream.ComputeRawVarint32Size(tag);
|
|
this.PackedRepeatedField = FieldCodec<T>.IsPackedRepeatedField(tag);
|
|
}
|
|
|
|
// Token: 0x060000BA RID: 186 RVA: 0x00004445 File Offset: 0x00002645
|
|
public void WriteTagAndValue(CodedOutputStream output, T value)
|
|
{
|
|
if (!this.IsDefault(value))
|
|
{
|
|
output.WriteTag(this.Tag);
|
|
this.ValueWriter(output, value);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060000BB RID: 187 RVA: 0x00004469 File Offset: 0x00002669
|
|
public T Read(CodedInputStream input)
|
|
{
|
|
return this.ValueReader(input);
|
|
}
|
|
|
|
// Token: 0x060000BC RID: 188 RVA: 0x00004477 File Offset: 0x00002677
|
|
public int CalculateSizeWithTag(T value)
|
|
{
|
|
if (!this.IsDefault(value))
|
|
{
|
|
return this.ValueSizeCalculator(value) + this.tagSize;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// Token: 0x060000BD RID: 189 RVA: 0x00004497 File Offset: 0x00002697
|
|
private bool IsDefault(T value)
|
|
{
|
|
return EqualityComparer<T>.Default.Equals(value, this.DefaultValue);
|
|
}
|
|
|
|
// Token: 0x0400001E RID: 30
|
|
private static readonly T DefaultDefault;
|
|
|
|
// Token: 0x0400001F RID: 31
|
|
private static readonly bool TypeSupportsPacking = default(T) != null;
|
|
|
|
// Token: 0x04000027 RID: 39
|
|
private readonly int tagSize;
|
|
}
|
|
}
|