Fleet  0.0.9
Inference in the LOT
SampleStreams.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include <string>
5 
6 #include "generator.hpp"
7 
8 // We'll use cppcoro's generator for now, where is std::generator
9 template<typename T>
11 
12 // thin samples by N
13 struct thin {
14  size_t m;
15  size_t cnt;
16 
17  thin(size_t _m) : m(_m), cnt(0) {
18  }
19 
20  // funny little increment here returns true for 0 mod m
21  bool operator++() {
22  if(++cnt == m or m==0) {
23  cnt = 0;
24  return true;
25  }
26  else {
27  return false;
28  }
29  }
30 };
31 
32 template<typename T>
34  for(auto& x : g) {
35  if(++t) co_yield x;
36  }
37 }
38 
39 
40 struct burn {
41  size_t m;
42  size_t cnt;
43 
44  burn(size_t _m) : m(_m), cnt(0) {
45  }
46 
47  // funny little increment here returns true for 0 mod m
48  bool operator++() {
49  if(cnt > m or m==0) {
50  return true;
51  }
52  else {
53  ++cnt;
54  return false;
55  }
56  }
57 };
58 
59 template<typename T>
61  for(auto& x : g) {
62  if(++t) co_yield x;
63  }
64 }
65 
66 struct printer {
67  size_t every;
68  size_t cnt;
69  std::string prefix;
70 
71  printer(size_t e, const std::string p="") : every(e), cnt(0), prefix(p) { }
72 
73  // funny little increment here returns true for when we print
74  bool operator++() {
75  if(++cnt == every and every!=0) {
76  cnt = 0;
77  return true;
78  }
79  else {
80  return false;
81  }
82  }
83 };
84 
85 template<typename T>
86 struct show_statistics {
87  size_t every;
88  size_t cnt;
89  T& sampler;
90 
91  show_statistics(size_t e, T& m) : every(e), cnt(0), sampler(m) { }
92 
93  // funny little increment here returns true for when we print
94  bool operator++() {
95  if(++cnt == every and every!=0) {
96  cnt = 0;
97  return true;
98  }
99  else {
100  return false;
101  }
102  }
103 };
104 
105 
106 template<typename T>
108  for(auto& x : g) {
109  if(++t) x.show(t.prefix);
110  co_yield x;
111  }
112 }
113 
114 
115 template<typename T, typename Q>
117  for(auto& x : g) {
118  if(++t){
119  t.sampler.show_statistics();
120  }
121  co_yield x;
122  }
123 }
124 
125 
126 
127 
128 // chaining together generator and TopN
129 #include "TopN.h"
130 
131 template<typename T>
132 generator<T&> operator|(generator<T&> g, TopN<T>& tn) { // NOTE: tn MUST be a ref here...
133  for(auto& x : g) {
134  tn << x; // add
135  co_yield x; // and yield
136  }
137 }
138 
139 #include "ReservoirSample.h"
140 
141 template<typename T>
142 generator<T&> operator|(generator<T&> g, ReservoirSample<T>& tn) { // NOTE: tn MUST be a ref here...
143  for(auto& x : g) {
144  tn << x; // add
145  co_yield x; // and yield
146  }
147 }
148 
149 template<typename T>
150 generator<T&> operator|(generator<T&> g, std::vector<T>& tn) { // NOTE: tn MUST be a ref here...
151  for(auto& x : g) {
152  tn.push_back(x);
153  co_yield x; // and yield
154  }
155 }
156 
157 
158 template<typename T>
159 generator<T&> operator|(generator<T&> g, std::set<T>& tn) { // NOTE: tn MUST be a ref here...
160  for(auto& x : g) {
161  tn.add(x);
162  co_yield x; // and yield
163  }
164 }
165 
size_t cnt
Definition: SampleStreams.h:68
bool operator++()
Definition: SampleStreams.h:94
size_t cnt
Definition: SampleStreams.h:42
Definition: SampleStreams.h:66
bool operator++()
Definition: SampleStreams.h:74
size_t cnt
Definition: SampleStreams.h:88
Definition: SampleStreams.h:86
size_t cnt
Definition: SampleStreams.h:15
size_t every
Definition: SampleStreams.h:67
size_t m
Definition: SampleStreams.h:14
Definition: SampleStreams.h:40
Definition: TopN.h:25
Definition: generator.hpp:21
generator< T & > operator|(generator< T &> g, thin t)
Definition: SampleStreams.h:33
show_statistics(size_t e, T &m)
Definition: SampleStreams.h:91
bool operator++()
Definition: SampleStreams.h:21
burn(size_t _m)
Definition: SampleStreams.h:44
T & sampler
Definition: SampleStreams.h:89
Definition: SampleStreams.h:13
printer(size_t e, const std::string p="")
Definition: SampleStreams.h:71
thin(size_t _m)
Definition: SampleStreams.h:17
A simple resevoir sampling algorithm. One great disappointment is that this doesn&#39;t implement the ver...
bool operator++()
Definition: SampleStreams.h:48
Definition: ReservoirSample.h:16
std::string prefix
Definition: SampleStreams.h:69
size_t every
Definition: SampleStreams.h:87
size_t m
Definition: SampleStreams.h:41