forked from HowardHinnant/date
Removed remote_download and remote_install.
* The implementation is now responsible for supplying run-time time zone database updates.
This commit is contained in:
82
d0355r4.html
82
d0355r4.html
@@ -59,6 +59,9 @@ Document number: D0355R4<br>
|
|||||||
<h3>Changes since <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0355r3.html">R3</a></h3>
|
<h3>Changes since <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0355r3.html">R3</a></h3>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>Presume that the time zone database is supplied only by the std::lib implementation,
|
||||||
|
but can be updated at run time. Removed <code>remote_download</code> and
|
||||||
|
<code>remote_install</code>. This functionality is now subsumed by the implementation.</li>
|
||||||
<li><code>to_stream</code> sets <code>failbit</code> if it is required to create a name
|
<li><code>to_stream</code> sets <code>failbit</code> if it is required to create a name
|
||||||
for an invalid month or weekday.</li>
|
for an invalid month or weekday.</li>
|
||||||
<li>Add note to promise compatibility with <a href="https://wg21.link/p0645"><code>fmt</code> (P0645)</a></li>
|
<li>Add note to promise compatibility with <a href="https://wg21.link/p0645"><code>fmt</code> (P0645)</a></li>
|
||||||
@@ -9254,9 +9257,14 @@ tzdb::const_iterator tzdb::cend() const noexcept;
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<a name="time.timezone.database.remote"></a><h3>23.17.12.1.1 Remote time zone database support [time.timezone.database.remote]</h3>
|
<a name="time.timezone.database.remote"></a><h3>23.17.12.1.1 Remote time zone database support [time.timezone.database.remote]</h3>
|
||||||
<p class = note>
|
|
||||||
This subsection is optional/separable and needs further discussion in the LEWG. No
|
<p>
|
||||||
other sections depend upon this subsection.
|
The <i>local</i> time zone database is that supplied by the implementation when the
|
||||||
|
application first accesses the database, for example via <code>current_zone()</code>.
|
||||||
|
While the application is running, the implementation may choose to update the time
|
||||||
|
zone database. This update shall not impact the application in any way unless the
|
||||||
|
application calls the functions in this section. This potentially updated time zone
|
||||||
|
database is referred to as the <i>remote</i> time zone database.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@@ -9264,12 +9272,9 @@ const tzdb& reload_tzdb();
|
|||||||
</pre>
|
</pre>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>
|
<p>
|
||||||
<i>Effects:</i> This function first checks the latest version at the
|
<i>Effects:</i> This function first checks the version of the remote time zone database.
|
||||||
<a href="http://www.iana.org/time-zones">IANA website</a>. If the
|
If the version of the local and remote databases are the same, there are no effects.
|
||||||
<a href="http://www.iana.org/time-zones">IANA website</a> is unavailable, or if the
|
Otherwise the remote database is pushed to the front of
|
||||||
latest version is already installed, there are no effects. Otherwise, a new version
|
|
||||||
is available. It is downloaded and installed, and then the program initializes
|
|
||||||
a new <code>tzdb</code> from the new disk files and pushes it to the front of
|
|
||||||
the <code>tzdb_list</code> accessed by <code>get_tzdb_list()</code>.
|
the <code>tzdb_list</code> accessed by <code>get_tzdb_list()</code>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@@ -9279,8 +9284,8 @@ the <code>tzdb_list</code> accessed by <code>get_tzdb_list()</code>.
|
|||||||
<i>Remarks:</i> No pointers, references or iterators are invalidated.
|
<i>Remarks:</i> No pointers, references or iterators are invalidated.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<i>Thread Safety:</i> This function is thread safe with respect to <code>front()</code>
|
<i>Thread Safety:</i> This function is thread safe with respect to
|
||||||
and <code>erase_after()</code>.
|
<code>get_tzdb_list().front()</code> and <code>get_tzdb_list().erase_after()</code>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<i>Throws:</i> <code>runtime_error</code> if for any reason a reference can not
|
<i>Throws:</i> <code>runtime_error</code> if for any reason a reference can not
|
||||||
@@ -9293,61 +9298,12 @@ string remote_version();
|
|||||||
</pre>
|
</pre>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>
|
<p>
|
||||||
<i>Returns:</i> The latest database version number from the
|
<i>Returns:</i> The latest remote database version. If the remote
|
||||||
<a href="http://www.iana.org/time-zones">IANA website</a>. If the
|
version s not available, the empty string is returned.
|
||||||
<a href="http://www.iana.org/time-zones">IANA website</a> can not be reached, or
|
|
||||||
if it can be reached but the latest version number is unexpectedly not
|
|
||||||
available, the empty string is returned.
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<i>Note:</i> If non-empty, this can be compared with <code>get_tzdb().version</code> to
|
<i>Note:</i> If non-empty, this can be compared with <code>get_tzdb().version</code> to
|
||||||
discover if you have the latest database installed.
|
discover if the local and remote databases are equivalent.
|
||||||
</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
bool remote_download(string_view version);
|
|
||||||
</pre>
|
|
||||||
<blockquote>
|
|
||||||
<p>
|
|
||||||
<i>Effects:</i> If <code>version == remote_version()</code> this function will download
|
|
||||||
the compressed tar file holding the latest time zone database from the
|
|
||||||
<a href="http://www.iana.org/time-zones">IANA website</a>. The tar file will be placed
|
|
||||||
at an unspecified location.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<i>Returns:</i> <code>true</code> if the database was successfully downloaded, else
|
|
||||||
<code>false</code>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<i>Thread safety:</i> If called by multiple threads, there will be a race on the
|
|
||||||
creation of the tar file.
|
|
||||||
</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
bool remote_install(string_view version);
|
|
||||||
</pre>
|
|
||||||
<blockquote>
|
|
||||||
<p>
|
|
||||||
<i>Effects:</i> If <code>version</code> refers to the file successfully
|
|
||||||
downloaded by <code>remote_download()</code> this function will remove the
|
|
||||||
existing time zone database, then extract a new database
|
|
||||||
from the tar file, and will then delete the tar file.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
This function <i>does not</i> cause your program to re-initialize itself from
|
|
||||||
this new database. In order to do that, you must call
|
|
||||||
<code>reload_tzdb()</code> (or <code>get_tzdb()</code> if the database has yet
|
|
||||||
to be initialized).
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<i>Returns:</i> <code>true</code> if the database was successfully replaced by
|
|
||||||
the tar file , else <code>false</code>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<i>Thread safety:</i> If called by multiple threads, there will be a race on the
|
|
||||||
creation of the new database.
|
|
||||||
</p>
|
</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user