2 #ifndef OPENGM_DD_DUALVARIABLEBLOCK_HXX
3 #define OPENGM_DD_DUALVARIABLEBLOCK_HXX
11 template<
class DUALVAR = marray::Marray<
double> >
12 class DDDualVariableBlock{
14 typedef DUALVAR DualVariableType;
15 typedef typename DUALVAR::ValueType ValueType;
16 typedef typename GraphicalModelDecomposition::SubFactor SubFactorType;
17 typedef typename GraphicalModelDecomposition::SubFactorListType SubFactorListType;
20 DDDualVariableBlock(){};
21 template<
class ITERATOR> DDDualVariableBlock(
const SubFactorListType& subFactorList, ITERATOR shapeBegin, ITERATOR shapeEnd);
22 std::vector<DUALVAR*> getPointers();
26 std::vector<DualVariableType> duals_;
27 const SubFactorListType* subFactorList_;
31 template<
class DUALVAR = marray::Marray<
double> >
32 class DDDualVariableBlock2{
34 typedef DUALVAR DualVariableType;
35 typedef typename DUALVAR::ValueType ValueType;
36 typedef typename GraphicalModelDecomposition::SubFactor SubFactorType;
37 typedef typename GraphicalModelDecomposition::SubFactorListType SubFactorListType;
40 DDDualVariableBlock2(){};
41 template<
class ITERATOR> DDDualVariableBlock2(
const SubFactorListType& subFactorList, ITERATOR shapeBegin, ITERATOR shapeEnd);
42 std::vector<DUALVAR*> getPointers();
46 std::vector<DualVariableType> duals_;
47 std::vector<DualVariableType> duals2_;
48 const SubFactorListType* subFactorList_;
55 template<
class DUALVAR>
56 template<
class ITERATOR>
57 DDDualVariableBlock<DUALVAR>::DDDualVariableBlock
59 const typename GraphicalModelDecomposition::SubFactorListType& subFactorList,
64 const size_t numDuals = subFactorList.size();
65 duals_.resize(numDuals, DUALVAR(shapeBegin,shapeEnd,0));
66 subFactorList_ = &subFactorList;
69 template<
class ITERATOR>
70 DDDualVariableBlock<marray::View<double,false> >::DDDualVariableBlock
72 const SubFactorListType& subFactorList,
77 const size_t numDuals = subFactorList.size();
80 subFactorList_ = &subFactorList;
84 template<
class ITERATOR>
85 DDDualVariableBlock<marray::View<float,false> >::DDDualVariableBlock
87 const SubFactorListType& subFactorList,
92 const size_t numDuals = subFactorList.size();
95 subFactorList_ = &subFactorList;
98 template<
class DUALVAR>
99 std::vector<DUALVAR*> DDDualVariableBlock<DUALVAR>::getPointers()
101 std::vector<DualVariableType*> ret(duals_.size());
102 for(
size_t i=0; i<duals_.size(); ++i) ret[i] = &(duals_[i]);
106 template<
class DUALVAR>
107 void DDDualVariableBlock<DUALVAR>::test()
const
110 for(
size_t i=0; i<duals_.size(); ++i) {
114 for(
size_t j=0; j<temp.
size(); ++j) {
115 if( (temp(j)<0.001 && temp(j)>-0.001)==false ){
116 std::cout<<
"temp("<<j<<
") = "<<temp(j)<<
"\n";
124 template<
class DUALVAR>
125 template<
class ITERATOR>
126 DDDualVariableBlock2<DUALVAR>::DDDualVariableBlock2
128 const typename GraphicalModelDecomposition::SubFactorListType& subFactorList,
133 const size_t numDuals = subFactorList.
size();
134 duals_.resize(numDuals, DUALVAR(shapeBegin,shapeEnd,0));
135 duals2_.resize(numDuals, DUALVAR(shapeBegin,shapeEnd,0));
136 subFactorList_ = &subFactorList;
139 template<
class ITERATOR>
140 DDDualVariableBlock2<marray::View<double,false> >::DDDualVariableBlock2
142 const SubFactorListType& subFactorList,
147 const size_t numDuals = subFactorList.size();
151 subFactorList_ = &subFactorList;
154 template<
class ITERATOR>
155 DDDualVariableBlock2<marray::View<float,false> >::DDDualVariableBlock2
157 const SubFactorListType& subFactorList,
162 const size_t numDuals = subFactorList.size();
166 subFactorList_ = &subFactorList;
169 template<
class DUALVAR>
170 std::vector<DUALVAR*> DDDualVariableBlock2<DUALVAR>::getPointers()
172 std::vector<DualVariableType*> ret(duals_.size());
173 for(
size_t i=0; i<duals_.size(); ++i) ret[i] = &(duals_[i]);
177 template<
class DUALVAR>
178 void DDDualVariableBlock2<DUALVAR>::test()
const
181 for(
size_t i=0; i<duals_.size(); ++i) temp += duals_[i];
182 for(
size_t i=0; i<temp.
size(); ++i)
OPENGM_ASSERT(temp(i)<0.00001 && temp(i)>-0.00001);
Array-Interface to an interval of memory.
#define OPENGM_ASSERT(expression)
const size_t size() const
Runtime-flexible multi-dimensional array.