private Future <FeatureStrokePair> createFeatureStrokePair(StrokePair strokePair)
 {
     return(new Future <FeatureStrokePair>(delegate()
     {
         FeatureStrokePair pair = new FeatureStrokePair(strokePair, m_FeaturesToUse);
         return pair;
     }));
 }
        /// <summary>
        /// Returns the minumum distance between the given stroke and a stroke from the same class
        /// </summary>
        /// <param name="stroke"></param>
        /// <returns></returns>
        public double MinDistanceFromStrokeSameClass(Substroke stroke)
        {
            double min = double.PositiveInfinity;

            if (m_Stroke2Pairs.ContainsKey(stroke))
            {
                List <Future <FeatureStrokePair> > pairs = m_Stroke2Pairs[stroke];
                foreach (Future <FeatureStrokePair> futurePair in pairs)
                {
                    FeatureStrokePair pair = futurePair.Value;
                    if (pair.Item1.Classification == pair.Item2.Classification)
                    {
                        min = Math.Min(min, pair.SubstrokeDistance.Min);
                    }
                }
            }

            return(min);
        }