コード例 #1
0
ファイル: TransformationEngine.cs プロジェクト: wasowski/NMF
        public static IEnumerable <TOut> TransformMany <TIn, TOut>(IEnumerable <TIn> inputs, ITransformationEngineContext context, TransformationRuleBase <TIn, TOut> startRule)
            where TIn : class
            where TOut : class
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            var transformation = context.Transformation;

            if (!transformation.IsInitialized)
            {
                transformation.Initialize();
            }
            if (startRule == null)
            {
                startRule = context.Transformation.GetRuleForTypeSignature(new Type[] { typeof(TIn) }, typeof(TOut)) as TransformationRuleBase <TIn, TOut>;
            }
            else
            {
                if (startRule.Transformation != context.Transformation)
                {
                    ThrowRuleNotPartOfTransformation();
                }
            }
            return(TransformationRunner.TransformMany(inputs.Select(item => new object[] { item }), null, startRule, context).Select(c => c.Output).OfType <TOut>());
        }
コード例 #2
0
ファイル: TransformationEngine.cs プロジェクト: wasowski/NMF
        public static void ProcessMany <TIn>(IEnumerable <TIn> inputs, ITransformationEngineContext context, GeneralTransformationRule <TIn> startRule)
            where TIn : class
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            var transformation = context.Transformation;

            if (!transformation.IsInitialized)
            {
                transformation.Initialize();
            }
            if (startRule == null)
            {
                startRule = context.Transformation.GetRulesForInputTypes(new Type[] { typeof(TIn) }).FirstOrDefault() as GeneralTransformationRule <TIn>;
            }
            else
            {
                if (startRule.Transformation != context.Transformation)
                {
                    ThrowRuleNotPartOfTransformation();
                }
            }
            TransformationRunner.TransformMany(inputs.Select(item => new object[] { item }), null, startRule, context);
        }
コード例 #3
0
ファイル: Synchronization.cs プロジェクト: wasowski/NMF
        public ISynchronizationContext SynchronizeMany <TLeft, TRight>(SynchronizationRule <TLeft, TRight> startRule, ICollection <TLeft> lefts, ICollection <TRight> rights, SynchronizationDirection direction, ChangePropagationMode changePropagation)
            where TLeft : class
            where TRight : class
        {
            if (startRule == null)
            {
                throw new ArgumentNullException("startRule");
            }

            var context = new SynchronizationContext(this, direction, changePropagation);

            switch (direction)
            {
            case SynchronizationDirection.LeftToRight:
                var c1 = TransformationRunner.TransformMany(lefts.Select(l => new object[] { l }), rights, startRule.LeftToRight, context);
                rights.Clear();
                rights.AddRange(c1.Select(c => c.Output as TRight));
                break;

            case SynchronizationDirection.RightToLeft:
                var c2 = TransformationRunner.TransformMany(rights.Select(r => new object[] { r }), lefts, startRule.RightToLeft, context);
                lefts.Clear();
                lefts.AddRange(c2.Select(c => c.Output as TLeft));
                break;

            default:
                throw new ArgumentOutOfRangeException("direction");
            }
            return(context);
        }