diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/deprecated/accessors/memory_traits.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/deprecated/accessors/memory_traits.h')
-rw-r--r-- | library/cpp/deprecated/accessors/memory_traits.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/library/cpp/deprecated/accessors/memory_traits.h b/library/cpp/deprecated/accessors/memory_traits.h new file mode 100644 index 0000000000..aa837705d3 --- /dev/null +++ b/library/cpp/deprecated/accessors/memory_traits.h @@ -0,0 +1,168 @@ +#pragma once + +#include <util/generic/array_ref.h> +#include <util/memory/blob.h> +#include <util/memory/tempbuf.h> +#include <util/generic/buffer.h> +#include <util/generic/strbuf.h> +#include <util/generic/string.h> +#include <util/generic/vector.h> +#include <util/generic/typetraits.h> + +#include <array> +#include <string> +#include <utility> + +template <typename T> +struct TMemoryTraits { + enum { + SimpleMemory = std::is_arithmetic<T>::value, + ContinuousMemory = SimpleMemory, + OwnsMemory = SimpleMemory, + }; + + using TElementType = T; +}; + +template <typename T, size_t n> +struct TMemoryTraits<T[n]> { + enum { + SimpleMemory = TMemoryTraits<T>::SimpleMemory, + ContinuousMemory = SimpleMemory, + OwnsMemory = SimpleMemory, + }; + + using TElementType = T; +}; + +template <typename T, size_t n> +struct TMemoryTraits<std::array<T, n>> { + enum { + SimpleMemory = TMemoryTraits<T>::SimpleMemory, + ContinuousMemory = SimpleMemory, + OwnsMemory = SimpleMemory, + }; + + using TElementType = T; +}; + +template <typename A, typename B> +struct TMemoryTraits<std::pair<A, B>> { + enum { + SimpleMemory = TMemoryTraits<A>::SimpleMemory && TMemoryTraits<B>::SimpleMemory, + ContinuousMemory = SimpleMemory, + OwnsMemory = SimpleMemory, + }; + + using TElementType = std::pair<A, B>; +}; + +template <> +struct TMemoryTraits<TBuffer> { + enum { + SimpleMemory = false, + ContinuousMemory = true, + OwnsMemory = true, + }; + + using TElementType = char; +}; + +template <> +struct TMemoryTraits<TTempBuf> { + enum { + SimpleMemory = false, + ContinuousMemory = true, + OwnsMemory = true, + }; + + using TElementType = char; +}; + +template <> +struct TMemoryTraits< ::TBlob> { + enum { + SimpleMemory = false, + ContinuousMemory = true, + OwnsMemory = true, + }; + + using TElementType = char; +}; + +template <typename T> +struct TElementDependentMemoryTraits { + enum { + SimpleMemory = false, + ContinuousMemory = TMemoryTraits<T>::SimpleMemory, + }; + + using TElementType = T; +}; + +template <typename T, typename TAlloc> +struct TMemoryTraits<std::vector<T, TAlloc>>: public TElementDependentMemoryTraits<T> { + enum { + OwnsMemory = TMemoryTraits<T>::OwnsMemory + }; +}; + +template <typename T, typename TAlloc> +struct TMemoryTraits<TVector<T, TAlloc>>: public TMemoryTraits<std::vector<T, TAlloc>> { +}; + +template <typename T> +struct TMemoryTraits<TTempArray<T>>: public TElementDependentMemoryTraits<T> { + enum { + OwnsMemory = TMemoryTraits<T>::OwnsMemory + }; +}; + +template <typename T, typename TCharTraits, typename TAlloc> +struct TMemoryTraits<std::basic_string<T, TCharTraits, TAlloc>>: public TElementDependentMemoryTraits<T> { + enum { + OwnsMemory = TMemoryTraits<T>::OwnsMemory + }; +}; + +template <> +struct TMemoryTraits<TString>: public TElementDependentMemoryTraits<char> { + enum { + OwnsMemory = true + }; +}; + +template <> +struct TMemoryTraits<TUtf16String>: public TElementDependentMemoryTraits<wchar16> { + enum { + OwnsMemory = true + }; +}; + +template <typename T> +struct TMemoryTraits<TArrayRef<T>>: public TElementDependentMemoryTraits<T> { + enum { + OwnsMemory = false + }; +}; + +template <typename TCharType, typename TCharTraits> +struct TMemoryTraits<TBasicStringBuf<TCharType, TCharTraits>>: public TElementDependentMemoryTraits<TCharType> { + enum { + OwnsMemory = false + }; +}; + +template <> +struct TMemoryTraits<TStringBuf>: public TElementDependentMemoryTraits<char> { + enum { + OwnsMemory = false + }; +}; + +template <> +struct TMemoryTraits<TWtringBuf>: public TElementDependentMemoryTraits<wchar16> { + enum { + OwnsMemory = false + }; +}; |