12#include <boost/iterator/transform_iterator.hpp>
36 template <
typename RangeT>
40 template <
typename RangeT>
41 std::vector<ActorId>
GetMissingIds(
const RangeT &range)
const;
47 template <
typename RangeT>
48 std::vector<rpc::Actor>
GetActorsById(
const RangeT &range)
const;
56 std::unordered_map<ActorId, rpc::Actor>
_actors;
64 std::lock_guard<std::mutex> lock(
_mutex);
66 _actors.emplace(
id, std::move(actor));
69 template <
typename RangeT>
73 return std::make_pair(
id, std::move(actor));
75 auto make_iterator = [&make_a_pair](
auto it) {
76 return boost::make_transform_iterator(std::make_move_iterator(it), make_a_pair);
78 std::lock_guard<std::mutex> lock(
_mutex);
79 _actors.insert(make_iterator(std::begin(range)), make_iterator(std::end(range)));
82 template <
typename RangeT>
84 std::vector<ActorId> result;
85 result.reserve(range.size());
86 std::lock_guard<std::mutex> lock(
_mutex);
87 std::copy_if(std::begin(range), std::end(range), std::back_inserter(result), [
this](
auto id) {
94 std::lock_guard<std::mutex> lock(
_mutex);
102 template <
typename RangeT>
104 std::vector<rpc::Actor> result;
105 result.reserve(range.size());
106 std::lock_guard<std::mutex> lock(
_mutex);
107 for (
auto &&
id : range) {
110 result.emplace_back(it->second);
117 std::lock_guard<std::mutex> lock(
_mutex);
这个类用于禁止拷贝构造函数和赋值操作,但允许移动构造函数和赋值操作
保留参与者描述列表,以避免每次都向服务器请求描述。
boost::optional< rpc::Actor > GetActorById(ActorId id) const
检索与 id 匹配的参与者,如果参与者未被缓存,则为空(可选)。
void InsertRange(RangeT range)
插入包含参与者的 范围。
void Insert(rpc::Actor actor)
将参与者插入到列表中。
std::unordered_map< ActorId, rpc::Actor > _actors
std::vector< rpc::Actor > GetActorsById(const RangeT &range) const
检索与 范围内的 ID 匹配的参与者。
std::vector< ActorId > GetMissingIds(const RangeT &range) const
返回 范围内尚未添加到此列表的参与者 ID。
carla::ActorId ActorId
参与者的智能指针类型