20#include "pw_span/span.h"
21#include "pw_thread_backend/stack.h"
26using ThreadStackPointer =
27 decltype(std::declval<thread::backend::Stack<0>>().data());
31constexpr auto ThreadStackSpan(T* pointer,
size_t size) {
32 if constexpr (std::is_void_v<T>) {
33 return span(
static_cast<std::byte*
>(pointer), size);
35 return span(pointer, size);
40constexpr auto NativeStackSizeBytes(
size_t size) {
41 using T = std::remove_pointer_t<ThreadStackPointer>;
42 return size *
sizeof(std::conditional_t<std::is_void_v<T>, std::byte, T>);
59template <
size_t kStackSizeBytes>
67 using native = internal::ThreadStackPointer;
73 return native_stack_.data();
81 return native_stack_.size();
86 std::is_same_v<decltype(thread::backend::Stack<kStackSizeBytes>().data()),
88 "Stack pointer type must not change with size");
89 static_assert(std::is_pointer_v<native>,
".data() must return a pointer");
91 thread::backend::Stack<kStackSizeBytes> native_stack_;
constexpr native native_pointer()
Definition: stack.h:72
constexpr size_t native_size() const
Definition: stack.h:80
internal::ThreadStackPointer native
Definition: stack.h:67
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27