Skip to content

Commit f68925a

Browse files
committed
slight refactor
1 parent 691a6bc commit f68925a

File tree

3 files changed

+36
-36
lines changed

3 files changed

+36
-36
lines changed

cp-algo/math/cvector.hpp

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,39 @@ namespace cp_algo::math::fft {
1414
static constexpr size_t flen = vftype::size();
1515

1616
struct cvector {
17+
std::vector<vftype> x, y;
18+
cvector(size_t n) {
19+
n = std::max(flen, std::bit_ceil(n));
20+
x.resize(n / flen);
21+
y.resize(n / flen);
22+
checkpoint("cvector create");
23+
}
24+
template<class pt = point>
25+
void set(size_t k, pt t) {
26+
if constexpr(std::is_same_v<pt, point>) {
27+
x[k / flen][k % flen] = real(t);
28+
y[k / flen][k % flen] = imag(t);
29+
} else {
30+
x[k / flen] = real(t);
31+
y[k / flen] = imag(t);
32+
}
33+
}
34+
template<class pt = point>
35+
pt get(size_t k) const {
36+
if constexpr(std::is_same_v<pt, point>) {
37+
return {x[k / flen][k % flen], y[k / flen][k % flen]};
38+
} else {
39+
return {x[k / flen], y[k / flen]};
40+
}
41+
}
42+
vpoint vget(size_t k) const {
43+
return get<vpoint>(k);
44+
}
45+
46+
size_t size() const {
47+
return flen * std::size(x);
48+
}
49+
1750
static constexpr size_t pre_roots = 1 << 16;
1851
static constexpr std::array<point, pre_roots> roots = []() {
1952
std::array<point, pre_roots> res = {};
@@ -77,40 +110,6 @@ namespace cp_algo::math::fft {
77110
callback(i, eval_point(i));
78111
}
79112
}
80-
std::vector<vftype> x, y;
81-
cvector(size_t n) {
82-
n = std::max(flen, std::bit_ceil(n));
83-
x.resize(n / flen);
84-
y.resize(n / flen);
85-
checkpoint("cvector create");
86-
}
87-
template<class pt = point>
88-
void set(size_t k, pt t) {
89-
if constexpr(std::is_same_v<pt, point>) {
90-
x[k / flen][k % flen] = real(t);
91-
y[k / flen][k % flen] = imag(t);
92-
} else {
93-
x[k / flen] = real(t);
94-
y[k / flen] = imag(t);
95-
}
96-
}
97-
template<class pt = point>
98-
pt get(size_t k) const {
99-
if constexpr(std::is_same_v<pt, point>) {
100-
return {x[k / flen][k % flen], y[k / flen][k % flen]};
101-
} else {
102-
return {x[k / flen], y[k / flen]};
103-
}
104-
}
105-
vpoint vget(size_t k) const {
106-
return get<vpoint>(k);
107-
}
108-
109-
size_t size() const {
110-
return flen * std::size(x);
111-
}
112-
113-
114113
static auto dot_block(size_t k, cvector const& A, cvector const& B) {
115114
auto rt = eval_point(k / flen / 2);
116115
if(k / flen % 2) {

cp-algo/util/bump_alloc.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace cp_algo {
55
alignas(64) char buf[450 << 20];
66
size_t buf_ind = sizeof buf;
77
template<class T> struct bump_alloc {
8-
typedef T value_type;
9-
bump_alloc() {}
8+
using value_type = T;
9+
bump_alloc() = default;
1010
template<class U> bump_alloc(const U&) {}
1111
T* allocate(size_t n) {
1212
buf_ind -= n * sizeof(T);

verify/poly/wildcard.test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ string matches(string const& A, string const& B, char wild = '*') {
5252
for(size_t j = 0; j < size(ans); j++) {
5353
ans[j] = '0' + is_integer(P[0].get(size(B) - 1 + j));
5454
}
55+
cp_algo::checkpoint("fill answer");
5556
return ans;
5657
}
5758

0 commit comments

Comments
 (0)