コード例 #1
0
 /// <summary>
 /// Convert full data to serializable data.
 /// </summary>
 /// <typeparam name="TId"></typeparam>
 /// <typeparam name="TCount"></typeparam>
 /// <param name="estimatorData"></param>
 /// <returns></returns>
 internal static IHybridEstimatorData <TId, TCount> ToEstimatorData <TId, TCount>(
     this HybridEstimatorFullData <TId, TCount> estimatorData)
     where TCount : struct
     where TId : struct
 {
     if (estimatorData == null)
     {
         return(null);
     }
     return(new HybridEstimatorData <TId, TCount>
     {
         ItemCount = estimatorData.ItemCount,
         StrataEstimator = estimatorData.StrataEstimator,
         BitMinwiseEstimator = estimatorData.BitMinwiseEstimator == null ?
                               null :
                               new BitMinwiseHashEstimatorData
         {
             BitSize = estimatorData.BitMinwiseEstimator.BitSize,
             Capacity = estimatorData.BitMinwiseEstimator.Capacity,
             HashCount = estimatorData.BitMinwiseEstimator.HashCount,
             ItemCount = estimatorData.BitMinwiseEstimator.ItemCount,
             Values = estimatorData.BitMinwiseEstimator.Values.ConvertToBitArray(estimatorData.BitMinwiseEstimator.BitSize).ToBytes()
         }
     });
 }
コード例 #2
0
        /// <summary>
        /// Intersect two hybrid estimators
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <typeparam name="TId"></typeparam>
        /// <typeparam name="TCount"></typeparam>
        /// <param name="estimatorData"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        internal static IHybridEstimatorFullData <int, TCount> Intersect <TEntity, TId, TCount>(
            this IHybridEstimatorFullData <int, TCount> estimatorData,
            IInvertibleBloomFilterConfiguration <TEntity, TId, int, TCount> configuration,
            IHybridEstimatorFullData <int, TCount> otherEstimatorData)
            where TId : struct
            where TCount : struct
        {
            if (estimatorData == null && otherEstimatorData == null)
            {
                return(null);
            }
            var res = new HybridEstimatorFullData <int, TCount>();

            res.BitMinwiseEstimator = estimatorData?.BitMinwiseEstimator.Intersect(otherEstimatorData?.BitMinwiseEstimator, configuration.FoldingStrategy);
            res.StrataEstimator     = estimatorData?.StrataEstimator.Intersect(otherEstimatorData?.StrataEstimator, configuration);
            res.ItemCount           = (res.BitMinwiseEstimator?.ItemCount ?? 0L) + (res.StrataEstimator?.ItemCount ?? 0L);
            return(res);
        }