~ubuntu-branches/ubuntu/wily/grpc/wily

« back to all changes in this revision

Viewing changes to src/cpp/util/time.cc

  • Committer: Package Import Robot
  • Author(s): Andrew Pollock
  • Date: 2015-05-07 13:28:11 UTC
  • Revision ID: package-import@ubuntu.com-20150507132811-ybm4hfq73tnvvd2e
Tags: upstream-0.10.0
ImportĀ upstreamĀ versionĀ 0.10.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *
 
3
 * Copyright 2015, Google Inc.
 
4
 * All rights reserved.
 
5
 *
 
6
 * Redistribution and use in source and binary forms, with or without
 
7
 * modification, are permitted provided that the following conditions are
 
8
 * met:
 
9
 *
 
10
 *     * Redistributions of source code must retain the above copyright
 
11
 * notice, this list of conditions and the following disclaimer.
 
12
 *     * Redistributions in binary form must reproduce the above
 
13
 * copyright notice, this list of conditions and the following disclaimer
 
14
 * in the documentation and/or other materials provided with the
 
15
 * distribution.
 
16
 *     * Neither the name of Google Inc. nor the names of its
 
17
 * contributors may be used to endorse or promote products derived from
 
18
 * this software without specific prior written permission.
 
19
 *
 
20
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
21
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
22
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
23
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
24
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
25
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
26
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
27
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
28
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
29
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
30
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
31
 *
 
32
 */
 
33
 
 
34
#include <grpc++/config.h>
 
35
 
 
36
#ifndef GRPC_CXX0X_NO_CHRONO
 
37
 
 
38
#include <grpc/support/time.h>
 
39
#include <grpc++/time.h>
 
40
 
 
41
using std::chrono::duration_cast;
 
42
using std::chrono::nanoseconds;
 
43
using std::chrono::seconds;
 
44
using std::chrono::system_clock;
 
45
using std::chrono::high_resolution_clock;
 
46
 
 
47
namespace grpc {
 
48
 
 
49
void Timepoint2Timespec(const system_clock::time_point& from,
 
50
                        gpr_timespec* to) {
 
51
  system_clock::duration deadline = from.time_since_epoch();
 
52
  seconds secs = duration_cast<seconds>(deadline);
 
53
  if (from == system_clock::time_point::max() ||
 
54
      secs.count() >= gpr_inf_future.tv_sec || secs.count() < 0) {
 
55
    *to = gpr_inf_future;
 
56
    return;
 
57
  }
 
58
  nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
 
59
  to->tv_sec = secs.count();
 
60
  to->tv_nsec = nsecs.count();
 
61
}
 
62
 
 
63
void TimepointHR2Timespec(const high_resolution_clock::time_point& from,
 
64
                          gpr_timespec* to) {
 
65
  high_resolution_clock::duration deadline = from.time_since_epoch();
 
66
  seconds secs = duration_cast<seconds>(deadline);
 
67
  if (from == high_resolution_clock::time_point::max() ||
 
68
      secs.count() >= gpr_inf_future.tv_sec || secs.count() < 0) {
 
69
    *to = gpr_inf_future;
 
70
    return;
 
71
  }
 
72
  nanoseconds nsecs = duration_cast<nanoseconds>(deadline - secs);
 
73
  to->tv_sec = secs.count();
 
74
  to->tv_nsec = nsecs.count();
 
75
}
 
76
 
 
77
system_clock::time_point Timespec2Timepoint(gpr_timespec t) {
 
78
  if (gpr_time_cmp(t, gpr_inf_future) == 0) {
 
79
    return system_clock::time_point::max();
 
80
  }
 
81
  system_clock::time_point tp;
 
82
  tp += duration_cast<system_clock::time_point::duration>(seconds(t.tv_sec));
 
83
  tp +=
 
84
      duration_cast<system_clock::time_point::duration>(nanoseconds(t.tv_nsec));
 
85
  return tp;
 
86
}
 
87
 
 
88
}  // namespace grpc
 
89
 
 
90
#endif  // !GRPC_CXX0X_NO_CHRONO