aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/icu/include/unicode/localpointer.h
diff options
context:
space:
mode:
authorromankoshelev <romankoshelev@yandex-team.com>2024-05-13 11:00:27 +0300
committerromankoshelev <romankoshelev@yandex-team.com>2024-05-13 11:13:05 +0300
commit5b22fadb0f035a3b82c328e0ae710ad2b92f6eac (patch)
treee15dc649c79c4fb78f35cd6694dfe9af9bfcc0ad /contrib/libs/icu/include/unicode/localpointer.h
parent5946aa7d3cbca62f6bcf074e8a2b9346e7a96af4 (diff)
downloadydb-5b22fadb0f035a3b82c328e0ae710ad2b92f6eac.tar.gz
Update ICU to 75.1
904da4ae1c86fc5542eac7f1cd18d97b72eb8517
Diffstat (limited to 'contrib/libs/icu/include/unicode/localpointer.h')
-rw-r--r--contrib/libs/icu/include/unicode/localpointer.h100
1 files changed, 57 insertions, 43 deletions
diff --git a/contrib/libs/icu/include/unicode/localpointer.h b/contrib/libs/icu/include/unicode/localpointer.h
index b8be3d7942..9c891bf308 100644
--- a/contrib/libs/icu/include/unicode/localpointer.h
+++ b/contrib/libs/icu/include/unicode/localpointer.h
@@ -162,11 +162,11 @@ protected:
T *ptr;
private:
// No comparison operators with other LocalPointerBases.
- bool operator==(const LocalPointerBase<T> &other);
- bool operator!=(const LocalPointerBase<T> &other);
+ bool operator==(const LocalPointerBase<T> &other) = delete;
+ bool operator!=(const LocalPointerBase<T> &other) = delete;
// No ownership sharing: No copy constructor, no assignment operator.
- LocalPointerBase(const LocalPointerBase<T> &other);
- void operator=(const LocalPointerBase<T> &other);
+ LocalPointerBase(const LocalPointerBase<T> &other) = delete;
+ void operator=(const LocalPointerBase<T> &other) = delete;
};
/**
@@ -548,46 +548,60 @@ public:
* @stable ICU 4.4
*/
#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \
- class LocalPointerClassName : public LocalPointerBase<Type> { \
- public: \
- using LocalPointerBase<Type>::operator*; \
- using LocalPointerBase<Type>::operator->; \
- explicit LocalPointerClassName(Type *p=nullptr) : LocalPointerBase<Type>(p) {} \
- LocalPointerClassName(LocalPointerClassName &&src) noexcept \
- : LocalPointerBase<Type>(src.ptr) { \
- src.ptr=nullptr; \
- } \
- /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */ \
- explicit LocalPointerClassName(std::unique_ptr<Type, decltype(&closeFunction)> &&p) \
- : LocalPointerBase<Type>(p.release()) {} \
- ~LocalPointerClassName() { if (ptr != nullptr) { closeFunction(ptr); } } \
- LocalPointerClassName &operator=(LocalPointerClassName &&src) noexcept { \
- if (ptr != nullptr) { closeFunction(ptr); } \
- LocalPointerBase<Type>::ptr=src.ptr; \
- src.ptr=nullptr; \
- return *this; \
- } \
- /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */ \
- LocalPointerClassName &operator=(std::unique_ptr<Type, decltype(&closeFunction)> &&p) { \
- adoptInstead(p.release()); \
- return *this; \
- } \
- void swap(LocalPointerClassName &other) noexcept { \
- Type *temp=LocalPointerBase<Type>::ptr; \
- LocalPointerBase<Type>::ptr=other.ptr; \
- other.ptr=temp; \
- } \
- friend inline void swap(LocalPointerClassName &p1, LocalPointerClassName &p2) noexcept { \
- p1.swap(p2); \
- } \
- void adoptInstead(Type *p) { \
- if (ptr != nullptr) { closeFunction(ptr); } \
- ptr=p; \
- } \
- operator std::unique_ptr<Type, decltype(&closeFunction)> () && { \
- return std::unique_ptr<Type, decltype(&closeFunction)>(LocalPointerBase<Type>::orphan(), closeFunction); \
- } \
+ using LocalPointerClassName = internal::LocalOpenPointer<Type, closeFunction>
+
+#ifndef U_IN_DOXYGEN
+namespace internal {
+/**
+ * Implementation, do not use directly: use U_DEFINE_LOCAL_OPEN_POINTER.
+ *
+ * @see U_DEFINE_LOCAL_OPEN_POINTER
+ * @internal
+ */
+template <typename Type, auto closeFunction>
+class LocalOpenPointer : public LocalPointerBase<Type> {
+ using LocalPointerBase<Type>::ptr;
+public:
+ using LocalPointerBase<Type>::operator*;
+ using LocalPointerBase<Type>::operator->;
+ explicit LocalOpenPointer(Type *p=nullptr) : LocalPointerBase<Type>(p) {}
+ LocalOpenPointer(LocalOpenPointer &&src) noexcept
+ : LocalPointerBase<Type>(src.ptr) {
+ src.ptr=nullptr;
+ }
+ /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */
+ explicit LocalOpenPointer(std::unique_ptr<Type, decltype(closeFunction)> &&p)
+ : LocalPointerBase<Type>(p.release()) {}
+ ~LocalOpenPointer() { if (ptr != nullptr) { closeFunction(ptr); } }
+ LocalOpenPointer &operator=(LocalOpenPointer &&src) noexcept {
+ if (ptr != nullptr) { closeFunction(ptr); }
+ LocalPointerBase<Type>::ptr=src.ptr;
+ src.ptr=nullptr;
+ return *this;
+ }
+ /* TODO: Be agnostic of the deleter function signature from the user-provided std::unique_ptr? */
+ LocalOpenPointer &operator=(std::unique_ptr<Type, decltype(closeFunction)> &&p) {
+ adoptInstead(p.release());
+ return *this;
+ }
+ void swap(LocalOpenPointer &other) noexcept {
+ Type *temp=LocalPointerBase<Type>::ptr;
+ LocalPointerBase<Type>::ptr=other.ptr;
+ other.ptr=temp;
+ }
+ friend inline void swap(LocalOpenPointer &p1, LocalOpenPointer &p2) noexcept {
+ p1.swap(p2);
}
+ void adoptInstead(Type *p) {
+ if (ptr != nullptr) { closeFunction(ptr); }
+ ptr=p;
+ }
+ operator std::unique_ptr<Type, decltype(closeFunction)> () && {
+ return std::unique_ptr<Type, decltype(closeFunction)>(LocalPointerBase<Type>::orphan(), closeFunction);
+ }
+};
+} // namespace internal
+#endif
U_NAMESPACE_END