public override void Write(object value, ProtoWriter dest) { SubItemToken token; bool writePacked = WritePacked; if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = new SubItemToken(); // default } bool checkForNull = !SupportNull; foreach (object subItem in (IEnumerable)value) { if (checkForNull && subItem == null) { throw new NullReferenceException(); } Tail.Write(subItem, dest); } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(object value, ProtoWriter dest) { IList list = (IList)value; int count = list.Count; bool flag = (options & 1) != 0; SubItemToken token; if (flag) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = default(SubItemToken); } bool flag2 = !SupportNull; for (int i = 0; i < count; i++) { object obj = list[i]; if (flag2 && obj == null) { throw new NullReferenceException(); } base.Tail.Write(obj, dest); } if (flag) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(object value, ProtoWriter dest) { IList arr = (IList)value; int len = arr.Count; SubItemToken token; bool writePacked = (options & OPTIONS_WritePacked) != 0; if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = new SubItemToken(); // default } bool checkForNull = !SupportNull; for (int i = 0; i < len; i++) { object obj = arr[i]; if (checkForNull && obj == null) { throw new NullReferenceException(); } Tail.Write(obj, dest); } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(object value, ProtoWriter dest) { bool writePacked = WritePacked; SubItemToken token; if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = default(SubItemToken); } bool flag = !SupportNull; foreach (object item in (IEnumerable)value) { if (flag && item == null) { throw new NullReferenceException(); } base.Tail.Write(item, dest); } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(object value, ProtoWriter dest) { SubItemToken subItemToken; bool writePacked = this.WritePacked; if (!writePacked) { subItemToken = new SubItemToken(); } else { ProtoWriter.WriteFieldHeader(this.fieldNumber, WireType.String, dest); subItemToken = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(this.fieldNumber, dest); } bool supportNull = !this.SupportNull; foreach (object obj in (IEnumerable)value) { if (supportNull && obj == null) { throw new NullReferenceException(); } this.Tail.Write(obj, dest); } if (writePacked) { ProtoWriter.EndSubItem(subItemToken, dest); } }
public override void Write(object value, ProtoWriter dest) { SubItemToken token; bool writePacked = this.WritePacked; if (writePacked) { ProtoWriter.WriteFieldHeader(this.fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(this.fieldNumber, dest); } else { token = new SubItemToken(); } bool flag2 = !this.SupportNull; foreach (object obj2 in (IEnumerable)value) { if (flag2 && (obj2 == null)) { throw new NullReferenceException(); } base.Tail.Write(obj2, dest); } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(object value, ProtoWriter dest) { SubItemToken subItemToken; IList lists = (IList)value; int count = lists.Count; bool flag = (this.options & 1) != 0; if (!flag) { subItemToken = new SubItemToken(); } else { ProtoWriter.WriteFieldHeader(this.fieldNumber, WireType.String, dest); subItemToken = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(this.fieldNumber, dest); } bool supportNull = !this.SupportNull; for (int i = 0; i < count; i++) { object item = lists[i]; if (supportNull && item == null) { throw new NullReferenceException(); } this.Tail.Write(item, dest); } if (flag) { ProtoWriter.EndSubItem(subItemToken, dest); } }
public override void Write(object value, ProtoWriter dest) { SubItemToken token; bool writePacked = WritePacked; if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = new SubItemToken(); // default } bool checkForNull = !SupportNull; // TODO-GC:对于值类型的列表,这里严重GC // 1)GeGetEnumerator产生GC40B // 2)每次GetCurrent产生GC20B foreach (object subItem in (IEnumerable)value) { if (checkForNull && subItem == null) { throw new NullReferenceException(); } Tail.Write(ValueObject.TryGet(subItem), dest); } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public override void Write(ProtoWriter dest, ref ProtoWriter.State state, object value) { IList arr = (IList)value; int len = arr.Count; SubItemToken token; bool writePacked = (options & OPTIONS_WritePacked) != 0; bool fixedLengthPacked = writePacked && CanUsePackedPrefix(); if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest, ref state); if (fixedLengthPacked) { ProtoWriter.WritePackedPrefix(arr.Count, packedWireType, dest, ref state); token = new SubItemToken(); // default } else { token = ProtoWriter.StartSubItem(value, dest, ref state); } ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = new SubItemToken(); // default } bool checkForNull = !SupportNull; for (int i = 0; i < len; i++) { object obj = arr[i]; if (checkForNull && obj == null) { throw new NullReferenceException(); } Tail.Write(dest, ref state, obj); } if (writePacked) { if (fixedLengthPacked) { ProtoWriter.ClearPackedField(fieldNumber, dest); } else { ProtoWriter.EndSubItem(token, dest, ref state); } } }
public override void Write(object value, ProtoWriter dest) { SubItemToken token; bool writePacked = WritePacked; bool fixedSizePacked = writePacked & CanUsePackedPrefix(value) && value is ICollection; if (writePacked) { ProtoWriter.WriteFieldHeader(fieldNumber, WireType.String, dest); if (fixedSizePacked) { ProtoWriter.WritePackedPrefix(((ICollection)value).Count, packedWireType, dest); token = default(SubItemToken); } else { token = ProtoWriter.StartSubItem(value, dest); } ProtoWriter.SetPackedField(fieldNumber, dest); } else { token = new SubItemToken(); // default } bool checkForNull = !SupportNull; foreach (object subItem in (IEnumerable)value) { if (checkForNull && subItem == null) { throw new NullReferenceException(); } Tail.Write(subItem, dest); } if (writePacked) { if (fixedSizePacked) { ProtoWriter.ClearPackedField(fieldNumber, dest); } else { ProtoWriter.EndSubItem(token, dest); } } }
public override void Write(object value, ProtoWriter dest) { bool writePacked = this.WritePacked; SubItemToken token; if (writePacked) { ProtoWriter.WriteFieldHeader(this.fieldNumber, WireType.String, dest); token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(this.fieldNumber, dest); } else { token = default(SubItemToken); } bool flag = !this.SupportNull; IEnumerator enumerator = ((IEnumerable)value).GetEnumerator(); try { while (enumerator.MoveNext()) { object current = enumerator.get_Current(); if (flag && current == null) { throw new NullReferenceException(); } this.Tail.Write(current, dest); } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } if (writePacked) { ProtoWriter.EndSubItem(token, dest); } }
public void AddChannel(Channel channel) { ProtoWriter.WriteFieldHeader(2, WireType.StartGroup, writer); var channelTok = ProtoWriter.StartSubItem(null, writer); if (channel.Name != null) { ProtoWriter.WriteFieldHeader(1, WireType.String, writer); ProtoWriter.WriteString(channel.Name, writer); } var list = channel.Points; if (list != null) { switch (list.Count) { case 0: // nothing to write break; case 1: ProtoWriter.WriteFieldHeader(2, WireType.Fixed32, writer); ProtoWriter.WriteSingle(list[0], writer); break; default: ProtoWriter.WriteFieldHeader(2, WireType.String, writer); var dataToken = ProtoWriter.StartSubItem(null, writer); ProtoWriter.SetPackedField(2, writer); foreach (var val in list) { ProtoWriter.WriteFieldHeader(2, WireType.Fixed32, writer); ProtoWriter.WriteSingle(val, writer); } ProtoWriter.EndSubItem(dataToken, writer); break; } } ProtoWriter.EndSubItem(channelTok, writer); }
public override void Write(object value, ProtoWriter dest) { IList arr = (IList)value; int len = arr.Count; if (packedFieldNumber > 0) { if (len != 0) { ProtoWriter.WriteFieldHeader(packedFieldNumber, WireType.String, dest); SubItemToken token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(packedFieldNumber, dest); for (int i = 0; i < len; i++) { object obj = arr[i]; if (obj == null) { throw new NullReferenceException(); } Tail.Write(obj, dest); } ProtoWriter.EndSubItem(token, dest); } } else { for (int i = 0; i < len; i++) { object obj = arr[i]; if (obj == null) { throw new NullReferenceException(); } Tail.Write(obj, dest); } } }
public override void Write(object value, ProtoWriter dest) { if (packedFieldNumber > 0) { IEnumerator iter = ((IEnumerable)value).GetEnumerator(); using (iter as IDisposable) { if (iter.MoveNext()) { ProtoWriter.WriteFieldHeader(packedFieldNumber, WireType.String, dest); SubItemToken token = ProtoWriter.StartSubItem(value, dest); ProtoWriter.SetPackedField(packedFieldNumber, dest); do { object subItem = iter.Current; if (subItem == null) { throw new NullReferenceException(); } Tail.Write(subItem, dest); } while (iter.MoveNext()); ProtoWriter.EndSubItem(token, dest); } } } else { foreach (object subItem in (IEnumerable)value) { if (subItem == null) { throw new NullReferenceException(); } Tail.Write(subItem, dest); } } }