/usr/include/opengm/utilities/shape_accessor.hxx is in libopengm-dev 2.3.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #pragma once
#ifndef OPENGM_SHAPE_ACCESSOR_HXX
#define OPENGM_SHAPE_ACCESSOR_HXX
namespace opengm {
/// \cond HIDDEN_SYMBOLS
template<class FUNCTION>
class FunctionShapeAccessor {
public:
typedef size_t value_type;
typedef const value_type reference;
typedef const value_type* pointer;
typedef const FUNCTION& factor_reference;
typedef const FUNCTION* factor_pointer;
FunctionShapeAccessor(factor_pointer f = NULL)
: factor_(f)
{}
FunctionShapeAccessor(factor_reference f)
: factor_(&f)
{}
size_t size() const {
return factor_ == NULL ? 0 : factor_->dimension();
}
value_type operator[](const size_t j) {
OPENGM_ASSERT(j<factor_->dimension());
return factor_->shape(j);
}
const value_type operator[](const size_t j) const {
OPENGM_ASSERT(j<factor_->dimension());
return factor_->shape(j);
}
bool operator==(const FunctionShapeAccessor<FUNCTION> & other) const
{ return factor_ == other.factor_; }
private:
factor_pointer factor_;
};
template<class FACTOR>
class FactorShapeAccessor {
public:
typedef size_t value_type;
typedef const value_type reference;
typedef const value_type* pointer;
typedef const FACTOR& factor_reference;
typedef const FACTOR* factor_pointer;
FactorShapeAccessor(factor_pointer f = 0)
: factor_(f)
{}
FactorShapeAccessor(factor_reference f)
: factor_(&f)
{}
size_t size() const
{ return factor_ == 0 ? 0 : factor_->numberOfVariables(); }
reference operator[](const size_t j)
{ return factor_->numberOfLabels(j); }
const value_type operator[](const size_t j) const
{ return factor_->numberOfLabels(j); }
bool operator==(const FactorShapeAccessor<FACTOR> & other) const
{ return factor_ == other.factor_; }
private:
factor_pointer factor_;
};
template<class FACTOR>
class FactorVariablesAccessor {
public:
typedef typename FACTOR::IndexType IndexType;
typedef IndexType value_type;
typedef const value_type reference;
typedef const value_type* pointer;
typedef const FACTOR& factor_reference;
typedef const FACTOR* factor_pointer;
FactorVariablesAccessor(factor_pointer f = 0)
: factor_(f)
{}
FactorVariablesAccessor(factor_reference f)
: factor_(&f)
{}
IndexType size() const
{ return factor_ == 0 ? 0 : factor_->numberOfVariables(); }
reference operator[](const size_t j)
{ return factor_->numberOfLabels(j); }
const value_type operator[](const size_t j) const
{ return factor_->variableIndex(j); }
bool operator==(const FactorVariablesAccessor<FACTOR> & other) const
{ return factor_ == other.factor_; }
private:
factor_pointer factor_;
};
/// \endcond
} // namespace opengm
#endif // #ifndef OPENGM_SHAPE_ACCESSOR_HXX
|