public void Add(Type commonType, BinaryCallTarget implementation, TypeConverter resultConverter) { TypePair key = new TypePair(commonType, commonType); DispatchRecord rec = new DispatchRecord(key, commonType, null, null, resultConverter, implementation); Add(rec); }
public DispatchRecord(TypePair key, Type commonType, TypeConverter arg1Converter, TypeConverter arg2Converter, TypeConverter resultConverter, BinaryCallTarget implementation) { Key = key; CommonType = commonType; Arg1Converter = arg1Converter; Arg2Converter = arg2Converter; ResultConverter = resultConverter; Implementation = implementation; SetupEvaluationMethod(); }
public void SetupEvaluationMethod() { if (ResultConverter == null) { if (Arg1Converter == null && Arg2Converter == null) { Evaluate = EvaluateConvNone; } else if (Arg1Converter != null && Arg2Converter == null) { Evaluate = EvaluateConvLeft; } else if (Arg1Converter == null && Arg2Converter != null) { Evaluate = EvaluateConvRight; } else // if (Arg1Converter != null && arg2Converter != null) { Evaluate = EvaluateConvBoth; } } else { //with result converter if (Arg1Converter == null && Arg2Converter == null) { Evaluate = EvaluateConvNoneConvResult; } else if (Arg1Converter != null && Arg2Converter == null) { Evaluate = EvaluateConvLeftConvResult; } else if (Arg1Converter == null && Arg2Converter != null) { Evaluate = EvaluateConvRightConvResult; } else // if (Arg1Converter != null && Arg2Converter != null) { Evaluate = EvaluateConvBothConvResult; } } }
//Adds a base record with identical argument types public void Add(Type commonType, BinaryCallTarget implementation) { Add(commonType, implementation, null); }