//===----------------------------------------------------------------------===// // // 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___STRING_EXTERN_TEMPLATE_LISTS_H #define _LIBCPP___STRING_EXTERN_TEMPLATE_LISTS_H #include <__config> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header #endif // clang-format off // We maintain multiple ABI lists: // - _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST // - _LIBCPP_STRING_V1_EXTERN_TEMPLATE_LIST // - _LIBCPP_STRING_UNSTABLE_EXTERN_TEMPLATE_LIST // As the name implies, the ABI lists define a common subset, the V1 (Stable) and unstable ABI. // // For unstable, we may explicitly remove function that are external in V1. // // For stable, the ABI list should rarely change, except for adding new // functions supporting new c++ version / API changes. Typically entries // must never be removed from the stable list. #define _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \ Func(void basic_string::__init(const value_type*, size_type)) \ Func(void basic_string::__init(size_type, value_type)) \ Func(basic_string::basic_string(const basic_string&, size_type, size_type, const allocator&)) \ Func(basic_string::~basic_string()) \ Func(basic_string& basic_string::operator=(value_type)) \ Func(basic_string& basic_string::assign(size_type, value_type)) \ Func(basic_string& basic_string::assign(const basic_string&, size_type, size_type)) \ Func(basic_string& basic_string::append(size_type, value_type)) \ Func(basic_string& basic_string::append(const value_type*)) \ Func(basic_string& basic_string::append(const value_type*, size_type)) \ Func(basic_string& basic_string::append(const basic_string&, size_type, size_type)) \ Func(void basic_string::push_back(value_type)) \ Func(basic_string& basic_string::insert(size_type, const value_type*)) \ Func(basic_string& basic_string::insert(size_type, size_type, value_type)) \ Func(basic_string& basic_string::insert(size_type, const value_type*, size_type)) \ Func(basic_string& basic_string::insert(size_type, const basic_string&, size_type, size_type)) \ Func(basic_string::iterator basic_string::insert(basic_string::const_iterator, value_type)) \ Func(basic_string& basic_string::replace(size_type, size_type, const value_type*)) \ Func(basic_string& basic_string::replace(size_type, size_type, size_type, value_type)) \ Func(basic_string& basic_string::replace(size_type, size_type, const value_type*, size_type)) \ Func(basic_string& basic_string::replace(size_type, size_type, const basic_string&, size_type, size_type)) \ Func(void basic_string::__grow_by_and_replace(size_type, size_type, size_type, size_type, size_type, size_type, const value_type*)) \ Func(void basic_string::resize(size_type, value_type)) \ Func(void basic_string::reserve(size_type)) \ Func(basic_string::size_type basic_string::copy(value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::find(value_type, size_type) const) \ Func(basic_string::size_type basic_string::find(const value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::rfind(value_type, size_type) const) \ Func(basic_string::size_type basic_string::rfind(const value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::find_first_of(const value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::find_last_of(const value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::find_first_not_of(const value_type*, size_type, size_type) const) \ Func(basic_string::size_type basic_string::find_last_not_of(const value_type*, size_type, size_type) const) \ Func(CharT& basic_string::at(size_type)) \ Func(const CharT& basic_string::at(size_type) const) \ Func(int basic_string::compare(const value_type*) const) \ Func(int basic_string::compare(size_type, size_type, const value_type*) const) \ Func(int basic_string::compare(size_type, size_type, const value_type*, size_type) const) \ Func(int basic_string::compare(size_type, size_type, const basic_string&, size_type, size_type) const) \ Func(const basic_string::size_type basic_string::npos) \ #define _LIBCPP_STRING_V1_EXTERN_TEMPLATE_LIST(Func, CharT) \ _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \ Func(basic_string::basic_string(const basic_string&)) \ Func(basic_string::basic_string(const basic_string&, const allocator&)) \ Func(basic_string& basic_string::assign(const value_type*)) \ Func(basic_string& basic_string::assign(const value_type*, size_type)) \ Func(basic_string& basic_string::operator=(basic_string const&)) \ Func(void basic_string::__grow_by(size_type, size_type, size_type, size_type, size_type, size_type)) \ Func(basic_string& basic_string::erase(size_type, size_type)) \ #define _LIBCPP_STRING_UNSTABLE_EXTERN_TEMPLATE_LIST(Func, CharT) \ _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \ Func(void basic_string::__init_copy_ctor_external(const value_type*, size_type)) \ Func(basic_string& basic_string::__assign_external(const value_type*, size_type)) \ Func(basic_string& basic_string::__assign_external(const value_type*)) \ Func(basic_string& basic_string::__assign_no_alias(const value_type*, size_type)) \ Func(basic_string& basic_string::__assign_no_alias(const value_type*, size_type)) \ Func(void basic_string::__erase_external_with_move(size_type, size_type)) // clang-format on #endif // _LIBCPP___STRING_EXTERN_TEMPLATE_LISTS_H