libzypp 17.37.17
ValueTransform.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
11#ifndef ZYPP_BASE_VALUETRANSFORM_H
12#define ZYPP_BASE_VALUETRANSFORM_H
13
14#include <iosfwd>
15
16#include <zypp/base/Iterator.h>
17
19namespace zypp
20{
22 namespace base
23 {
34 template<class Tp, class TUnaryFunction>
36 {
37 using RawType = Tp;
38 using Transformator = TUnaryFunction;
39#if __cplusplus < 201703L
40 using TransformedType = std::result_of_t<Transformator (RawType)>; // yast in 15.[23] uses c++11
41#else
42 using TransformedType = std::invoke_result_t<Transformator, RawType>;
43#endif
44
45 public:
48
49 explicit ValueTransform( RawType raw_r )
50 : _raw( std::move(raw_r) )
51 {}
52
53 ValueTransform( RawType raw_r, Transformator transform_r )
54 : _raw( std::move(raw_r) ), _transform( std::move(transform_r) )
55 {}
56
57 public:
59 const RawType & raw() const
60 { return _raw; }
61
64 { return _raw; }
65
66 public:
69 { return _transform( _raw ); }
70
72 TransformedType transformed( const RawType & raw_r ) const
73 { return _transform( raw_r ); }
74
77 { return _transform; }
78
79 private:
82 };
83
94 template<class TContainer, class TUnaryFunction>
96 {
97 using Container = TContainer;
98 using Transformator = TUnaryFunction;
99 using size_type = typename Container::size_type;
100 using RawType = typename Container::value_type;
101#if __cplusplus < 201703L
102 using TransformedType = std::result_of_t<Transformator (RawType)>; // yast in 15.[23] uses c++11
103#else
104 using TransformedType = std::invoke_result_t<Transformator, RawType>;
105#endif
106 public:
109
111 : _raw( std::move(raw_r) )
112 {}
113
115 : _raw( std::move(raw_r) ), _transform( std::move(transform_r) )
116 {}
117
118 public:
119 bool empty() const
120 { return _raw.empty(); }
121
123 { return _raw.size(); }
124
125 using RawConstIterator = typename Container::const_iterator;
126
128 { return _raw.begin(); }
129
131 { return _raw.end(); }
132
134 const Container & raw() const
135 { return _raw; }
136
139 { return _raw; }
140
142 void clear()
143 { _raw.clear(); }
144
145 public:
147
149 { return make_transform_iterator( _raw.begin(), _transform ); }
150
152 { return make_transform_iterator( _raw.end(), _transform ); }
153
157
159 TransformedType transformed( const RawType & raw_r ) const
160 { return _transform( raw_r ); }
161
164 { return _transform( *rawIter_r ); }
165
168 { return _transform; }
169
170 private:
173 };
174
175 } // namespace base
177} // namespace zypp
179#endif // ZYPP_BASE_VALUETRANSFORM_H
An iterator over elements which are the result of applying some functional transformation to the elem...
Definition Arch.h:364
typename result_of< T >::type result_of_t
Definition TypeTraits.h:51
Easy-to use interface to the ZYPP dependency resolver.
TransformedType transformed(const RawConstIterator &rawIter_r) const
Return a transformed copy of a RawConstIterator raw value.
TransformedConstIterator transformedBegin() const
Container transformed() const
Return copy with transformed variables (expensive)
const Container & raw() const
Get the raw value.
std::result_of_t< Transformator(RawType)> TransformedType
typename Container::size_type size_type
RawConstIterator rawBegin() const
RawConstIterator rawEnd() const
typename Container::value_type RawType
const Transformator & transformator() const
Return the transformator.
void clear()
Clear the container.
TransformedType transformed(const RawType &raw_r) const
Return a transformed copy of an arbitrary RawType.
typename Container::const_iterator RawConstIterator
transform_iterator< Transformator, typename Container::const_iterator > TransformedConstIterator
TransformedConstIterator transformedEnd() const
Container & raw()
Set the raw value.
ContainerTransform(Container raw_r, Transformator transform_r)
ValueTransform(RawType raw_r, Transformator transform_r)
std::result_of_t< Transformator(RawType)> TransformedType
const RawType & raw() const
Get the raw value.
TransformedType transformed() const
Return a transformed copy of the raw value.
RawType & raw()
Set the raw value.
const Transformator & transformator() const
Return the transformator.
TransformedType transformed(const RawType &raw_r) const
Return a transformed copy of an arbitrary RawType.