Example #1
0
 public DataSplitter(
     IConnectableStat <TBase, TIn> baseStat,
     Func <TIn, TSplit> selector,
     Func <DataIdentity <TIn>, IStat <TIn, TOut> > statFactory)
 {
     groupValues      = new ConcurrentDictionary <TSplit, IStat <TIn, TOut> >();
     this.baseStat    = baseStat;
     this.selector    = selector;
     this.statFactory = statFactory;
     baseStat.Added  += (_, item) =>
     {
         lock (splitterLock)
             AddInGroup(GetGroup(item), item);
     };
     baseStat.Deleted += (_, item) =>
     {
         lock (splitterLock)
         {
             while (!ExistGroup(item))
             {
                 Monitor.Wait(splitterLock);
             }
             DeleteFromGroup(GetGroup(item), item);
             if (GetGroup(item).IsEmpty)
             {
                 groupValues.Remove(selector(item));
             }
         }
     };
 }
Example #2
0
 public DataConnecter(IConnectableStat <TIn, TMid> firstConnection,
                      IConnectableStat <TMid, TOut> secondConnection)
 {
     this.firstConnection  = firstConnection;
     this.secondConnection = secondConnection;
     SubscribeToEvents();
 }
Example #3
0
 public static IStat <TIn, IEnumerable <TOut> > Report <TIn, TOut, TFeature>(this IConnectableStat <TIn, TOut> connection,
                                                                             int maxSize,
                                                                             Func <TOut, TFeature> featureSelector,
                                                                             Func <TOut, TOut, int> comparer) where TFeature : IComparable
 {
     return(connection.ConnectTo(new Report <TOut, TFeature>(maxSize, featureSelector, comparer)));
 }
Example #4
0
 public StatConnecter(IConnectableStat <TIn, TOut> connection, IStat <TOut, TStat> stat)
 {
     this.connection     = connection;
     this.stat           = stat;
     connection.Added   += (_, item) => stat.Add(item);
     connection.Deleted += (_, item) => stat.Delete(item);
 }
Example #5
0
 public static IStat <TIn, IEnumerable <TOut> > Top <TIn, TOut>(
     this IConnectableStat <TIn, TOut> connection,
     int maxSize,
     Func <TOut, TOut, bool> comparer)
 {
     return(connection.ConnectTo(new TopStat <TOut>(maxSize, comparer)));
 }
Example #6
0
 public static IConnectableStat <TIn, TOut> Split <TIn, TMid, TOut, TSplit>(
     this IConnectableStat <TIn, TMid> connection,
     Func <TMid, TSplit> selector,
     Func <DataIdentity <TMid>, IStat <TMid, TOut> > statFactory)
 {
     return(new DataSplitter <TIn, TMid, TSplit, TOut>(connection, selector, statFactory));
 }
Example #7
0
 public static IStat <TIn, int> Sum <TIn>(this IConnectableStat <TIn, int> connection)
 {
     return(connection.ConnectTo(new SumStat <int>(x => x)));
 }
Example #8
0
 public static IStat <TIn, int> Sum <TIn, TOut>(this IConnectableStat <TIn, TOut> connection,
                                                Func <TOut, int> selector)
 {
     return(connection.ConnectTo(new SumStat <TOut>(selector)));
 }
Example #9
0
 public static IStat <TIn, bool> Existence <TIn, TOut>(this IConnectableStat <TIn, TOut> connection)
 {
     return(connection.Count().Select(count => count > 0));
 }
Example #10
0
 public static IStat <TIn, int> Count <TIn, TOut>(this IConnectableStat <TIn, TOut> connection, int initValue = 0)
 {
     return(connection.ConnectTo(new CounterStat <TOut>(initValue)));
 }
Example #11
0
 public static IConnectableStat <TIn, TOut> Where <TIn, TOut>(this IConnectableStat <TIn, TOut> connection,
                                                              Func <TOut, bool> predicate)
 {
     return(new DataFilter <TIn, TOut>(connection, predicate));
 }
Example #12
0
 public static IStat <TIn, double> Average <TIn>(this IConnectableStat <TIn, int> connection)
 {
     return(connection.Select(x => (double)x).Average());
 }
Example #13
0
 public static IStat <TIn, TStat> ConnectTo <TIn, TOut, TStat>(this IConnectableStat <TIn, TOut> connection,
                                                               IStat <TOut, TStat> stat)
 {
     return(new StatConnecter <TIn, TOut, TStat>(connection, stat));
 }
Example #14
0
 public static IConnectableStat <TIn, TOut> Select <TIn, TMid, TOut>(this IConnectableStat <TIn, TMid> connection,
                                                                     Func <TMid, TOut> selector)
 {
     return(new DataTransformer <TIn, TMid, TOut>(connection, selector));
 }
Example #15
0
 public static IStat <TIn, IEnumerable <TOut> > Report <TIn, TOut, TFeature>(this IConnectableStat <TIn, TOut> connection,
                                                                             Func <TOut, TFeature> featureSelector,
                                                                             Func <TOut, TOut, bool> lessComparer) where TFeature : IComparable
 {
     return(connection.ConnectTo(new Report <TOut, TFeature>(featureSelector, lessComparer)));
 }
Example #16
0
 public static IStat <TIn, TOut> Favorite <TIn, TOut>(
     this IConnectableStat <TIn, TOut> connection) where TOut : IComparable
 {
     return(connection.Popular(1).Select(seq => seq.SingleOrDefault()));
 }
Example #17
0
 public static IStat <TIn, double> Average <TIn, TOut>(this IConnectableStat <TIn, TOut> connection,
                                                       Func <TOut, double> selector)
 {
     return(connection.ConnectTo(new AverageStat <TOut>(selector)));
 }
Example #18
0
 public static IConnectableStat <TIn, TOut> ConnectTo <TIn, TMid, TOut>(this IConnectableStat <TIn, TMid> firstConnection,
                                                                        IConnectableStat <TMid, TOut> secondConnection)
 {
     return(new DataConnecter <TIn, TMid, TOut>(firstConnection, secondConnection));
 }
Example #19
0
 public static IStat <TIn, double> Average <TIn>(this IConnectableStat <TIn, double> connection)
 {
     return(connection.ConnectTo(new AverageStat <double>(x => x)));
 }
Example #20
0
 public DataFilter(IConnectableStat <TIn, TOut> baseStat, Func <TOut, bool> predicate)
 {
     this.baseStat  = baseStat;
     this.predicate = predicate;
     SubscribeToEvents();
 }
Example #21
0
 public static IStat <TIn, IEnumerable <TOut> > Popular <TIn, TOut>(
     this IConnectableStat <TIn, TOut> connection,
     int maxSize) where TOut : IComparable
 {
     return(connection.ConnectTo(new PopularStat <TOut>(maxSize)));
 }
Example #22
0
 public static IStat <TIn, TOut> Min <TIn, TOut>(this IConnectableStat <TIn, TOut> connection)
 {
     return(connection.ConnectTo(new MinMaxStat <TOut, TOut>(x => x).Select(minMax => minMax.Item1)));
 }
Example #23
0
 public static IStat <TIn, TStat> Min <TIn, TOut, TStat>(this IConnectableStat <TIn, TOut> connection,
                                                         Func <TOut, TStat> selector)
 {
     return(connection.ConnectTo(new MinMaxStat <TOut, TStat>(selector).Select(minMax => minMax.Item1)));
 }
Example #24
0
 public DataTransformer(IConnectableStat <TIn, TMid> baseStat, Func <TMid, TOut> selector)
 {
     this.baseStat = baseStat;
     this.selector = selector;
     SubscribeToEvents();
 }