449 Commits

Author SHA1 Message Date
Tomasz Kamiński
58a4a9518a Mismatch in return type of converting function is now hard error.
Change the implementation, in the way that mismatch in return
type of the from/to_sys/utc functions (not returning time_point,
or returning time_point with inappropriate clock) leads to
hard error.

Added appropariate fail test for to_sys function, including:
* returning an int
* returning time_point of wrong clock
* reutrning reference to time_point
2017-11-24 22:23:50 +01:00
Tomasz Kamiński
5a9b44a37a Implemented test for casting non-wall clocks and detecting that clocks cannot be casted.
Added test that detects if clock_cast<Dest>(Source) properly
SFINAEs if clock's are not castable, this includes test for
steady_clock that is not castable to any wall-clock.

Secondly added steady_based_clock based on steady_clock
(as name indicates), that clock_cast may be extended to clock
non-related to wall-time (sys/utc) using conversion traits.

Final example is pair of ambiguous clocks (amb1/amb2_clock) that can convert
to each other either using sys_clock or utc_clock.
Then the conversion from amb2 to amb1 is disambiguated
via trait specialization.
2017-11-24 18:08:00 +01:00
Tomasz Kamiński
a9d2907fa1 Implemented test for custom clocks derived from sys_clock.
Created mil_clock and s2s_clock, that are both using to_sys/from_sys
function and are fully interoperable with existing clocks (including
ones based on utc).

Implemented an trait is used to provide direct conversion
from s2s_clock to mil_clock without converting to sys_clock
(conversion counter is used for this purpose).
2017-11-24 18:07:33 +01:00
Tomasz Kamiński
bf5a4f3cd5 Implemented test for existing clocks.
Implemented test for conversions between existing clocks
(sys_clock, utc_clock, tai_clock, gps_clock) showing that
they can be used instead of to_clock_time functions.
2017-11-24 18:06:55 +01:00
Tomasz Kamiński
e1099ef3ab Implemented clock_cast function.
Added an clock_time_conversion trait, that should be specialized
with SourceClock and DestClock respectively and provide an function
that convert time_point in SourceClock to equivalent time_point
in DestClock.

This function has following specializations:
1) <sys_clock, utc_clock> - convert sys_time to utc_time
2) <utc_clock, sys_clock> - convert utc_time to sys_time
3) <Clock, sys_clock>     - calls Clock::to_sys if it returns sys_time
4) <Clock, utc_clock>     - calls Clock::to_utc if it returns utc_time
5) <sys_clock, Clock>     - calls Clock::from_sys if it returns time_point<Clock>
5) <utc_clock, Clock>     - calls Clock::from_utc if it returns time_point<Clock>

Implemented an clock_cast<DestClock>(time_point<SourceClock, Dur> st), that
works as follow:
1) If DestClock is same as SourceClock, returns std
2) Otherwise, if clock_conversion<SourceClock, DestClock> available, uses it
3) Otherwise, if tries using clock_conversion<SourceClock, CommClock>
   and clock_conversion<CommClock, DestClock> for CommClock being utc_time
   or sys_time
4) Otherwise, tries using clock_conversion<SourceClock, utc_clock>
   and clock_conversion<sys_clock, DestinationClock> or reversed (firstly
   convert to sys_clock, then to utc_clock) to convert.
2017-11-24 17:55:15 +01:00
Darrell Wright
4614ebda4a
Update to accomidate change of iana url #241 2017-11-23 20:25:00 -05:00
Howard Hinnant
c286981b3b Fix improper application of GCC diagnostic suppression 2017-11-21 10:07:31 -05:00
Howard Hinnant
9ca582d9da Silence GCC conversion warning for bitfields
* Used only in weekday_indexed.
2017-11-20 14:50:48 -05:00
Tullio Menga
f4b12ab023 Adjust HAS_CHRONO_ROUNDING macro for MSVC with v140_clang_c2 and LLVM-vs2014 2017-11-20 11:45:04 -05:00
Alexander Karatarakis
bd51baf31e msvc token workaround 2017-11-19 18:52:56 -05:00
Michael Maroszek
16439a8ce2 enhance tz_dir detection for buildroot with uclibc systems
* use /etc/TZ for timezone detection on buildroot with uclibc systems
2017-11-19 18:42:13 -05:00
Howard Hinnant
d97bc984c7 Change default_zone from "UTC" to "Etc/UTC"
* zoned_traits<const time_zone*>::default_zone()
  should not depend on a Link, but on a Zone.
2017-11-19 18:17:09 -05:00
Aaron Bishop
c9ef0a8f05 express reverse_bytes in an easy to optimize way
optimizes to single bswap instruction on gcc and clang
2017-11-19 17:52:17 -05:00
Howard Hinnant
4832ea0ddb Move HAS_STRING_VIEW to date.h 2017-11-17 11:09:17 -05:00
Tullio Menga
ec514101a6 minor patches to build on Windows with MSVC v140_clang_c2 and LLVM-vs2014 2017-11-15 07:20:07 -05:00
Howard Hinnant
517c0f2704
Update C++ standards proposal status 2017-11-12 06:27:50 -05:00
Howard Hinnant
e12f7c66f0 Unconstrain make_zoned for VS-2015 2017-11-07 13:01:16 -07:00
Howard Hinnant
3a5e8c9384 Silence clang warning 2017-10-30 13:48:09 -04:00
Howard Hinnant
fa6529a2fc Allow zoned_time conversion among different TimeZonePtr types 2017-10-28 18:20:34 -04:00
Howard Hinnant
4b73a42d02 Update README.md 2.3 2017-10-25 22:12:31 -04:00
Howard Hinnant
25696b7fb3 Optimize to_stream for zoned_time
* Decrease the number of lookups in the database from 2 to 1.
2017-10-24 15:44:41 -04:00
Howard Hinnant
9381e894a5 Specify exception constructors
* For nonexistent_local_time and ambiguous_local_time.
* Simplify the constructors.
* Make these exceptions usable for custom time zones.
2017-10-24 12:12:31 -04:00
Howard Hinnant
5563d31b2e Update validation.cpp for new directory structure 2017-10-24 12:06:50 -04:00
Pavel Davydov
202041e531 Add a workaround for a missing operator<< for gcc 5 on linux. See issue #205 for details. 2017-10-24 11:02:54 -04:00
Howard Hinnant
0b7d9c6dbe Update README.md 2017-10-23 09:47:15 -04:00
Howard Hinnant
66a97f907e to_stream sets failbit if required to supply a bad name:
* for an invalid month
* for an invalid weekday
2017-10-15 13:57:19 -04:00
Howard Hinnant
94eb182256 Add wt to list of products using this library
Announced at CppCon-2017 by Roel Standaert.
2017-10-15 11:03:40 -04:00
Howard Hinnant
f328d8c84a Have format set exceptions(failbit | badbit)
*  Be sure if something bad happens under the hood it is not silently
   swallowed.
2017-10-14 20:42:26 -04:00
Manlio Morini
8b9f0515b5 Replacing 0 with nullptr to avoid GCC warning
All the calls to `std::time_get::get` had `0` as end-of-range iterator.

E.g.

    auto& f = use_facet<time_get<CharT>>(is.getloc());
	// ...
    f.get(is, 0, is, err, &tm, command, fmt+1);
              ^

Using `nullptr` instead of `0` doesn't trigger the GCC 5.x warning:

> warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]
2017-10-12 19:51:06 +02:00
Howard Hinnant
ce975cadb0 Update Try-it-out link 2017-10-03 18:11:57 -04:00
Tomi Valkeinen
2032fccbb7 Fix valgrind warning about uninitialized variable use in to_stream()
tm variable is not initialized in to_stream(), and valgrind warns about
"Conditional jump or move depends on uninitialised value(s)".

This is a false positive, as strftime always reads tm_hour, even if it
ends up never using it. To silence the warnings, initialize tm to zero.
2017-10-03 15:22:49 -04:00
Howard Hinnant
2e213abb76 Silence clang static analyzer warnings 2017-10-03 12:45:09 -04:00
Howard Hinnant
3acb299f3f Rename TZ_DB to tzdb
* Bring into alignment with proposal
* TZ_DB alias left behind for backwards compatibility
2017-09-30 14:48:25 -04:00
Howard Hinnant
22a229af91 On macOS tz_dir is now discoverable at run time
* Apple changed the location of their IANA database in High Sierra,
  breaking current_zone().  Now on Apple the location of the IANA
  database is searched for at run time.
2017-09-26 09:47:24 -04:00
Howard Hinnant
fc917fe303 Port testit to new directory structure 2017-09-25 19:28:04 -04:00
tagunil
bff551b2a5 Convert Windows header file names to lower case 2017-09-23 19:55:56 -04:00
Howard Hinnant
9f6c8d8c10 Update include paths for new directory structure 2017-09-22 20:10:58 -04:00
Markus Werle
3c3ba68906 Proposal for an alternative directory structure 2017-09-22 20:03:16 -04:00
Howard Hinnant
c5e58fd015 include <wordexp.h> is unnecessary when using USE_OS_TZDB 2017-09-10 13:50:51 -04:00
Tony Walker
ef6d53595d Fix CHAR_BIT not found by including climits. 2017-09-09 19:05:54 -04:00
Howard Hinnant
0f658db2cd Correct how width is counted for fractional seconds
* Include decimal point character in count.
2017-09-09 15:32:47 -04:00
Howard Hinnant
481771ef5e Add support down to femtosecond precision
* Requires platform specific use of 128bit integral representation
  (e.g. std::chrono::duration<__int128_t, std::femto>).
2017-09-09 10:30:39 -04:00
atkawa7
5f01382e24 Enable current_zone() on FreeBSD 2017-09-08 20:47:38 -04:00
Kiryl Mikhneev
41563c46e8 Disabled some template constraints for vs since it does not work properly there 2017-09-07 19:41:47 -04:00
Kiryl Mikhneev
bba9aeafab Added shortened curl include path to support nuget package rmt_curl 2017-09-07 19:33:59 -04:00
Howard Hinnant
4cb893c780 Enable DATE_BUILD_DLL for Linux and macOS 2017-09-05 20:07:13 -04:00
gm
c09d35534d Reformulate macros for static and shared linking on windows. 2017-09-05 19:59:57 -04:00
Howard Hinnant
272d487b3d Add non-const front() to tzdb_list
* Needed when USE_OS_TZDB==1 && MISSING_LEAP_SECONDS==0
2017-08-31 17:45:42 -04:00
Howard Hinnant
aad6010831 Add test for custom time zone support 2017-08-31 10:44:07 -04:00
gm
0707cc4932 NULL to nullptr change. 2017-08-27 21:13:47 -04:00