OpenGM  2.3.x
Discrete Graphical Model Library
shape_accessor.hxx
Go to the documentation of this file.
1 #pragma once
2 #ifndef OPENGM_SHAPE_ACCESSOR_HXX
3 #define OPENGM_SHAPE_ACCESSOR_HXX
4 
5 namespace opengm {
6 
8 
9  template<class FUNCTION>
10  class FunctionShapeAccessor {
11  public:
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;
17 
18  FunctionShapeAccessor(factor_pointer f = NULL)
19  : factor_(f)
20  {}
21  FunctionShapeAccessor(factor_reference f)
22  : factor_(&f)
23  {}
24  size_t size() const {
25  return factor_ == NULL ? 0 : factor_->dimension();
26  }
27  value_type operator[](const size_t j) {
28  OPENGM_ASSERT(j<factor_->dimension());
29  return factor_->shape(j);
30  }
31  const value_type operator[](const size_t j) const {
32  OPENGM_ASSERT(j<factor_->dimension());
33  return factor_->shape(j);
34  }
35  bool operator==(const FunctionShapeAccessor<FUNCTION> & other) const
36  { return factor_ == other.factor_; }
37 
38  private:
39  factor_pointer factor_;
40  };
41 
42  template<class FACTOR>
43  class FactorShapeAccessor {
44  public:
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;
50 
51  FactorShapeAccessor(factor_pointer f = 0)
52  : factor_(f)
53  {}
54  FactorShapeAccessor(factor_reference f)
55  : factor_(&f)
56  {}
57  size_t size() const
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_; }
65 
66  private:
67  factor_pointer factor_;
68  };
69 
70  template<class FACTOR>
71  class FactorVariablesAccessor {
72  public:
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;
79 
80  FactorVariablesAccessor(factor_pointer f = 0)
81  : factor_(f)
82  {}
83  FactorVariablesAccessor(factor_reference f)
84  : factor_(&f)
85  {}
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_; }
94 
95  private:
96  factor_pointer factor_;
97  };
98 
100 
101 } // namespace opengm
102 
103 #endif // #ifndef OPENGM_SHAPE_ACCESSOR_HXX
104 
The OpenGM namespace.
Definition: config.hxx:43
bool operator==(const IndicatorVariable< INDEX1_TYPE, LABEL1_TYPE > &indicatorVar1, const IndicatorVariable< INDEX2_TYPE, LABEL2_TYPE > &indicatorVar2)
#define OPENGM_ASSERT(expression)
Definition: opengm.hxx:77