Program Listing for File Participant.hpp
↰ Return to documentation for file (include/rmf_traffic/schedule/Participant.hpp
)
/*
* Copyright (C) 2020 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef RMF_TRAFFIC__SCHEDULE__PARTICIPANT_HPP
#define RMF_TRAFFIC__SCHEDULE__PARTICIPANT_HPP
#include <rmf_traffic/schedule/ParticipantDescription.hpp>
#include <rmf_traffic/schedule/Writer.hpp>
#include <rmf_traffic/schedule/Rectifier.hpp>
#include <rmf_utils/AssignID.hpp>
#include <unordered_set>
namespace rmf_traffic {
namespace schedule {
//==============================================================================
class Participant
{
public:
using PlanId = Writer::PlanId;
bool set(PlanId plan, std::vector<Route> itinerary);
std::optional<Duration> cumulative_delay(PlanId plan) const;
bool cumulative_delay(
PlanId plan,
Duration delay,
Duration tolerance = Duration(0));
[[deprecated("Use cumulative_delay instead")]]
void delay(Duration delay);
[[deprecated("Use cumulative_delay instead")]]
Duration delay() const;
void reached(PlanId plan, RouteId route, CheckpointId checkpoint);
const std::vector<CheckpointId>& reached() const;
void clear();
const Itinerary& itinerary() const;
//
// TODO(MXG): This function needs to be unit tested.
ItineraryVersion version() const;
ProgressVersion progress_version() const;
const ParticipantDescription& description() const;
ParticipantId id() const;
using AssignIDPtr = std::shared_ptr<const rmf_utils::AssignID<PlanId>>;
const AssignIDPtr& plan_id_assigner() const;
PlanId assign_plan_id() const;
PlanId current_plan_id() const;
void change_profile(Profile new_profile);
// This class supports moving but not copying
Participant(Participant&&) = default;
Participant& operator=(Participant&&) = default;
~Participant() = default;
class Implementation;
class Debug;
private:
// The constructor for this class is private. It should only be constructed
// using make_participant
Participant();
rmf_utils::unique_impl_ptr<Implementation> _pimpl;
};
//==============================================================================
Participant make_participant(
ParticipantDescription description,
std::shared_ptr<Writer> writer,
std::shared_ptr<RectificationRequesterFactory> rectifier_factory = nullptr);
} // namespace schedule
} // namespace rmf_traffic
#endif // RMF_TRAFFIC__SCHEDULE__PARTICIPANT_HPP