|
Boost-Commit : |
From: bdawes_at_[hidden]
Date: 2007-10-08 13:53:46
Author: bemandawes
Date: 2007-10-08 13:53:46 EDT (Mon, 08 Oct 2007)
New Revision: 39804
URL: http://svn.boost.org/trac/boost/changeset/39804
Log:
thread10 - merge of updates from 10/3++
Text files modified:
sandbox/committee/LWG/thread_library.html | 1068 +++++++++++++++++++--------------------
1 files changed, 514 insertions(+), 554 deletions(-)
Modified: sandbox/committee/LWG/thread_library.html
==============================================================================
--- sandbox/committee/LWG/thread_library.html (original)
+++ sandbox/committee/LWG/thread_library.html 2007-10-08 13:53:46 EDT (Mon, 08 Oct 2007)
@@ -2,7 +2,7 @@
<html lang="en"><head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>thread</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>Tread Working Draft 10</title>
<style>
p {text-align:justify}
@@ -20,7 +20,7 @@
.comment { color: #800000; }
span.underline
{
- text-decoration: underline;
+// text-decoration: underline;
}
span.strikethrough
@@ -46,9 +46,10 @@
<br/>
<a href="mailto:hinnant_at_[hidden]">Howard E. Hinnant</a>,
<a href="mailto:jeff_at_[hidden]">Jeff Garland</a>,
-<a href="mailto:public_at_[hidden]">Alisdair Meredith</a>
+<a href="mailto:public_at_[hidden]">Alisdair Meredith</a>,
+<a href="mailto:chris_at_[hidden]">Chris Kohlhoff</a>
<br/>
-2007-10-03
+2007-10-04
</address>
<hr/>
<h1 align="center">Multi-threading Library for Standard C++</h1>
@@ -57,29 +58,6 @@
<ul>
<li>Introduction</li>
-<del class="diff"><li>Thread
-</li>
-<li>Mutex
- <ul>
- <li>Mutex Rationale and Examples
- <ul>
- <li>Mutex concepts</li>
- <li>Time Issues</li>
- </ul>
- </li>
- <li>Lock Rationale and Examples</li>
- <li>Generic Locking Algorithm Rationale and Examples</li>
- </ul>
-</li>
-<li>Condition Variables
- <ul>
- <li>Condition Rationale and Examples
- <ul>
- <li>Condition Variable Flexibility</li>
- </ul>
- </li>
- </ul>
-</li></del>
<li>Proposed Wording<ul>
<li>Threads Proposed Wording</li>
<li>Mutexes and Locks Proposed Wording</li>
@@ -205,8 +183,8 @@
thread::id get_id();
void yield();
- template <class ElapsedTime>
- void sleep(const ElapsedTime& rel_t);
+ template <class TimeDuration>
+ void sleep(const TimeDuration& rel_t);
} // this_thread
@@ -667,8 +645,8 @@
thread::id get_id();
void yield();
- template <class ElapsedTime>
- void sleep(const ElapsedTime& rel_t);
+ template <class TimeDuration>
+ void sleep(const TimeDuration& rel_t);
} // this_thread
</pre></blockquote>
@@ -698,13 +676,13 @@
</blockquote>
</blockquote>
-<blockquote><pre>template <class ElapsedTime>
- void sleep(const ElapsedTime& rel_t);
+<blockquote><pre>template <class TimeDuration>
+ void sleep(const TimeDuration& rel_t);
</pre>
<blockquote>
<p>
-<i>Requires:</i> <tt>ElapsedTime</tt> shall be explicitly convertible to <tt>nanoseconds</tt>.
+<i>Requires:</i> <tt>TimeDuration</tt> shall be explicitly convertible to <tt>nanoseconds</tt>.
</p>
<p>
<i>Effects:</i> The current thread of execution blocks for at least the amount of time specified.
@@ -806,7 +784,6 @@
<blockquote><pre>namespace std {
-struct static_mutex;
struct mutex;
struct recursive_mutex;
struct timed_mutex;
@@ -822,7 +799,7 @@
class lock_error;
-template <class Mutex> class scoped_lock;
+template <class Mutex> class lock_guard;
template <class Mutex> class unique_lock;
template <class Mutex> void swap(unique_lock<Mutex>& x, unique_lock<Mutex>& y);
@@ -838,23 +815,24 @@
<h3>Mutex concepts</h3>
<p>
-Objects of the mutex types enforce mutual exclusion between threads of execution
-by limiting ownership of a mutex object to a single thread of execution. A
-thread of execution gets ownership of a mutex object by calling <tt>lock()</tt> and
-relinquishes ownership by calling <tt>unlock()</tt>. Ownership can not
-be transferred from one thread of execution to another. The same
-thread of execution that calls
-<tt>lock()</tt> for a mutex object must call <tt>unlock() f</tt>or the object. Mutexes can be either recursive
-or non-recursive. The syntax is the same for both recursive and non-recursive
-mutexes, but the semantics for the member functions differs as described below.
+Mutex objects provide synchronization operations to avoid data races. A
+mutex object supports mutual exclusion between threads of execution by
+limiting its ownership to a single thread of execution. A thread of
+execution obtains ownership of a mutex object by calling <tt>lock()</tt>
+and relinquishes ownership by calling <tt>unlock()</tt>. The
+thread of execution that calls <tt>lock()</tt> for a mutex object shall
+call <tt>unlock()</tt>. Mutexes may be either recursive or
+non-recursive. The syntax is the same for both recursive and
+non-recursive mutexes, but the semantics differ for the member functions
+as described below.
</p>
<p>
-Each mutex type shall be default constructible and destructible. If the default construction
-of the Mutex type fails, an exception of type <tt>system_error</tt> shall be thrown. The destructor
-of the Mutex type shall not throw an exception.
-Mutex types are neither copyable
-nor movable. Each mutex type shall have the following member functions:
+A mutex type shall be <tt>DefaultConstructible</tt> and <tt>Destructible</tt>. If initialization
+of a mutex type fails, an exception of type <tt>system_error</tt> shall be thrown. The destructor
+of a mutex type shall not exit by an exception.
+A mutex type is neither copyable
+nor movable. A mutex type shall have the following member functions:
</p>
<blockquote>
@@ -872,8 +850,7 @@
<i>Throws:</i> <tt>system_error</tt>.
</p>
<p>
-<i>Thread safety:</i> Calls from different threads of execution to <tt>lock</tt>, <tt>try_lock</tt>,
-and <tt>unlock</tt> functions on an object of a mutex type shall not result in data races or deadlocks.
+<i>Thread safety:</i> This is an acquire operation.
</p>
</blockquote>
</blockquote>
@@ -893,8 +870,7 @@
<i>Returns:</i> <tt>true</tt> if ownership was obtained, otherwise <tt>false</tt>.
</p>
<p>
-<i>Thread safety:</i> Calls from different threads of execution to <tt>lock</tt>, <tt>try_lock</tt>,
-and <tt>unlock</tt> functions on an object of a mutex type shall not result in data races or deadlocks.
+<i>Thread safety:</i> This is an acquire operation if <tt>try_lock</tt> returns <tt>true</tt>.
</p>
<p>
<i>Throws:</i> Nothing.
@@ -915,8 +891,7 @@
(via either <tt>lock()</tt> or <tt>try_lock()</tt> or by any other locking function) before ownership is released.
</p>
<p>
-<i>Thread safety:</i> Calls from different threads of execution to <tt>lock</tt>,
-and <tt>try_lock</tt> functions on an object of a mutex type shall not result in data races or deadlocks.
+<i>Thread safety:</i> This is a release operation.
</p>
<p>
<i>Throws:</i> Nothing.
@@ -929,14 +904,14 @@
which can be passed to operating system specific interfaces, then there shall be a nested
implementation-defined typedef <tt>native_handle_type</tt> that is an alias to this native type if it is copyable,
otherwise if the native type is not copyable, is a pointer to this native type.
-The implementation shall document whether or not the <tt>native_handle_type</tt>
+The implementation shall document whether the <tt>native_handle_type</tt>
typedef is present.
</p>
<p>
If the nested typedef <tt>native_handle_type</tt> exists, then there
-also shall be a member function <tt>native_handle()</tt> which returns a handle
-to this internal data structure. <i>[Example:</i>
+also shall be a member function <tt>native_handle()</tt> which returns <tt>
+native_handle_type</tt>. <i>[Example:</i>
</p>
<blockquote><pre>class mutex
@@ -966,45 +941,6 @@
or its environment.
</p>
-<h4>Class static_mutex</h4>
-
-<blockquote class="note">
-<p>
-The class <tt>static_mutex</tt> is based on a new language feature <tt>constexpr</tt>
-which is not yet in the working draft, nor do we have field experience with it. Should
-this language feature fail to deliver the static initialization behavior desired, we
-recommend removing <tt>static_mutex</tt> from the working paper.
-</p>
-</blockquote>
-
-<blockquote><pre>namespace std {
-
-struct static_mutex
-{
-public:
- constexpr static_mutex();
- ~static_mutex();
-
- static_mutex(const static_mutex&) = delete;
- static_mutex& operator=(const static_mutex&) = delete;
-
- void lock();
- bool try_lock();
- void unlock();
-
- typedef unspecified native_handle_type; // conditionally present. example: pthread_mutex_t*
- native_handle_type native_handle(); // conditionally present
-};
-
-} // std
-</pre></blockquote>
-
-<p>
-The class <code>static_mutex</code> is a non-recursive mutex. It shall be a standard-layout type ([?]),
-and does not require dynamic initialization. The default constructor,
-if dynamically initialized, shall not throw an exception.
-</p>
-
<h4>Class mutex</h4>
<blockquote><pre>namespace std {
@@ -1071,13 +1007,14 @@
</p>
<blockquote>
-<pre>template <class ElapsedTime>
- bool timed_lock(const ElapsedTime& rel_time);
+<pre>template <class TimeDuration>
+ bool timed_lock(const TimeDuration& rel_time);
</pre>
<blockquote>
<p>
<i>Precondition:</i> For non-recursive mutexes the current thread of execution shall not own the mutex.
-The type <tt>ElapsedTime</tt> shall be explicitly convertible to <tt>nanoseconds</tt>.
+The type <tt>TimeDuration</tt> provides resolution information (ticks_per_second) that allows conversion
+of the specified value into the native time resolution.
</p>
<p>
<i>Effects:</i> The function attempts to obtain ownership of the mutex within the specified time.
@@ -1089,8 +1026,7 @@
<i>Returns:</i> <tt>true</tt> if ownership was obtained, otherwise <tt>false</tt>.
</p>
<p>
-<i>Thread safety:</i> Calls to this member function from different
-threads of execution shall not result in data races or deadlocks.
+<i>Thread safety:</i> This is a synchronization operation.
</p>
<p>
<i>Throws:</i> Nothing.
@@ -1113,8 +1049,8 @@
void lock();
bool try_lock();
- template <class ElapsedTime>
- bool timed_lock(const ElapsedTime& rel_time);
+ template <class TimeDuration>
+ bool timed_lock(const TimeDuration& rel_time);
void unlock();
typedef unspecified native_handle_type; // conditionally present. example: pthread_mutex_t*
@@ -1144,8 +1080,8 @@
void lock();
bool try_lock();
- template <class ElapsedTime>
- bool timed_lock(const ElapsedTime& rel_time);
+ template <class TimeDuration>
+ bool timed_lock(const TimeDuration& rel_time);
void unlock();
typedef unspecified native_handle_type; // conditionally present. example: pthread_mutex_t*
@@ -1197,44 +1133,42 @@
};
</pre></blockquote>
-<h4>Class scoped_lock</h4>
+<h4>Class lock_guard</h4>
<blockquote><pre>namespace std {
template <class Mutex>
-class scoped_lock
+class lock_guard
{
public:
typedef Mutex mutex_type;
- explicit scoped_lock(mutex_type& m);
- scoped_lock(mutex_type& m, adopt_lock_t);
- ~scoped_lock();
+ explicit lock_guard(mutex_type& m);
+ lock_guard(mutex_type& m, adopt_lock_t);
+ ~lock_guard();
- scoped_lock(scoped_lock const&) = delete;
- scoped_lock& operator=(scoped_lock const&) = delete;
-
- constexpr bool owns() const; <ins>Remove?</ins>
+ lock_guard(lock_guard const&) = delete;
+ lock_guard& operator=(lock_guard const&) = delete;
};
} // std
</pre></blockquote>
<p>
-<tt>scoped_lock</tt> is used to control the ownership of a mutex within a single scope.
-An invariant of the <tt>scoped_lock</tt> object is that it maintains the ownership of the
-mutex throughout the <tt>scoped_lock</tt>'s lifetime. Mutex ownership can not be deferred
-or transferred away from the <tt>scoped_lock</tt>.
+<tt>lock_guard</tt> is used to control the ownership of a mutex within a single scope.
+An invariant of the <tt>lock_guard</tt> object is that it maintains the ownership of the
+mutex throughout the <tt>lock_guard</tt>'s lifetime. Mutex ownership can not be deferred
+or transferred away from the <tt>lock_guard</tt>.
</p>
<blockquote>
-<pre>explicit scoped_lock(mutex_type& m);
+<pre>explicit lock_guard(mutex_type& m);
</pre>
<blockquote>
<p>
<i>Precondition:</i> If <tt>mutex_type</tt> is not a recursive mutex, the current thread of execution
does not own the mutex. The lifetime of <tt><i>m</i></tt> is greater than the lifetime
-of the <code>scoped_lock</code> object.
+of the <code>lock_guard</code> object.
</p>
<p>
<i>Effects:</i> Stores a reference to <tt><i>m</i></tt> and calls <tt><i>m</i>.lock()</tt>.
@@ -1243,13 +1177,13 @@
</blockquote>
<blockquote>
-<pre>scoped_lock(mutex_type& m, adopt_lock_t);
+<pre>lock_guard(mutex_type& m, adopt_lock_t);
</pre>
<blockquote>
<p>
<i>Precondition:</i> The current thread of execution has ownership of the mutex <tt><i>m</i></tt>.
The lifetime of <tt><i>m</i></tt> is greater than the lifetime of the <code>
-scoped_lock</code> object.
+lock_guard</code> object.
</p>
<p>
<i>Effects:</i> Stores a reference to <tt><i>m</i></tt> and performs no other operation on it.
@@ -1258,7 +1192,7 @@
</blockquote>
<blockquote>
-<pre>~scoped_lock();
+<pre>~lock_guard();
</pre>
<blockquote>
<p>
@@ -1270,20 +1204,6 @@
</blockquote>
</blockquote>
-
-<blockquote>
-<pre>constexpr bool owns() const;
-</pre>
-<blockquote>
-<p>
-<i>Returns:</i> <tt>true</tt>.
-</p>
-<p>
-<i>Throws:</i> Nothing.
-</p>
-</blockquote>
-</blockquote>
-
<h4>Class unique_lock</h4>
<blockquote><pre>namespace std {
@@ -1309,11 +1229,14 @@
void lock();
bool try_lock();
- template <class ElapsedTime>
- bool timed_lock(const ElapsedTime& rel_t);
+
+ template <class TimeDuration>
+ bool timed_lock(const TimeDuration& rel_t);
+ bool timed_lock(const system_time& abs_time);
+
void unlock();
- bool owns() const;
+ bool owns_lock() const;
operator unspecified-bool-type () const;
mutex_type* mutex() const;
@@ -1346,7 +1269,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == 0
-owns() == false
+owns_lock() == false
</pre></blockquote>
</blockquote>
</blockquote>
@@ -1367,7 +1290,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == &m
-owns() == true
+owns_lock() == true
</pre></blockquote>
</blockquote>
</blockquote>
@@ -1389,7 +1312,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == &m
-owns() == false
+owns_lock() == false
</pre></blockquote>
</blockquote>
</blockquote>
@@ -1411,7 +1334,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == &m
-owns() == <i>The result of the call to</i> <i>m</i>.try_lock()
+owns_lock() == <i>The result of the call to</i> <i>m</i>.try_lock()
</pre></blockquote>
</blockquote>
</blockquote>
@@ -1432,7 +1355,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == &m
-owns() == true
+owns_lock() == true
</pre></blockquote>
</blockquote>
</blockquote>
@@ -1442,7 +1365,7 @@
</pre>
<blockquote>
<p>
-<i>Effects:</i> If <tt>owns()</tt> calls <tt>unlock()</tt> on the referenced mutex.
+<i>Effects:</i> If <tt>owns_lock()</tt> calls <tt>unlock()</tt> on the referenced mutex.
Otherwise there are no effects.
</p>
<p>
@@ -1462,9 +1385,9 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == <i>The value of</i> u.mutex() <i>prior to the construction</i>.
-owns() == <i>The value of</i> u.owns() <i>prior to the construction</i>.
+owns_lock() == <i>The value of</i> u.owns_lock() <i>prior to the construction</i>.
u.mutex() == 0
-u.owns() == false
+u.owns_lock() == false
</pre></blockquote>
<p>
<i>Throws:</i> Nothing.
@@ -1477,16 +1400,16 @@
</pre>
<blockquote>
<p>
-<i>Effects:</i> If <tt>owns()</tt> calls <tt>unlock()</tt>, and then
+<i>Effects:</i> If <tt>owns_lock()</tt> calls <tt>unlock()</tt>, and then
transfers mutex ownership (if any) from <tt>u</tt> to <tt>this</tt>.
</p>
<p>
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == <i>The value of</i> u.mutex() <i>prior to the construction</i>.
-owns() == <i>The value of</i> u.owns() <i>prior to the construction</i>.
+owns_lock() == <i>The value of</i> u.owns_lock() <i>prior to the construction</i>.
u.mutex() == 0
-u.owns() == false
+u.owns_lock() == false
</pre></blockquote>
<p>
<i>Throws:</i> Nothing.
@@ -1509,10 +1432,10 @@
<i>Effects:</i> Calls <tt>lock()</tt> on the referenced mutex.
</p>
<p>
-<i>Postcondition:</i> <tt>owns() == true</tt>.
+<i>Postcondition:</i> <tt>owns_lock() == true</tt>.
</p>
<p>
-<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns()</tt> is <tt>true</tt>.</p>
+<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns_lock()</tt> is <tt>true</tt>.</p>
</blockquote>
</blockquote>
@@ -1527,30 +1450,32 @@
<i>Returns:</i> The result of the call to <tt>try_lock()</tt> on the referenced mutex.
</p>
<p>
-<i>Postcondition:</i> <tt>owns() == </tt>The result of the call to <tt>try_lock()</tt> on the referenced mutex.
+<i>Postcondition:</i> <tt>owns_lock() == </tt>The result of the call to <tt>try_lock()</tt> on the referenced mutex.
</p>
<p>
-<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns()</tt> is <tt>true</tt>.<tt> </tt>
+<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns_lock()</tt> is <tt>true</tt>.<tt> </tt>
</p>
</blockquote>
</blockquote>
<blockquote>
-<pre>template <class ElapsedTime>
- bool timed_lock(const ElapsedTime& rel_t);
+<pre>template <class TimeDuration>
+ bool timed_lock(const TimeDuration& rel_t);
</pre>
<blockquote>
<p>
-<i>Effects:</i> Calls <tt>timed_lock(rel_t)</tt> on the referenced mutex.
+<i>Effects:</i> Calls <tt>timed_lock(rel_t)</tt> on the referenced mutex.
+ If the resolution of TimeDuration is greater than the native
+ resolution the time is rounded up to the nearest native resolution.
</p>
<p>
<i>Returns:</i> The result of the call to <tt>timed_lock(rel_t)</tt> on the referenced mutex.
</p>
<p>
-<i>Postcondition:</i> <tt>owns() == </tt>The result of the call to <tt>timed_lock(rel_t)</tt> on the referenced mutex.
+<i>Postcondition:</i> <tt>owns_lock() == </tt>The result of the call to <tt>timed_lock(rel_t)</tt> on the referenced mutex.
</p>
<p>
-<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns()</tt> is <tt>true</tt>.</p>
+<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns_lock()</tt> is <tt>true</tt>.</p>
</blockquote>
</blockquote>
@@ -1562,16 +1487,16 @@
<i>Effects:</i> Calls <tt>void unlock()</tt> on the referenced mutex.
</p>
<p>
-<i>Postcondition:</i> <tt>owns() == false</tt>.
+<i>Postcondition:</i> <tt>owns_lock() == false</tt>.
</p>
<p>
-<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns()</tt> is <tt>false</tt>.
+<i>Throws:</i> <tt>lock_error</tt>, if on entry <tt>owns_lock()</tt> is <tt>false</tt>.
</p>
</blockquote>
</blockquote>
<blockquote>
-<pre>bool owns() const;
+<pre>bool owns_lock() const;
</pre>
<blockquote>
<p>
@@ -1588,7 +1513,7 @@
</pre>
<blockquote>
<p>
-<i>Returns:</i> Non-null if <tt>owns()</tt> would return <tt>true</tt>, else returns null.
+<i>Returns:</i> Non-null if <tt>owns_lock()</tt> would return <tt>true</tt>, else returns null.
</p>
<p>
<i>Throws:</i> Nothing.
@@ -1633,7 +1558,7 @@
<i>Postcondition:</i>
</p>
<blockquote><pre>mutex() == 0
-owns() == false
+owns_lock() == false
</pre></blockquote>
<p>
<i>Throws:</i> Nothing.
@@ -1706,74 +1631,78 @@
<h3><a name="ConditionVariablesWording">Condition variables</a></h3>
-<b><<span class="remove">cond_var</span><span class="insert">condition_variable</span>> synopsis</b>
+<b><condition_variable> synopsis</b>
<blockquote><pre>namespace std {
-class <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>;
-class <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>;
+class condition_variable;
+class condition_variable_any;
} // std
</pre></blockquote>
-<h4>Class <span class="remove">cond_var</span><span
- class="insert">condition_variable</span></h4>
+<h4>Class condition_variable</h4>
<p>
-An object of class <tt><span class="remove">cond_var</span><span
- class="insert">condition_variable</span></tt> is a synchronization primitive
+An object of class <tt>condition_variable</tt> is a synchronization primitive
used to cause a thread of execution to wait until notified by some other
thread of execution that some condition is met, or a UTC[(?)] time is reached.
</p>
+<p>
+If and only if the condition variable type is internally represented by an object
+which can be passed to operating system specific interfaces, then there shall be a
+implementation-defined member typedef <tt>native_handle_type</tt> that is an alias
+to this native type, if it is copyable, or if the native type is not copyable,
+a pointer to this native type. The implementation shall document whether the
+<tt>native_handle_type</tt> member typedef is present.
+</p>
+
+<p>
+If the nested typedef <tt>native_handle_type</tt> exists, then there
+also shall be a member function <tt>native_handle()</tt> which returns the
+underlying representation.
+</p>
+
<blockquote><pre>namespace std {
-class <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>
+class condition_variable
{
public:
- <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>();
- ~<span class="remove">cond_var</span><span
- class="insert">condition_variable</span>();
-
- <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>(const <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>&) = delete;
- <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>& operator=(const <span class="remove">cond_var</span><span
- class="insert">condition_variable</span>&) = delete;
+ typedef <i>implementation-defined</i> native_handle_type;
+
+ condition_variable();
+ ~condition_variable();
+
+ condition_variable(const condition_variable&) = delete;
+ condition_variable& operator=(const condition_variable&) = delete;
void notify_one();
void notify_all();
void wait(unique_lock<mutex>& lock);
template <class Predicate>
void wait(unique_lock<mutex>& lock, Predicate pred);
- bool timed_wait(unique_lock<mutex>& lock, const utc_time& abs_time);
+ bool timed_wait(unique_lock<mutex>& lock, const system_time& abs_time);
template <class Predicate>
- bool timed_wait(unique_lock<mutex>& lock, const utc_time& abs_time, Predicate pred);
+ bool timed_wait(unique_lock<mutex>& lock, const system_time& abs_time, Predicate pred);
+ native_handle_type native_handle();
};
} // std
</pre></blockquote>
<blockquote>
-<pre><span class="remove">cond_var</span><span
- class="insert">condition_variable</span>();
+<pre>condition_variable();
</pre>
<blockquote>
<p>
-<i>Effects:</i> Constructs an object of class <tt><span class="remove">cond_var</span><span
- class="insert">condition_variable</span></tt>.
+<i>Effects:</i> Constructs an object of class <tt>condition_variable</tt>.
</p>
</blockquote>
</blockquote>
<blockquote>
-<pre>~<span class="remove">cond_var</span><span
- class="insert">condition_variable</span>();
+<pre>~condition_variable();
</pre>
<blockquote>
<p>
@@ -1791,12 +1720,11 @@
<blockquote>
<p>
<i>Effects:</i> If any threads of execution are blocked waiting for <code>*this</code>,
-unblocks at least one those threads<span class="insert"> of execution</span>.</p>
+unblocks at least one those threads of execution.</p>
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -1808,13 +1736,12 @@
</pre>
<blockquote>
<p>
-<i>Effects:</i> Unblock all threads<span class="insert"> of execution</span> that are blocked waiting for <code>*this</code>.
+<i>Effects:</i> Unblock all threads of execution that are blocked waiting for <code>*this</code>.
</p>
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -1827,19 +1754,15 @@
<blockquote>
<p>
<i>Precondition:</i> <tt>lock</tt> is locked by the current thread of execution. No
-other thread of execution is waiting on this <tt><span class="remove">cond_var</span><span
- class="insert">condition_variable</span></tt> object unless <tt>lock</tt>
+other thread of execution is waiting on this <tt>condition_variable</tt> object unless <tt>lock</tt>
refers to the same underlying <tt>mutex</tt> object.
</p>
<p>
<i>Effects:</i> Atomically blocks and releases the lock on
<tt>lock</tt>. If the <tt>wait</tt> should throw an exception for any
-reason, <tt>lock</tt> will be locked as the exception propagates<span
-class="remove"> out</span>.
-This thread of execution shall unblock when another thread<span class="insert">
-of execution</span> issues a
-notification to this blocked thread<span class="insert">
-of execution</span> . The current thread of execution may
+reason, <tt>lock</tt> will be locked as the exception propagates.
+This thread of execution shall unblock when another threadof execution issues a
+notification to this blocked thread of execution. The current thread of execution may
unblock and return even in the absence of a notification.
</p>
<p>
@@ -1851,8 +1774,7 @@
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -1875,13 +1797,12 @@
<blockquote>
-<pre>bool timed_wait(unique_lock<mutex>& lock, const utc_time& abs_time);
+<pre>bool timed_wait(unique_lock<mutex>& lock, const system_time& abs_time);
</pre>
<blockquote>
<p>
<i>Precondition:</i> The <tt>lock</tt> is locked by the current thread of execution. No
-other thread of execution is waiting on this <tt><span class="remove">cond_var</span><span
- class="insert">condition_variable</span></tt> object unless <tt>lock</tt>
+other thread of execution is waiting on this <tt>condition_variable</tt> object unless <tt>lock</tt>
refers to, the same underlying <tt>mutex</tt> object.
</p>
<p>
@@ -1890,13 +1811,10 @@
any reason, <tt>lock</tt> will be locked as the exception propagates
out. If the absolute time specified by <tt>abs_time</tt> passes (that
is, system time equals or exceeds <tt>abs_time</tt>) before the
-<tt>condition<span
-class="insert">_variable</span></tt> is notified, or if the absolute time specified by
+<tt>condition_variable</tt> is notified, or if the absolute time specified by
<tt>abs_time</tt> has already been passed at the time of the call, then
<tt>false</tt> is returned. This thread of execution shall unblock when
-another thread<span class="insert">
-of execution</span> issues a notification to this blocked thread<span class="insert">
-of execution</span> . The current
+another thread of execution issues a notification to this blocked thread of execution. The current
thread of execution may unblock and return even in the absence of a
notification.
</p>
@@ -1914,16 +1832,15 @@
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</blockquote>
</blockquote>
<blockquote>
-<pre>template <class <span class="remove">_</span>Predicate>
- bool timed_wait(unique_lock<mutex>& lock, const utc_time& abs_time, Predicate pred);
+<pre>template <class Predicate>
+ bool timed_wait(unique_lock<mutex>& lock, const system_time& abs_time, Predicate pred);
</pre>
<blockquote>
<p>
@@ -1947,17 +1864,25 @@
</blockquote>
</blockquote>
+<blockquote>
+<pre>native_handle_type native_handle();
+</pre>
+<blockquote>
+<p>
+<i>Returns:</i> the representation of the underlying object used to implement <tt>*this</tt>.
+</p>
+</blockquote>
+</blockquote>
+
+
<p>
-<tt><span class="remove">cond_var</span><span
- class="insert">condition_variable</span></tt> shall be a standard-layout type ([?]).
+<tt>condition_variable</tt> shall be a standard-layout type ([?]).
</p>
-<h4>Class <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span></h4>
+<h4>Class condition_variable_any</h4>
<p>
-An object of class <tt><span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span></tt> is a synchronization primitive
+An object of class <tt>condition_variable_any</tt> is a synchronization primitive
used to cause a thread of execution to wait until notified by some other
thread of execution that some condition is met, or a UTC[(?)] time is reached.
</p>
@@ -1968,23 +1893,33 @@
meet this requirement.
</p>
+<p>
+If and only if the <tt>condition_variable_any</tt> type is internally represented by an
+an object or objects which can be passed to operating system specific interfaces, then
+there shall be a nested implementation-defined typedef <tt>native_handle_type</tt> that
+is an alias to a type providing access to the object or objects. The type
+<tt>native_handle_type</tt> must be copyable; if the object or objects are not copyable,
+<tt>native_handle_type</tt> must be a pointer type. The implementation shall document
+whether the <tt>native_handle_type</tt> typedef is present.
+</p>
+
+<p>
+If the nested typedef <tt>native_handle_type</tt> exists, then there
+also shall be a member function <tt>native_handle()</tt> which returns the
+underlying representation.
+</p>
+
<blockquote><pre>namespace std {
-class <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>
+class condition_variable_any
{
public:
- <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>();
- ~<span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>();
-
- <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>(const <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>&) = delete;
- <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>& operator=(const <span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>&) = delete;
+ typedef <i>implementation-defined</i> native_handle_type;
+ condition_variable_any();
+ ~condition_variable_any();
+
+ condition_variable_any(const condition_variable_any&) = delete;
+ condition_variable_any& operator=(const condition_variable_any&) = delete;
void notify_one();
void notify_all();
@@ -1993,29 +1928,27 @@
template <class Lock, class Predicate>
void wait(Lock& lock, Predicate pred);
template <class Lock>
- bool timed_wait(Lock& lock, const utc_time& abs_time);
+ bool timed_wait(Lock& lock, const system_time& abs_time);
template <class Lock, class Predicate>
- bool timed_wait(Lock& lock, const utc_time& abs_time, Predicate pred);
+ bool timed_wait(Lock& lock, const system_time& abs_time, Predicate pred);
+ native_handle_type native_handle();
};
} // std
</pre></blockquote>
<blockquote>
-<pre><span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>();
+<pre>condition_variable_any();
</pre>
<blockquote>
<p>
-<i>Effects:</i> Constructs an object of class <tt><span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span></tt>.
+<i>Effects:</i> Constructs an object of class <tt>condition_variable_any</tt>.
</p>
</blockquote>
</blockquote>
<blockquote>
-<pre>~<span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span>();
+<pre>~condition_variable_any();
</pre>
<blockquote>
<p>
@@ -2033,13 +1966,11 @@
<blockquote>
<p>
<i>Effects:</i> If any threads of execution are blocked waiting for <code>*this</code>,
-unblocks at least one those threads<span class="insert"> of execution</span>.</p>
+unblocks at least one those threads of execution.</p>
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt><span
-class="insert">general_</span>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable_any</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -2051,15 +1982,12 @@
</pre>
<blockquote>
<p>
-<i>Effects:</i> Unblock all threads <span class="insert">
-of execution</span>that are blocked waiting for <code>*this</code>.
+<i>Effects:</i> Unblock all threads of execution that are blocked waiting for <code>*this</code>.
</p>
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt><span
-class="insert">general_</span>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable_any</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -2073,19 +2001,15 @@
<p>
<i>Precondition:</i> <tt>lock</tt> is locked by the current thread of execution. If
<tt>Lock</tt> supports recursive locking, the lock count is one. No
-other thread of execution is waiting on this <tt><span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span></tt> object unless <tt>lock</tt>
+other thread of execution is waiting on this <tt>condition_variable_any</tt> object unless <tt>lock</tt>
is, or refers to, the same underlying mutex object.
</p>
<p>
<i>Effects:</i> Atomically blocks and releases the lock on
<tt>lock</tt>. If the <tt>wait</tt> should throw an exception for any
-reason, <tt>lock</tt> will be locked as the exception propagates<span
-name="remove"> out</span>.
-This thread of execution shall unblock when another thread<span class="insert">
-of execution</span> issues a
-notification to this blocked thread<span class="insert">
-of execution</span>. The current thread of execution may
+reason, <tt>lock</tt> will be locked as the exception propagates.
+This thread of execution shall unblock when another thread of execution issues a
+notification to this blocked thread of execution. The current thread of execution may
unblock and return even in the absence of a notification.
</p>
<p>
@@ -2097,9 +2021,7 @@
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt><span
-class="insert">general_</span>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable_any</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</p>
@@ -2122,14 +2044,13 @@
<blockquote>
-<pre>bool timed_wait(Lock& lock, const utc_time& abs_time);
+<pre>bool timed_wait(Lock& lock, const system_time& abs_time);
</pre>
<blockquote>
<p>
<i>Precondition:</i> The <tt>lock</tt> is locked by the current thread of execution. If
<tt>Lock</tt> supports recursive locking, the lock count is one. No
-other thread of execution is waiting on this <tt><span class="remove">gen_cond_var</span><span
-class="insert">general_condition_variable</span></tt> object unless <tt>lock</tt>
+other thread of execution is waiting on this <tt>condition_variable_any</tt> object unless <tt>lock</tt>
is, or refers to, the same underlying mutex object.
</p>
<p>
@@ -2138,14 +2059,10 @@
any reason, <tt>lock</tt> will be locked as the exception propagates
out. If the absolute time specified by <tt>abs_time</tt> passes (that
is, system time equals or exceeds <tt>abs_time</tt>) before the
-<tt><span
-class="insert">general_</span>condition<span
-class="insert">_variable</span></tt> is notified, or if the absolute time specified by
+<tt>condition_variable_any</tt> is notified, or if the absolute time specified by
<tt>abs_time</tt> has already been passed at the time of the call, then
<tt>false</tt> is returned. This thread of execution shall unblock when
-another thread<span class="insert">
-of execution</span> issues a notification to this blocked thread<span class="insert">
-of execution</span>. The current
+another thread of execution issues a notification to this blocked thread of execution. The current
thread of execution may unblock and return even in the absence of a
notification.
</p>
@@ -2163,9 +2080,7 @@
<p>
<i>Thread safety:</i> Calls to the <code>wait</code>,
<code>timed_wait</code>, <code>notify_one</code> or
-<code>notify_all</code> member functions of the same <tt><span
-class="insert">general_</span>condition<span
-class="insert">_variable</span></tt>
+<code>notify_all</code> member functions of the same <tt>condition_variable_any</tt>
object from different threads of execution shall not result in data
races or deadlocks.
</blockquote>
@@ -2173,7 +2088,7 @@
<blockquote>
<pre>template <class _Predicate>
- bool timed_wait(Lock& lock, const utc_time& abs_time, Predicate pred);
+ bool timed_wait(Lock& lock, const system_time& abs_time, Predicate pred);
</pre>
<blockquote>
<p>
@@ -2197,6 +2112,15 @@
</blockquote>
</blockquote>
+<blockquote>
+<pre>native_handle_type native_handle();
+</pre>
+<blockquote>
+<p>
+<i>Returns:</i> the representation of the underlying object or objects used to implement <tt>*this</tt>.
+</p>
+</blockquote>
+</blockquote>
<hr/>
@@ -2205,7 +2129,13 @@
<hr/>
-
+ This clause describes components for determining and manipulating temporal values.
+ A <i>time point</i> represents a dimensionless instant
+ in the time continuum. A <i>time duration</i> represents a length of time
+ unattached to any time point. Time points and time durations have a
+ <i>resolution</i> which is their smallest representable time duration. Time points
+ have an <i>epoch</i> or start of a given time scale. For time_t the epoch is
+ 1970-01-01 00:00:00
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.header__date_time__synopsis"></a>
@@ -2223,22 +2153,36 @@
class nanoseconds;
//timepoint
- class utc_time;
+ class system_time;
+
+ //functions
+ system_time get_system_time();
- template<class time_type="">
- class hiresolution_clock;
} //std
</class></pre></blockquote>
</div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_utc_time"></a>class utc_time</h3></div></div></div>
-<blockquote><pre>class utc_time
+
+<p>
+ The class <tt>system_time</tt> provides a time point that represents the current
+ Coordinated Universal Time, known as UTC, time.
+ <tt>system_time</tt> shall provide an epoch time of 1970-01-01 00:00:00.000000000
+ and a maximum time value of at least epoch time + 292 years.
+</p><p>
+ class <tt>system_time</tt> shall be EqualityComparable, LessThanComparable,
+ CopyConstructable, DefaultConstructable, and Assignable.
+</p>
+
+
+<blockquote><pre>
+class system_time
{
public:
- utc_time(); //epoch
- utc_time(time_t, nanoseconds ns);
- ~utc_time();
+ system_time();
+ system_time(time_t, nanoseconds ns);
+ ~system_time();
time_t seconds_since_epoch() const;
nanoseconds nanoseconds_since_epoch() const;
@@ -2250,145 +2194,138 @@
static bool is_subsecond();
//comparison functions
- bool operator==(const utc_time& rhs) const;
- bool operator!=(const utc_time& rhs) const;
- bool operator>(const utc_time& rhs) const;
- bool operator>=(const utc_time& rhs) const;
- bool operator<(const utc_time& rhs) const;
- bool operator<=(const utc_time& rhs) const;
+ bool operator==(const system_time& rhs) const;
+ bool operator!=(const system_time& rhs) const;
+ bool operator>(const system_time& rhs) const;
+ bool operator>=(const system_time& rhs) const;
+ bool operator<(const system_time& rhs) const;
+ bool operator<=(const system_time& rhs) const;
//arithmetic functions
- nanoseconds operator-(const utc_time& rhs) const
+ nanoseconds operator-(const system_time& rhs) const
- template<typename time_duration_type>
- utc_time operator+(const time_duration_type& td) const;
+ template<typename TimeDuration>
+ system_time operator+(const TimeDuration& td) const;
- template<typename time_duration_type>
- utc_time& operator+=(const time_duration_type& td);
+ template<typename TimeDuration>
+ system_time& operator+=(const TimeDuration& td);
- template<typename time_duration_type>
- utc_time operator-(const time_duration_type& td) const;
+ template<typename TimeDuration>
+ system_time operator-(const TimeDuration& td) const;
- template<typename time_duration_type>
- utc_time& operator-=(const time_duration_type& td)
+ template<typename TimeDuration>
+ system_time& operator-=(const TimeDuration& td)
};
</pre></blockquote>
-<p>
- The class utc_time provides a timepoint that represents the current UTC time.
- utc_time <span class="strikethrough">must</span><span class="underline">shall</span>
- provide a<span class="underline">n epoch time</span><span class="strikethrough">minimum range</span> of 1970-01-01 00:00:00.000000000
- <span class="underline">and a maximum time value of at least epoch time
- + 292 years</span>.
- </p>
<blockquote class="note">
<p>
-</p><h3 class="title">Note</h3><p>
+<h3 class="title">Note</h3><p>
292 years represents the number of nanoseconds that can be represented
in a signed 64 bit integer.
</p></blockquote>
-<pre class="programlisting"><span class="identifier">utc_time</span><span class="special">();</span><span class="comment">//epoch
-</span></pre><p>
- <span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a utc_time
+<pre class="programlisting">
+<span class="identifier">system_time</span><span class="special">();</span></pre><p>
+ <span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a system_time
<span class="underline">object</span> representing the epoch time
point 1970-01-01 00:00:00.000000000</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">utc_time</span><span class="special">(</span><span class="identifier">time_t</span> <span class="identifier">secs</span><span class="special">,</span> <span class="identifier">nanoseconds</span> <span class="identifier">ns</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">system_time</span><span class="special">(</span><span class="identifier">time_t</span> <span class="identifier">secs</span><span class="special">,</span> <span class="identifier">nanoseconds</span> <span class="identifier">ns</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a utc
- time <span class="underline">object </span><span class="strikethrough">where</span><span class="underline"> representing the time point that is secs + 1,000,000,000*ns
- seconds after the epoch</span><span class="strikethrough"> represents
- seconds since 1970-01-01 00:00:00.000000000 and nanoseconds provides an additional
- nanosecond offset</span></em></span>
+ time <span class="underline">object </span><span class="underline"> representing the time point that is secs + 1,000,000,000*ns
+ seconds after the epoch</span></em></span>
</p><p>
<span class="emphasis"><em>Remarks: If the total nanoseconds > 1 second the seconds are
incremented appropriately</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~utc_time(); </span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destroys the time point.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="identifier">time_t</span> <span class="identifier">seconds_since_epoch</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="identifier">time_t</span> <span class="identifier">seconds_since_epoch</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns the count of seconds since 1970-01-01 00:00:00.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">nanoseconds</span> <span class="identifier">nanoseconds_since_epoch</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="identifier">nanoseconds</span> <span class="identifier">nanoseconds_since_epoch</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns the count of <span class="underline">nano</span>seconds
since 1970-01-01 00:00:00.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns 1000000000</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns 0</em></span>
</p><p>
<span class="emphasis"><em>Remarks: Since this is a subsecond type it returns 0 for seconds_per_tick</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: true.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if <span class="strikethrough">rhs is</span>
- the <span class="strikethrough">same time</span><span class="underline">time
+ <span class="emphasis"><em>Returns: Returns true if
+ the <span class="underline">time
represented by *this is equal to the time represented by rhs</span>.
</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if <span class="strikethrough">rhs is
- not</span> the <span class="strikethrough">same time</span><span class="underline">time represented by *this is not equal to the time represented
+ <span class="emphasis"><em>Returns: Returns true if the <span class="underline">time represented by *this is not equal to the time represented
by rhs</span></em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if time <span class="strikethrough">is
- greater than rhs time</span><span class="underline">represented by
+ <span class="emphasis"><em>Returns: Returns true if time <span class="underline">represented by
*this is greater than the time represented by rhs</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if time<span class="strikethrough">is
- greater or equal than rhs time</span><span class="underline">represented
+ <span class="emphasis"><em>Returns: Returns true if time <span class="underline">represented
by *this is greater or equal than the time represented by rhs</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if time <span class="strikethrough">is
- less than rhs time</span><span class="underline">represented by *this
+ <span class="emphasis"><em>Returns: Returns true if time <span class="underline">represented by *this
is less than the time represented by rhs</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
- <span class="emphasis"><em>Returns: Returns true if time <span class="strikethrough">is
- less than rhs time</span><span class="underline">represented by *this
+ <span class="emphasis"><em>Returns: Returns true if time <span class="underline">represented by *this
is less or equal than the time represented by rhs</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">nanoseconds</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">utc_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="identifier">nanoseconds</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
</pre><p>
- <span class="emphasis"><em>Returns: <span class="strikethrough">Returns the difference
- between two times in a nanosecond count.</span> <span class="underline">Returns
+ <span class="emphasis"><em>Returns: <span class="underline">Returns
the difference in nanoseconds between the time represented by *this and the
time represented by rhs.</span> </em></span>
</p><p>
@@ -2396,15 +2333,17 @@
count.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">time_duration_type</span><span class="special">></span>
-<span class="identifier">utc_time</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span>
+<span class="identifier">system_time</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns the duration converted to nanosecond resolution
and added to the time <span class="underline">represented by *this</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">time_duration_type</span><span class="special">></span>
-<span class="identifier">utc_time</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&</span> <span class="identifier">td</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span>
+<span class="identifier">system_time</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&</span> <span class="identifier">td</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Convert the duration to nanosecond resolution add to nanoseconds
to the time <span class="underline">represented by *this</span>.</em></span>
@@ -2412,15 +2351,17 @@
<span class="emphasis"><em>Returns: Modified value of this.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">time_duration_type</span><span class="special">></span>
-<span class="identifier">utc_time</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span>
+<span class="identifier">system_time</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns the duration converted to nanosecond resolution
and subtracted from the time <span class="underline">represented by *this</span>.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">time_duration_type</span><span class="special">></span>
-<span class="identifier">utc_time</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span>
+<span class="identifier">system_time</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">TimeDuration</span><span class="special">&</span> <span class="identifier">td</span><span class="special">)</span>
</pre><p>
<span class="emphasis"><em>Effects: Convert the duration to nanosecond resolution subtract
from the time <span class="underline">represented by *this</span>
@@ -2432,26 +2373,19 @@
</p></div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.template_class_hiresolution_clock"></a>function get_system_time</h3></div></div></div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.template_class_hiresolution_clock"></a>template class hiresolution_clock</h3></div></div></div>
+<p>
+ The function <tt>get_system_time</tt> provides access to the system clock at a
+ resolution up to nanoseconds. The actual resolution may vary from platform to platform.
+</p>
-<blockquote><pre>
-template<class time_type>
-class hiresolution_clock
-{
-public:
- static time_type universal_time();
- static tick_type ticks_per_second();
-};
+<blockquote><pre>
+ system_time get_system_time();
</pre></blockquote>
-<p>
- The hiresolution_clock provides access to the operating system clock at a
- resolution up to nanoseconds. The actual resolution <span class="strikethrough">will</span><span class="underline"> may</span> vary from platform to platform. <span class="underline">The time_type parameter provides compatibility for user
- defined time types as specified in the TR2 proposal.</span>
- </p>
<blockquote class="note">
<p>
</p><h3 class="title">Note</h3><p>
@@ -2460,181 +2394,176 @@
interface, but it uses different C-level interfaces depending on the operating
system.
</p></blockquote>
-<pre class="programlisting"><span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">universal_time</span><span class="special">();</span>
-</pre><p>
- <span class="emphasis"><em>Returns: <span class="strikethrough">The Current UTC time -
- equivalent of time_t with fractional sections.</span> <span class="underline">An
- object of time_type that represents the current UTC time as measured from
- the computer clock.</span> </em></span>
- </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
- <span class="underline">universal_time is the equivalent of the iso
- C time call, but with a higher resolution as defined by the platform.</span>
- </p></div><p>
- <span class="emphasis"><em>Remarks: Function is thread-safe on platforms supporting threading.
- <span class="strikethrough">Successive</span><span class="underline"> Every</span>
- call<span class="strikethrough">s</span> to this function will <span class="strikethrough">produce </span><span class="underline">return</span>
- a<span class="strikethrough">nd</span><span class="underline"> value
- that is</span> equal or greater <span class="strikethrough">time value
- in all cases</span><span class="underline">than the value returned
- by any previous call</span>.</em></span>
- </p><p>
- <span class="emphasis"><em>Throws: Nothing</em></span>
- </p><p>
- <span class="underline">static tick_type ticks_per_second();</span>
- </p><p>
- <span class="underline"><span class="emphasis"><em>Returns: The number of ticks in one
- second provided by the clock implementation.</em></span></span>
- </p><p>
- <span class="underline"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p></div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.common_duration_functions"></a>Common Duration Functions</h3></div></div></div><p>
+
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.common_duration_functions"></a>Common Duration Functions</h3></div></div></div>
+
+<p>
The following functions are common functions to all durations types. These
functions provide the basis for durations to be EqualityComparable, LessThanComparable
- as well as the usual arithmetic operations.
+ as well arithmetic operations.
</p><p>
In the following text duration_type refers to the containing duration type.
</p>
+<p>
+ All duration types are EqualityComparable, LessThanComparable,
+ CopyConstructable, DefaultConstructable, and Assignable for duration
+ objects of the same type.
+</p>
-<blockquote><pre>class duration_type { //where duration_type== nanoseconds, microseconds, etc
+
+<blockquote><pre>
+class TimeDuration {
//comparison operators
- template<typename rhs_duration_type>
- bool operator< (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator< (const RhsTimeDuration&) const;
- template<typename rhs_duration_type>
- bool operator<= (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator<= (const RhsTimeDuration&) const;
- template<typename rhs_duration_type>
- bool operator> (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator> (const RhsTimeDuration&) const;
- template<typename rhs_duration_type>
- bool operator>= (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator>= (const RhsTimeDuration&) const;
- template<typename rhs_duration_type>
- bool operator== (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator== (const RhsTimeDuration&) const;
- template<typename rhs_duration_type>
- bool operator!= (const rhs_duration_type&) const;
+ template<typename RhsTimeDuration>
+ bool operator!= (const RhsTimeDuration&) const;
//sign inversion
- duration_type operator-() const
+ TimeDuration operator-() const
//arithmetic operations
- template<typename rhs_duration_type>
- duration_type operator- (const rhs_duration_type& d) const
+ template<typename RhsTimeDuration>
+ TimeDuration operator- (const RhsTimeDuration& d) const
- template<typename rhs_duration_type>
- duration_type operator-=(const rhs_duration_type& d)
+ template<typename RhsTimeDuration>
+ TimeDuration operator-=(const RhsTimeDuration& d)
- template<typename rhs_duration_type>
- duration_type operator+ (const rhs_duration_type& d) const
+ template<typename RhsTimeDuration>
+ TimeDuration operator+ (const RhsTimeDuration& d) const
- template<typename rhs_duration_type>
- duration_type operator+=(const rhs_duration_type& d)
-
- duration_type operator/ (int divisor) const
- duration_type operator/=(int divisor)
- duration_type operator* (int rhs) const
- duration_type operator*=(int divisor)
+ template<typename RhsTimeDuration>
+ TimeDuration operator+=(const RhsTimeDuration& d)
+
+ TimeDuration operator/ (int divisor) const
+ TimeDuration operator/=(int divisor)
+ TimeDuration operator* (int rhs) const
+ TimeDuration operator*=(int divisor)
tick_type get_count() const
}
</pre></blockquote>
<p>
- The following details each of these functions.
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if rhs duration is greater.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if rhs is not the same time.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if the rhs duration is larger.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if greater or equal than the rhs duration.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if less than the rhs duration.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns true if less or equal to the rhs duration.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="comment">//sign inversion
-</span><span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="comment">//sign inversion
+</span><span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: Negated value of the duration.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="comment">//arithmetic operations
-</span><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="comment">//arithmetic operations
+</span><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">-</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: A duration value equal to this-rhs_duration.</em></span>
</p><p>
- <span class="emphasis"><em>Remarks: This will fail to compiler if the rhs_duration_type is
+ <span class="emphasis"><em>Remarks: This will fail to compiler if the RhsTimeDuration is
of higher resolution.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span>
</pre><p>
<span class="emphasis"><em>Effects: Modifies to value equal to this-rhs_duration. </em></span>
</p><p>
<span class="emphasis"><em>Returns: this </em></span>
</p><p>
- <span class="emphasis"><em>Remarks: This will fail to compiler if the rhs_duration_type is
+ <span class="emphasis"><em>Remarks: This will fail to compiler if the RhsTimeDuration is
of higher resolution.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: Duration equal to this+rhs_duration. </em></span>
</p><p>
- <span class="emphasis"><em>Remarks: This will fail to compiler if the rhs_duration_type is
+ <span class="emphasis"><em>Remarks: This will fail to compiler if the RhsTimeDuration is
of higher resolution.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">rhs_duration_type</span><span class="special">></span>
-<span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">rhs_duration_type</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span>
+ </p><pre class="programlisting">
+<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">RhsTimeDuration</span><span class="special">></span>
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">RhsTimeDuration</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span>
</pre><p>
<span class="emphasis"><em>Effects: Modifies to value equal to this+rhs_duration. </em></span>
</p><p>
<span class="emphasis"><em>Returns: this </em></span>
</p><p>
- <span class="emphasis"><em>Remarks: This will fail to compiler if the rhs_duration_type is
+ <span class="emphasis"><em>Remarks: This will fail to compiler if the RhsTimeDuration is
of higher resolution.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">/</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: Duration with value equal to this/divisor according to
integer arithmetic rules.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span>
+ </p><pre class="programlisting">
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span>
</pre><p>
<span class="emphasis"><em>Effects: Change value of this by this/divisor according to integer
arithmetic rules.</em></span>
@@ -2642,19 +2571,22 @@
<span class="emphasis"><em>Returns: this </em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">*</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: Duration with value equal to this*rhs </em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">int</span> <span class="identifier">rhs</span><span class="special">)</span>
+ </p><pre class="programlisting">
+<span class="identifier">TimeDuration</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">int</span> <span class="identifier">rhs</span><span class="special">)</span>
</pre><p>
<span class="emphasis"><em>Effects: Modifies to value equal to this*rhs. </em></span>
</p><p>
<span class="emphasis"><em>Returns: this </em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">tick_type</span> <span class="identifier">get_count</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="identifier">tick_type</span> <span class="identifier">get_count</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: Returns the count at the resolution of the time duration
type.</em></span>
@@ -2665,12 +2597,13 @@
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_nanoseconds"></a>class nanoseconds</h3></div></div></div>
-<blockquote><pre>class nanoseconds
+<blockquote><pre>
+class nanoseconds
{
public:
nanoseconds(long long=0);
- nanoseconds(const nanoseconds& rhs);
+ nanoseconds(const nanoseconds& rhs);
~nanoseconds();
//traits information
@@ -2685,34 +2618,34 @@
</pre></blockquote>
<p>
Class nanoseconds represents a count of nanoseconds.
- </p><pre class="programlisting"><span class="identifier">nanoseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">nanoseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of nanoseconds - default
is zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">nanoseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">nanoseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">nanoseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">nanoseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~nanoseconds();</span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 1000000000</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 0</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: true</em></span>
</p><p>
@@ -2721,7 +2654,8 @@
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_microseconds"></a>class microseconds</h3></div></div></div>
-<blockquote><pre>class microseconds
+<blockquote><pre>
+class microseconds
{
public:
@@ -2745,40 +2679,41 @@
</pre></blockquote>
<p>
Class microseconds represents a count of microseconds.
- </p><pre class="programlisting"><span class="identifier">microseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">microseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of microseconds - default
is zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">microseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">microseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">microseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">microseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~microseconds();</span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="comment">//conversions
+ </p><pre class="programlisting">
+<span class="comment">//conversions
</span><span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: microsecond count converted to nanoseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 1000000</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 0</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: true</em></span>
</p><p>
@@ -2788,7 +2723,8 @@
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_milliseconds"></a>class milliseconds</h3></div></div></div>
-<blockquote><pre>class milliseconds
+<blockquote><pre>
+class milliseconds
{
public:
milliseconds(long long=0);
@@ -2810,44 +2746,46 @@
</pre></blockquote>
<p>
Class milliseconds represents a count of milliseconds.
- </p><pre class="programlisting"><span class="identifier">milliseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">milliseconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of milliseconds - default
is zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">milliseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">milliseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">milliseconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">milliseconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~milliseconds();</span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: millisecond count converted to nanoseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: millisecond count converted to microseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 1000</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 0</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: true</em></span>
</p><p>
@@ -2857,7 +2795,8 @@
<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_seconds"></a>class seconds</h3></div></div></div>
-<blockquote><pre>class seconds
+<blockquote><pre>
+class seconds
{
public:
seconds(long long s=0);
@@ -2881,49 +2820,52 @@
</pre></blockquote>
<p>
Class seconds represents a count of seconds.
- </p><pre class="programlisting"><span class="identifier">seconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">seconds</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of seconds - default is
zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">seconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">seconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">seconds</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">seconds</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~seconds(); </span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: second count converted to nanoseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: second count converted to microseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: second count converted to milliseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 1</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 1</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: false</em></span>
</p><p>
@@ -2934,7 +2876,8 @@
-<blockquote><pre>class minutes
+<blockquote><pre>
+class minutes
{
public:
minutes(long long s=0);
@@ -2959,54 +2902,58 @@
</pre></blockquote>
<p>
Class minutes represents a count of minutes.
- </p><pre class="programlisting"><span class="identifier">minutes</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">minutes</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of minutes - default is
zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">minutes</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">minutes</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">minutes</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">minutes</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~minutes(); </span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: minute count converted to nanoseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: minute count converted to microseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: minute count converted to milliseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">seconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">seconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: minute count converted to seconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 0</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 60</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: false</em></span>
</p><p>
@@ -3014,7 +2961,8 @@
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="n2411_07_0271___proposal_for_date_time_types_in_c__0x_to_support_threading_apis_v2.proposed_text.class_hours"></a>class hours</h3></div></div></div>
-<blockquote><pre>class hours
+<blockquote><pre>
+class hours
{
public:
hours(long long s=0);
@@ -3042,66 +2990,69 @@
<p>
Class hours represents a count of hours.
- </p><pre class="programlisting"><span class="identifier">hours</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">hours</span><span class="special">(</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">=</span><span class="number">0</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Construct<span class="underline">s</span> a<span class="underline">n object with a</span> count of hours - default is zero.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="identifier">hours</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">hours</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
+ </p><pre class="programlisting">
+<span class="identifier">hours</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">hours</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
<span class="emphasis"><em>Effects: Copy construction.</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p><p>
- <span class="strikethrough">~hours(); </span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Effects: Destruct count.</em></span></span>
- </p><p>
- <span class="strikethrough"><span class="emphasis"><em>Throws: Nothing</em></span></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">nanoseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: hour count converted to nanoseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">microseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: hour count converted to microseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">milliseconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: hour count converted to milliseconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">seconds</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">seconds</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: hour count converted to seconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">operator</span> <span class="identifier">minutes</span><span class="special">()</span> <span class="keyword">const</span>
+ </p><pre class="programlisting">
+<span class="keyword">operator</span> <span class="identifier">minutes</span><span class="special">()</span> <span class="keyword">const</span>
</pre><p>
<span class="emphasis"><em>Returns: hour count converted to seconds</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 0</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">seconds_per_tick</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: 3600</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
- </p><pre class="programlisting"><span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
+ </p><pre class="programlisting">
+<span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">is_subsecond</span><span class="special">();</span>
</pre><p>
<span class="emphasis"><em>Returns: false</em></span>
</p><p>
<span class="emphasis"><em>Throws: Nothing</em></span>
</p>
-
-
<h2><a name="References">References</a></h2>
<ul>
<li>
@@ -3119,7 +3070,7 @@
<li>
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2043.html">
N2043</a>, Simplifying And Extending Mutex and Scoped Lock Types For C++
- Multi-Threading Library, Ion Gaztañaga</li>
+ Multi-Threading Library, Ion Gazta�aga</li>
<li>
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2090.html">
N2090</a>, A Threading API for C++, Peter Dimov</li>
@@ -3138,6 +3089,14 @@
<li>
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2285.html">
N2285</a>, A Multi-threading Library for Standard C++, Revision 2, Pete Becker</li>
+ <li>
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2411.html">
+ N2411</a>, Proposal for Date-Time Types in C++0x To Support Threading APIs v2, Jeff Garland</li>
+ <li>
+ <a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=40874">
+ ISO 8601: 2004</a>Data elements and interchange formats -- Information interchange -- Representation of dates and times</li>
+
+
</ul>
@@ -3148,12 +3107,13 @@
Boost.Thread Library, as refined by literally hundreds of other Boost users and
contributors. Dinkumware and Metrowerks (now Freescale) implementations of
Boost.Thread, developed respectively by Pete Becker and Howard Hinnant, created
-further existing practice. Proposals by Pete Becker, Peter Dimov, Ion Gaztañaga,
+further existing practice. Proposals by Pete Becker, Peter Dimov, Ion Gazta�aga,
and Anthony Williams were also influential. Peter, Ion, and Anthony also
contributed numerous critiques, suggestions, and comments on the current
-proposal, as did other members of an ad hoc threads working group.
+proposal, as did other members of an ad hoc threads working group. Jeff Garland
+contributed the date time portions of the proposal based on the Boost.DateTime
+Library and his TR2 proposals.
</p>
</div></body></html><ins class="diff">
</ins>
-
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk