Apollo 10.0
自动驾驶开放平台
for_each.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2018 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
17#ifndef CYBER_BASE_FOR_EACH_H_
18#define CYBER_BASE_FOR_EACH_H_
19
20#include <type_traits>
21
22#include "cyber/base/macros.h"
23
24namespace apollo {
25namespace cyber {
26namespace base {
27
28DEFINE_TYPE_TRAIT(HasLess, operator<) // NOLINT
29
30template <class Value, class End>
31typename std::enable_if<HasLess<Value>::value && HasLess<End>::value,
32 bool>::type
33LessThan(const Value& val, const End& end) {
34 return val < end;
35}
36
37template <class Value, class End>
38typename std::enable_if<!HasLess<Value>::value || !HasLess<End>::value,
39 bool>::type
40LessThan(const Value& val, const End& end) {
41 return val != end;
42}
43
44#define FOR_EACH(i, begin, end) \
45 for (auto i = (true ? (begin) : (end)); \
46 apollo::cyber::base::LessThan(i, (end)); ++i)
47
48} // namespace base
49} // namespace cyber
50} // namespace apollo
51
52#endif // CYBER_BASE_FOR_EACH_H_
#define DEFINE_TYPE_TRAIT(name, func)
Definition macros.h:35
std::enable_if< HasLess< Value >::value &&HasLess< End >::value, bool >::type LessThan(const Value &val, const End &end)
Definition for_each.h:33
class register implement
Definition arena_queue.h:37
Definition future.h:29