diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:17 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:17 +0300 |
commit | d3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch) | |
tree | dd4bd3ca0f36b817e96812825ffaf10d645803f2 /util/generic/mem_copy.h | |
parent | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff) | |
download | ydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'util/generic/mem_copy.h')
-rw-r--r-- | util/generic/mem_copy.h | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/util/generic/mem_copy.h b/util/generic/mem_copy.h index 2e97d265e9..b68c852953 100644 --- a/util/generic/mem_copy.h +++ b/util/generic/mem_copy.h @@ -1,55 +1,55 @@ -#pragma once - -#include "typetraits.h" - -#include <util/system/types.h> - -#include <cstring> - -template <class T> +#pragma once + +#include "typetraits.h" + +#include <util/system/types.h> + +#include <cstring> + +template <class T> using TIfPOD = std::enable_if_t<TTypeTraits<T>::IsPod, T*>; - -template <class T> + +template <class T> using TIfNotPOD = std::enable_if_t<!TTypeTraits<T>::IsPod, T*>; - -template <class T> + +template <class T> static inline TIfPOD<T> MemCopy(T* to, const T* from, size_t n) noexcept { - if (n) { - memcpy(to, from, n * sizeof(T)); - } - - return to; -} - -template <class T> -static inline TIfNotPOD<T> MemCopy(T* to, const T* from, size_t n) { - for (size_t i = 0; i < n; ++i) { - to[i] = from[i]; - } - - return to; -} - -template <class T> + if (n) { + memcpy(to, from, n * sizeof(T)); + } + + return to; +} + +template <class T> +static inline TIfNotPOD<T> MemCopy(T* to, const T* from, size_t n) { + for (size_t i = 0; i < n; ++i) { + to[i] = from[i]; + } + + return to; +} + +template <class T> static inline TIfPOD<T> MemMove(T* to, const T* from, size_t n) noexcept { - if (n) { - memmove(to, from, n * sizeof(T)); - } - - return to; -} - -template <class T> -static inline TIfNotPOD<T> MemMove(T* to, const T* from, size_t n) { - if (to <= from || to >= from + n) { - return MemCopy(to, from, n); - } - - //copy backwards - while (n) { - to[n - 1] = from[n - 1]; - --n; - } - - return to; -} + if (n) { + memmove(to, from, n * sizeof(T)); + } + + return to; +} + +template <class T> +static inline TIfNotPOD<T> MemMove(T* to, const T* from, size_t n) { + if (to <= from || to >= from + n) { + return MemCopy(to, from, n); + } + + //copy backwards + while (n) { + to[n - 1] = from[n - 1]; + --n; + } + + return to; +} |