Modules | Alphabetical List | Class List | Directories | File List | GIL Home Page

# memory_based_2d_locator Class Template Reference
[Models, Models]

`#include <locator.hpp>`

Inheritance diagram for memory_based_2d_locator:

List of all members.

## Detailed Description

### template<typename StepIterator>
class boost::gil::memory_based_2d_locator< StepIterator >

Memory-based pixel locator. Models: PixelLocatorConcept,HasDynamicXStepTypeConcept,HasDynamicYStepTypeConcept,HasTransposedTypeConcept

The class takes a step iterator as a parameter. The step iterator provides navigation along the vertical axis while its base iterator provides horizontal navigation.

Each instantiation is optimal in terms of size and efficiency. For example, xy locator over interleaved rgb image results in a step iterator consisting of one std::ptrdiff_t for the row size and one native pointer (8 bytes total). ++locator.x() resolves to pointer increment. At the other extreme, a 2D navigation of the even pixels of a planar CMYK image results in a step iterator consisting of one std::ptrdiff_t for the doubled row size, and one step iterator consisting of one std::ptrdiff_t for the horizontal step of two and a CMYK planar_pixel_iterator consisting of 4 pointers (24 bytes). In this case ++locator.x() results in four native pointer additions.

Note also that `memory_based_2d_locator` does not require that its element type be a pixel. It could be instantiated with an iterator whose `value_type` models only `Regular`. In this case the locator models the weaker RandomAccess2DLocatorConcept, and does not model PixelBasedConcept. Many generic algorithms don't require the elements to be pixels.

## Public Types

typedef pixel_2d_locator_base < memory_based_2d_locator < StepIterator >, typename iterator_adaptor_get_base < StepIterator >::type, StepIterator > | parent_t
typedef memory_based_2d_locator < typename const_iterator_type < StepIterator >::type > | const_t
typedef parent_t::coord_t | coord_t
typedef parent_t::x_coord_t | x_coord_t
typedef parent_t::y_coord_t | y_coord_t
typedef parent_t::x_iterator | x_iterator
typedef parent_t::y_iterator | y_iterator
typedef parent_t::difference_type | difference_type
typedef parent_t::reference | reference
typedef std::ptrdiff_t | cached_location_t

## Public Member Functions

| memory_based_2d_locator (const StepIterator &yit)
template<typename SI>
| memory_based_2d_locator (const memory_based_2d_locator< SI > &loc, coord_t y_step)
template<typename SI>
| memory_based_2d_locator (const memory_based_2d_locator< SI > &loc, coord_t x_step, coord_t y_step, bool transpose=false)
| memory_based_2d_locator (x_iterator xit, std::ptrdiff_t row_bytes)
template<typename X>
| memory_based_2d_locator (const memory_based_2d_locator< X > &pl)
| memory_based_2d_locator (const memory_based_2d_locator &pl)
bool | operator== (const this_t &p) const
x_iterator const & | x () const
y_iterator const & | y () const
x_iterator & | x ()
y_iterator & | y ()
x_iterator | x_at (x_coord_t dx, y_coord_t dy) const
x_iterator | x_at (const difference_type &d) const
this_t | xy_at (x_coord_t dx, y_coord_t dy) const
this_t | xy_at (const difference_type &d) const
reference | operator() (x_coord_t dx, y_coord_t dy) const
reference | operator[] (const difference_type &d) const
this_t & | operator+= (const difference_type &d)
this_t & | operator-= (const difference_type &d)
cached_location_t | cache_location (const difference_type &d) const
cached_location_t | cache_location (x_coord_t dx, y_coord_t dy) const
reference | operator[] (const cached_location_t &loc) const
std::ptrdiff_t | row_size () const
std::ptrdiff_t | pixel_size () const
bool | is_1d_traversable (x_coord_t width) const
std::ptrdiff_t | y_distance_to (const this_t &p2, x_coord_t xDiff) const

## Friends

class | memory_based_2d_locator

The documentation for this class was generated from the following file:

- locator.hpp