| // -*- C++ -*- |
| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_ZOS_H |
| #define _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_ZOS_H |
| |
| #if defined(__MVS__) |
| #include <locale.h> |
| #include <string> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define _LC_MAX LC_MESSAGES /* highest real category */ |
| #define _NCAT (_LC_MAX + 1) /* maximum + 1 */ |
| |
| #define _CATMASK(n) (1 << (n)) |
| #define LC_COLLATE_MASK _CATMASK(LC_COLLATE) |
| #define LC_CTYPE_MASK _CATMASK(LC_CTYPE) |
| #define LC_MONETARY_MASK _CATMASK(LC_MONETARY) |
| #define LC_NUMERIC_MASK _CATMASK(LC_NUMERIC) |
| #define LC_TIME_MASK _CATMASK(LC_TIME) |
| #define LC_MESSAGES_MASK _CATMASK(LC_MESSAGES) |
| #define LC_ALL_MASK (_CATMASK(_NCAT) - 1) |
| |
| typedef struct locale_struct { |
| int category_mask; |
| std::string lc_collate; |
| std::string lc_ctype; |
| std::string lc_monetary; |
| std::string lc_numeric; |
| std::string lc_time; |
| std::string lc_messages; |
| } * locale_t; |
| |
| // z/OS does not have newlocale, freelocale and uselocale. |
| // The functions below are workarounds in single thread mode. |
| locale_t newlocale(int category_mask, const char* locale, locale_t base); |
| void freelocale(locale_t locobj); |
| locale_t uselocale(locale_t newloc); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif // defined(__MVS__) |
| #endif // _LIBCPP_SUPPORT_IBM_LOCALE_MGMT_ZOS_H |