private bool RegisterNestedTypeInternal <T>(Func <T> constructor) where T : INetSerializable { var t = typeof(T); if (_registeredNestedTypes.ContainsKey(t)) { return(false); } var rwDelegates = new NestedType( (writer, obj) => { ((T)obj).Serialize(writer); }, reader => { var instance = constructor(); instance.Deserialize(reader); return(instance); }); _registeredNestedTypes.Add(t, rwDelegates); return(true); }
/// <summary> /// Summary for AcceptsNestedType /// </summary> /// <param name="param"></param> public void AcceptsNestedType(NestedType param) { }
private bool RegisterNestedTypeInternal <T>(Func <T> constructor) where T : INetSerializable { Type t = typeof(T); if (_registeredNestedTypes.ContainsKey(t)) { return(false); } NestedType nestedType; NestedTypeWriter nestedTypeWriter = (writer, obj) => ((T)obj).Serialize(writer); NestedTypeWriter nestedTypeArrayWriter = (writer, arr) => { T[] typedArr = (T[])arr; writer.Put((ushort)typedArr.Length); for (int i = 0; i < typedArr.Length; i++) { typedArr[i].Serialize(writer); } }; //struct if (constructor == null) { nestedType = new NestedType( nestedTypeWriter, reader => { T instance = default(T); instance.Deserialize(reader); return(instance); }, nestedTypeArrayWriter, reader => { T[] typedArr = new T[reader.GetUShort()]; for (int i = 0; i < typedArr.Length; i++) { typedArr[i].Deserialize(reader); } return(typedArr); }); } else //class { nestedType = new NestedType( nestedTypeWriter, reader => { T instance = constructor(); instance.Deserialize(reader); return(instance); }, nestedTypeArrayWriter, reader => { T[] typedArr = new T[reader.GetUShort()]; for (int i = 0; i < typedArr.Length; i++) { typedArr[i] = constructor(); typedArr[i].Deserialize(reader); } return(typedArr); }); } _registeredNestedTypes.Add(t, nestedType); return(true); }
public object Read(NestedType tupleType) => throw new NotSupportedException();
void ConstructCRef(StringBuilder sb) { sb.Append(Namespace); if (DescKind == Kind.Namespace) { return; } sb.Append('.'); sb.Append(TypeName); if (GenericTypeArguments != null && GenericTypeArgumentsIsNumeric) { sb.AppendFormat("`{0}", GenericTypeArgumentsCount); } else if (GenericTypeArguments != null) { sb.Append('<'); int i = 0; foreach (var t in GenericTypeArguments) { if (i > 0) { sb.Append(","); } t.ConstructCRef(sb); i++; } sb.Append('>'); } if (NestedType != null) { sb.Append('+'); NestedType.ConstructCRef(sb); } if (ArrayDimensions != null && ArrayDimensions.Count > 0) { for (int i = 0; i < ArrayDimensions.Count; i++) { sb.Append('['); sb.Append(new string (',', ArrayDimensions[i] - 1)); sb.Append(']'); } } if (DescKind == Kind.Type) { return; } sb.Append("."); sb.Append(MemberName); if (MemberArguments != null && MemberArgumentsCount > 0) { sb.Append("("); int i = 0; foreach (var a in MemberArguments) { if (i > 0) { sb.Append(","); } a.ConstructCRef(sb); i++; } sb.Append(")"); } }
public ParentType() { NestedType nt = new NestedType(); }
public virtual void VisitNestedType(NestedType type) { VisitType(type); }
/// <summary>Test Q</summary> /// <param name="a">a</param> public void DocumentedMethod(NestedType a) { }
public void Write(NestedType nestedType, object value) => throw new NotSupportedException("Writing Nested values directly is not supported, see documentation");
public DerivedClass() : base("Fara") { this._random = new Random(); var _nestedType = new NestedType(); }
public XmlDocumentationFromConstructor(NestedType a) { }
void ConstructCRef(StringBuilder sb, bool skipLeadingDot = false) { if (string.IsNullOrEmpty(Namespace)) { skipLeadingDot = true; } sb.Append(Namespace); if (DescKind == Kind.Namespace) { return; } if (!skipLeadingDot) { sb.Append('.'); } sb.Append(TypeName); AppendGenericArguments(sb, GenericTypeArguments, GenericTypeArgumentsIsNumeric, GenericTypeArgumentsCount); if (NestedType != null) { sb.Append('+'); NestedType.ConstructCRef(sb, skipLeadingDot: true); } if (ArrayDimensions != null && ArrayDimensions.Count > 0) { for (int i = 0; i < ArrayDimensions.Count; i++) { sb.Append('['); sb.Append(new string (',', ArrayDimensions[i] - 1)); sb.Append(']'); } } if (DescKind == Kind.Type) { return; } if (ExplicitImplMember != null) { sb.Append('$'); ExplicitImplMember.DescKind = this.DescKind; ExplicitImplMember.ConstructCRef(sb, skipLeadingDot: false); return; } sb.Append("."); sb.Append(MemberName); AppendGenericArguments(sb, GenericMemberArguments, GenericMemberArgumentsIsNumeric, GenericMemberArgumentsCount); if (MemberArguments != null && MemberArgumentsCount > 0) { sb.Append("("); int i = 0; foreach (var a in MemberArguments) { if (i > 0) { sb.Append(","); } a.ConstructCRef(sb); i++; } sb.Append(")"); } }