Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DereferenceIteratorAdapter.h
Go to the documentation of this file.
1#pragma once
2
3#include <type_traits>
4
5#include <boost/iterator/transform_iterator.hpp>
6
7namespace storm {
8namespace adapters {
9
10template<typename T>
12 decltype((*std::declval<T>())) operator()(T const& t) const {
13 return *t;
14 }
15};
16
17template<typename ContainerType>
19 public:
20 typedef typename ContainerType::value_type value_type;
21 typedef typename std::conditional<std::is_const<ContainerType>::value, typename ContainerType::const_iterator, typename ContainerType::iterator>::type
23 typedef typename boost::transform_iterator<Dereferencer<value_type>, input_iterator> iterator;
24
26 // Intentionally left empty.
27 }
28
29 iterator begin() const {
30 return boost::make_transform_iterator(it, Dereferencer<value_type>());
31 }
32
33 iterator end() const {
34 return boost::make_transform_iterator(ite, Dereferencer<value_type>());
35 }
36
38 return boost::make_transform_iterator(it, Dereferencer<value_type>());
39 }
40
41 bool empty() const {
42 return it == ite;
43 }
44
45 decltype((*std::declval<value_type>())) front() const {
46 return **it;
47 }
48
49 decltype((*std::declval<value_type>())) back() const {
50 return **(ite - 1);
51 }
52
53 std::size_t size() const {
54 return std::distance(it, ite);
55 }
56
57 private:
60};
61
62} // namespace adapters
63} // namespace storm
decltype((*std::declval< value_type >()) front)() const
DereferenceIteratorAdapter(input_iterator it, input_iterator ite)
std::conditional< std::is_const< ContainerType >::value, typenameContainerType::const_iterator, typenameContainerType::iterator >::type input_iterator
decltype((*std::declval< value_type >()) back)() const
boost::transform_iterator< Dereferencer< value_type >, input_iterator > iterator
LabParser.cpp.
Definition cli.cpp:18
decltype((*std::declval< T >()) operator())(T const &t) const