示例#1
0
        public void ConvertToBinaryCompressedToStringBackToBinaryDeserializedBackToOriginalTest()
        {
            var xyz = new XYZ();
            var binarySerialized = new BinarySerialized <XYZ>(xyz, false);
            var serializedValue  = binarySerialized.SerializedValue;

            binarySerialized.Compress();
            Assert.AreNotEqual(serializedValue.Length, binarySerialized.SerializedValue.Length);
            var xmlSerialized = new XmlSerialized <BinarySerialized <XYZ> >(binarySerialized);

            binarySerialized = xmlSerialized.Deserialize();
            binarySerialized.Decompress();
            xyz = binarySerialized.Deserialize();
            Assert.AreEqual(xyz.X, 2);
            Assert.AreEqual(xyz.Y, "7");
            Assert.IsTrue(xyz.Z.Length == 2);
            Assert.AreEqual(xyz.Z[0], 23);
            Assert.AreEqual(xyz.Z[1], 17);
        }
示例#2
0
        public LinkedFileSet(
            string originFile,
            Dictionary <string, LinkedFile> allFilesByFullIdentifier,
            List <SymbolDefinition> allSymbolDefinitionsLeafFirst)
        {
            fileIndexesByFullIdentifier        = new SerializableDictionary <string, int>();
            this.allSymbolDefinitionsLeafFirst = allSymbolDefinitionsLeafFirst;
            this.originFile = originFile;

            var originFileData = allFilesByFullIdentifier[originFile];

            if (originFileData.isLibrary)
            {
                throw new LinkException(LinkExceptionType.BASE_FILE_IS_LIBRARY, $"Origin file '{originFile}' is a library. origin file must be a .lsystem file");
            }

            allFiles = new BinarySerialized <List <LinkedFile> >();
            var compileTimes      = new Dictionary <string, DefineDirective>();
            var runTimes          = new Dictionary <string, RuntimeParameterAndDefault>();
            var immaturitySymbols = new HashSet <int>();

            foreach (var kvp in allFilesByFullIdentifier)
            {
                allFiles.data.Add(kvp.Value);
                fileIndexesByFullIdentifier[kvp.Key] = allFiles.data.Count - 1;

                foreach (var compileTime in kvp.Value.delaredInFileCompileTimeParameters)
                {
                    if (compileTimes.ContainsKey(compileTime.name))
                    {
                        throw new LinkException(LinkExceptionType.GLOBAL_VARIABLE_COLLISION, $"Duplicated global compile time variable '{compileTime.name}' declared in {kvp.Value.fileSource}");
                    }
                    else
                    {
                        compileTimes[compileTime.name] = compileTime;
                    }
                }

                foreach (var runTime in kvp.Value.declaredInFileRuntimeParameters)
                {
                    if (runTimes.ContainsKey(runTime.name))
                    {
                        throw new LinkException(LinkExceptionType.GLOBAL_VARIABLE_COLLISION, $"Duplicated global run time variable '{runTime.name}' declared in {kvp.Value.fileSource}");
                    }
                    else
                    {
                        runTimes[runTime.name] = runTime;
                    }
                }

                foreach (var immature in kvp.Value.GetAllImmaturityMarkerSymbols())
                {
                    immaturitySymbols.Add(immature);
                }
            }
            allGlobalCompileTimeParams   = compileTimes.Values.ToList();
            allGlobalRuntimeParams       = runTimes.Values.ToList();
            this.immaturitySymbolMarkers = immaturitySymbols.ToArray();


            defaultSymbolDefinitionIndexBySymbol = new SerializableDictionary <int, int>();
            for (var i = 0; i < allSymbolDefinitionsLeafFirst.Count; i++)
            {
                var definition = allSymbolDefinitionsLeafFirst[i];
                if (defaultSymbolDefinitionIndexBySymbol.ContainsKey(definition.actualSymbol))
                {
                    continue;
                }
                defaultSymbolDefinitionIndexBySymbol[definition.actualSymbol] = i;
            }


            if (!fileIndexesByFullIdentifier.ContainsKey(originFile))
            {
                throw new LinkException(LinkExceptionType.BAD_ORIGIN_FILE, $"could not find origin file '{originFile}'");
            }
        }