From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/builtin/temporal/TemporalUnit.h | 135 +++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 js/src/builtin/temporal/TemporalUnit.h (limited to 'js/src/builtin/temporal/TemporalUnit.h') diff --git a/js/src/builtin/temporal/TemporalUnit.h b/js/src/builtin/temporal/TemporalUnit.h new file mode 100644 index 0000000000..3c8801cb85 --- /dev/null +++ b/js/src/builtin/temporal/TemporalUnit.h @@ -0,0 +1,135 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef builtin_temporal_TemporalUnit_h +#define builtin_temporal_TemporalUnit_h + +#include "mozilla/Assertions.h" + +#include + +namespace js::temporal { +enum class TemporalUnit { + Auto, + Year, + Month, + Week, + Day, + Hour, + Minute, + Second, + Millisecond, + Microsecond, + Nanosecond +}; + +constexpr int64_t ToNanoseconds(TemporalUnit unit) { + switch (unit) { + case TemporalUnit::Day: + return 86'400'000'000'000; + case TemporalUnit::Hour: + return 3'600'000'000'000; + case TemporalUnit::Minute: + return 60'000'000'000; + case TemporalUnit::Second: + return 1'000'000'000; + case TemporalUnit::Millisecond: + return 1'000'000; + case TemporalUnit::Microsecond: + return 1'000; + case TemporalUnit::Nanosecond: + return 1; + + case TemporalUnit::Auto: + case TemporalUnit::Year: + case TemporalUnit::Month: + case TemporalUnit::Week: + break; + } + MOZ_CRASH("Unexpected temporal unit"); +} + +constexpr int64_t ToMilliseconds(TemporalUnit unit) { + switch (unit) { + case TemporalUnit::Day: + return 86'400'000; + case TemporalUnit::Hour: + return 3'600'000; + case TemporalUnit::Minute: + return 60'000; + case TemporalUnit::Second: + return 1'000; + case TemporalUnit::Millisecond: + return 1; + + case TemporalUnit::Auto: + case TemporalUnit::Year: + case TemporalUnit::Month: + case TemporalUnit::Week: + case TemporalUnit::Microsecond: + case TemporalUnit::Nanosecond: + break; + } + MOZ_CRASH("Unexpected temporal unit"); +} + +constexpr int64_t UnitsPerDay(TemporalUnit unit) { + switch (unit) { + case TemporalUnit::Day: + return 1; + case TemporalUnit::Hour: + return 24; + case TemporalUnit::Minute: + return 1440; + case TemporalUnit::Second: + return 86'400; + case TemporalUnit::Millisecond: + return 86'400'000; + case TemporalUnit::Microsecond: + return 86'400'000'000; + case TemporalUnit::Nanosecond: + return 86'400'000'000'000; + + case TemporalUnit::Auto: + case TemporalUnit::Year: + case TemporalUnit::Month: + case TemporalUnit::Week: + break; + } + MOZ_CRASH("Unexpected temporal unit"); +} + +constexpr const char* TemporalUnitToString(TemporalUnit unit) { + switch (unit) { + case TemporalUnit::Auto: + return "auto"; + case TemporalUnit::Year: + return "year"; + case TemporalUnit::Month: + return "month"; + case TemporalUnit::Week: + return "week"; + case TemporalUnit::Day: + return "day"; + case TemporalUnit::Hour: + return "hour"; + case TemporalUnit::Minute: + return "minute"; + case TemporalUnit::Second: + return "second"; + case TemporalUnit::Millisecond: + return "millisecond"; + case TemporalUnit::Microsecond: + return "microsecond"; + case TemporalUnit::Nanosecond: + return "nanosecond"; + } + MOZ_CRASH("Unexpected temporal unit"); +} + +} /* namespace js::temporal */ + +#endif /* builtin_temporal_TemporalUnit_h */ -- cgit v1.2.3