// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #pragma once #include "td/utils/ChangesProcessor.h" #include "td/utils/logging.h" namespace td { // It is not about handling gaps. // It is about finding mem processed pts. // All checks must be done before. class PtsManager { public: using PtsId = ChangesProcessor<int32>::Id; void init(int32 pts) { db_pts_ = pts; mem_pts_ = pts; state_helper_.clear(); } // 0 if not a checkpoint PtsId add_pts(int32 pts) { CHECK(pts >= 0); if (pts != 0) { mem_pts_ = pts; } return state_helper_.add(pts); } // return db_pts int32 finish(PtsId pts_id) { state_helper_.finish(pts_id, [&](int32 pts) { if (pts != 0) { db_pts_ = pts; } }); return db_pts_; } int32 db_pts() const { return db_pts_; } int32 mem_pts() const { return mem_pts_; } private: int32 db_pts_ = -1; int32 mem_pts_ = -1; ChangesProcessor<int32> state_helper_; }; } // namespace td