-
Notifications
You must be signed in to change notification settings - Fork 0
/
StringSlicing.h
53 lines (43 loc) · 1.15 KB
/
StringSlicing.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
#include <stdexcept>
#include <string>
#include <string_view>
namespace stdproposal
{
// functions should obviously be part of std::basic_string and std::basic_string_view
// these are now free functions to show off implementation
// 1
std::string subview(const std::string& source, size_t start, size_t end)
{
if (start >= source.size())
{
throw std::out_of_range{ "subview() > Start is out of range" };
}
if (end > source.size())
{
end = source.size();
}
if (end < start)
{
end = start;
}
return std::string(source.data() + start, end - start);
}
// 2
std::string_view subview(const std::string_view source, size_t start, size_t end)
{
if (start >= source.size())
{
throw std::out_of_range{ "subview() > Start is out of range" };
}
if (end > source.size())
{
end = source.size();
}
if (end < start)
{
end = start;
}
return std::string_view(source.data() + start, end - start);
}
}