Example #1
0
        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();
Example #5
0
        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 ParentType()
 {
     NestedType nt = new NestedType();
 }
Example #8
0
 public virtual void VisitNestedType(NestedType type)
 {
     VisitType(type);
 }
Example #9
0
 /// <summary>Test Q</summary>
 /// <param name="a">a</param>
 public void DocumentedMethod(NestedType a)
 {
 }
Example #10
0
 public void Write(NestedType nestedType, object value) => throw new NotSupportedException("Writing Nested values directly is not supported, see documentation");
Example #11
0
        public DerivedClass() : base("Fara")
        {
            this._random = new Random();

            var _nestedType = new NestedType();
        }
Example #12
0
 public XmlDocumentationFromConstructor(NestedType a)
 {
 }
Example #13
0
        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(")");
            }
        }
Example #14
0
 public virtual void VisitNestedType(NestedType type)
 {
     VisitType(type);
 }