forked from boostorg/fusion
Merge pull request #240 from denzor200/identity_view
Added boost::fusion::identity_view
This commit is contained in:
@ -133,6 +133,7 @@ For any Forward Sequence s the following invariants always hold:
|
|||||||
* __transform_view__
|
* __transform_view__
|
||||||
* __reverse_view__
|
* __reverse_view__
|
||||||
* __zip_view__
|
* __zip_view__
|
||||||
|
* __identity_view__
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
@ -201,6 +202,7 @@ are not defined in __forward_sequence__.
|
|||||||
* __iterator_range__ (where adapted sequence is a Bidirectional Sequence)
|
* __iterator_range__ (where adapted sequence is a Bidirectional Sequence)
|
||||||
* __transform_view__ (where adapted sequence is a Bidirectional Sequence)
|
* __transform_view__ (where adapted sequence is a Bidirectional Sequence)
|
||||||
* __zip_view__ (where adapted sequences are models of Bidirectional Sequence)
|
* __zip_view__ (where adapted sequences are models of Bidirectional Sequence)
|
||||||
|
* __identity_view__ (where adapted sequence is a Bidirectional Sequence)
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
@ -289,6 +291,7 @@ are not defined in __bidirectional_sequence__.
|
|||||||
* __iterator_range__ (where adapted sequence is a Random Access Sequence)
|
* __iterator_range__ (where adapted sequence is a Random Access Sequence)
|
||||||
* __transform_view__ (where adapted sequence is a Random Access Sequence)
|
* __transform_view__ (where adapted sequence is a Random Access Sequence)
|
||||||
* __zip_view__ (where adapted sequences are models of Random Access Sequence)
|
* __zip_view__ (where adapted sequences are models of Random Access Sequence)
|
||||||
|
* __identity_view__ (where adapted sequence is a Random Access Sequence)
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
@ -361,6 +364,7 @@ you can use `__result_of_value_at_key__<S, K>`.]
|
|||||||
* __joint_view__ (where adapted sequences are __associative_sequence__\ s and __forward_sequence__\ s)
|
* __joint_view__ (where adapted sequences are __associative_sequence__\ s and __forward_sequence__\ s)
|
||||||
* __reverse_view__ (where adapted sequence is an __associative_sequence__ and a __bidirectional_sequence__)
|
* __reverse_view__ (where adapted sequence is an __associative_sequence__ and a __bidirectional_sequence__)
|
||||||
* __transform_view__ (where adapted sequence is an __associative_sequence__ and a __forward_sequence__)
|
* __transform_view__ (where adapted sequence is an __associative_sequence__ and a __forward_sequence__)
|
||||||
|
* __identity_view__ (where adapted sequence is an __associative_sequence__ and a __forward_sequence__)
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
57
doc/view.qbk
57
doc/view.qbk
@ -1,6 +1,7 @@
|
|||||||
[/==============================================================================
|
[/==============================================================================
|
||||||
Copyright (C) 2001-2011 Joel de Guzman
|
Copyright (C) 2001-2011 Joel de Guzman
|
||||||
Copyright (C) 2006 Dan Marsden
|
Copyright (C) 2006 Dan Marsden
|
||||||
|
Copyright (c) 2022 Denis Mikhailov
|
||||||
|
|
||||||
Use, modification and distribution is subject to the Boost Software
|
Use, modification and distribution is subject to the Boost Software
|
||||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -664,4 +665,60 @@ defined in __forward_sequence__.
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
[section identity_view]
|
||||||
|
|
||||||
|
[heading Description]
|
||||||
|
|
||||||
|
`identity_view` presents underlying sequence unchanged.
|
||||||
|
|
||||||
|
[heading Header]
|
||||||
|
|
||||||
|
#include <boost/fusion/view/identity_view.hpp>
|
||||||
|
#include <boost/fusion/include/identity_view.hpp>
|
||||||
|
|
||||||
|
[heading Synopsis]
|
||||||
|
|
||||||
|
template <typename Sequence>
|
||||||
|
struct identity_view;
|
||||||
|
|
||||||
|
[heading Template parameters]
|
||||||
|
|
||||||
|
[table
|
||||||
|
[[Parameter] [Description] [Default]]
|
||||||
|
[[`Sequence`] [A __forward_sequence__] []]
|
||||||
|
]
|
||||||
|
|
||||||
|
[heading Model of]
|
||||||
|
|
||||||
|
* A model of __forward_sequence__ if `Sequence` is a __forward_sequence__ else, __bidirectional_sequence__ if `Sequence` is a __bidirectional_sequence__
|
||||||
|
else, __random_access_sequence__ if `Sequence` is a __random_access_sequence__.
|
||||||
|
* __associative_sequence__ if `Sequence` implements the __associative_sequence__ model.
|
||||||
|
|
||||||
|
[variablelist Notation
|
||||||
|
[[`IV`] [An `identity_view` type]]
|
||||||
|
[[`s`] [An instance of `Sequence`]]
|
||||||
|
[[`iv`, `iv2`] [Instances of `identity_view`]]
|
||||||
|
]
|
||||||
|
|
||||||
|
[heading Expression Semantics]
|
||||||
|
|
||||||
|
Semantics of an expression is defined only where it differs from, or is not
|
||||||
|
defined in the implemented models.
|
||||||
|
|
||||||
|
[table
|
||||||
|
[[Expression] [Semantics]]
|
||||||
|
[[`IV(s)`] [Creates an `identity_view` given sequence, `s`.]]
|
||||||
|
[[`IV(iv)`] [Copy constructs an `identity_view` from another `identity_view`, `iv`.]]
|
||||||
|
[[`iv = iv2`] [Assigns to an `identity_view`, `iv`, from another `identity_view`, `iv2`.]]
|
||||||
|
]
|
||||||
|
|
||||||
|
[heading Example]
|
||||||
|
typedef __vector__<int, short, double> vector_type;
|
||||||
|
vector_type vec(2, 5, 3.3);
|
||||||
|
|
||||||
|
__identity_view__<vector_type> identity(vec);
|
||||||
|
std::cout << identity << std::endl; // (2 5 3.3)
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -28,10 +28,6 @@ namespace boost {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
# pragma warning(push)
|
|
||||||
# pragma warning(disable: 4512) // assignment operator could not be generated.
|
|
||||||
#endif
|
|
||||||
namespace boost { namespace fusion {
|
namespace boost { namespace fusion {
|
||||||
template<typename Sequence> struct identity_view
|
template<typename Sequence> struct identity_view
|
||||||
: transform_view<Sequence, detail::identity>
|
: transform_view<Sequence, detail::identity>
|
||||||
@ -43,8 +39,5 @@ namespace boost { namespace fusion {
|
|||||||
: base_type(in_seq, detail::identity()) {}
|
: base_type(in_seq, detail::identity()) {}
|
||||||
};
|
};
|
||||||
}}
|
}}
|
||||||
#ifdef _MSC_VER
|
|
||||||
# pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user