Пример #1
0
        public void SaveTo(string filename)
        {
            var entities = new List <dynamic>();

            File.Entities.Clear();
            NewIds.Clear();

            // we need to define all the ids before serializing
            foreach (var defPair in Factory.Definitions)
            {
                IDeclarator parent = defPair.Value.Parent;

                File.Entities.Add(new SerializationModel.Entity
                {
                    Id         = (uint)File.Entities.Count,
                    Name       = defPair.Value.Name,
                    Type       = Factory.GetEntityType(defPair.Key),
                    Visibility = parent == null ? EntityFactory.VISIBILITY.PUBLIC : (EntityFactory.VISIBILITY)parent.GetVisibilityOf(defPair.Value.Name)
                });
                NewIds[defPair.Value] = File.Entities.Last().Id;
            }

            // then we just have to get each data individually
            foreach (IDefinition definition in NewIds.Keys)
            {
                if (entities.Count == 9)
                {
                    Console.WriteLine("On debug ici");
                }

                dynamic entity = GetSerializableEntityFrom(definition);

                if (entity == null)
                {
                    throw new InvalidOperationException($"Cannot determine the type of entity to serialize {entity.Type}");
                }

                entities.Add(entity);
            }

            // finally we persist the data into a file
            using (var saveFile = new StreamWriter(filename))
            {
                BinarySerializer.Serializer.Serialize(File, saveFile.BaseStream);
                foreach (var entity in entities)
                {
                    BinarySerializer.Serializer.Serialize(entity, saveFile.BaseStream);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Default constructor that add default entities (global context and scalar types)
        /// </summary>
        public EntityFactory()
        {
            //global context is in 0
            AddEntity(new CorePackage.Entity.Context());
            IDeclarator root = GetDeclarator(0);

            (root as IDefinition).Name = "";

            //boolean type is in 1
            AddEntity(Builtins.Boolean);
            Builtins.Boolean.Parent = root;
            Builtins.Boolean.Name   = "Bool";
            root.Declare(Builtins.Boolean, "Bool", AccessMode.EXTERNAL);

            //integer type is in 2
            AddEntity(Builtins.Integer);
            Builtins.Integer.Parent = root;
            Builtins.Integer.Name   = "Integer";
            root.Declare(Builtins.Integer, "Integer", AccessMode.EXTERNAL);

            //floating type is in 3
            AddEntity(Builtins.Floating);
            Builtins.Floating.Parent = root;
            Builtins.Floating.Name   = "Floating";
            root.Declare(Builtins.Floating, "Floating", AccessMode.EXTERNAL);

            //character type is in 4
            AddEntity(Builtins.Character);
            Builtins.Character.Parent = root;
            Builtins.Character.Name   = "Character";
            root.Declare(Builtins.Character, "Character", AccessMode.EXTERNAL);

            //string type is in 5
            AddEntity(Builtins.String);
            Builtins.String.Parent = root;
            Builtins.String.Name   = "String";
            root.Declare(Builtins.String, "String", AccessMode.EXTERNAL);

            //dict type is in 6
            AddEntity(Builtins.Dictionnary);
            Builtins.Dictionnary.Parent = root;
            Builtins.Dictionnary.Name   = "Dict";
            root.Declare(Builtins.Dictionnary, "Dict", AccessMode.EXTERNAL);

            //any type is in 7
            AddEntity(Builtins.Any);
            Builtins.Any.Parent = root;
            Builtins.Any.Name   = "Any";
            root.Declare(Builtins.Any, "Any", AccessMode.EXTERNAL);

            //matrix type is in 8
            AddEntity(Builtins.Matrix);
            Builtins.Matrix.Parent = root;
            Builtins.Matrix.Name   = "Matrix";
            root.Declare(Builtins.Matrix, "Matrix", AccessMode.EXTERNAL);

            //ressource type is in 9
            AddEntity(Builtins.Resource);
            Builtins.Resource.Parent = root;
            Builtins.Resource.Name   = "Ressource";
            root.Declare(Builtins.Resource, "Ressource", AccessMode.EXTERNAL);
        }