-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathslice.cpp
More file actions
75 lines (68 loc) · 2.68 KB
/
Copy pathslice.cpp
File metadata and controls
75 lines (68 loc) · 2.68 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "utils.h"
#include "range.h"
#include "slice.h"
std::string pyfunc::slice(std::string source, long long start_index, long long end_index, long long step) {
std::string str_range = "";
utils::__fix_index_range<long long>(start_index, end_index, source.length());
std::vector<long long> index_range = range<long long>(start_index, end_index, step);
for (size_t index : index_range) {
str_range += source[index];
}
return str_range;
}
template<typename T>
T* pyfunc::slice(T* source, size_t size, long long start_index, long long end_index, long long step) {
utils::__fix_index_range<long long>(start_index, end_index, size);
std::vector<long long> index_range = range<long long>(start_index, end_index, step);
T* T_array;
if (typeid(T) == typeid(char)) {
T_array = new T[index_range.size() + 1];
T_array[index_range.size()] = '\0';
}
else {
T_array = new T[index_range.size()];
}
for (size_t index = 0; index < index_range.size(); index++) {
T_array[index] = source[index_range[index]];
}
return T_array;
}
template<typename T>
T* pyfunc::slice(const T* source, size_t size, long long start_index, long long end_index, long long step) {
utils::__fix_index_range<long long>(start_index, end_index, size);
std::vector<long long> index_range = range<long long>(start_index, end_index, step);
T* T_array;
if (typeid(T) == typeid(char)) {
T_array = new T[index_range.size() + 1];
T_array[index_range.size()] = '\0';
}
else {
T_array = new T[index_range.size()];
}
for (size_t index = 0; index < index_range.size(); index++) {
T_array[index] = source[index_range[index]];
}
return T_array;
}
/*
template<typename T, size_t size ,size_t size_2>
std::array<T, size_2> pyfunc::range(std::array<T, size> source, long long start_index, long long end_index, long long step) {
utils::__fix_index_range(start_index, end_index, size);
std::vector<long long> index_range = range<long long>(start_index, end_index, step);
std::array<T, size_2 > T_t_array;
for (size_t index = 0; index < index_range.size(); index++) {
T_t_array[index] = source[index_range[index]];
}
return T_t_array;
}
*/
template<typename T>
std::vector<T> pyfunc::slice(std::vector<T> source, long long start_index, long long end_index, long long step) {
std::vector<T> T_vector{};
utils::__fix_index_range<long long>(start_index, end_index, source.size());
std::vector<long long> index_range = range<long long>(start_index, end_index, step);
for (size_t index : index_range) {
T_vector.push_back(source[index]);
}
return T_vector;
}