2 #ifndef OPENGM_SHAPE_ACCESSOR_HXX
3 #define OPENGM_SHAPE_ACCESSOR_HXX
9 template<
class FUNCTION>
10 class FunctionShapeAccessor {
12 typedef size_t value_type;
13 typedef const value_type reference;
14 typedef const value_type* pointer;
15 typedef const FUNCTION& factor_reference;
16 typedef const FUNCTION* factor_pointer;
18 FunctionShapeAccessor(factor_pointer f = NULL)
21 FunctionShapeAccessor(factor_reference f)
25 return factor_ == NULL ? 0 : factor_->dimension();
27 value_type operator[](
const size_t j) {
29 return factor_->shape(j);
31 const value_type operator[](
const size_t j)
const {
33 return factor_->shape(j);
35 bool operator==(
const FunctionShapeAccessor<FUNCTION> & other)
const
36 {
return factor_ == other.factor_; }
39 factor_pointer factor_;
42 template<
class FACTOR>
43 class FactorShapeAccessor {
45 typedef size_t value_type;
46 typedef const value_type reference;
47 typedef const value_type* pointer;
48 typedef const FACTOR& factor_reference;
49 typedef const FACTOR* factor_pointer;
51 FactorShapeAccessor(factor_pointer f = 0)
54 FactorShapeAccessor(factor_reference f)
58 {
return factor_ == 0 ? 0 : factor_->numberOfVariables(); }
59 reference operator[](
const size_t j)
60 {
return factor_->numberOfLabels(j); }
61 const value_type operator[](
const size_t j)
const
62 {
return factor_->numberOfLabels(j); }
63 bool operator==(
const FactorShapeAccessor<FACTOR> & other)
const
64 {
return factor_ == other.factor_; }
67 factor_pointer factor_;
70 template<
class FACTOR>
71 class FactorVariablesAccessor {
73 typedef typename FACTOR::IndexType IndexType;
74 typedef IndexType value_type;
75 typedef const value_type reference;
76 typedef const value_type* pointer;
77 typedef const FACTOR& factor_reference;
78 typedef const FACTOR* factor_pointer;
80 FactorVariablesAccessor(factor_pointer f = 0)
83 FactorVariablesAccessor(factor_reference f)
86 IndexType size()
const
87 {
return factor_ == 0 ? 0 : factor_->numberOfVariables(); }
88 reference operator[](
const size_t j)
89 {
return factor_->numberOfLabels(j); }
90 const value_type operator[](
const size_t j)
const
91 {
return factor_->variableIndex(j); }
92 bool operator==(
const FactorVariablesAccessor<FACTOR> & other)
const
93 {
return factor_ == other.factor_; }
96 factor_pointer factor_;
103 #endif // #ifndef OPENGM_SHAPE_ACCESSOR_HXX
bool operator==(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
#define OPENGM_ASSERT(expression)