2 #ifndef OPENGM_ACCUMULATION_HXX
3 #define OPENGM_ACCUMULATION_HXX
11 template<
class Value,
class State,
class Accumulator>
15 typedef Value ValueType;
19 ValueType value()
const;
21 Value neutral()
const;
22 void state(FastSequence<size_t>&)
const;
23 template<
class OUT_CONTAINER>
24 void state(OUT_CONTAINER &)
const;
25 LabelType state(
size_t)
const;
28 template<
class CONTAINER>
29 void operator()(
const ValueType&,
const CONTAINER&);
30 void operator()(
const ValueType&);
36 template<
class Value,
class State,
class Accumulator>
38 Accumulation<Value, State, Accumulator>::Accumulation()
39 : value_(Accumulator::template neutral<ValueType>()),
43 template<
class Value,
class State,
class Accumulator>
44 inline typename Accumulation<Value, State, Accumulator>::ValueType
45 Accumulation<Value, State, Accumulator>::value()
const
50 template<
class Value,
class State,
class Accumulator>
52 Accumulation<Value, State, Accumulator>::size()
const
57 template<
class Value,
class State,
class Accumulator>
58 inline typename Accumulation<Value, State, Accumulator>::ValueType
59 Accumulation<Value, State, Accumulator>::neutral()
const
64 template<
class Value,
class State,
class Accumulator>
66 Accumulation<Value, State, Accumulator>::state
74 template<
class Value,
class State,
class Accumulator>
75 template<
class OUT_CONTAINER>
77 Accumulation<Value, State, Accumulator>::state
83 for(
size_t i=0;i<state_.size();++i) {
88 template<
class Value,
class State,
class Accumulator>
89 inline typename Accumulation<Value, State, Accumulator>::LabelType
90 Accumulation<Value, State, Accumulator>::state
98 template<
class Value,
class State,
class Accumulator>
100 Accumulation<Value, State, Accumulator>::clear()
102 Accumulator::neutral(value_);
106 template<
class Value,
class State,
class Accumulator>
108 Accumulation<Value, State, Accumulator>::operator()
110 const ValueType& value,
113 if(Accumulator::bop(value, value_)) {
117 Accumulator::op(value, value_, value_);
121 template<
class Value,
class State,
class Accumulator>
122 template<
class CONTAINER>
124 Accumulation<Value, State, Accumulator>::operator()
126 const ValueType& value,
127 const CONTAINER & state
130 if(Accumulator::bop(value, value_)) {
131 state_.resize(state.size());
132 for(
size_t i=0;i<state.size();++i) {
133 state_[i] = state[i];
136 Accumulator::op(value, value_, value_);
140 template<
class Value,
class State,
class Accumulator>
142 Accumulation<Value, State, Accumulator>::operator()
144 const ValueType& value
147 Accumulator::op(value, value_, value_);
154 #endif // #ifndef OPENGM_ACCUMULATION_HXX
Vector that stores values on the stack if size is smaller than MAX_STACK.
#define OPENGM_ASSERT(expression)
void resize(const size_t)
resize the sequence