tesseract++ 0.0.1
N-dimensional tensor library for embedded systems
Loading...
Searching...
No Matches
mem_utils.h
Go to the documentation of this file.
1#pragma once
2
3#include "config.h"
5
11namespace detail
12{
13
24 inline void memset(void *ptr, int value, my_size_t size) noexcept
25 {
26#if defined(__has_builtin) && __has_builtin(__builtin_memset)
27 __builtin_memset(ptr, value, size);
28#else
29 auto *p = static_cast<unsigned char *>(ptr);
30 for (my_size_t i = 0; i < size; ++i)
31 p[i] = static_cast<unsigned char>(value);
32#endif
33 }
34
45 inline void memcpy(void *dst, const void *src, my_size_t size) noexcept
46 {
47#if defined(__has_builtin) && __has_builtin(__builtin_memcpy)
48 __builtin_memcpy(dst, src, size);
49#else
50 auto *d = static_cast<unsigned char *>(dst);
51 const auto *s = static_cast<const unsigned char *>(src);
52 for (my_size_t i = 0; i < size; ++i)
53 d[i] = s[i];
54#endif
55 }
56
57} // namespace detail
58
70template <typename T>
71inline void fill_n_optimized(T *ptr, my_size_t count, const T &value)
72{
73 if constexpr (is_pod_v<T>)
74 {
75 if (value == T{})
76 {
77 detail::memset(ptr, 0, count * sizeof(T));
78 return;
79 }
80 }
81
82 for (my_size_t i = 0; i < count; ++i)
83 {
84 ptr[i] = value;
85 }
86}
87
99template <typename T>
100inline void copy_n_optimized(const T *src, T *dst, my_size_t count)
101{
102 if constexpr (is_pod_v<T>)
103 {
104 detail::memcpy(dst, src, count * sizeof(T));
105 return;
106 }
107
108 for (my_size_t i = 0; i < count; ++i)
109 {
110 dst[i] = src[i];
111 }
112}
Global configuration for the tesseract tensor library.
#define my_size_t
Size/index type used throughout the library.
Definition config.h:126
void copy_n_optimized(const T *src, T *dst, my_size_t count)
Copy elements from a source buffer to a destination buffer.
Definition mem_utils.h:100
void fill_n_optimized(T *ptr, my_size_t count, const T &value)
Fill a contiguous buffer with a given value.
Definition mem_utils.h:71
Definition BaseExpr.h:4
void memcpy(void *dst, const void *src, my_size_t size) noexcept
Copy a block of memory.
Definition mem_utils.h:45
void memset(void *ptr, int value, my_size_t size) noexcept
Fill a block of memory with a byte value.
Definition mem_utils.h:24