Пример #1
0
        /// <summary>
        /// Initializes a new instance of the
        /// <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.RightStatementOperation`1"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public RightStatementOperation(FileIOManager reader)
        {
            // Parse operator
            this.operatorSignature = new OperatorSignature(reader);

            // Parse left hand side
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, RightStatement.Name))
            {
                this.leftHandSide = new RightStatement(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    RightStatement.Name);
            }

            // Parse right hand side
            nextLine = reader.ReadNextContentLineAndTrim();
            if (CommonHelperMethods.StringStartsWith(nextLine, RightStatement.Name))
            {
                this.rightHandSide = new RightStatement(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    RightStatement.Name);
            }
        }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.Assignment"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public Assignment(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, ReadWriteVariable.Name))
            {
                this.readWriteVariable = new ReadWriteVariable(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    ReadWriteVariable.Name);
            }

            nextLine = reader.ReadNextContentLineAndTrim();
            if (CommonHelperMethods.StringStartsWith(nextLine, RightStatement.Name))
            {
                this.rightStatement = new RightStatement(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    RightStatement.Name);
            }
        }
Пример #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.Attributes.MethodSignature"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public MethodSignature(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            this.MethodId = (EntMethodEnum)Enum.Parse(typeof(EntMethodEnum), nextLine);

            nextLine        = reader.ReadNextContentLineAndTrim();
            this.returnType = GeneticObject.ParseType(nextLine);

            int numberOfParameters;

            nextLine = reader.ReadNextContentLineAndTrim();
            if (!int.TryParse(nextLine, out numberOfParameters))
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    "An integer representing the number of parameters");
            }

            for (int i = 0; i < numberOfParameters; ++i)
            {
                nextLine = reader.ReadNextContentLineAndTrim();
                Type parsedType = GeneticObject.ParseType(nextLine);
                this.parameterTypes.Add(parsedType);
            }
        }
        /// <summary>
        /// Initializes a new instance of the
        /// <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.ConditionalLeftStatement"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public ConditionalLeftStatement(FileIOManager reader)
        {
            // Condition block parse
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, Condition.Name))
            {
                this.condition = new Condition(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    Condition.Name);
            }

            // LeftStatement block parse
            nextLine = reader.ReadNextContentLineAndTrim();
            if (CommonHelperMethods.StringStartsWith(nextLine, LeftStatement.Name))
            {
                this.leftStatement = new LeftStatement(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    LeftStatement.Name);
            }
        }
Пример #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.Attributes.VariableSignature"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public VariableSignature(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            this.variableType = GeneticObject.ParseType(nextLine);

            this.VariableId = (EntVariableEnum)Enum.Parse(typeof(EntVariableEnum), reader.ReadNextContentLineAndTrim());
        }
Пример #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.LiteralValue"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public LiteralValue(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            this.type = GeneticObject.ParseType(nextLine);

            nextLine   = reader.ReadNextContentLineAndTrim();
            this.value = GeneticObject.ParseValue(this.type, nextLine);
        }
Пример #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.Attributes.OperatorSignature"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public OperatorSignature(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            this.Value = nextLine;

            nextLine        = reader.ReadNextContentLineAndTrim();
            this.returnType = GeneticObject.ParseType(nextLine);

            nextLine     = reader.ReadNextContentLineAndTrim();
            this.lhsType = GeneticObject.ParseType(nextLine);

            nextLine     = reader.ReadNextContentLineAndTrim();
            this.rhsType = GeneticObject.ParseType(nextLine);
        }
Пример #8
0
        /// <summary>
        /// Initializes a new instance of the
        /// <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.RightStatement"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public RightStatement(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, RightStatementOperation.Name))
            {
                this.rightStatementOperation = new RightStatementOperation(reader);
            }
            else if (CommonHelperMethods.StringStartsWith(nextLine, ReadOnlyVariable.Name))
            {
                this.readOnlyVariable = new ReadOnlyVariable(reader);
            }
            else if (CommonHelperMethods.StringStartsWith(nextLine, RightMethodCall.Name))
            {
                this.rightMethodCall = new RightMethodCall(reader);
            }
            else if (CommonHelperMethods.StringStartsWith(nextLine, LiteralValue.Name))
            {
                this.literalValue = new LiteralValue(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    new List <string>()
                {
                    RightStatementOperation.Name, ReadOnlyVariable.Name, RightMethodCall.Name
                });
            }
        }
Пример #9
0
        /// <summary>
        /// Initializes a new instance of the
        /// <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.RightMethodCall"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public RightMethodCall(FileIOManager reader)
        {
            this.signature = new MethodSignature(reader);

            for (int i = 0; i < this.signature.ParameterTypes.Count; ++i)
            {
                string nextLine = reader.ReadNextContentLineAndTrim();
                if (CommonHelperMethods.StringStartsWith(nextLine, RightStatement.Name))
                {
                    this.parameterList.Add(new RightStatement(reader));
                }
            }
        }
Пример #10
0
        /// <summary>
        /// Initializes a new instance of the
        /// <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.GeneticLogicRoot"/> class.
        /// </summary>
        /// <param name="file">File path.</param>
        public GeneticLogicRoot(string filePath)
        {
            lock (CommonHelperMethods.GlobalFileIOLock)
            {
                if (FileIOManager.DiskUsePermitted)
                {
                    using (FileIOManager reader = FileIOManager.OpenDiskFileForRead(filePath))
                        while (!reader.EndOfStream)
                        {
                            // Fast forward to the next RootStatement start
                            string nextLine = reader.ReadNextContentLineAndTrim();
                            if (CommonHelperMethods.StringStartsWith(nextLine, RootStatement.Name))
                            {
                                RootStatement nextRootStatement = null;

                                try
                                {
                                    nextRootStatement = new RootStatement(reader);
                                }
                                catch (StatementParseException ex)
                                {
                                    // Throw this section of the logic on disk out.
                                    // This is expected to happen due to version updates or human
                                    // error when handling files representing genetic logic.
                                    LogUtility.LogWarningFormat(
                                        "Line {0} of file {1} did not parse correctly.  The corresponsing root statement will be thrown out.  Message: {2} CallStack: {3}",
                                        reader.LineNumber,
                                        filePath,
                                        ex.Message,
                                        ex.StackTrace);

                                    nextRootStatement = null;
                                }

                                if (nextRootStatement != null)
                                {
                                    // Root statement was successfully parsed.
                                    this.rootStatementList.Add(nextRootStatement);
                                }
                            }
                        }
                }
                else
                {
                    // Disk use not permitted
                    this.rootStatementList.AddRange(FileIOManager.ReadNonDiskFile(filePath));
                }
            }
        }
Пример #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.LeftStatement"/> class.
        /// </summary>
        /// <param name="reader">Reader.</param>
        public LeftStatement(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, LeftMethodCall.Name))
            {
                this.leftMethodCall = new LeftMethodCall(reader);
            }
            else if (CommonHelperMethods.StringStartsWith(nextLine, Assignment.Name))
            {
                this.assignment = new Assignment(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    new List <string>()
                {
                    LeftMethodCall.Name, Assignment.Name
                });
            }
        }
Пример #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssemblyCSharp.Scripts.EntLogic.SerializationObjects.RootStatement"/> class.
        /// </summary>
        /// <param name="reader">A StreamReader pointed to line where this RootStatement begins.</param>
        public RootStatement(FileIOManager reader)
        {
            string nextLine = reader.ReadNextContentLineAndTrim();

            if (CommonHelperMethods.StringStartsWith(nextLine, ConditionalLeftStatement.Name))
            {
                this.conditionalLeftStatement = new ConditionalLeftStatement(reader);
            }
            else if (CommonHelperMethods.StringStartsWith(nextLine, LeftStatement.Name))
            {
                this.leftStatement = new LeftStatement(reader);
            }
            else
            {
                CommonHelperMethods.ThrowStatementParseException(
                    nextLine,
                    reader,
                    new List <string>()
                {
                    ConditionalLeftStatement.Name, LeftStatement.Name
                });
            }
        }