コード例 #1
0
        public static bool HasCompatibleValueOutput(this IUnitOption option, Type inputType)
        {
            Ensure.That(nameof(inputType)).IsNotNull(inputType);

            foreach (var valueOutputType in option.valueOutputTypes)
            {
                if (ConversionUtility.CanConvert(valueOutputType, inputType, false))
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #2
0
        public bool ValidateOption(IUnitOption option)
        {
            Ensure.That(nameof(option)).IsNotNull(option);

            if (!NoControlInput && option.controlInputCount == 0)
            {
                return(false);
            }
            if (!SingleControlInput && option.controlInputCount == 1)
            {
                return(false);
            }
            if (!MultipleControlInputs && option.controlInputCount > 1)
            {
                return(false);
            }

            if (!NoValueInput && option.valueInputTypes.Count == 0)
            {
                return(false);
            }
            if (!SingleValueInput && option.valueInputTypes.Count == 1)
            {
                return(false);
            }
            if (!MultipleValueInputs && option.valueInputTypes.Count > 1)
            {
                return(false);
            }

            if (!NoControlOutput && option.controlOutputCount == 0)
            {
                return(false);
            }
            if (!SingleControlOutput && option.controlOutputCount == 1)
            {
                return(false);
            }
            if (!MultipleControlOutputs && option.controlOutputCount > 1)
            {
                return(false);
            }

            if (!NoValueOutput && option.valueOutputTypes.Count == 0)
            {
                return(false);
            }
            if (!SingleValueOutput && option.valueOutputTypes.Count == 1)
            {
                return(false);
            }
            if (!MultipleValueOutputs && option.valueOutputTypes.Count > 1)
            {
                return(false);
            }

            var unitType = option.unitType;

            if (!Normals && !unitType.HasAttribute <SpecialUnitAttribute>())
            {
                return(false);
            }

            if (!Self && option.UnitIs <This>())
            {
                return(false);
            }

            if (!Events && option.UnitIs <IEventUnit>())
            {
                return(false);
            }

            if (!Literals && option.UnitIs <Literal>())
            {
                return(false);
            }

            if (!Variables && option.UnitIs <IUnifiedVariableUnit>())
            {
                return(false);
            }

            if (!Members && option.UnitIs <MemberUnit>())
            {
                return(false);
            }

            if (!Nesters && option.UnitIs <INesterUnit>())
            {
                return(false);
            }

            if (!Expose && option.UnitIs <Expose>())
            {
                return(false);
            }

            if (!Obsolete && unitType.HasAttribute <ObsoleteAttribute>())
            {
                return(false);
            }

            if (CompatibleInputType != null && !option.HasCompatibleValueInput(CompatibleInputType))
            {
                return(false);
            }

            if (CompatibleOutputType != null && !option.HasCompatibleValueOutput(CompatibleOutputType))
            {
                return(false);
            }

            return(true);
        }
コード例 #3
0
 public static bool UnitIs <T>(this IUnitOption option)
 {
     return(option.UnitIs(typeof(T)));
 }
コード例 #4
0
 public static bool UnitIs(this IUnitOption option, Type type)
 {
     return(type.IsAssignableFrom(option.unitType));
 }