コード例 #1
0
ファイル: Operators.cs プロジェクト: skolima/fitsharp
        public O FindOperator <O>(object[] parameters) where O : class
        {
            var operationType = typeof(O).Name;
            var operationName = operationType.Substring(0, operationType.IndexOf("Operator"));

            for (var priority = operators.Count - 1; priority >= 0; priority--)
            {
                for (var i = operators[priority].Count - 1; i >= 0; i--)
                {
                    var anOperator = operators[priority][i];
                    anOperator.Processor = Processor;
                    var candidate = anOperator as O;
                    if (candidate == null)
                    {
                        continue;
                    }
                    var member = RuntimeType.FindDirectInstance(candidate, new IdentifierName("Can" + operationName), parameters.Length);
                    if (!member.Invoke(parameters).GetValue <bool>())
                    {
                        continue;
                    }
                    return(candidate);
                }
            }
            throw new ApplicationException(string.Format("No default for {0}", typeof(O).Name));
        }
コード例 #2
0
ファイル: Processor.cs プロジェクト: skolima/fitsharp
        public TypedValue Operate <O>(params object[] parameters) where O : class
        {
            var operationType = typeof(O).Name;
            var operationName = operationType.Substring(0, operationType.IndexOf("Operator"));
            var logging       = new OperationLogging(Configuration);

            try {
                logging.Start(operationName);
                logging.LogParameters(parameters);
                var candidate = Operators.FindOperator <O>(parameters);
                var member    = RuntimeType.FindDirectInstance(candidate, new IdentifierName(operationName), parameters.Length);
                var result    = member.Invoke(parameters).GetValue <TypedValue>();
                logging.LogResult(candidate, result);
                return(result);
            }
            finally {
                logging.End();
            }
        }