2 #ifndef OPENGM_CONSTANT_FUNCTION_HXX 3 #define OPENGM_CONSTANT_FUNCTION_HXX 19 template<
class T,
class I =
size_t,
class L =
size_t>
21 :
public FunctionBase<ConstantFunction<T, I, L>, T, I, L>
29 template<
class ITERATOR>
32 size_t shape(
const IndexType)
const;
35 template<
class ITERATOR> ValueType
operator()(ITERATOR)
const;
40 ValueType
min()
const {
return value_; }
41 ValueType
max()
const {
return value_; }
42 ValueType
sum()
const {
return value_ *
static_cast<T
>(size_); }
45 const double x =
static_cast<double>(value_);
46 const int n =
static_cast<int>(size_);
47 return static_cast<T
>(std::pow(x, n));
49 MinMaxFunctor<ValueType>
minMax()
const {
return MinMaxFunctor<T>(value_, value_); }
53 std::vector<IndexType> shape_;
61 template <
class T,
class I,
class L>
69 template <
class T,
class I,
class L>
76 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
78 template<
class INDEX_INPUT_ITERATOR ,
class VALUE_INPUT_ITERATOR>
83 template <
class T,
class I,
class L>
84 template <
class ITERATOR>
93 shape_(shapeBegin, shapeEnd),
94 size_(std::accumulate(shapeBegin, shapeEnd, 1, std::multiplies<
typename std::iterator_traits<ITERATOR>::value_type >()))
97 template <
class T,
class I,
class L>
100 : value_(0), shape_(), size_(0)
103 template <
class T,
class I,
class L>
104 template <
class ITERATOR>
116 template <
class T,
class I,
class L>
126 template <
class T,
class I,
class L>
129 return shape_.size();
133 template <
class T,
class I,
class L>
139 template <
class T,
class I,
class L>
148 template <
class T,
class I,
class L>
157 template <
class T,
class I,
class L>
158 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
163 INDEX_OUTPUT_ITERATOR indexOutIterator,
164 VALUE_OUTPUT_ITERATOR valueOutIterator
166 *valueOutIterator = src.value_;
168 for(
size_t i=0; i<src.
dimension(); ++i) {
170 *indexOutIterator = src.
shape(i);
174 template <
class T,
class I,
class L>
175 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
179 INDEX_INPUT_ITERATOR indexInIterator,
180 VALUE_INPUT_ITERATOR valueInIterator,
183 dst.value_ = *valueInIterator;
185 dst.shape_.resize(dimension);
188 dst.shape_[i]=*indexInIterator;
190 dst.size_=std::accumulate(dst.shape_.begin(), dst.shape_.end(), 1, std::multiplies<size_t>());
195 #endif // OPENGM_CONSTANT_FUNCTION_HXX
Fallback implementation of member functions of OpenGM functions.
size_t shape(const IndexType) const
extension a value table encoding this function would have
MinMaxFunctor< ValueType > minMax() const
#define OPENGM_ASSERT(expression)
ValueType product() const
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
size_t size() const
number of entries a value table encoding this function would have (used for I/O)
ValueType operator()(ITERATOR) const
bool isGeneralizedPotts() const