20#include "pw_span/span.h"
21#include "pw_thread_backend/stack.h"
29using ThreadStackPointer =
30 decltype(std::declval<thread::backend::Stack<0>>().data());
34constexpr auto ThreadStackSpan(T* pointer,
size_t size) {
35 if constexpr (std::is_void_v<T>) {
36 return span(
static_cast<std::byte*
>(pointer), size);
38 return span(pointer, size);
43constexpr auto NativeStackSizeBytes(
size_t size) {
44 using T = std::remove_pointer_t<ThreadStackPointer>;
45 return size *
sizeof(std::conditional_t<std::is_void_v<T>, std::byte, T>);
62template <
size_t kStackSizeBytes>
70 using native = internal::ThreadStackPointer;
76 return native_stack_.data();
84 return native_stack_.size();
89 std::is_same_v<decltype(thread::backend::Stack<kStackSizeBytes>().data()),
91 "Stack pointer type must not change with size");
92 static_assert(std::is_pointer_v<native>,
".data() must return a pointer");
94 thread::backend::Stack<kStackSizeBytes> native_stack_;
constexpr native native_pointer()
Definition: stack.h:75
constexpr size_t native_size() const
Definition: stack.h:83
internal::ThreadStackPointer native
Definition: stack.h:70
The Pigweed namespace.
Definition: alignment.h:27