/// <summary>
 /// Decode the given hybrid estimator.
 /// </summary>
 /// <param name="estimator">The estimator for the other set.</param>
 /// <param name="destructive">When <c>true</c> the values in this estimator will be altered and rendered useless, else <c>false</c>.</param>
 /// <returns>An estimate of the number of differences between the two sets that the estimators are based upon.</returns>
 public long?Decode(IHybridEstimator <TEntity, int, TCount> estimator,
                    bool destructive = false)
 {
     if (estimator == null)
     {
         return(ItemCount);
     }
     return(Decode(estimator.Extract(), destructive));
 }
        /// <summary>
        /// Decode the given hybrid estimator data.
        /// </summary>
        /// <param name="estimator">The estimator for the other set.</param>
        /// <param name="destructive">When <c>true</c> the values in this estimator will be altered and rendered useless, else <c>false</c>.</param>
        /// <returns>An estimate of the number of differences between the two sets that the estimators are based upon.</returns>
        public long?Decode(IHybridEstimatorData <int, TCount> estimator,
                           bool destructive = false)
        {
            if (estimator == null)
            {
                return(ItemCount);
            }
            IHybridEstimator <TEntity, int, TCount> self = this;

            return(self
                   .Extract()
                   .Decode(estimator, _configuration));
        }