| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.//  This source code is licensed under both the GPLv2 (found in the//  COPYING file in the root directory) and Apache 2.0 License//  (found in the LICENSE.Apache file in the root directory).#pragma once#include "rocksdb/env.h"namespace ROCKSDB_NAMESPACE {class MockTimeEnv : public EnvWrapper { public:  explicit MockTimeEnv(Env* base) : EnvWrapper(base) {}  virtual Status GetCurrentTime(int64_t* time) override {    assert(time != nullptr);    assert(current_time_ <=           static_cast<uint64_t>(std::numeric_limits<int64_t>::max()));    *time = static_cast<int64_t>(current_time_);    return Status::OK();  }  virtual uint64_t NowMicros() override {    assert(current_time_ <= std::numeric_limits<uint64_t>::max() / 1000000);    return current_time_ * 1000000;  }  virtual uint64_t NowNanos() override {    assert(current_time_ <= std::numeric_limits<uint64_t>::max() / 1000000000);    return current_time_ * 1000000000;  }  uint64_t RealNowMicros() { return target()->NowMicros(); }  void set_current_time(uint64_t time) {    assert(time >= current_time_);    current_time_ = time;  } private:  std::atomic<uint64_t> current_time_{0};};}  // namespace ROCKSDB_NAMESPACE
 |