brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · cae40b0 Raw
80 lines · c
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html11 12#ifndef _LIBCPP___CHRONO_TIME_ZONE_LINK_H13#define _LIBCPP___CHRONO_TIME_ZONE_LINK_H14 15#include <version>16// Enable the contents of the header only when libc++ was built with experimental features enabled.17#if _LIBCPP_HAS_EXPERIMENTAL_TZDB18 19#  include <__compare/strong_order.h>20#  include <__config>21#  include <__utility/private_constructor_tag.h>22#  include <string>23#  include <string_view>24 25#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)26#    pragma GCC system_header27#  endif28 29_LIBCPP_PUSH_MACROS30#  include <__undef_macros>31 32_LIBCPP_BEGIN_NAMESPACE_STD33 34#  if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION35 36namespace chrono {37 38class time_zone_link {39public:40  [[nodiscard]]41  _LIBCPP_HIDE_FROM_ABI explicit time_zone_link(__private_constructor_tag, string_view __name, string_view __target)42      : __name_{__name}, __target_{__target} {}43 44  _LIBCPP_HIDE_FROM_ABI time_zone_link(time_zone_link&&)            = default;45  _LIBCPP_HIDE_FROM_ABI time_zone_link& operator=(time_zone_link&&) = default;46 47  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI string_view name() const noexcept { return __name_; }48  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI string_view target() const noexcept { return __target_; }49 50private:51  string __name_;52  // TODO TZDB instead of the name we can store the pointer to a zone. These53  // pointers are immutable. This makes it possible to directly return a54  // pointer in the time_zone in the 'locate_zone' function.55  string __target_;56};57 58[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline bool59operator==(const time_zone_link& __x, const time_zone_link& __y) noexcept {60  return __x.name() == __y.name();61}62 63[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline strong_ordering64operator<=>(const time_zone_link& __x, const time_zone_link& __y) noexcept {65  return __x.name() <=> __y.name();66}67 68} // namespace chrono69 70#  endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&71         // _LIBCPP_HAS_LOCALIZATION72 73_LIBCPP_END_NAMESPACE_STD74 75_LIBCPP_POP_MACROS76 77#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB78 79#endif // _LIBCPP___CHRONO_TIME_ZONE_LINK_H80