blob: 21700810d702c5894d813349af9eda24f292ec08 [file]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_HFT_TASK_SCHEDULER_ADAPTER_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_HFT_TASK_SCHEDULER_ADAPTER_H_
#include <memory>
#include <utility>
#include "absl/functional/any_invocable.h"
#include "absl/time/time.h"
#include "tlbmc/hft/core/scheduler.h"
#include "tlbmc/scheduler/scheduler.h"
namespace milotic_tlbmc {
// Adapts the shared tlbmc TaskScheduler (boost-asio based) to the
// dependency-free milotic_hft::Scheduler seam consumed by the HFT
// subscription manager core. Owns the wrapped scheduler.
class HftTaskSchedulerAdapter : public milotic_hft::Scheduler {
public:
HftTaskSchedulerAdapter()
: task_scheduler_(std::make_unique<TaskScheduler>()) {}
int ScheduleAsync(absl::AnyInvocable<void(absl::AnyInvocable<void()>)> task,
absl::Duration period) override {
return task_scheduler_->ScheduleAsync(std::move(task), period);
}
void Cancel(int task_id) override { task_scheduler_->Cancel(task_id); }
void Stop() override { task_scheduler_->Stop(); }
// Debug-only access to the wrapped scheduler, for stats rendering.
const TaskScheduler& task_scheduler() const { return *task_scheduler_; }
private:
std::unique_ptr<TaskScheduler> task_scheduler_;
};
} // namespace milotic_tlbmc
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_HFT_TASK_SCHEDULER_ADAPTER_H_