Example #1
0
        /// <see cref="IClassSerializationTools"/>
        string IClassSerializationTools.ReferenceSize(ClassModel model, PropertyModel property)
        {
            var child = GetChild(model, property);

            // Check if the class was parsed or comes from another assembly
            if (child == null)
            {
                // For now we just switch supported type names
                switch (property.ElementType)
                {
                case nameof(DateTime):
                    return(property.IsCollection ? $"{GeneratorTools.CollectionSize(property)} * 8" : null);

                default:
                    return(null);
                }
            }

            string entrySize = null;

            if (child is ClassModel)
            {
                var classChild = (ClassModel)child;
                if (property.IsCollection)
                {
                    entrySize = BinarySize.IsVariable(classChild) ? "Sum(entry => entry.Size)" : $"{GeneratorTools.CollectionSize(property)} * {BinarySize.OfClass(classChild, this)}";
                }
                else if (BinarySize.IsVariable(property))
                {
                    entrySize = "Size";
                }
                else
                {
                    return(null);
                }
            }
            else if (child is EnumModel)
            {
                var enumChild = (EnumModel)child;
                if (property.IsCollection)
                {
                    entrySize = $"{GeneratorTools.CollectionSize(property)} * {BinarySize.OfType(enumChild.BaseType)}";
                }
                else
                {
                    return(null);
                }
            }


            return(entrySize);
        }
Example #2
0
        private bool CollectionWrapper(PropertyModel prop, bool head)
        {
            if (!prop.IsCollection)
            {
                return(false);
            }

            if (head)
            {
        #line default
        #line hidden

        #line 93 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(" \r\n                if (");


        #line default
        #line hidden

        #line 94 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 94 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(" != null)\r\n                {\r\n                    var temp");


        #line default
        #line hidden

        #line 96 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 96 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(" = ");


        #line default
        #line hidden

        #line 96 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.CollectionConstructor(prop, $"{prop.Name}.{GeneratorTools.CollectionSize(prop)}")));


        #line default
        #line hidden

        #line 96 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(";\r\n");


        #line default
        #line hidden

        #line 97 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"

                if (GeneratorTools.SupportsForLoop(prop))
                {
        #line default
        #line hidden

        #line 100 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("                    for (var i = 0; i < ");


        #line default
        #line hidden

        #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(".");


        #line default
        #line hidden

        #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.CollectionSize(prop)));


        #line default
        #line hidden

        #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("; i++)\r\n                    {\r\n                        var value = ");


        #line default
        #line hidden

        #line 103 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 103 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("[i];\r\n");


        #line default
        #line hidden

        #line 104 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 108 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("                    foreach (var value in ");


        #line default
        #line hidden

        #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(")\r\n                    {\r\n");


        #line default
        #line hidden

        #line 111 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                }
            }
            else
            {
                if (prop.CollectionType == "Array")
                {
        #line default
        #line hidden

        #line 118 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("                        temp");


        #line default
        #line hidden

        #line 119 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 119 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("[i] = value;\r\n");


        #line default
        #line hidden

        #line 120 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 124 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write("                        temp");


        #line default
        #line hidden

        #line 125 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 125 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                    this.Write(".Add(value);\r\n");


        #line default
        #line hidden

        #line 126 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                }


        #line default
        #line hidden

        #line 128 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write("                    }\r\n                    copy.");


        #line default
        #line hidden

        #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(" = temp");


        #line default
        #line hidden

        #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(prop.Name));


        #line default
        #line hidden

        #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
                this.Write(";\r\n                }\r\n");


        #line default
        #line hidden

        #line 132 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Clone\CloneGenerator.tt"
            }

            return(true);
        }
Example #3
0
        //----------------------------------------
        // Generate loop for reading collections
        //----------------------------------------
        private void GenerateReadLoop(PropertyModel property, bool header)
        {
            if (!property.IsCollection)
            {
                return;
            }

            if (header)
            {
                // Read the length
                for (var dimension = 0; dimension < property.Dimensions; dimension++)
                {
        #line default
        #line hidden

        #line 337 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("            var ");


        #line default
        #line hidden

        #line 338 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(FieldLength(property, dimension)));


        #line default
        #line hidden

        #line 338 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(" = GeneratorByteConverter.ToUInt16(bytes, ref index);\r\n");


        #line default
        #line hidden

        #line 339 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                }
            }

            if (header && property.IsCollection)
            {
                // Create temp object


        #line default
        #line hidden

        #line 346 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("            var temp");


        #line default
        #line hidden

        #line 347 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 347 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(" = ");


        #line default
        #line hidden

        #line 347 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.CollectionConstructor(property, FieldLength(property))));


        #line default
        #line hidden

        #line 347 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(";\r\n");


        #line default
        #line hidden

        #line 348 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"


                // Generate the loop
                var dimensions = new[] { "i", "j", "k" };
                for (var dimension = 0; dimension < property.Dimensions; dimension++)
                {
        #line default
        #line hidden

        #line 354 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("            for (var ");


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(" = 0; ");


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(" < ");


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(FieldLength(property, dimension)));


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("; ");


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 355 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("++)\r\n");


        #line default
        #line hidden

        #line 356 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                }


        #line default
        #line hidden

        #line 358 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("            {\r\n");


        #line default
        #line hidden

        #line 360 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            }
            else if (!header && property.IsCollection)
            {
                var collAssignment = property.CollectionType == "Array"
                ? $"temp{property.Name}[{FieldPosition(property)}] = value"
                : $"temp{property.Name}.Add(value)";



        #line default
        #line hidden

        #line 368 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("                ");


        #line default
        #line hidden

        #line 369 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(collAssignment));


        #line default
        #line hidden

        #line 369 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(";\r\n            }\r\n            ");


        #line default
        #line hidden

        #line 371 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 371 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(" = temp");


        #line default
        #line hidden

        #line 371 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 371 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(";\r\n");


        #line default
        #line hidden

        #line 372 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            }
        }
Example #4
0
        //--------------------------------------
        // Code fragments wrapping a collection
        //--------------------------------------
        private void CollectionWrapper(PropertyModel property, bool start)
        {
            if (!property.IsCollection || property.ValueType == ModelValueType.Byte)
            {
                return;
            }

            if (start)
            {
        #line default
        #line hidden

        #line 244 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("            if (");


        #line default
        #line hidden

        #line 245 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 245 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(" != null)\r\n            {\r\n");


        #line default
        #line hidden

        #line 247 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

                if (GeneratorTools.SupportsForLoop(property))
                {
                    var dimensions = new[] { "i", "j", "k" };
                    for (var dimension = 0; dimension < property.Dimensions; dimension++)
                    {
                        var targetDimension = property.Dimensions > 1 ? dimension : -1;



        #line default
        #line hidden

        #line 255 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write("                for(var ");


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(" = 0; ");


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(" < ");


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(".");


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.CollectionSize(property, targetDimension)));


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write("; ");


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(dimensions[dimension]));


        #line default
        #line hidden

        #line 256 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                        this.Write("++)\r\n");


        #line default
        #line hidden

        #line 257 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    }


        #line default
        #line hidden

        #line 259 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("                {\r\n                    var value = ");


        #line default
        #line hidden

        #line 261 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 261 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("[");


        #line default
        #line hidden

        #line 261 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(",", Enumerable.Range(0, property.Dimensions).Select(i => dimensions[i]))));


        #line default
        #line hidden

        #line 261 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("];\r\n");


        #line default
        #line hidden

        #line 262 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 266 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write("                foreach(var value in ");


        #line default
        #line hidden

        #line 267 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));


        #line default
        #line hidden

        #line 267 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                    this.Write(")\r\n                {\r\n");


        #line default
        #line hidden

        #line 269 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                }
            }
            else
            {
        #line default
        #line hidden

        #line 275 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("                }\r\n            }\r\n");


        #line default
        #line hidden

        #line 278 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            }
        }
Example #5
0
        //-------------------------------------------------------
        // Generate 2 byte length prefix for collection length
        //-------------------------------------------------------
        private void GenerateLengthPrefix(PropertyModel property)
        {
            if (!property.IsCollection)
            {
                return;
            }



        #line default
        #line hidden

        #line 190 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            this.Write("            // Two bytes length information for each dimension\r\n");


        #line default
        #line hidden

        #line 192 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

            for (var dimension = 0; dimension < property.Dimensions; dimension++)
            {
        #line default
        #line hidden

        #line 195 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write("            ");


        #line default
        #line hidden

        #line 196 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(BlockCopy(true, $"(ushort)({property.Name} == null ? 0 : {property.Name}.{GeneratorTools.CollectionSize(property, property.Dimensions > 1 ? dimension : -1 )})", "2")));


        #line default
        #line hidden

        #line 196 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(";\r\n");


        #line default
        #line hidden

        #line 197 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            }
        }
Example #6
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("        /// <summary>\r\n        /// Binary size of the object\r\n        /// </summa" +
                       "ry>\r\n        public int Size\r\n        {\r\n            get \r\n            { \r\n     " +
                       "           var size = ");

            #line 13 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(BinarySize.OfClass(Model, Tools)));

            #line default
            #line hidden
            this.Write(";\r\n                // Add size for collections and strings\r\n");

            #line 15 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

            foreach (var property in Model.Properties.Where(BinarySize.IsVariable)
                     .Where(p => p.HasAttribute(nameof(DataMemberAttribute))))
            {
                string entrySize;
                switch (property.ValueType)
                {
                case ModelValueType.Class:
                    // Find class from other messages
                    entrySize = Tools.ReferenceSize(Model, property);
                    if (entrySize == null)
                    {
                        continue;
                    }
                    break;

                case ModelValueType.String:
                    // Flexible strings are only included as their length because the length field is part of the fixed size
                    entrySize = property.IsCollection ? "Sum(s => s.Length + 2)" : "Length";
                    break;

                case ModelValueType.Byte:
                    entrySize = "Length";
                    break;

                default:
                    entrySize = $"{GeneratorTools.CollectionSize(property)} * {BinarySize.OfProperty(property)}";
                    break;
                }


            #line default
            #line hidden
                this.Write("                size += ");

            #line 40 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write(" == null ? 0 : ");

            #line 40 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture($"{property.Name}.{entrySize}"));

            #line default
            #line hidden
                this.Write(";\r\n");

            #line 41 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            }


            #line default
            #line hidden
            this.Write(@"  
                return size;              
            }
        }

        /// <summary>
        /// Convert object to bytes
        /// </summary>
        public byte[] ToBytes()
        {
            var index = 0;
            var bytes = new byte[Size];

            return ToBytes(bytes, ref index);
        }

        /// <summary>
        /// Convert object to bytes within object tree
        /// </summary>
        void IByteSerializable.ToBytes(byte[] bytes, ref int index)
        {
            ToBytes(bytes, ref index);
        }

        /// <summary>
        /// Convert object to bytes within object tree
        /// </summary>
        public byte[] ToBytes(byte[] bytes, ref int index)
        {
            if (index + Size > bytes.Length)
                throw new ArgumentOutOfRangeException(""index"", ""Object does not fit in array"");

");

            #line 75 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute)))
            {
            #line default
            #line hidden
                this.Write("            // Convert ");

            #line 79 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 80 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

                ToBytes(property);
            }


            #line default
            #line hidden
            this.Write("            return bytes;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create" +
                       " object from byte array\r\n        /// </summary>\r\n        public ");

            #line 90 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(@" FromBytes(byte[] bytes)
        {
            var index = 0;            
            return FromBytes(bytes, ref index); 
        }

        /// <summary>
        /// Create object from segment in byte array
        /// </summary>
        void IByteSerializable.FromBytes(byte[] bytes, ref int index)
        {
            FromBytes(bytes, ref index);
        }

        /// <summary>
        /// Create object from segment in byte array
        /// </summary>
        public ");

            #line 107 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(" FromBytes(byte[] bytes, ref int index)\r\n        {\r\n");

            #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute)))
            {
            #line default
            #line hidden
                this.Write("            // Read ");

            #line 113 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\r\n");

            #line 114 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\BinarySerializerGenerator.tt"

                FromBytes(property);
            }


            #line default
            #line hidden
            this.Write("\r\n            return this;\r\n        }\r\n");
            return(this.GenerationEnvironment.ToString());
        }
Example #7
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write(@"        /// <summary>
        /// Convert object to JSON string
        /// </summary>
        public string ToJson()
        {
            var builder = new StringBuilder();
            using(var writer = new StringWriter(builder))
            {
                IncludeJson(writer);
                return builder.ToString();
            }
        }

        /// <summary>
        /// Include this class in a JSON string
        /// </summary>
        public void IncludeJson(TextWriter writer)
        {
            writer.Write('{');

");

            #line 25 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

            var first = true;
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute)))
            {
            #line default
            #line hidden
                this.Write("            writer.Write(\"");

            #line 31 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(first ? string.Empty : ","));

            #line default
            #line hidden
                this.Write("\\\"");

            #line 31 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\\\":\");\r\n");

            #line 32 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                if (property.IsCollection)
                {
            #line default
            #line hidden
                    this.Write("            if (");

            #line 36 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                    this.Write(" == null)\r\n            {\r\n                writer.Write(\"null\");\r\n            }\r\n " +
                               "           else\r\n            {\r\n                writer.Write(\'[\');\r\n            " +
                               "    foreach (var value in ");

            #line 43 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                    this.Write(")\r\n                {\r\n");

            #line 45 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                }
                var target = property.IsCollection ? "value" : property.Name;
                if (property.ValueType == ModelValueType.String)
                {
                    target = $"string.Format(\"\\\"{{0}}\\\"\", {target})";
                }
                else if (property.ValueType != ModelValueType.Class)
                {
                    target = $"{target}.ToString(CultureInfo.InvariantCulture)";
                }


            #line default
            #line hidden
                this.Write("            ");

            #line 53 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.IsCollection ? "\t\t" : string.Empty));

            #line default
            #line hidden

            #line 53 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.ValueType == ModelValueType.Class ? $"{target}.IncludeJson(writer)" : $"writer.Write({target})"));

            #line default
            #line hidden
                this.Write(";\r\n");

            #line 54 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                if (property.IsCollection)
                {
            #line default
            #line hidden
                    this.Write("                    writer.Write(\',\');\r\n                }\r\n                writer" +
                               ".Write(\']\');\r\n            }\r\n");

            #line 62 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                }


            #line default
            #line hidden
                this.Write("    \r\n");

            #line 66 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                first = false;
            }


            #line default
            #line hidden
            this.Write("            writer.Write(\'}\');\r\n        }\r\n\r\n        /// <summary>\r\n        /// C" +
                       "onvert object to JSON string\r\n        /// </summary>\r\n        public ");

            #line 76 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(@" FromJson(string json)
        {
            using (var reader = new JsonTextReader(new StringReader(json)))
            {
                return FromJson(reader);
            }
        }

        /// <summary>
        /// Include this class in a JSON string
        /// </summary>
        public ");

            #line 87 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(@" FromJson(JsonReader reader)
        {
            while (reader.Read())
            {
                // Break on EndObject
                if (reader.TokenType == JsonToken.EndObject)
                    break;

                // Only look for properties
                if (reader.TokenType != JsonToken.PropertyName)
                    continue;

                switch ((string) reader.Value)
                {
");

            #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

            // We start with the easy properties and move on to collections
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute))
                     .Where(p => !p.IsCollection))
            {
            #line default
            #line hidden
                this.Write("                    case \"");

            #line 107 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\":\r\n                        reader.Read();\r\n                        ");

            #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write(" = ");

            #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Converter(property)));

            #line default
            #line hidden
                this.Write(";\r\n                        break;\r\n\r\n");

            #line 112 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            }

            // And for the fun part collections but first with only one dimension
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute))
                     .Where(p => p.IsCollection))
            {
                var varName   = property.Name.ToLower();
                var condition = property.ValueType == ModelValueType.Class
            ? "== JsonToken.StartObject"
            : "!= JsonToken.EndArray";


            #line default
            #line hidden
                this.Write("                    case \"");

            #line 124 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\":\r\n                        reader.Read(); // Read token where array should begin" +
                           "\r\n                        if (reader.TokenType == JsonToken.Null)\r\n             " +
                           "               break;\r\n                        var ");

            #line 128 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden
                this.Write(" = new List<");

            #line 128 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.ElementType));

            #line default
            #line hidden
                this.Write(">();\r\n                        while (reader.Read() && reader.TokenType ");

            #line 129 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(condition));

            #line default
            #line hidden
                this.Write(")\r\n                            ");

            #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden
                this.Write(".Add(");

            #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Converter(property)));

            #line default
            #line hidden
                this.Write(");\r\n                        ");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Dimensions > 1 ? "// TODO: " : string.Empty));

            #line default
            #line hidden

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write(" = ");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.ToCollection(property)));

            #line default
            #line hidden
                this.Write(";");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Dimensions > 1 ? "<-- Figure this out!" : string.Empty));

            #line default
            #line hidden
                this.Write("\r\n                        break;\r\n\r\n");

            #line 134 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            }


            #line default
            #line hidden
            this.Write("                }\r\n            }\r\n\r\n            return this;\r\n        }\r\n");
            return(this.GenerationEnvironment.ToString());
        }