/// <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() } }); }
/// <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); }