Point Cloud Library (PCL)
1.12.0
Loading...
Searching...
No Matches
pcl
for_each_type.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Point Cloud Library (PCL) - www.pointclouds.org
5
* Copyright (c) 2010-2011, Willow Garage, Inc.
6
*
7
* All rights reserved.
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions
11
* are met:
12
*
13
* * Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* * Redistributions in binary form must reproduce the above
16
* copyright notice, this list of conditions and the following
17
* disclaimer in the documentation and/or other materials provided
18
* with the distribution.
19
* * Neither the name of the copyright holder(s) nor the names of its
20
* contributors may be used to endorse or promote products derived
21
* from this software without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
* POSSIBILITY OF SUCH DAMAGE.
35
*
36
* $Id$
37
*
38
*/
39
40
#pragma once
41
42
#ifdef __GNUC__
43
#pragma GCC system_header
44
#endif
45
46
#include <boost/mpl/is_sequence.hpp>
47
#include <boost/mpl/begin_end.hpp>
48
#include <boost/mpl/next_prior.hpp>
49
#include <boost/mpl/deref.hpp>
50
#include <boost/mpl/assert.hpp>
51
#include <boost/mpl/remove_if.hpp>
52
#include <boost/mpl/contains.hpp>
53
#include <boost/mpl/not.hpp>
54
#include <boost/mpl/aux_/unwrap.hpp>
55
56
#include <type_traits>
57
58
namespace
pcl
59
{
60
//////////////////////////////////////////////////////////////////////////////////////////////
61
template
<
bool
done = true>
62
struct
for_each_type_impl
63
{
64
template
<
typename
Iterator,
typename
LastIterator,
typename
F>
65
static
void
execute
(F) {}
66
};
67
68
//////////////////////////////////////////////////////////////////////////////////////////////
69
template
<>
70
struct
for_each_type_impl
<false>
71
{
72
template
<
typename
Iterator,
typename
LastIterator,
typename
F>
73
static
void
execute
(F f)
74
{
75
using
arg =
typename
boost::mpl::deref<Iterator>::type;
76
77
#if (defined _WIN32 && defined _MSC_VER)
78
boost::mpl::aux::unwrap (f, 0).operator()<arg> ();
79
#else
80
boost::mpl::aux::unwrap (f, 0).template operator()<arg> ();
81
#endif
82
83
using
iter =
typename
boost::mpl::next<Iterator>::type;
84
for_each_type_impl<std::is_same<iter, LastIterator>::value
>
85
::template
execute<iter, LastIterator, F>
(f);
86
}
87
};
88
89
//////////////////////////////////////////////////////////////////////////////////////////////
90
template
<
typename
Sequence,
typename
F>
inline
void
91
for_each_type
(F f)
92
{
93
BOOST_MPL_ASSERT (( boost::mpl::is_sequence<Sequence> ));
94
using
first =
typename
boost::mpl::begin<Sequence>::type;
95
using
last =
typename
boost::mpl::end<Sequence>::type;
96
for_each_type_impl<std::is_same<first, last>::value
>::template execute<first, last, F> (f);
97
}
98
99
//////////////////////////////////////////////////////////////////////////////////////////////
100
template
<
typename
Sequence1,
typename
Sequence2>
101
struct
intersect
102
{
103
using
type
=
typename
boost::mpl::remove_if<Sequence1, boost::mpl::not_<boost::mpl::contains<Sequence2, boost::mpl::_1> > >
::type
;
104
};
105
}
pcl
Definition
convolution.h:46
pcl::for_each_type
void for_each_type(F f)
Definition
for_each_type.h:91
pcl::for_each_type_impl< false >::execute
static void execute(F f)
Definition
for_each_type.h:73
pcl::for_each_type_impl
Definition
for_each_type.h:63
pcl::for_each_type_impl::execute
static void execute(F)
Definition
for_each_type.h:65
pcl::intersect
Definition
for_each_type.h:102
pcl::intersect::type
typename boost::mpl::remove_if< Sequence1, boost::mpl::not_< boost::mpl::contains< Sequence2, boost::mpl::_1 > > >::type type
Definition
for_each_type.h:103