diff options
author | mcheshkov <mcheshkov@yandex-team.ru> | 2022-02-10 16:46:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:15 +0300 |
commit | e9d19cec64684c9c1e6b0c98297e5b895cf904fe (patch) | |
tree | 2768b1223e96a8a0610a93d18425d9647c1123c8 /contrib/libs/icu/common/capi_helper.h | |
parent | 60040c91ffe701a84689b2c6310ff845e65cff42 (diff) | |
download | ydb-e9d19cec64684c9c1e6b0c98297e5b895cf904fe.tar.gz |
Restoring authorship annotation for <mcheshkov@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/icu/common/capi_helper.h')
-rw-r--r-- | contrib/libs/icu/common/capi_helper.h | 194 |
1 files changed, 97 insertions, 97 deletions
diff --git a/contrib/libs/icu/common/capi_helper.h b/contrib/libs/icu/common/capi_helper.h index 54b1db9e33..85c0d28d3f 100644 --- a/contrib/libs/icu/common/capi_helper.h +++ b/contrib/libs/icu/common/capi_helper.h @@ -1,97 +1,97 @@ -// © 2018 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -#ifndef __CAPI_HELPER_H__ -#define __CAPI_HELPER_H__ - -#include "unicode/utypes.h" - -U_NAMESPACE_BEGIN - -/** - * An internal helper class to help convert between C and C++ APIs. - */ -template<typename CType, typename CPPType, int32_t kMagic> -class IcuCApiHelper { - public: - /** - * Convert from the C type to the C++ type (const version). - */ - static const CPPType* validate(const CType* input, UErrorCode& status); - - /** - * Convert from the C type to the C++ type (non-const version). - */ - static CPPType* validate(CType* input, UErrorCode& status); - - /** - * Convert from the C++ type to the C type (const version). - */ - const CType* exportConstForC() const; - - /** - * Convert from the C++ type to the C type (non-const version). - */ - CType* exportForC(); - - /** - * Invalidates the object. - */ - ~IcuCApiHelper(); - - private: - /** - * While the object is valid, fMagic equals kMagic. - */ - int32_t fMagic = kMagic; -}; - - -template<typename CType, typename CPPType, int32_t kMagic> -const CPPType* -IcuCApiHelper<CType, CPPType, kMagic>::validate(const CType* input, UErrorCode& status) { - if (U_FAILURE(status)) { - return nullptr; - } - if (input == nullptr) { - status = U_ILLEGAL_ARGUMENT_ERROR; - return nullptr; - } - auto* impl = reinterpret_cast<const CPPType*>(input); - if (static_cast<const IcuCApiHelper<CType, CPPType, kMagic>*>(impl)->fMagic != kMagic) { - status = U_INVALID_FORMAT_ERROR; - return nullptr; - } - return impl; -} - -template<typename CType, typename CPPType, int32_t kMagic> -CPPType* -IcuCApiHelper<CType, CPPType, kMagic>::validate(CType* input, UErrorCode& status) { - auto* constInput = static_cast<const CType*>(input); - auto* validated = validate(constInput, status); - return const_cast<CPPType*>(validated); -} - -template<typename CType, typename CPPType, int32_t kMagic> -const CType* -IcuCApiHelper<CType, CPPType, kMagic>::exportConstForC() const { - return reinterpret_cast<const CType*>(static_cast<const CPPType*>(this)); -} - -template<typename CType, typename CPPType, int32_t kMagic> -CType* -IcuCApiHelper<CType, CPPType, kMagic>::exportForC() { - return reinterpret_cast<CType*>(static_cast<CPPType*>(this)); -} - -template<typename CType, typename CPPType, int32_t kMagic> -IcuCApiHelper<CType, CPPType, kMagic>::~IcuCApiHelper() { - // head off application errors by preventing use of of deleted objects. - fMagic = 0; -} - - -U_NAMESPACE_END - -#endif // __CAPI_HELPER_H__ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef __CAPI_HELPER_H__ +#define __CAPI_HELPER_H__ + +#include "unicode/utypes.h" + +U_NAMESPACE_BEGIN + +/** + * An internal helper class to help convert between C and C++ APIs. + */ +template<typename CType, typename CPPType, int32_t kMagic> +class IcuCApiHelper { + public: + /** + * Convert from the C type to the C++ type (const version). + */ + static const CPPType* validate(const CType* input, UErrorCode& status); + + /** + * Convert from the C type to the C++ type (non-const version). + */ + static CPPType* validate(CType* input, UErrorCode& status); + + /** + * Convert from the C++ type to the C type (const version). + */ + const CType* exportConstForC() const; + + /** + * Convert from the C++ type to the C type (non-const version). + */ + CType* exportForC(); + + /** + * Invalidates the object. + */ + ~IcuCApiHelper(); + + private: + /** + * While the object is valid, fMagic equals kMagic. + */ + int32_t fMagic = kMagic; +}; + + +template<typename CType, typename CPPType, int32_t kMagic> +const CPPType* +IcuCApiHelper<CType, CPPType, kMagic>::validate(const CType* input, UErrorCode& status) { + if (U_FAILURE(status)) { + return nullptr; + } + if (input == nullptr) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return nullptr; + } + auto* impl = reinterpret_cast<const CPPType*>(input); + if (static_cast<const IcuCApiHelper<CType, CPPType, kMagic>*>(impl)->fMagic != kMagic) { + status = U_INVALID_FORMAT_ERROR; + return nullptr; + } + return impl; +} + +template<typename CType, typename CPPType, int32_t kMagic> +CPPType* +IcuCApiHelper<CType, CPPType, kMagic>::validate(CType* input, UErrorCode& status) { + auto* constInput = static_cast<const CType*>(input); + auto* validated = validate(constInput, status); + return const_cast<CPPType*>(validated); +} + +template<typename CType, typename CPPType, int32_t kMagic> +const CType* +IcuCApiHelper<CType, CPPType, kMagic>::exportConstForC() const { + return reinterpret_cast<const CType*>(static_cast<const CPPType*>(this)); +} + +template<typename CType, typename CPPType, int32_t kMagic> +CType* +IcuCApiHelper<CType, CPPType, kMagic>::exportForC() { + return reinterpret_cast<CType*>(static_cast<CPPType*>(this)); +} + +template<typename CType, typename CPPType, int32_t kMagic> +IcuCApiHelper<CType, CPPType, kMagic>::~IcuCApiHelper() { + // head off application errors by preventing use of of deleted objects. + fMagic = 0; +} + + +U_NAMESPACE_END + +#endif // __CAPI_HELPER_H__ |