2 #ifndef OPENGM_SQUARED_DIFFERENCE_FUNCTION_HXX
3 #define OPENGM_SQUARED_DIFFERENCE_FUNCTION_HXX
14 template<
class T,
class I =
size_t,
class L =
size_t>
16 :
public FunctionBase<SquaredDifferenceFunction<T, I, L>, T, I, L>
25 size_t shape(
const IndexType)
const;
29 template<
class ITERATOR> T
operator()(ITERATOR)
const;
32 size_t numberOfLabels1_;
33 size_t numberOfLabels2_;
39 template <
class T,
class I,
class L>
45 template <
class T,
class I,
class L>
46 class FunctionSerialization<SquaredDifferenceFunction<T, I, L> > {
48 typedef typename SquaredDifferenceFunction<T, I, L>::ValueType ValueType;
50 static size_t indexSequenceSize(
const SquaredDifferenceFunction<T, I, L>&);
51 static size_t valueSequenceSize(
const SquaredDifferenceFunction<T, I, L>&);
52 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
53 static void serialize(
const SquaredDifferenceFunction<T, I, L>&, INDEX_OUTPUT_ITERATOR, VALUE_OUTPUT_ITERATOR);
54 template<
class INDEX_INPUT_ITERATOR ,
class VALUE_INPUT_ITERATOR>
55 static void deserialize(INDEX_INPUT_ITERATOR, VALUE_INPUT_ITERATOR, SquaredDifferenceFunction<T, I, L>&);
63 template <
class T,
class I,
class L>
71 : numberOfLabels1_(numberOfStates1),
72 numberOfLabels2_(numberOfStates2),
76 template <
class T,
class I,
class L>
77 template <
class ITERATOR>
85 return value*value*weight_;
91 template <
class T,
class I,
class L>
97 return (i==0 ? numberOfLabels1_ : numberOfLabels2_);
100 template <
class T,
class I,
class L>
107 template <
class T,
class I,
class L>
114 template <
class T,
class I,
class L>
117 return numberOfLabels1_ * numberOfLabels2_;
120 template <
class T,
class I,
class L>
129 template <
class T,
class I,
class L>
131 FunctionSerialization<SquaredDifferenceFunction<T, I, L> >::valueSequenceSize
133 const SquaredDifferenceFunction<T, I, L>& src
138 template <
class T,
class I,
class L>
139 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
141 FunctionSerialization<SquaredDifferenceFunction<T, I, L> >::serialize
143 const SquaredDifferenceFunction<T, I, L>& src,
144 INDEX_OUTPUT_ITERATOR indexOutIterator,
145 VALUE_OUTPUT_ITERATOR valueOutIterator
147 *indexOutIterator = src.shape(0);
149 *indexOutIterator = src.shape(1);
150 *valueOutIterator =src.weight();
153 template <
class T,
class I,
class L>
154 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
156 FunctionSerialization<SquaredDifferenceFunction<T, I, L> >::deserialize
158 INDEX_INPUT_ITERATOR indexInIterator,
159 VALUE_INPUT_ITERATOR valueInIterator,
160 SquaredDifferenceFunction<T, I, L>& dst
162 const size_t shape0=*indexInIterator;
164 dst = SquaredDifferenceFunction<T, I, L>(shape0, *indexInIterator, *valueInIterator);
169 #endif // OPENGM_SQUARED_DIFFERENCE_FUNCTION_HXX
Fallback implementation of member functions of OpenGM functions.
squared difference of the labels of two variables
T operator()(ITERATOR) const
#define OPENGM_ASSERT(expression)
size_t shape(const IndexType) const
extension a value table encoding this function would have
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)
SquaredDifferenceFunction(const LabelType=2, const LabelType=2, const ValueType=1)
constructor