Files
2026-06-04 11:42:34 +02:00

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;
}
}