8 #ifndef UTILITIES2_HXX_
9 #define UTILITIES2_HXX_
17 #ifdef TRWS_DEBUG_OUTPUT
24 template<
class AnyType>
27 std::stringstream out;
43 std::vector<IndexType> _mapping;
44 IndexType _numberOfUnaryFactors;
48 const typename VariableToFactorMapping<GM>::IndexType VariableToFactorMapping<GM>::InvalidIndex=std::numeric_limits<IndexType>::max();
52 _mapping(gm.numberOfVariables(),InvalidIndex)
54 for (
IndexType i=0;i<gm.numberOfFactors();++i)
55 if (gm[i].numberOfVariables() == 1)
57 _mapping[gm[i].variableIndex(0)]=i;
58 else std::runtime_error(
"VariableToFactorMapping::VariableToFactorMapping() : duplicate unary factor!");
61 _numberOfUnaryFactors=std::count_if(_mapping.begin(),_mapping.end(),std::bind2nd(std::not_equal_to<IndexType>(),
InvalidIndex));
64 template<
class FACTOR>
72 {LabelType lab[]={l1,l2};
return _f(lab);}
78 template <
class InputIterator,
class UnaryOperator >
79 InputIterator
transform_inplace ( InputIterator first, InputIterator last, UnaryOperator op )
92 if (!condition)
throw std::runtime_error(str);
95 template <
class Matrix,
class OutputIterator,
class Pseudo2DArray>
98 exception_check(totalsize%rowlength == 0,
"copy_transpose(): totalsize%rowlength != 0");
100 arr2d.
resize(rowlength,totalsize/rowlength);
101 for (
size_t i=0;i<rowlength;++i)
102 outBegin=std::copy(arr2d.
beginSrc(src,i),arr2d.
endSrc(src,i),outBegin);
108 template <
class T>
struct plus2ndMul : std::binary_function <T,T,T> {
116 template <
class T>
struct mul2ndPlus : std::binary_function <T,T,T> {
124 template <
class T>
struct mulAndExp : std::unary_function <T,T> {
127 {return ::exp(_mul*x);}
133 template <
class T>
struct make0ifless : std::unary_function <T,T> {
136 {
return (x < _threshold ? 0.0 : x);}
141 template <
class T>
struct minusminus : std::binary_function <T,T,T> {
150 {
return x+y+_constant;}
156 template <
class T>
struct maximum : std::binary_function <T,T,T> {
158 {
return std::max(x,y);}
173 srcIterator(T* pbin,
size_t* pindex):_pbin(pbin),_pindex(pindex){};
198 Pseudo2DArray(
size_t srcsize=0,
size_t trgsize=0):_srcsize(srcsize),_trgsize(trgsize){_setupindex();};
200 inline void resize(
size_t srcsize,
size_t trgsize);
203 const_srciterator
endSrc(
const T* pbin,
size_t src){
return beginSrc(pbin,src)+_trgsize;};
205 const_trgiterator
beginTrg(
const T* pbin,
size_t trg){assert(trg<_trgsize);
return pbin+trg*_srcsize;};
206 const_trgiterator
endTrg(
const T* pbin,
size_t trg){
return beginTrg(pbin,trg)+_srcsize;}
211 trgiterator
beginTrgNC(T* pbin,
size_t trg){assert(trg<_trgsize);
return pbin+trg*_srcsize;};
218 std::vector<size_t> _index;
224 if ((srcsize==_srcsize) && (trgsize==_trgsize))
235 _index.assign(_srcsize*_trgsize,0);
238 size_t* _pindex=&_index[0];
239 for (
size_t src=0;src<_srcsize;++src)
240 for (
size_t trg=0;trg<_trgsize;++trg)
241 *(_pindex++)=trg*_srcsize+src;
245 template<
class Object>
void DeallocatePointer(Object *p)
T operator()(T x, T y) const
srcIterator< T > operator+(const srcIterator< T > &it, size_t offset)
plusplusConst(const T &constant)
void exception_check(bool condition, const std::string &str)
void resize(size_t srcsize, size_t trgsize)
ValueType operator()(LabelType l1, LabelType l2) const
trgiterator beginTrgNC(T *pbin, size_t trg)
const_srciterator endSrc(const T *pbin, size_t src)
Pseudo2DArray(size_t srcsize=0, size_t trgsize=0)
srcIterator & operator++()
T operator()(const T &x, const T &y) const
srcIterator(T *pbin, size_t *pindex)
bool EachVariableHasUnaryFactor() const
srcIterator< const T > const_srciterator
const_trgiterator beginTrg(const T *pbin, size_t trg)
#define OPENGM_ASSERT(expression)
srciterator beginSrcNC(T *pbin, size_t src)
srciterator endSrcNC(T *pbin, size_t src)
bool operator!=(const srcIterator &it) const
InputIterator transform_inplace(InputIterator first, InputIterator last, UnaryOperator op)
std::forward_iterator_tag iterator_category
const T * const_trgiterator
VariableToFactorMapping(const GM &gm)
srcIterator< T > srciterator
IndexType operator()(IndexType var) const
OutputIterator copy_transpose(const Matrix *src, size_t totalsize, OutputIterator outBegin, size_t rowlength, Pseudo2DArray &arr2d)
FactorWrapper(const FACTOR &f)
FACTOR::ValueType ValueType
std::string any2string(const AnyType &any)
FACTOR::LabelType LabelType
srcIterator & operator+=(size_t offset)
trgiterator endTrgNC(T *pbin, size_t trg)
srcIterator(const srcIterator< T > &it)
T operator()(const T &x, const T &y) const
static const IndexType InvalidIndex
T operator()(T x, T y) const
T operator()(const T &x, const T &y) const
const_trgiterator endTrg(const T *pbin, size_t trg)
IndexType numberOfUnaryFactors() const
bool operator==(const srcIterator &it) const
const_srciterator beginSrc(const T *pbin, size_t src)