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
7
namespace
storm
{
8
namespace
adapters {
9
10
template
<
typename
T>
11
struct
Dereferencer
{
12
decltype
((*std::declval<T>()))
operator()
(T
const
& t)
const
{
13
return
*t;
14
}
15
};
16
17
template
<
typename
ContainerType>
18
class
DereferenceIteratorAdapter
{
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
22
input_iterator
;
23
typedef
typename
boost::transform_iterator<Dereferencer<value_type>,
input_iterator
>
iterator
;
24
25
DereferenceIteratorAdapter
(
input_iterator
it,
input_iterator
ite) : it(it), ite(ite) {
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
37
static
iterator
make_iterator
(
input_iterator
it) {
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
:
58
input_iterator
it;
59
input_iterator
ite;
60
};
61
62
}
// namespace adapters
63
}
// namespace storm
storm::adapters::DereferenceIteratorAdapter
Definition
DereferenceIteratorAdapter.h:18
storm::adapters::DereferenceIteratorAdapter::make_iterator
static iterator make_iterator(input_iterator it)
Definition
DereferenceIteratorAdapter.h:37
storm::adapters::DereferenceIteratorAdapter::front
decltype((*std::declval< value_type >()) front)() const
Definition
DereferenceIteratorAdapter.h:45
storm::adapters::DereferenceIteratorAdapter::DereferenceIteratorAdapter
DereferenceIteratorAdapter(input_iterator it, input_iterator ite)
Definition
DereferenceIteratorAdapter.h:25
storm::adapters::DereferenceIteratorAdapter::empty
bool empty() const
Definition
DereferenceIteratorAdapter.h:41
storm::adapters::DereferenceIteratorAdapter::end
iterator end() const
Definition
DereferenceIteratorAdapter.h:33
storm::adapters::DereferenceIteratorAdapter::begin
iterator begin() const
Definition
DereferenceIteratorAdapter.h:29
storm::adapters::DereferenceIteratorAdapter::value_type
ContainerType::value_type value_type
Definition
DereferenceIteratorAdapter.h:20
storm::adapters::DereferenceIteratorAdapter::input_iterator
std::conditional< std::is_const< ContainerType >::value, typenameContainerType::const_iterator, typenameContainerType::iterator >::type input_iterator
Definition
DereferenceIteratorAdapter.h:22
storm::adapters::DereferenceIteratorAdapter::back
decltype((*std::declval< value_type >()) back)() const
Definition
DereferenceIteratorAdapter.h:49
storm::adapters::DereferenceIteratorAdapter::size
std::size_t size() const
Definition
DereferenceIteratorAdapter.h:53
storm::adapters::DereferenceIteratorAdapter::iterator
boost::transform_iterator< Dereferencer< value_type >, input_iterator > iterator
Definition
DereferenceIteratorAdapter.h:23
storm
LabParser.cpp.
Definition
cli.cpp:18
storm::adapters::Dereferencer
Definition
DereferenceIteratorAdapter.h:11
storm::adapters::Dereferencer::operator()
decltype((*std::declval< T >()) operator())(T const &t) const
Definition
DereferenceIteratorAdapter.h:12
src
storm
adapters
DereferenceIteratorAdapter.h
Generated by
1.9.8