internal IDictionary ExecuteMapReduce <MK, MV, NK, NV, RNV>(IEnumerable input, Mapper <MK, MV, NK, NV> mapper, Reducer <NK, NV, RNV> reducer, CircularArray <NK, NV> dictMap, IDictionary <NK, RNV> dictRed, bool executeMap, bool executeReduce) where MK : class { if (executeMap && mapper != null) { Map <MK, MV, NK, NV>(input, mapper, dictMap); } if (executeReduce && reducer != null) { Reduce <NK, NV, RNV>(reducer, dictMap, dictRed); } return(dictRed as IDictionary); }