nngn
Loading...
Searching...
No Matches
span.h
Go to the documentation of this file.
1#ifndef NNGN_UTILS_SPAN_H
2#define NNGN_UTILS_SPAN_H
3
4#include <algorithm>
5#include <cassert>
6#include <span>
7#include <string_view>
8
9namespace nngn {
10
11template<typename T>
12std::span<T> slice(std::span<T> s, auto b, auto e) {
13 using I = std::ptrdiff_t;
14 const auto n = static_cast<I>(s.size());
15 auto bi = static_cast<I>(b);
16 auto ei = static_cast<I>(e);
17 bi = std::clamp(bi, I{}, n);
18 ei = std::clamp(ei, bi, n);
19 bi = std::min(bi, ei);
20 return s.subspan(
21 static_cast<std::size_t>(bi),
22 static_cast<std::size_t>(ei - bi));
23}
24
25template<typename T>
26auto split(std::span<T> s, std::size_t i) {
27 assert(i <= size(s));
28 return std::pair{s.subspan(0, i), s.subspan(i)};
29}
30
31inline auto split(std::string_view s, std::string_view::iterator i) {
32 return std::pair{
33 std::string_view{begin(s), i},
34 std::string_view{i, end(s)},
35 };
36}
37
38}
39
40#endif
function DEMO text end
Definition: demo0.lua:6
for i
Definition: font.lua:5
assert
Definition: debug.lua:3
n
Definition: dump_lights.lua:5
std::chrono::seconds s
Definition: timing.cpp:6
e
Definition: math.lua:4
auto size(const Colliders &c)
Definition: lua_collision.cpp:29
Definition: audio.cpp:7
constexpr const R * begin(const T< R > &v)
Definition: vec.h:207
std::span< T > slice(std::span< T > s, auto b, auto e)
Definition: span.h:10
auto split(std::span< T > s, std::size_t i)
Definition: span.h:24