コード例 #1
0
ファイル: VariableIdentifier.cs プロジェクト: BEXIS2/Core
 /// <summary>
 /// 
 /// </summary>
 /// <remarks></remarks>
 /// <seealso cref=""/>
 /// <param name="check"></param>
 /// <returns></returns>
 public bool Equals(VariableIdentifier check)
 {
     if (check != null)
     {
         // name and id exist
         if (!string.IsNullOrEmpty(check.name) && (check.id != null && check.id != 0))
         {
             if (check.name.Equals(name) && check.id.Equals(id)) return true;
             else return false;
         }
         else
         {
             // name is empty
             if (string.IsNullOrEmpty(check.name) && (check.id != null || check.id != 0))
             {
                 if (check.id.Equals(id)) return true;
                 else return false;
             }
             else
             {
                 //id is empty
                 if (!string.IsNullOrEmpty(check.name) && (check.id == null || check.id == 0))
                 {
                     if (check.name.Equals(name)) return true;
                     else return false;
                 }
             }
             return false;
         }
     }
     else return false;
 }
コード例 #2
0
        /// <summary>
        /// Force a variable to have a slot.  Returns -1 if the variable has an empty struct type.
        /// </summary>
        protected int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false)
        {
            Debug.Assert(containingSlot >= 0);

            if (symbol.Kind == SymbolKind.RangeVariable)
            {
                return(-1);
            }

            containingSlot = DescendThroughTupleRestFields(ref symbol, containingSlot, forceContainingSlotsToExist: true);

            if (containingSlot < 0)
            {
                // Error case. Diagnostics should already have been produced.
                return(-1);
            }

            VariableIdentifier identifier = new VariableIdentifier(symbol, containingSlot);
            int slot;

            // Since analysis may proceed in multiple passes, it is possible the slot is already assigned.
            if (!_variableSlot.TryGetValue(identifier, out slot))
            {
                var variableType = symbol.GetTypeOrReturnType().Type;
                if (!forceSlotEvenIfEmpty && IsEmptyStructType(variableType))
                {
                    return(-1);
                }

                if (_maxSlotDepth > 0 && GetSlotDepth(containingSlot) >= _maxSlotDepth)
                {
                    return(-1);
                }

                slot = nextVariableSlot++;
                _variableSlot.Add(identifier, slot);
                if (slot >= variableBySlot.Length)
                {
                    Array.Resize(ref this.variableBySlot, slot * 2);
                }

                variableBySlot[slot] = identifier;
            }

            if (IsConditionalState)
            {
                Normalize(ref this.StateWhenTrue);
                Normalize(ref this.StateWhenFalse);
            }
            else
            {
                Normalize(ref this.State);
            }

            return(slot);
        }
コード例 #3
0
        /// <inheritdoc />
        protected override void flowThrough()
        {
            var variables = new VariableIdentifier[_variables.Length];

            for (int i = 0; i < _variables.Length; ++i)
            {
                variables[i] = _variables[i].LValue.GetVariableIdentifier(OutSnapshot);
            }
            Services.Evaluator.GlobalStatement(variables);
        }
コード例 #4
0
        public VariableIdentifier ParseVariableName()
        {
            VariableIdentifier var = TryParseVariable();

            if (var == null)
            {
                Log.LogError("Expected a variable name!", CurrentPosition);
                return(null);
            }
            return(var);
        }
コード例 #5
0
        protected Symbol GetNonMemberSymbol(int slot)
        {
            VariableIdentifier variableId = variableBySlot[slot];

            while (variableId.ContainingSlot > 0)
            {
                Debug.Assert(variableId.Symbol.Kind == SymbolKind.Field || variableId.Symbol.Kind == SymbolKind.Property || variableId.Symbol.Kind == SymbolKind.Event);
                variableId = variableBySlot[variableId.ContainingSlot];
            }
            return(variableId.Symbol);
        }
コード例 #6
0
ファイル: DataReader.cs プロジェクト: payamad/Core
        /// <summary>
        /// Compare Datastructure with Submited Variables
        /// And create a Dictionary of ValueValidationmanagers
        /// </summary>
        /// <remarks></remarks>
        /// <param name="row"></param>
        /// <returns></returns>
        public List <Error> ValidateComparisonWithDatatsructure(List <VariableIdentifier> variableIdentifers)
        {
            List <Error> errors = new List <Error>();

            try
            {
                List <VariableIdentifier> source = getDatastructureVariableIdentifiers();

                DatastructureMatchCheck dmc = new DatastructureMatchCheck();
                errors = dmc.Execute(SubmitedVariableIdentifiers, source, this.StructuredDataStructure.Name);
            }
            catch
            {
            }
            if (errors == null)
            {
                for (int i = 0; i < variableIdentifers.Count; i++)
                {
                    VariableIdentifier hv = variableIdentifers.ElementAt(i);

                    if (hv != null)
                    {
                        Variable sdvu = getVariableUsage(hv);

                        if (sdvu != null)
                        {
                            string varName  = sdvu.Label;
                            bool   optional = sdvu.IsValueOptional;
                            string dataType = sdvu.DataAttribute.DataType.SystemType;

                            // change parameters to only sdvu
                            this.ValueValidationManagerDic.Add(sdvu.Id, createValueValidationManager(varName, dataType, optional, sdvu.DataAttribute));
                        }
                        else
                        {
                            errors.Add(new Error(ErrorType.Datastructure, "Error with name of Variable"));
                        }
                    }
                }//for
            }
            else
            {
                if (errors.Count > 0)
                {
                    return(errors);
                }
                else
                {
                    return(null);
                }
            }

            return(null);
        }
コード例 #7
0
        private void fatalError(FlowController flow, bool removeFlowChildren)
        {
            var catchedType   = new GenericQualifiedName(new QualifiedName(new Name(string.Empty)));
            var catchVariable = new VariableIdentifier(string.Empty);
            var description   = new CatchBlockDescription(flow.ProgramEnd, catchedType, catchVariable);
            var info          = new ThrowInfo(description, new MemoryEntry());

            var throws = new ThrowInfo[] { info };

            flow.SetThrowBranching(throws, removeFlowChildren);
        }
コード例 #8
0
        /// <summary>
        /// Create field representation for given field
        /// </summary>
        /// <param name="field">Field which representation is created</param>
        /// <returns>Created field representation</returns>
        private string fieldRepresentation(VariableIdentifier field)
        {
            var name = new StringBuilder();

            foreach (var possibleName in field.PossibleNames)
            {
                name.Append(possibleName);
                name.Append(',');
            }

            return(name.ToString());
        }
コード例 #9
0
        private static void TestEvaluation(string code, MemoryEntry testInputEntry)
        {
            var analysis = TestUtils.GenerateForwardAnalysis(code);

            var identifier    = new VariableIdentifier(inputVariableName);
            var snapshotEntry = analysis.EntryInput.GetVariable(identifier, true);

            snapshotEntry.WriteMemory(analysis.EntryInput.Snapshot, testInputEntry);

            // Do not test results, just test whether all operations are supported
            var ppg = TestUtils.GeneratePpg(analysis);
        }
コード例 #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ReadFieldVisitor"/> class.
        /// </summary>
        /// <param name="containingIndex">Index of the containing.</param>
        /// <param name="fieldSegment">The field segment.</param>
        /// <param name="locations">The locations.</param>
        public ReadFieldVisitor(MemoryIndex containingIndex, FieldPathSegment fieldSegment, ICollection <ValueLocation> locations)
        {
            this.containingIndex = containingIndex;
            this.locations       = locations;

            ContainsUndefinedValue = false;
            ContainsDefinedValue   = false;
            ContainsObjectValue    = false;
            ContainsAnyValue       = false;

            index = new VariableIdentifier(fieldSegment.Names);
        }
コード例 #11
0
ファイル: VariableIdentifier.cs プロジェクト: payamad/Core
 /// <summary>
 ///
 /// </summary>
 /// <remarks></remarks>
 /// <seealso cref=""/>
 /// <param name="check"></param>
 /// <returns></returns>
 public bool Equals(VariableIdentifier check)
 {
     if (check != null)
     {
         // name and id exist
         if (!string.IsNullOrEmpty(check.name) && (check.id != null && check.id != 0))
         {
             if (check.name.Equals(name) && check.id.Equals(id))
             {
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             // name is empty
             if (string.IsNullOrEmpty(check.name) && (check.id != null || check.id != 0))
             {
                 if (check.id.Equals(id))
                 {
                     return(true);
                 }
                 else
                 {
                     return(false);
                 }
             }
             else
             {
                 //id is empty
                 if (!string.IsNullOrEmpty(check.name) && (check.id == null || check.id == 0))
                 {
                     if (check.name.Equals(name))
                     {
                         return(true);
                     }
                     else
                     {
                         return(false);
                     }
                 }
             }
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
コード例 #12
0
        public List <VariableIdentifier> SetSubmitedVariableIdentifiers(List <string> variableNames)
        {
            SubmitedVariableIdentifiers = new List <VariableIdentifier>();

            foreach (string s in variableNames)
            {
                VariableIdentifier vi = new VariableIdentifier();
                vi.name = s;
                SubmitedVariableIdentifiers.Add(vi);
            }

            return(SubmitedVariableIdentifiers);
        }
コード例 #13
0
        /// <summary>
        /// Force a variable to have a slot.  Returns -1 if the variable has an empty struct type.
        /// </summary>
        protected virtual int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
        {
            Debug.Assert(containingSlot >= 0);
            Debug.Assert(symbol != null);

            if (symbol.Kind == SymbolKind.RangeVariable)
            {
                return(-1);
            }

            containingSlot = DescendThroughTupleRestFields(ref symbol, containingSlot, forceContainingSlotsToExist: true);

            if (containingSlot < 0)
            {
                // Error case. Diagnostics should already have been produced.
                return(-1);
            }

            VariableIdentifier identifier = new VariableIdentifier(symbol, containingSlot);
            int slot;

            // Since analysis may proceed in multiple passes, it is possible the slot is already assigned.
            if (!TryGetVariable(identifier, out slot))
            {
                if (!createIfMissing)
                {
                    return(-1);
                }

                var variableType = symbol.GetTypeOrReturnType().Type;
                if (!forceSlotEvenIfEmpty && IsEmptyStructType(variableType))
                {
                    return(-1);
                }

                slot = AddVariable(identifier);
            }

            if (IsConditionalState)
            {
                Normalize(ref this.StateWhenTrue);
                Normalize(ref this.StateWhenFalse);
            }
            else
            {
                Normalize(ref this.State);
            }

            return(slot);
        }
コード例 #14
0
        private static void _define(FlowController flow)
        {
            var arg0 = ReadNumberedArgument(flow.InSet, 0);
            var arg1 = ReadNumberedArgument(flow.InSet, 1);

            foreach (StringValue constName in arg0.PossibleValues)
            {
                var constVarId = new VariableIdentifier(".constant_" + constName.Value);
                var constVar   = flow.OutSet.GetVariable(constVarId);
                flow.OutSet.FetchFromGlobal(constVarId.DirectName);

                constVar.WriteMemory(flow.OutSet.Snapshot, arg1);
            }
        }
コード例 #15
0
        internal IEnumerable <VariableKeyBase> FieldStorages(Value objectValue, VariableIdentifier field)
        {
            var storages = new List <VariableKeyBase>();

            foreach (var fieldName in field.PossibleNames)
            {
                //TODO refactor ContainerIndex API
                var fieldIndex = CreateIndex(fieldName.Value);
                var key        = getFieldStorage(objectValue, fieldIndex);
                storages.Add(key);
            }

            return(storages);
        }
コード例 #16
0
        /// <inheritdoc />
        protected override ReadWriteSnapshotEntryBase getVariable(VariableIdentifier variable, bool forceGlobalContext)
        {
            var kind = repairKind(VariableKind.Local, forceGlobalContext);

            var storages = new List <VariableKeyBase>();

            foreach (var name in variable.PossibleNames)
            {
                var key = getOrCreateKey(name, kind);
                storages.Add(key);
            }

            return(new SnapshotStorageEntry(variable, false, storages.ToArray()));
        }
コード例 #17
0
        public override ReadWriteSnapshotEntryBase ResolveIndirectStaticField(MemoryEntry typeNames, VariableIdentifier field)
        {
            var variables = new List <string>();

            foreach (var typeName in TypeNames(typeNames))
            {
                var varName = string.Format("{0}::{1}", typeName, field.DirectName);
                variables.Add(varName);
            }

            var identifier = new VariableIdentifier(variables.ToArray());

            return(OutSet.GetVariable(identifier));
        }
コード例 #18
0
        private static void TestVariableResults(FlowOutputSet outSet, Value[] results,
                                                Func <int, string> nameGenerator)
        {
            for (var i = 0; i < results.Length; ++i)
            {
                var identifier    = new VariableIdentifier(nameGenerator(i));
                var snapshotEntry = outSet.GetVariable(identifier, true);

                var entry      = snapshotEntry.ReadMemory(outSet.Snapshot);
                var enumerator = entry.PossibleValues.GetEnumerator();
                enumerator.MoveNext();
                var value = enumerator.Current as Value;

                Assert.AreEqual(results[i], value);
            }
        }
コード例 #19
0
ファイル: FuncGenerator.cs プロジェクト: jake-bladt/Fuzzlyn
        private static void AppendVariablePaths(List <LValueInfo> paths, VariableIdentifier var)
        {
            ExpressionSyntax varAccess = IdentifierName(var.Name);

            AddPathsRecursive(varAccess, var.Type, var.RefEscapeScope);

            void AddPathsRecursive(ExpressionSyntax curAccess, FuzzType curType, int curRefEscapeScope)
            {
                LValueInfo info = new LValueInfo(curAccess, curType, curRefEscapeScope);

                paths.Add(info);

                if (curType is RefType rt)
                {
                    curType = rt.InnerType;
                }

                switch (curType)
                {
                case ArrayType arr:
                    AddPathsRecursive(
                        ElementAccessExpression(
                            curAccess,
                            BracketedArgumentList(
                                SeparatedList(
                                    Enumerable.Repeat(
                                        Argument(LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(0))),
                                        arr.Rank)))),
                        arr.ElementType,
                        curRefEscapeScope: int.MaxValue);
                    break;

                case AggregateType agg:
                    foreach (AggregateField field in agg.Fields)
                    {
                        AddPathsRecursive(
                            MemberAccessExpression(
                                SyntaxKind.SimpleMemberAccessExpression,
                                curAccess,
                                IdentifierName(field.Name)),
                            field.Type,
                            curRefEscapeScope: agg.IsClass?int.MaxValue: curRefEscapeScope);
                    }
                    break;
                }
            }
        }
コード例 #20
0
        public List <VariableIdentifier> ParseVariableNames()
        {
            List <VariableIdentifier> vars = new List <VariableIdentifier>();

            do
            {
                VariableIdentifier variable = TryParseVariable();
                if (variable == null)
                {
                    Log.LogError("Expected at least one variable name!", CurrentPosition, CurrentPosition.GetModifiedPosition(0, 1, 1));
                    return(null);
                }
                vars.Add(variable);
            } while (Tokens.ConsumeToken(TokenType.Comma) != null);
            // TODO: This allows a trailing comma before semicolon, intended?
            return(vars);
        }
コード例 #21
0
        private static void SetInputOperands(FlowOutputSet entryInput, Value[] leftOperands,
                                             Value[] rightOperands)
        {
            Debug.Assert(leftOperands.Length == rightOperands.Length,
                         "Number of left and right operands is the same");

            for (var i = 0; i < leftOperands.Length; ++i)
            {
                var identifier    = new VariableIdentifier(string.Concat("left", i.ToString()));
                var snapshotEntry = entryInput.GetVariable(identifier, true);
                snapshotEntry.WriteMemoryWithoutCopy(entryInput.Snapshot, new MemoryEntry(leftOperands[i]));

                identifier    = new VariableIdentifier(string.Concat("right", i.ToString()));
                snapshotEntry = entryInput.GetVariable(identifier, true);
                snapshotEntry.WriteMemoryWithoutCopy(entryInput.Snapshot, new MemoryEntry(rightOperands[i]));
            }
        }
コード例 #22
0
        /// <summary>
        /// Force a variable to have a slot.  Returns -1 if the variable has an empty struct type.
        /// </summary>
        protected int GetOrCreateSlot(Symbol symbol, int containingSlot = 0)
        {
            if (symbol.Kind == SymbolKind.RangeVariable)
            {
                return(-1);
            }

            containingSlot = DescendThroughTupleRestFields(ref symbol, containingSlot, forceContainingSlotsToExist: true);

            VariableIdentifier identifier = new VariableIdentifier(symbol, containingSlot);
            int slot;

            // Since analysis may proceed in multiple passes, it is possible the slot is already assigned.
            if (!_variableSlot.TryGetValue(identifier, out slot))
            {
                var variableType = VariableType(symbol).TypeSymbol;
                if (_emptyStructTypeCache.IsEmptyStructType(variableType))
                {
                    return(-1);
                }

                slot = nextVariableSlot++;
                _variableSlot.Add(identifier, slot);
                if (slot >= variableBySlot.Length)
                {
                    Array.Resize(ref this.variableBySlot, slot * 2);
                }

                variableBySlot[slot] = identifier;
            }

            if (IsConditionalState)
            {
                Normalize(ref this.StateWhenTrue);
                Normalize(ref this.StateWhenFalse);
            }
            else
            {
                Normalize(ref this.State);
            }

            return(slot);
        }
コード例 #23
0
 /// <inheritdoc />
 public override IEnumerable <Value> ReadValueField(Value fielded, VariableIdentifier field)
 {
     if (fielded is AnyObjectValue)
     {
         yield return(Context.AnyValue);
     }
     else if (fielded is UndefinedValue)
     {
         yield return(Context.UndefinedValue);
     }
     else
     {
         SetWarning("Cannot use operator -> on variable other than object", AnalysisWarningCause.CANNOT_ACCESS_OBJECT_OPERATOR_ON_NON_OBJECT);
         if (fielded is AnyValue)
         {
             yield return(Context.AnyValue);
         }
         yield return(Context.UndefinedValue);
     }
 }
コード例 #24
0
 /// <inheritdoc />
 public override MemoryEntry ReadAnyField(AnyValue value, VariableIdentifier field)
 {
     // TODO: Copy info
     if (value is AnyObjectValue)
     {
         SetWarning("Possibly undefined property");
         return(new MemoryEntry(Context.AnyValue));
     }
     else if ((value is AnyScalarValue) || (value is AnyArrayValue) || (value is AnyResourceValue))
     {
         SetWarning("Trying to get property of non-object",
                    AnalysisWarningCause.PROPERTY_OF_NON_OBJECT_VARIABLE);
         return(new MemoryEntry(Context.UndefinedValue));
     }
     else
     {
         // This is case of AnyValue and possibly others.
         return(new MemoryEntry(Context.AnyValue));
     }
 }
コード例 #25
0
        /// <inheritdoc />
        protected override void flowThrough()
        {
            var varNames = Services.Evaluator.VariableNames(VariableName.Value.ReadMemory(OutSnapshot));

            if (varNames == null)
            {
                varNames = new string[0];
            }

            var variable = new VariableIdentifier(varNames);

            if (ThisObj == null)
            {
                LValue = Services.Evaluator.ResolveVariable(variable);
            }
            else
            {
                LValue = Services.Evaluator.ResolveField(ThisObj.Value, variable);
            }
        }
コード例 #26
0
        public override MemoryEntry Constant(GlobalConstUse x)
        {
            Value result;

            switch (x.Name.Name.Value)
            {
            case "true":
                result = OutSet.CreateBool(true);
                break;

            case "false":
                result = OutSet.CreateBool(false);
                break;

            default:
                var constantName = ".constant_" + x.Name;
                var constantVar  = new VariableIdentifier(constantName);
                OutSet.FetchFromGlobal(constantVar.DirectName);
                return(OutSet.ReadVariable(constantVar).ReadMemory(OutSnapshot));
            }

            return(new MemoryEntry(result));
        }
コード例 #27
0
        public override MemoryEntry ResolveIndexedVariable(VariableIdentifier variable)
        {
            var snapshotEntry = ResolveVariable(variable);
            var entry         = snapshotEntry.ReadMemory(OutSnapshot);

            Debug.Assert(entry.Count > 0, "Every resolved variable must give at least one value");

            // NOTE: there should be precise resolution of multiple values
            var arrayValue     = entry.PossibleValues.First();
            var undefinedValue = arrayValue as UndefinedValue;

            if (undefinedValue != null)
            {
                arrayValue = OutSet.CreateArray();
                var newEntry = new MemoryEntry(arrayValue);
                snapshotEntry.WriteMemory(OutSnapshot, newEntry);
                return(newEntry);
            }
            else
            {
                return(entry);
            }
        }
コード例 #28
0
ファイル: DataReader.cs プロジェクト: payamad/Core
        /// <summary>
        /// Validate a row
        /// </summary>
        /// <seealso cref=""/>
        /// <param name="row">List of strings</param>
        /// <param name="indexOfRow">Index of row</param>
        /// <returns>List of errors or null</returns>
        public List <Error> ValidateRow(List <string> row, int indexOfRow)
        {
            List <Error> errors = new List <Error>();

            // number of variables in datastructure
            int numOfVariables = this.StructuredDataStructure.Variables.Count();

            // number of current row values
            int rowCount = row.Count();

            // number of is equal
            if (numOfVariables.Equals(rowCount))
            {
                int valuePosition = 0;
                foreach (string v in row)
                {
                    try
                    {
                        VariableIdentifier hv   = SubmitedVariableIdentifiers.ElementAt(row.IndexOf(v));
                        Variable           sdvu = getVariableUsage(hv);

                        ValueValidationManager validationManager = ValueValidationManagerDic[sdvu.Id];

                        List <Error> temp = new List <Error>();

                        // returns the checked value and update the error list if error appears
                        object value = validationManager.CheckValue(v, indexOfRow, ref temp);

                        if (temp.Count == 0)
                        {
                            temp = validationManager.ValidateValue(v, indexOfRow);

                            // check Constraints
                            foreach (Constraint constraint in sdvu.DataAttribute.Constraints)
                            {
                                //new Error(ErrorType.Value, "Not in Range", new object[] { name, value, row, dataType });
                                if (!constraint.IsSatisfied(value))
                                {
                                    temp.Add(new Error(ErrorType.Value, constraint.ErrorMessage, new object[] { sdvu.Label, value, indexOfRow, sdvu.DataAttribute.DataType.Name }));
                                }
                            }
                        }

                        if (temp != null)
                        {
                            errors = errors.Union(temp).ToList();
                        }

                        valuePosition++;
                    }
                    catch
                    {
                        //test
                        if (true)
                        {
                        }
                    }
                }
            }
            // different value lenght
            else
            {
                Error e = new Error(ErrorType.Other, "Number of Values different as number of variables");
                errors.Add(e);
            }

            NumberOfRows++;

            return(errors);
        }
コード例 #29
0
ファイル: DataReader.cs プロジェクト: payamad/Core
        /// <summary>
        /// Read Row and convert each value into a variableValue
        /// and each row to a Datatuple
        /// </summary>
        /// <param name="row">List of values in one row</param>
        /// <param name="indexOfRow">Currently row index</param>
        /// <returns>DataTuple</returns>
        public DataTuple ReadRow(List <string> row, int indexOfRow)
        {
            DataTuple dt    = new DataTuple();
            string    value = "";

            // convert row to List<VariableValue>
            for (int i = 0; i < row.Count(); i++)
            {
                VariableIdentifier variableIdentifier = this.SubmitedVariableIdentifiers.ElementAt(i);
                long variableId = 0;
                if (variableIdentifier.id > 0)
                {
                    variableId = this.SubmitedVariableIdentifiers.ElementAt(i).id;
                }
                else
                {
                    variableId = getVariableUsage(variableIdentifier).Id;
                }



                // if variable from systemtype datatime
                // maybee needs to convert into the default datetime culture format
                if (this.StructuredDataStructure.Variables.Where(p => p.Id.Equals(variableId)).FirstOrDefault().DataAttribute.DataType.SystemType.Equals("DateTime"))
                {
                    Dlm.Entities.DataStructure.DataType dataType = this.StructuredDataStructure.Variables.Where(p => p.Id.Equals(variableId)).FirstOrDefault().DataAttribute.DataType;

                    if (dataType != null && dataType.Extra != null)
                    {
                        DataTypeDisplayPattern dp = DataTypeDisplayPattern.Materialize(dataType.Extra);
                        if (dp != null && !string.IsNullOrEmpty(dp.StringPattern))
                        {
                            value = IOUtility.ConvertToDateUS(row[i], dp.StringPattern);
                        }
                        else
                        {
                            value = IOUtility.ConvertDateToCulture(row[i]);
                        }
                    }
                    else
                    {
                        value = IOUtility.ConvertDateToCulture(row[i]);
                    }
                }
                else
                {
                    if (this.StructuredDataStructure.Variables.Where(p => p.Id.Equals(variableId)).FirstOrDefault().DataAttribute.DataType.SystemType.Equals("Double") ||
                        this.StructuredDataStructure.Variables.Where(p => p.Id.Equals(variableId)).FirstOrDefault().DataAttribute.DataType.SystemType.Equals("Decimal") ||
                        this.StructuredDataStructure.Variables.Where(p => p.Id.Equals(variableId)).FirstOrDefault().DataAttribute.DataType.SystemType.Equals("Float"))
                    {
                        value = row[i];

                        if (Info.Decimal.Equals(DecimalCharacter.comma))
                        {
                            if (value.Contains("."))
                            {
                                value = value.Replace(".", "");
                            }
                            if (value.Contains(","))
                            {
                                value = value.Replace(',', '.');
                            }
                        }

                        if (Info.Decimal.Equals(DecimalCharacter.point))
                        {
                            if (value.Contains(","))
                            {
                                value = value.Remove(',');
                            }
                        }
                    }
                    else
                    {
                        value = row[i];
                    }
                }

                dt.VariableValues.Add(DatasetManager.CreateVariableValue(value, "", DateTime.Now, DateTime.Now, new ObtainingMethod(), variableId, new List <ParameterValue>()));
            }


            return(dt);
        }
コード例 #30
0
        /// <summary>
        ///
        /// </summary>
        /// <remarks></remarks>
        /// <seealso cref=""/>
        /// <param name="worksheetPart"></param>
        /// <param name="startRow"></param>
        /// <param name="endRow"></param>
        /// <returns></returns>
        private List <VariableIdentifier> getVariableIdentifiers(WorksheetPart worksheetPart, int startRow, int endRow)
        {
            //NEW OPENXMLREADER
            if (this.VariableIdentifiers == null || this.VariableIdentifiers.Count == 0)
            {
                OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
                int           rowNum = 0;

                // read variable rows to get name and id from area variable
                while (reader.Read())
                {
                    if (reader.ElementType == typeof(Row))
                    {
                        do
                        {
                            if (reader.HasAttributes)
                            {
                                rowNum = Convert.ToInt32(reader.Attributes.First(a => a.LocalName == "r").Value);
                            }

                            if (rowNum >= startRow && rowNum <= endRow)
                            {
                                Row row = (Row)reader.LoadCurrentElement();

                                if (row.Hidden == null)
                                {
                                    VariableIdentifierRows.Add(rowToList(row));
                                }
                                else if (row.Hidden != true)
                                {
                                    VariableIdentifierRows.Add(rowToList(row));
                                }
                            }
                        } while (reader.ReadNextSibling() && rowNum < endRow); // Skip to the next row
                        break;
                    }
                }

                // convert variable rows to VariableIdentifiers
                if (VariableIdentifierRows != null)
                {
                    foreach (List <string> l in VariableIdentifierRows)
                    {
                        //create headerVariables
                        if (VariableIdentifiers.Count == 0)
                        {
                            foreach (string s in l)
                            {
                                VariableIdentifier hv = new VariableIdentifier();
                                hv.name = s;
                                VariableIdentifiers.Add(hv);
                            }
                        }
                        else
                        {
                            foreach (string s in l)
                            {
                                int id    = Convert.ToInt32(s);
                                int index = l.IndexOf(s);
                                VariableIdentifiers.ElementAt(index).id = id;
                            }
                        }
                    }
                }
            }

            if (this.VariableIdentifiers != null)
            {
                return(this.VariableIdentifiers);
            }
            else
            {
                return(null);
            }
        }
コード例 #31
0
 public DoorScript(VariableIdentifier keyIdentifier, VariableLookup lookup, string doorName)
 {
     this.keyIdentifier       = keyIdentifier;
     this.doorStateIdentifier = lookup.Unique("door state");
     this.doorName            = doorName;
 }