using System; using System.Collections.Generic; namespace Google.Protobuf { // Token: 0x02000007 RID: 7 public sealed class FieldCodec { // Token: 0x060000AE RID: 174 RVA: 0x000042E0 File Offset: 0x000024E0 static FieldCodec() { if (typeof(T) == typeof(string)) { FieldCodec.DefaultDefault = (T)((object)""); return; } if (typeof(T) == typeof(ByteString)) { FieldCodec.DefaultDefault = (T)((object)ByteString.Empty); } } // Token: 0x060000AF RID: 175 RVA: 0x0000434E File Offset: 0x0000254E internal static bool IsPackedRepeatedField(uint tag) { return FieldCodec.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 ValueWriter { get; } // Token: 0x1700000F RID: 15 // (get) Token: 0x060000B2 RID: 178 RVA: 0x00004372 File Offset: 0x00002572 internal Func ValueSizeCalculator { get; } // Token: 0x17000010 RID: 16 // (get) Token: 0x060000B3 RID: 179 RVA: 0x0000437A File Offset: 0x0000257A internal Func 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 reader, Action 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 reader, Action writer, Func sizeCalculator, uint tag) : this(reader, writer, sizeCalculator, tag, FieldCodec.DefaultDefault) { } // Token: 0x060000B9 RID: 185 RVA: 0x000043EC File Offset: 0x000025EC internal FieldCodec(Func reader, Action writer, Func 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.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.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; } }