CARLA
 
载入中...
搜索中...
未找到
AtomicList.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
10#include "carla/NonCopyable.h"
11
12#include <algorithm>
13#include <mutex>
14#include <vector>
15
16namespace carla {
17namespace client {
18namespace detail {
19
20 /// Holds an atomic pointer to a list.
21 ///
22 /// @warning Only Load method is atomic, modifications to the list are locked
23 /// with a mutex.
24 template <typename T>
25 class AtomicList : private NonCopyable {
26 using ListT = std::vector<T>;
27 public:
28
29 AtomicList() : _list(std::make_shared<ListT>()) {}
30
31 template <typename ValueT>
32 void Push(ValueT &&value) {
33 std::lock_guard<std::mutex> lock(_mutex);
34 auto new_list = std::make_shared<ListT>(*Load());
35 new_list->emplace_back(std::forward<ValueT>(value));
36 _list = new_list;
37 }
38
39 void DeleteByIndex(size_t index) {
40 std::lock_guard<std::mutex> lock(_mutex);
41 auto new_list = std::make_shared<ListT>(*Load());
42 auto begin = new_list->begin();
43 std::advance(begin, index);
44 new_list->erase(begin);
45 _list = new_list;
46 }
47
48 template <typename ValueT>
49 void DeleteByValue(const ValueT &value) {
50 std::lock_guard<std::mutex> lock(_mutex);
51 auto new_list = std::make_shared<ListT>(*Load());
52 new_list->erase(std::remove(new_list->begin(), new_list->end(), value), new_list->end());
53 _list = new_list;
54 }
55
56 void Clear() {
57 std::lock_guard<std::mutex> lock(_mutex);
58 _list = std::make_shared<ListT>();
59 }
60
61 /// Returns a pointer to the list.
62 std::shared_ptr<const ListT> Load() const {
63 return _list.load();
64 }
65
66 private:
67
68 std::mutex _mutex;
69
71 };
72
73} // namespace detail
74} // namespace client
75} // namespace carla
A very simple atomic shared ptr with release-acquire memory order.
std::shared_ptr< T > load() const noexcept
Inherit (privately) to suppress copy/move construction and assignment.
Holds an atomic pointer to a list.
Definition AtomicList.h:25
void DeleteByValue(const ValueT &value)
Definition AtomicList.h:49
void Push(ValueT &&value)
Definition AtomicList.h:32
void DeleteByIndex(size_t index)
Definition AtomicList.h:39
std::shared_ptr< const ListT > Load() const
Returns a pointer to the list.
Definition AtomicList.h:62
AtomicSharedPtr< const ListT > _list
Definition AtomicList.h:70
This file contains definitions of common data structures used in traffic manager.
Definition Carla.cpp:133