Exiv2
Public Types | Public Member Functions | List of all members
Exiv2::Slice< container > Struct Template Reference

Slice (= view) for STL containers. More...

#include <slice.hpp>

Inheritance diagram for Exiv2::Slice< container >:
Inheritance graph
[legend]

Public Types

using iterator = typename container::iterator
 
using const_iterator = typename container::const_iterator
 
using value_type = typename std::remove_cv< typename container::value_type >::type
 
- Public Types inherited from Exiv2::Internal::MutableSliceBase< Internal::ContainerStorage, container >
using iterator = typename ConstSliceBase< Internal::ContainerStorage, container >::iterator
 
using const_iterator = typename ConstSliceBase< Internal::ContainerStorage, container >::const_iterator
 
using value_type = typename ConstSliceBase< Internal::ContainerStorage, container >::value_type
 
- Public Types inherited from Exiv2::Internal::ConstSliceBase< Internal::ContainerStorage, container >
using iterator = typename Internal::ContainerStorage< container >::iterator
 
using const_iterator = typename Internal::ContainerStorage< container >::const_iterator
 
using value_type = typename Internal::ContainerStorage< container >::value_type
 

Public Member Functions

Slice subSlice (size_t begin, size_t end)
 
Slice< const container > subSlice (size_t begin, size_t end) const
 
- Public Member Functions inherited from Exiv2::Internal::MutableSliceBase< Internal::ContainerStorage, container >
value_type & at (size_t index)
 
const value_type & at (size_t index) const
 
iterator begin () noexcept
 
iterator end () noexcept
 
- Public Member Functions inherited from Exiv2::Internal::ConstSliceBase< Internal::ContainerStorage, container >
 ConstSliceBase (container &data, size_t begin, size_t end)
 
const value_type & at (size_t index) const
 
const_iterator cbegin () const noexcept
 
const_iterator cend () const noexcept
 
slice_type subSlice (size_t begin, size_t end) const
 
- Public Member Functions inherited from Exiv2::Internal::SliceBase
 SliceBase (size_t begin, size_t end)
 
size_t size () const noexcept
 

Additional Inherited Members

- Protected Types inherited from Exiv2::Internal::MutableSliceBase< Internal::ContainerStorage, container >
using base_type = ConstSliceBase< Internal::ContainerStorage, container >
 
- Protected Member Functions inherited from Exiv2::Internal::MutableSliceBase< Internal::ContainerStorage, container >
ConstSliceBase< Internal::ContainerStorage, const container > to_const_base () const noexcept
 
slice_type subSlice (size_t begin, size_t end)
 
- Protected Member Functions inherited from Exiv2::Internal::SliceBase
void rangeCheck (size_t index) const
 
- Protected Attributes inherited from Exiv2::Internal::ConstSliceBase< Internal::ContainerStorage, container >
Internal::ContainerStorage< container > storage_
 
- Protected Attributes inherited from Exiv2::Internal::SliceBase
size_t begin_
 
size_t end_
 

Detailed Description

template<typename container>
struct Exiv2::Slice< container >

Slice (= view) for STL containers.

This is a very simple implementation of slices (i.e. views of sub-arrays) for STL containers that support O(1) element access and random access iterators (like std::vector, std::array and std::string).

A slice represents the semi-open interval [begin, end) and provides a (mutable) view, it does however not own the data! It can be used to conveniently pass parts of containers into functions without having to use iterators or offsets.

In contrast to C++20's std::span<T> it is impossible to read beyond the container's bounds and unchecked access is not-possible (by design).

Example usage:

Member Function Documentation

template<typename container>
Slice Exiv2::Slice< container >::subSlice ( size_t  begin,
size_t  end 
)
inline

Construct a sub-slice of this slice with the given bounds. The bounds are evaluated with respect to the current slice.

Parameters
[in]beginFirst element in the new slice.
[in]endFirst element beyond the new slice.
Exceptions
std::out_of_rangewhen begin or end are invalid

Referenced by Exiv2::IptcData::printStructure().

template<typename container>
Slice<const container> Exiv2::Slice< container >::subSlice ( size_t  begin,
size_t  end 
) const
inline

Constructs a new constant subSlice. Behaves otherwise exactly like the non-const version.


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