Blame view

3rdparty/boost_1_81_0/boost/thread/xtime.hpp 2.33 KB
0b6a182c   Hu Chunming   添加无鉴权注册和注销
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  // Copyright (C) 2001-2003
  // William E. Kempf
  // Copyright (C) 2007-8 Anthony Williams
  //
  //  Distributed under the Boost Software License, Version 1.0. (See accompanying
  //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  
  #ifndef BOOST_XTIME_WEK070601_HPP
  #define BOOST_XTIME_WEK070601_HPP
  
  #include <boost/thread/detail/config.hpp>
  #if defined BOOST_THREAD_USES_DATETIME
  
  #include <boost/cstdint.hpp>
  #include <boost/thread/thread_time.hpp>
  #include <boost/date_time/posix_time/conversion.hpp>
  
  #include <boost/config/abi_prefix.hpp>
  
  namespace boost {
  
  enum xtime_clock_types
  {
      TIME_UTC_=1
  //    TIME_TAI,
  //    TIME_MONOTONIC,
  //    TIME_PROCESS,
  //    TIME_THREAD,
  //    TIME_LOCAL,
  //    TIME_SYNC,
  //    TIME_RESOLUTION
  };
  
  struct xtime
  {
  #if defined(BOOST_NO_INT64_T)
      typedef int_fast32_t xtime_sec_t; //INT_FAST32_MIN <= sec <= INT_FAST32_MAX
  #else
      typedef int_fast64_t xtime_sec_t; //INT_FAST64_MIN <= sec <= INT_FAST64_MAX
  #endif
  
      typedef int_fast32_t xtime_nsec_t; //0 <= xtime.nsec < NANOSECONDS_PER_SECOND
  
      xtime_sec_t sec;
      xtime_nsec_t nsec;
  
      operator system_time() const
      {
          return boost::posix_time::from_time_t(0)+
              boost::posix_time::seconds(static_cast<long>(sec))+
  #ifdef BOOST_DATE_TIME_HAS_NANOSECONDS
              boost::posix_time::nanoseconds(nsec);
  #else
          boost::posix_time::microseconds((nsec+500)/1000);
  #endif
      }
  
  };
  
  inline ::boost::xtime get_xtime(boost::system_time const& abs_time)
  {
      ::boost::xtime res;
      boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0);
  
      res.sec=static_cast< ::boost::xtime::xtime_sec_t>(time_since_epoch.total_seconds());
      res.nsec=static_cast< ::boost::xtime::xtime_nsec_t>(time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second()));
      return res;
  }
  
  inline int xtime_get(struct ::boost::xtime* xtp, int clock_type)
  {
      if (clock_type == TIME_UTC_)
      {
          *xtp=get_xtime(get_system_time());
          return clock_type;
      }
      return 0;
  }
  
  
  inline int xtime_cmp(const ::boost::xtime& xt1, const ::boost::xtime& xt2)
  {
      if (xt1.sec == xt2.sec)
          return (int)(xt1.nsec - xt2.nsec);
      else
          return (xt1.sec > xt2.sec) ? 1 : -1;
  }
  
  } // namespace boost
  
  #include <boost/config/abi_suffix.hpp>
  #endif
  #endif //BOOST_XTIME_WEK070601_HPP