Beispiel #1
0
        public Component(string name, Type componentType, bool storeFullVariablesByDefault)
        {
            _name = name;
            _componentType = componentType;

            _hasTransitionFunction = _componentType.GetMethod("RunTransitionFunction") != null;

            // Find the type of the state interface by looking at the type of the
            // second argument of the run method
            var parametersOfTheRunMethod = componentType.GetMethod("Run").GetParameters();
            _stateinterfaceType = parametersOfTheRunMethod[1].ParameterType;

            _storeFullVariablesByDefault = storeFullVariablesByDefault;

            var fields = from x in _stateinterfaceType.GetProperties()
                         let isMultDim = x.PropertyType.IsGenericType ? (x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable2Dimensional<,,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IParameter1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IParameter2Dimensional<,,>)) : false
                         let dimensionTypes = x.PropertyType.IsGenericType ? x.PropertyType.GetGenericArguments() : null
                         let defaultValuesCount = x.GetCustomAttributes(typeof(DefaultParameterValueAttribute), false).Length
                         select new
                         {
                             Name = x.Name,
                             IsVariable = !isMultDim ? x.CanWrite : (x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable2Dimensional<,,>)),
                             DefaultValue = defaultValuesCount == 0 ? null : x.GetCustomAttributes(typeof(DefaultParameterValueAttribute), false).Cast<DefaultParameterValueAttribute>().First(),
                             DimensionTypes = dimensionTypes == null ? new Type[] { } : dimensionTypes.Reverse().Skip(1).Reverse().ToArray(),
                             DataType = !x.PropertyType.IsGenericType ? x.PropertyType : x.PropertyType.GetGenericArguments().Reverse().First()
                         };

            foreach (var f in fields)
            {
                if (f.IsVariable)
                {
                    var v = new Variable(f.Name, f.DimensionTypes, f.DataType);
                    v.StoreOutput = _storeFullVariablesByDefault;
                    _variables.Add(f.Name, v);
                }
                else
                {
                    var p = new Parameter(f.Name, f.DimensionTypes, f.DataType);
                    _parameters.Add(f.Name, p);

                    if (f.DefaultValue != null)
                        p.Binding.SetDefaultValue(f.DefaultValue.DefaultValue);
                }
            }
        }
Beispiel #2
0
        public Component(string name, Type componentType, Type stateinterfaceType)
        {
            _name = name;
            _componentType = componentType;
            _stateinterfaceType = stateinterfaceType;

            var fields = from x in stateinterfaceType.GetProperties()
                         let isMultDim = x.PropertyType.IsGenericType ? (x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable2Dimensional<,,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IParameter1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IParameter2Dimensional<,,>)) : false
                         let dimensionTypes = x.PropertyType.IsGenericType ? x.PropertyType.GetGenericArguments() : null
                         let defaultValuesCount = x.GetCustomAttributes(typeof(DefaultParameterValueAttribute), false).Length
                         select new
                         {
                             Name = x.Name,
                             IsVariable = !isMultDim ? x.CanWrite : (x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable1Dimensional<,>) || x.PropertyType.GetGenericTypeDefinition() == typeof(IVariable2Dimensional<,,>)),
                             DefaultValue = defaultValuesCount == 0 ? null : x.GetCustomAttributes(typeof(DefaultParameterValueAttribute), false).Cast<DefaultParameterValueAttribute>().First(),
                             DimensionTypes = dimensionTypes == null ? new Type[] { } : dimensionTypes.Reverse().Skip(1).Reverse().ToArray(),
                             DataType = !x.PropertyType.IsGenericType ? x.PropertyType : x.PropertyType.GetGenericArguments().Reverse().First()
                         };

            foreach (var f in fields)
            {
                if (f.IsVariable)
                {
                    var v = new Variable(f.Name, f.DimensionTypes, f.DataType);
                    _variables.Add(f.Name, v);
                }
                else
                {
                    var p = new Parameter(f.Name, f.DimensionTypes, f.DataType);
                    _parameters.Add(f.Name, p);

                    if (f.DefaultValue != null)
                        p.Binding.SetDefaultValue(f.DefaultValue.DefaultValue);
                }
            }
        }