/usr/include/vigra/inspector_passes.hxx is in libvigraimpex-dev 1.9.0+dfsg-10+b2.
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 | #ifndef VIGRA_INSPECTOR_PASSES_HXX
#define VIGRA_INSPECTOR_PASSES_HXX
#include "metaprogramming.hxx"
namespace vigra {
// test and accomodate for functors that require extra passes over arrays / etc.
namespace detail {
template <bool>
struct extra_passes_selector
{
template <class Inspector, class Functor>
static void
call(Inspector, Functor &) {}
};
template <>
struct extra_passes_selector<true>
{
template <class Inspector, class Functor_n>
static void
call_n(Inspector g, Functor_n f_n)
{
g(f_n);
}
template <class Inspector, class Functor>
static void
call(Inspector g, Functor & f)
{
for (unsigned n = 2; n <= Functor::max_passes; ++n)
{
f.calc_sync();
call_n(g, f.pass_n(n));
}
}
};
template <class T>
struct has_extra_passes : public sfinae_test<T, has_extra_passes>
{
template <class U> has_extra_passes(U*, typename U::extra_passes* = 0);
};
template <class Functor, bool extra = has_extra_passes<Functor>::value>
struct get_extra_passes
: public VigraFalseType
{
void sync(Functor &) {}
};
template <class Functor>
struct get_extra_passes<Functor, true>
{
typedef get_extra_passes extra_passes;
static const unsigned max_passes = Functor::max_passes;
static const bool value = Functor::max_passes >= 2;
void sync(Functor & f)
{
f.calc_sync();
}
};
template <class Inspector, class Functor>
inline
void
extra_passes_select(Inspector g, Functor & f)
{
g(f);
extra_passes_selector<get_extra_passes<Functor>::value>::call(g, f);
}
} // namespace detail
} // namespace vigra
#endif // VIGRA_INSPECTOR_PASSES_HXX
|