$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [accumulators] Dependent and sliding accumulatos_set
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2008-10-10 02:23:55
Hi,
The acuumulator library allows to determine dependency between accumulator,
but not between accumulator_sets.
I would like to define an accumulator_set c so when we cumulate in two
others c1 and c2 accumulator_set we cumulate also in c, some thing like
typedef dependable_acumulator_set <double, ...> dependable_acc_type;
dependable_acc_type c1, c2;
dependable_acc_type c=c1+c2
dependable_acc_type c3;
c+=c3;
c1(1);
c2(1);
c3(2);
assert(count(c)==3);
assert(sum(c)==4);
How dependable_acumulator_set can be defined? Here follows the interfaces
of such a class and the pseudo code, I've named the class
dependable_acumulator_set, sorry but I have not found a shorter and better
name (may be observed/listened?)
template <typename T, typename F, typename W>
class dependable_acumulator_set : public acumulator_set<T,F,W>
{
public:
dependable_acumulator_set();
void add_dependent(dependable_acumulator_set&);
void remove_dependent(dependable_acumulator_set&);
template<typename A1>
void operator ()(A1 const &a1) {
for (acc in dependents) {
acc(a1);
}
this->acumulator_set_type::operator()(a1);
}
dependable_acumulator_set<T,F,W>&
operator+=(dependable_acumulator_set<T,F,W>);
dependable_acumulator_set<T,F,W>&
operator-=(dependable_acumulator_set<T,F,W>);
};
template <typename T, typename F, typename W>
dependable_acumulator_set<T,F,W>
operator+()(dependable_acumulator_set<T,F,W>,dependable_acumulator_set<T,F,W>);
In addition I would like to be able to cummulate on a sliding window, e.g.
on the last N cummulated values.
I have see the tail accumulator, but I dont know how to define a min_tail
accumulator with the current framework.
I would like a class that behaves like:
typedef sliding_acumulator_set <double, ...> sliding_acc_type;
sliding_acc_type c(window=2);
c(1);
c(5);
c(2);
assert(count(c)==3);
assert(sum(c)==7);
assert(min(c)==2);
We can state the sliding window at compile (template parameter) or run time
(constructor parameter).
template <std::size Window, typename T, typename F, typename W>
class static_sliding_acumulator_set;
template <typename T, typename F, typename W>
class sliding_acumulator_set;
Of course the complexities of the sliding accumulators operations is
increased.
Of course it will be interesting to have a sliding dependable accumulater
set. It would be great to integrate these features on a unique class
(accumulator_set?) in a clean way.
template <typename T, typename F, typename W, typename DependablePolicy,
typename SlicingPolicy>
class acumulator_set;
Please let me know if this can be done in a better way. Is there any
interest on these features?
Eric, what do you think?
Best,
Vicente