| 160 | // accept aligned_ptr<T, N> instead of T* to prevent silent alignment loss. |
| 161 | template <typename T, fl::size_t N> |
| 162 | class aligned_ptr { |
| 163 | T *mPtr; |
| 164 | |
| 165 | public: |
| 166 | aligned_ptr() FL_NOEXCEPT : mPtr(nullptr) {} |
| 167 | explicit aligned_ptr(T *p) FL_NOEXCEPT : mPtr(assume_aligned<N>(p)) {} |
| 168 | |
| 169 | T *get() const FL_NOEXCEPT { return assume_aligned<N>(mPtr); } |
| 170 | T &operator[](fl::size_t i) const FL_NOEXCEPT { return get()[i]; } |
| 171 | explicit operator bool() const FL_NOEXCEPT { return mPtr != nullptr; } |
| 172 | }; |
| 173 | |
| 174 | } // namespace fl |