1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //
- //
- // Copyright 2015 gRPC authors.
- //
- // 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.
- //
- //
- #ifndef GRPCPP_SUPPORT_TIME_H
- #define GRPCPP_SUPPORT_TIME_H
- #include <chrono>
- #include <grpc/impl/grpc_types.h>
- #include <grpcpp/support/config.h>
- namespace grpc {
- /// If you are trying to use CompletionQueue::AsyncNext with a time class that
- /// isn't either gpr_timespec or std::chrono::system_clock::time_point, you
- /// will most likely be looking at this comment as your compiler will have
- /// fired an error below. In order to fix this issue, you have two potential
- /// solutions:
- /// 1. Use gpr_timespec or std::chrono::system_clock::time_point instead
- /// 2. Specialize the TimePoint class with whichever time class that you
- /// want to use here. See below for two examples of how to do this.
- ///
- template <typename T>
- class TimePoint {
- public:
- // If you see the error with methods below, you may need either
- // i) using the existing types having a conversion class such as
- // gpr_timespec and std::chrono::system_clock::time_point or
- // ii) writing a new TimePoint<YourType> to address your case.
- TimePoint(const T& /*time*/) = delete;
- gpr_timespec raw_time() = delete;
- };
- template <>
- class TimePoint<gpr_timespec> {
- public:
- // NOLINTNEXTLINE(google-explicit-constructor)
- TimePoint(const gpr_timespec& time) : time_(time) {}
- gpr_timespec raw_time() { return time_; }
- private:
- gpr_timespec time_;
- };
- } // namespace grpc
- namespace grpc {
- // from and to should be absolute time.
- void Timepoint2Timespec(const std::chrono::system_clock::time_point& from,
- gpr_timespec* to);
- void TimepointHR2Timespec(
- const std::chrono::high_resolution_clock::time_point& from,
- gpr_timespec* to);
- std::chrono::system_clock::time_point Timespec2Timepoint(gpr_timespec t);
- template <>
- class TimePoint<std::chrono::system_clock::time_point> {
- public:
- // NOLINTNEXTLINE(google-explicit-constructor)
- TimePoint(const std::chrono::system_clock::time_point& time) {
- Timepoint2Timespec(time, &time_);
- }
- gpr_timespec raw_time() const { return time_; }
- private:
- gpr_timespec time_;
- };
- } // namespace grpc
- #endif // GRPCPP_SUPPORT_TIME_H
|