timeval.cc 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. *
  3. * Copyright 2015 gRPC authors.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. #include <cstdint>
  19. #include <limits>
  20. #include "grpc/grpc.h"
  21. #include "grpc/support/time.h"
  22. #include "timeval.h"
  23. namespace grpc {
  24. namespace node {
  25. gpr_timespec MillisecondsToTimespec(double millis) {
  26. if (millis == std::numeric_limits<double>::infinity()) {
  27. return gpr_inf_future(GPR_CLOCK_REALTIME);
  28. } else if (millis == -std::numeric_limits<double>::infinity()) {
  29. return gpr_inf_past(GPR_CLOCK_REALTIME);
  30. } else {
  31. return gpr_time_from_micros(static_cast<int64_t>(millis * 1000),
  32. GPR_CLOCK_REALTIME);
  33. }
  34. }
  35. double TimespecToMilliseconds(gpr_timespec timespec) {
  36. timespec = gpr_convert_clock_type(timespec, GPR_CLOCK_REALTIME);
  37. if (gpr_time_cmp(timespec, gpr_inf_future(GPR_CLOCK_REALTIME)) == 0) {
  38. return std::numeric_limits<double>::infinity();
  39. } else if (gpr_time_cmp(timespec, gpr_inf_past(GPR_CLOCK_REALTIME)) == 0) {
  40. return -std::numeric_limits<double>::infinity();
  41. } else {
  42. return (static_cast<double>(timespec.tv_sec) * 1000 +
  43. static_cast<double>(timespec.tv_nsec) / 1000000);
  44. }
  45. }
  46. } // namespace node
  47. } // namespace grpc