CARLA
 
载入中...
搜索中...
未找到
CallbackList.h
浏览该文件的文档.
1// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8
9#include "carla/AtomicList.h"
10#include "carla/NonCopyable.h"
11
12#include <atomic>
13#include <functional>
14
15namespace carla {
16namespace client {
17namespace detail {
18
19 template <typename... InputsT>
20 class CallbackList : private NonCopyable {
21 public:
22
23 using CallbackType = std::function<void(InputsT...)>;
24
25 void Call(InputsT... args) const {
26 auto list = _list.Load();
27 for (auto &item : *list) {
28 item.callback(args...);
29 }
30 }
31
32 size_t Push(CallbackType &&callback) {
33 auto id = ++_counter;
34 DEBUG_ASSERT(id != 0u);
35 _list.Push(Item{id, std::move(callback)});
36 return id;
37 }
38
39 void Remove(size_t id) {
40 _list.DeleteByValue(id);
41 }
42
43 void Clear() {
44 _list.Clear();
45 }
46
47 private:
48
49 struct Item {
50 size_t id;
52
53 friend bool operator==(const Item &lhs, const Item &rhs) {
54 return lhs.id == rhs.id;
55 }
56
57 friend bool operator==(const Item &lhs, size_t rhs) {
58 return lhs.id == rhs;
59 }
60
61 friend bool operator==(size_t lhs, const Item &rhs) {
62 return lhs == rhs.id;
63 }
64 };
65
66 std::atomic_size_t _counter{0u};
67
69 };
70
71} // namespace detail
72} // namespace client
73} // namespace carla
#define DEBUG_ASSERT(predicate)
Definition Debug.h:66
Inherit (privately) to suppress copy/move construction and assignment.
Holds an atomic pointer to a list.
Definition AtomicList.h:25
void Call(InputsT... args) const
size_t Push(CallbackType &&callback)
std::function< void(InputsT...)> CallbackType
This file contains definitions of common data structures used in traffic manager.
Definition Carla.cpp:133
friend bool operator==(size_t lhs, const Item &rhs)
friend bool operator==(const Item &lhs, size_t rhs)
friend bool operator==(const Item &lhs, const Item &rhs)