PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/react-native/ReactCommon/react/timing

Просмотр файла: primitives.h

/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

#pragma once

#include <chrono>

namespace facebook::react {

class HighResDuration;
class HighResTimeStamp;

/*
 * A class representing a duration of time with high precision.
 *
 * @see __docs__/README.md for more information.
 */
class HighResDuration {
  friend class HighResTimeStamp;
  friend constexpr HighResDuration operator-(
      const HighResTimeStamp& lhs,
      const HighResTimeStamp& rhs);
  friend constexpr HighResTimeStamp operator+(
      const HighResTimeStamp& lhs,
      const HighResDuration& rhs);
  friend constexpr HighResTimeStamp operator-(
      const HighResTimeStamp& lhs,
      const HighResDuration& rhs);

 public:
  constexpr HighResDuration()
      : chronoDuration_(std::chrono::steady_clock::duration()) {}

  static constexpr HighResDuration zero() {
    return HighResDuration(std::chrono::steady_clock::duration::zero());
  }

  static constexpr HighResDuration fromChrono(
      std::chrono::steady_clock::duration chronoDuration) {
    return HighResDuration(chronoDuration);
  }

  static constexpr HighResDuration fromNanoseconds(int64_t units) {
    return HighResDuration(std::chrono::nanoseconds(units));
  }

  static constexpr HighResDuration fromMilliseconds(int64_t units) {
    return HighResDuration(std::chrono::milliseconds(units));
  }

  constexpr int64_t toNanoseconds() const {
    return std::chrono::duration_cast<std::chrono::nanoseconds>(chronoDuration_)
        .count();
  }

  // @see https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
  static constexpr HighResDuration fromDOMHighResTimeStamp(double units) {
    auto nanoseconds = static_cast<int64_t>(units * 1e6);
    return fromNanoseconds(nanoseconds);
  }

  // @see https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
  constexpr double toDOMHighResTimeStamp() const {
    return static_cast<std::chrono::duration<double, std::milli>>(
               chronoDuration_)
        .count();
  }

  constexpr HighResDuration operator+(const HighResDuration& rhs) const {
    return HighResDuration(chronoDuration_ + rhs.chronoDuration_);
  }

  constexpr HighResDuration operator+(
      const std::chrono::steady_clock::duration& rhs) const {
    return HighResDuration(chronoDuration_ + rhs);
  }

  constexpr HighResDuration operator-(const HighResDuration& rhs) const {
    return HighResDuration(chronoDuration_ - rhs.chronoDuration_);
  }

  constexpr HighResDuration operator-(
      const std::chrono::steady_clock::duration& rhs) const {
    return HighResDuration(chronoDuration_ - rhs);
  }

  constexpr HighResDuration& operator+=(const HighResDuration& rhs) {
    chronoDuration_ += rhs.chronoDuration_;
    return *this;
  }

  constexpr HighResDuration& operator+=(
      const std::chrono::steady_clock::duration& rhs) {
    chronoDuration_ += rhs;
    return *this;
  }

  constexpr HighResDuration& operator-=(const HighResDuration& rhs) {
    chronoDuration_ -= rhs.chronoDuration_;
    return *this;
  }

  constexpr HighResDuration& operator-=(
      const std::chrono::steady_clock::duration& rhs) {
    chronoDuration_ -= rhs;
    return *this;
  }

  constexpr bool operator==(const HighResDuration& rhs) const {
    return chronoDuration_ == rhs.chronoDuration_;
  }

  constexpr bool operator==(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ == rhs;
  }

  constexpr bool operator!=(const HighResDuration& rhs) const {
    return chronoDuration_ != rhs.chronoDuration_;
  }

  constexpr bool operator!=(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ != rhs;
  }

  constexpr bool operator<(const HighResDuration& rhs) const {
    return chronoDuration_ < rhs.chronoDuration_;
  }

  constexpr bool operator<(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ < rhs;
  }

  constexpr bool operator<=(const HighResDuration& rhs) const {
    return chronoDuration_ <= rhs.chronoDuration_;
  }

  constexpr bool operator<=(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ <= rhs;
  }

  constexpr bool operator>(const HighResDuration& rhs) const {
    return chronoDuration_ > rhs.chronoDuration_;
  }

  constexpr bool operator>(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ > rhs;
  }

  constexpr bool operator>=(const HighResDuration& rhs) const {
    return chronoDuration_ >= rhs.chronoDuration_;
  }

  constexpr bool operator>=(
      const std::chrono::steady_clock::duration& rhs) const {
    return chronoDuration_ >= rhs;
  }

  constexpr operator std::chrono::steady_clock::duration() const {
    return chronoDuration_;
  }

 private:
  explicit constexpr HighResDuration(
      std::chrono::steady_clock::duration chronoDuration)
      : chronoDuration_(chronoDuration) {}

  std::chrono::steady_clock::duration chronoDuration_;
};

/*
 * A class representing a specific point in time with high precision.
 *
 * @see __docs__/README.md for more information.
 */
class HighResTimeStamp {
  friend constexpr HighResDuration operator-(
      const HighResTimeStamp& lhs,
      const HighResTimeStamp& rhs);
  friend constexpr HighResTimeStamp operator+(
      const HighResTimeStamp& lhs,
      const HighResDuration& rhs);
  friend constexpr HighResTimeStamp operator-(
      const HighResTimeStamp& lhs,
      const HighResDuration& rhs);

 public:
  HighResTimeStamp() noexcept
      : chronoTimePoint_(std::chrono::steady_clock::now()) {}

  static constexpr HighResTimeStamp now() noexcept {
    return HighResTimeStamp(std::chrono::steady_clock::now());
  }

  static constexpr HighResTimeStamp min() noexcept {
    return HighResTimeStamp(std::chrono::steady_clock::time_point::min());
  }

  static constexpr HighResTimeStamp max() noexcept {
    return HighResTimeStamp(std::chrono::steady_clock::time_point::max());
  }

  // @see https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
  static constexpr HighResTimeStamp fromDOMHighResTimeStamp(double units) {
    auto nanoseconds = static_cast<int64_t>(units * 1e6);
    return HighResTimeStamp(std::chrono::steady_clock::time_point(
        std::chrono::nanoseconds(nanoseconds)));
  }

  // @see https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
  constexpr double toDOMHighResTimeStamp() const {
    return HighResDuration(chronoTimePoint_.time_since_epoch())
        .toDOMHighResTimeStamp();
  }

  // This method is expected to be used only when converting time stamps from
  // external systems.
  static constexpr HighResTimeStamp fromChronoSteadyClockTimePoint(
      std::chrono::steady_clock::time_point chronoTimePoint) {
    return HighResTimeStamp(chronoTimePoint);
  }

  // This method is provided for convenience, if you need to convert
  // HighResTimeStamp to some common epoch with time stamps from other sources.
  constexpr std::chrono::steady_clock::time_point toChronoSteadyClockTimePoint()
      const {
    return chronoTimePoint_;
  }

  constexpr bool operator==(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ == rhs.chronoTimePoint_;
  }

  constexpr bool operator!=(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ != rhs.chronoTimePoint_;
  }

  constexpr bool operator<(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ < rhs.chronoTimePoint_;
  }

  constexpr bool operator<=(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ <= rhs.chronoTimePoint_;
  }

  constexpr bool operator>(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ > rhs.chronoTimePoint_;
  }

  constexpr bool operator>=(const HighResTimeStamp& rhs) const {
    return chronoTimePoint_ >= rhs.chronoTimePoint_;
  }

  constexpr HighResTimeStamp& operator+=(const HighResDuration& rhs) {
    chronoTimePoint_ += rhs.chronoDuration_;
    return *this;
  }

  constexpr HighResTimeStamp& operator-=(const HighResDuration& rhs) {
    chronoTimePoint_ -= rhs.chronoDuration_;
    return *this;
  }

 private:
  explicit constexpr HighResTimeStamp(
      std::chrono::steady_clock::time_point chronoTimePoint)
      : chronoTimePoint_(chronoTimePoint) {}

  std::chrono::steady_clock::time_point chronoTimePoint_;
};

inline constexpr HighResDuration operator-(
    const HighResTimeStamp& lhs,
    const HighResTimeStamp& rhs) {
  return HighResDuration(lhs.chronoTimePoint_ - rhs.chronoTimePoint_);
}

inline constexpr HighResTimeStamp operator+(
    const HighResTimeStamp& lhs,
    const HighResDuration& rhs) {
  return HighResTimeStamp(lhs.chronoTimePoint_ + rhs.chronoDuration_);
}

inline constexpr HighResTimeStamp operator-(
    const HighResTimeStamp& lhs,
    const HighResDuration& rhs) {
  return HighResTimeStamp(lhs.chronoTimePoint_ - rhs.chronoDuration_);
}

} // namespace facebook::react

Выполнить команду


Для локальной разработки. Не используйте в интернете!