folly/folly/Chrono.h

/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * 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.
 */

#pragma once

#include <chrono>
#include <ctime>
#include <stdexcept>
#include <type_traits>

#include <folly/Portability.h>
#include <folly/lang/Exception.h>
#include <folly/portability/Time.h>

namespace folly {
namespace chrono {

/* using override */ abs;
/* using override */ ceil;
/* using override */ floor;
/* using override */ round;

//  steady_clock_spec
//
//  All clocks with this spec share epoch and tick rate.
struct steady_clock_spec {};

//  system_clock_spec
//
//  All clocks with this spec share epoch and tick rate.
struct system_clock_spec {};

//  clock_traits
//
//  Detects and reexports per-clock traits.
//
//  Specializeable for clocks for which trait detection fails..
template <typename Clock>
struct clock_traits {};

template <>
struct clock_traits<std::chrono::steady_clock> {};
template <>
struct clock_traits<std::chrono::system_clock> {};

struct coarse_steady_clock {};

struct coarse_system_clock {};

} // namespace chrono
} // namespace folly