36 #ifndef VIGRA_ACCESSOR_HXX 37 #define VIGRA_ACCESSOR_HXX 39 #include "metaprogramming.hxx" 40 #include "numerictraits.hxx" 132 template <
class VALUETYPE>
142 template <
class ITERATOR>
143 VALUETYPE
const &
operator()(ITERATOR
const & i)
const {
return *i; }
145 VALUETYPE
const &
operator()(VALUETYPE
const * i)
const {
return *i; }
149 template <
class ITERATOR,
class OFFSET>
150 VALUETYPE
const &
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 159 template <
class V,
class ITERATOR>
160 void set(V
const & value, ITERATOR
const & i)
const 161 { *i = detail::RequiresExplicitCast<VALUETYPE>::cast(value); }
164 template <
class V,
class ITERATOR>
165 void set(V
const & value, ITERATOR & i)
const 166 { *i = detail::RequiresExplicitCast<VALUETYPE>::cast(value); }
173 template <
class V,
class ITERATOR,
class OFFSET>
174 void set(V
const & value, ITERATOR
const & i, OFFSET
const & diff)
const 176 i[diff]= detail::RequiresExplicitCast<VALUETYPE>::cast(value);
197 template <
class VALUETYPE>
209 template <
class ITERATOR>
211 {
return detail::RequiresExplicitCast<VALUETYPE>::cast(*i); }
218 template <
class ITERATOR,
class OFFSET>
219 VALUETYPE
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 221 return detail::RequiresExplicitCast<VALUETYPE>::cast(i[diff]);
227 template <
class V,
class ITERATOR>
228 void set(V value, ITERATOR
const & i)
const 229 { *i = detail::RequiresExplicitCast<VALUETYPE>::cast(value); }
232 template <
class V,
class ITERATOR>
233 void set(V value, ITERATOR & i)
const 234 { *i = detail::RequiresExplicitCast<VALUETYPE>::cast(value); }
241 template <
class V,
class ITERATOR,
class OFFSET>
242 void set(V value, ITERATOR
const & i, OFFSET
const & diff)
const 244 i[diff]= detail::RequiresExplicitCast<VALUETYPE>::cast(value);
268 template <
class VALUETYPE>
276 template <
class ITERATOR>
282 template <
class ITERATOR,
class OFFSET>
283 VALUETYPE
const &
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 306 template <
class VALUETYPE>
316 template <
class ITERATOR>
318 {
return detail::RequiresExplicitCast<VALUETYPE>::cast(*i); }
325 template <
class ITERATOR,
class OFFSET>
326 VALUETYPE
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 328 return detail::RequiresExplicitCast<VALUETYPE>::cast(i[diff]);
364 template <
class VECTORTYPE>
381 template <
class ITERATOR>
383 {
return (*i)[index_]; }
387 template <
class ITERATOR,
class OFFSET>
388 value_type
const &
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 390 return i[diff][index_];
397 template <
class V,
class ITERATOR>
398 void set(V
const & value, ITERATOR
const & i)
const 400 (*i)[index_] = detail::RequiresExplicitCast<value_type>::cast(value);
408 template <
class V,
class ITERATOR,
class OFFSET>
409 void set(V
const & value, ITERATOR
const & i, OFFSET
const & diff)
const 411 i[diff][index_]= detail::RequiresExplicitCast<value_type>::cast(value);
448 template <
class VECTORTYPE>
468 template <
class ITERATOR>
470 {
return detail::RequiresExplicitCast<value_type>::cast((*i)[index_]); }
477 template <
class ITERATOR,
class OFFSET>
478 value_type
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 480 return detail::RequiresExplicitCast<value_type>::cast(i[diff][index_]);
487 template <
class V,
class ITERATOR>
488 void set(V value, ITERATOR
const & i)
const 490 (*i)[index_] = detail::RequiresExplicitCast<value_type>::cast(value);
498 template <
class V,
class ITERATOR,
class OFFSET>
499 void set(V value, ITERATOR
const & i, OFFSET
const & diff)
const 501 i[diff][index_]= detail::RequiresExplicitCast<value_type>::cast(value);
538 template <
class ACCESSOR>
557 template <
class ITERATOR>
559 {
return a_.getComponent(i, index_); }
563 template <
class ITERATOR,
class OFFSET>
564 value_type
const &
operator()(ITERATOR
const & i, OFFSET
const & diff)
const 566 return a_.getComponent(i, diff, index_);
573 template <
class V,
class ITERATOR>
574 void set(V
const & value, ITERATOR
const & i)
const 576 a_.setComponent(detail::RequiresExplicitCast<value_type>::cast(value), i, index_);
584 template <
class V,
class ITERATOR,
class OFFSET>
585 void set(V
const & value, ITERATOR
const & i, OFFSET
const & diff)
const 587 a_.setComponent(detail::RequiresExplicitCast<value_type>::cast(value), i, diff, index_);
631 template <
class SEQUENCE>
640 #ifndef NO_PARTIAL_TEMPLATE_SPECIALIZATION 642 If<typename TypeTraits<SEQUENCE>::isConst,
643 typename SEQUENCE::const_iterator,
644 typename SEQUENCE::iterator>::type
649 typedef typename SEQUENCE::iterator iterator;
654 template <
class ITERATOR>
655 iterator
begin(ITERATOR
const & i)
const 662 template <
class ITERATOR>
663 iterator
end(ITERATOR
const & i)
const 671 template <
class ITERATOR,
class OFFSET>
672 iterator
begin(ITERATOR
const & i, OFFSET
const & diff)
const 674 return i[diff].begin();
680 template <
class ITERATOR,
class OFFSET>
681 iterator
end(ITERATOR
const & i, OFFSET
const & diff)
const 683 return i[diff].end();
688 template <
class ITERATOR>
689 unsigned int size(ITERATOR
const & i)
const {
return (*i).size(); }
693 template <
class ITERATOR,
class OFFSET>
694 unsigned int size(ITERATOR
const & i, OFFSET
const & diff)
const 695 {
return i[diff].size(); }
770 template <
class VECTOR>
787 template <
class ITERATOR>
798 template <
class V,
class ITERATOR>
801 (*i)[idx] = detail::RequiresExplicitCast<component_type>::cast(value);
807 template <
class ITERATOR,
class OFFSET>
808 component_type
const &
getComponent(ITERATOR
const & i, OFFSET
const & diff,
int idx)
const 818 template <
class V,
class ITERATOR,
class OFFSET>
820 setComponent(V
const & value, ITERATOR
const & i, OFFSET
const & diff,
int idx)
const 822 i[diff][idx] = detail::RequiresExplicitCast<component_type>::cast(value);
870 template <
class Iter1,
class Acc1,
class Iter2,
class Acc2>
877 typedef pair<typename Acc1::value_type, typename Acc2::value_type>
883 : i1_(i1), a1_(a1), i2_(i2), a2_(a2)
888 template <
class OFFSET>
891 return std::make_pair(a1_(i1_, d), a2_(i2_, d));
896 template <
class OFFSET1,
class OFFSET2>
900 return std::make_pair(a1_(i1_, d1), a2_(i2_, d1));
913 struct AccessorTraits
919 #define VIGRA_DEFINE_ACCESSOR_TRAITS(VALUE, ACCESSOR, CONST_ACCESSOR) \ 921 struct AccessorTraits<VALUE > \ 923 typedef ACCESSOR<VALUE > default_accessor; \ 924 typedef CONST_ACCESSOR<VALUE > default_const_accessor; \ 938 template <class T,
unsigned int RED_IDX,
unsigned int GREEN_IDX,
unsigned int BLUE_IDX> class
RGBValue;
942 #ifndef NO_PARTIAL_TEMPLATE_SPECIALIZATION 944 template <
class T,
unsigned int RED_IDX,
unsigned int GREEN_IDX,
unsigned int BLUE_IDX>
945 struct AccessorTraits<RGBValue<T, RED_IDX, GREEN_IDX, BLUE_IDX> >
951 template <
class T,
int SIZE>
952 struct AccessorTraits<TinyVector<T, SIZE> >
958 #else // NO_PARTIAL_TEMPLATE_SPECIALIZATION 962 VIGRA_DEFINE_ACCESSOR_TRAITS(
RGBValue<short>, RGBAccessor, RGBAccessor)
964 VIGRA_DEFINE_ACCESSOR_TRAITS(
RGBValue<int>, RGBAccessor, RGBAccessor)
966 VIGRA_DEFINE_ACCESSOR_TRAITS(
RGBValue<long>, RGBAccessor, RGBAccessor)
968 VIGRA_DEFINE_ACCESSOR_TRAITS(
RGBValue<float>, RGBAccessor, RGBAccessor)
971 #define VIGRA_PIXELTYPE TinyVector<unsigned char, 2> 973 #undef VIGRA_PIXELTYPE 974 #define VIGRA_PIXELTYPE TinyVector<unsigned char, 3> 976 #undef VIGRA_PIXELTYPE 977 #define VIGRA_PIXELTYPE TinyVector<unsigned char, 4> 979 #undef VIGRA_PIXELTYPE 980 #define VIGRA_PIXELTYPE TinyVector<short, 2> 982 #undef VIGRA_PIXELTYPE 983 #define VIGRA_PIXELTYPE TinyVector<short, 3> 985 #undef VIGRA_PIXELTYPE 986 #define VIGRA_PIXELTYPE TinyVector<short, 4> 988 #undef VIGRA_PIXELTYPE 989 #define VIGRA_PIXELTYPE TinyVector<int, 2> 991 #undef VIGRA_PIXELTYPE 992 #define VIGRA_PIXELTYPE TinyVector<int, 3> 994 #undef VIGRA_PIXELTYPE 995 #define VIGRA_PIXELTYPE TinyVector<int, 4> 997 #undef VIGRA_PIXELTYPE 998 #define VIGRA_PIXELTYPE TinyVector<float, 2> 1000 #undef VIGRA_PIXELTYPE 1001 #define VIGRA_PIXELTYPE TinyVector<float, 3> 1003 #undef VIGRA_PIXELTYPE 1004 #define VIGRA_PIXELTYPE TinyVector<float, 4> 1006 #undef VIGRA_PIXELTYPE 1007 #define VIGRA_PIXELTYPE TinyVector<double, 2> 1009 #undef VIGRA_PIXELTYPE 1010 #define VIGRA_PIXELTYPE TinyVector<double, 3> 1012 #undef VIGRA_PIXELTYPE 1013 #define VIGRA_PIXELTYPE TinyVector<double, 4> 1015 #undef VIGRA_PIXELTYPE 1017 #endif // NO_PARTIAL_TEMPLATE_SPECIALIZATION 1019 #undef VIGRA_DEFINE_ACCESSOR_TRAITS 1023 #endif // VIGRA_ACCESSOR_HXX VALUETYPE operator()(ITERATOR const &i) const
Definition: accessor.hxx:317
Accessor for one component of a vector.
Definition: accessor.hxx:539
VectorElementAccessor(int index, ACCESSOR a=ACCESSOR())
Definition: accessor.hxx:550
value_type operator()(OFFSET const &d) const
Definition: accessor.hxx:889
value_type const & operator()(ITERATOR const &i) const
Definition: accessor.hxx:558
VectorComponentValueAccessor(int index)
Definition: accessor.hxx:459
unsigned int size(ITERATOR const &i) const
Definition: accessor.hxx:689
ACCESSOR::component_type value_type
Definition: accessor.hxx:546
VECTORTYPE::value_type value_type
Definition: accessor.hxx:371
pair< typename Acc1::value_type, typename Acc2::value_type > value_type
Definition: accessor.hxx:878
VALUETYPE operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:326
value_type const & operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:388
Accessor for one component of a vector.
Definition: accessor.hxx:449
VALUETYPE value_type
Definition: accessor.hxx:138
iterator end(ITERATOR const &i) const
Definition: accessor.hxx:663
value_type const & operator()(ITERATOR const &i) const
Definition: accessor.hxx:382
VALUETYPE const & operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:283
Encapsulate access to the values an iterator points to.
Definition: accessor.hxx:307
value_type operator()(OFFSET1 d1, OFFSET2 const &d2) const
Definition: accessor.hxx:897
VECTORTYPE::value_type value_type
Definition: accessor.hxx:455
VALUETYPE operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:219
Accessor for items that are STL compatible vectors.
Definition: accessor.hxx:771
VALUETYPE value_type
Definition: accessor.hxx:203
VectorComponentAccessor(int index)
Definition: accessor.hxx:375
component_type const & getComponent(ITERATOR const &i, int idx) const
Definition: accessor.hxx:788
VECTOR::value_type component_type
Definition: accessor.hxx:777
Accessor for items that are STL compatible sequences.
Definition: accessor.hxx:632
VALUETYPE operator()(ITERATOR const &i) const
Definition: accessor.hxx:210
VALUETYPE const & operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:150
Encapsulate access to the values an iterator points to.
Definition: accessor.hxx:198
Access two images simultaneously.
Definition: accessor.hxx:871
void setIndex(int i)
Definition: accessor.hxx:416
component_type const & getComponent(ITERATOR const &i, OFFSET const &diff, int idx) const
Definition: accessor.hxx:808
void setIndex(int i)
Definition: accessor.hxx:592
iterator begin(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:672
VectorElementAccessor< VectorAccessor< VECTOR > > ElementAccessor
Definition: accessor.hxx:782
Class for fixed size vectors.This class contains an array of size SIZE of the specified VALUETYPE...
Definition: accessor.hxx:940
Accessor for one component of a vector.
Definition: accessor.hxx:365
VALUETYPE const & operator()(ITERATOR const &i) const
Definition: accessor.hxx:143
Encapsulate read access to the values an iterator points to.
Definition: accessor.hxx:269
value_type operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:478
SEQUENCE::value_type component_type
Definition: accessor.hxx:638
void setComponent(V const &value, ITERATOR const &i, OFFSET const &diff, int idx) const
Definition: accessor.hxx:820
VALUETYPE const & operator()(ITERATOR const &i) const
Definition: accessor.hxx:277
Class for a single RGB value.
Definition: accessor.hxx:938
Encapsulate access to the values an iterator points to.
Definition: accessor.hxx:133
iterator end(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:681
MultiImageAccessor2(Iter1 i1, Acc1 a1, Iter2 i2, Acc2 a2)
Definition: accessor.hxx:882
iterator begin(ITERATOR const &i) const
Definition: accessor.hxx:655
void setComponent(V const &value, ITERATOR const &i, int idx) const
Definition: accessor.hxx:799
void setIndex(int i)
Definition: accessor.hxx:506
value_type operator()(ITERATOR const &i) const
Definition: accessor.hxx:469
value_type const & operator()(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:564
Definition: accessor.hxx:939
unsigned int size(ITERATOR const &i, OFFSET const &diff) const
Definition: accessor.hxx:694