[PATCH] libstdc++: Implement std::chrono::current_zone() for Windows
Jonathan Wakely
jwakely@redhat.com
Mon Jul 14 16:01:22 GMT 2025
On Mon, 14 Jul 2025 at 16:52, Tomasz Kaminski <tkaminsk@redhat.com> wrote:
>
>
>
> On Mon, Jul 14, 2025 at 1:47 PM Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>> On Mon, 14 Jul 2025 at 11:10, Jonathan Wakely <jwakely@redhat.com> wrote:
>> >
>> > On Mon, 14 Jul 2025 at 11:08, Björn Schäpers <gcc@hazardy.de> wrote:
>> > >
>> > > Am 14.07.2025 um 10:20 schrieb Tomasz Kaminski:
>> > > >
>> > > >
>> > > > On Tue, Jul 8, 2025 at 10:48 PM Björn Schäpers wrote:
>> > > > + const auto raw_index = information.Bias / 60;
>> > > > +
>> > > > + // The bias added to the local time equals UTC. And GMT+X corrosponds
>> > > > + // to UTC-X, the sign is negated. Thus we can use the hourly bias as
>> > > > + // an index into an array.
>> > > > + if (raw_index < 0 && raw_index >= -14)
>> > > > + {
>> > > > + static array<string_view, 14> table{
>> > > > + "Etc/GMT-1", "Etc/GMT-2", "Etc/GMT-3", "Etc/GMT-4",
>> > > > + "Etc/GMT-5", "Etc/GMT-6", "Etc/GMT-7", "Etc/GMT-8",
>> > > > + "Etc/GMT-9", "Etc/GMT-10", "Etc/GMT-11", "Etc/GMT-12",
>> > > > + "Etc/GMT-13", "Etc/GMT-14"
>> > > > + };
>> > > > + return table[-raw_index - 1];
>> > > > + }
>> > > > + else if (raw_index > 0 && raw_index <= 12)
>> > > > + {
>> > > > + static array<string_view, 14> table{
>> > > >
>> > > > This table has size 14, but only 12 entries. I do not think there are zones
>> > > > past +12,
>> > > > but I believe size and entries should match.
>> > >
>> > > That is totally correct and this a classic copy and paste error.
>> > > @Jonathan: Should I correct that (and the other things you mentioned), or are
>> > > you doing that?
>> >
>> > I can do it before I push it (probably later today).
>>
>> Hmm, we could reduce the number of guard variables for static
>> constructors by using a single array here, and indexing into it with
>> raw_index + 14.
>
> Or just made them constexpr.
Yes, then they'll be initiualized before we even need them, and
there's no cost to check the static init guard variable.
>>
>> This code is only for Windows, so we're not talking constrained
>> microcontrollers where we need to save resources. That can be in a
>> follow-up commit, if we decide it's worth doing.
>>
>> > >
>> > > >
>> > > > + "Etc/GMT+1", "Etc/GMT+2", "Etc/GMT+3", "Etc/GMT+4",
>> > > > + "Etc/GMT+5", "Etc/GMT+6", "Etc/GMT+7", "Etc/GMT+8",
>> > > > + "Etc/GMT+9", "Etc/GMT+10", "Etc/GMT+11", "Etc/GMT+12"
>> > > > + };
>> > > > + return table[raw_index - 1];
>> > > > + }
>> > > > + return {};
>> > > > + }
>>
More information about the Libstdc++
mailing list