@@ -43,6 +43,12 @@ namespace scale {
43
43
std::vector<bool>>)
44
44
{
45
45
encode (as_compact (collection.size ()), encoder);
46
+ if constexpr (std::same_as<
47
+ std::remove_cvref_t <decltype (*std::begin (collection))>,
48
+ uint8_t >) {
49
+ encoder.write (collection);
50
+ return ;
51
+ }
46
52
for (auto &&item : std::forward<decltype (collection)>(collection)) {
47
53
encode (std::as_const (item), encoder);
48
54
}
@@ -57,6 +63,12 @@ namespace scale {
57
63
requires NoTagged<decltype(collection)>
58
64
and (not DecomposableArray<decltype (collection)>)
59
65
{
66
+ if constexpr (std::same_as<
67
+ std::remove_cvref_t <decltype (*std::begin (collection))>,
68
+ uint8_t >) {
69
+ encoder.write (collection);
70
+ return ;
71
+ }
60
72
for (auto &&item : std::forward<decltype (collection)>(collection)) {
61
73
encode (std::as_const (item), encoder);
62
74
}
@@ -111,6 +123,15 @@ namespace scale {
111
123
112
124
auto &mutable_collection = reinterpret_cast <MutableCollection &>(
113
125
const_cast <Collection &>(collection));
126
+
127
+ if constexpr (std::same_as<std::remove_cvref_t <decltype (*std::begin (
128
+ mutable_collection))>,
129
+ uint8_t >) {
130
+ if (decoder.isContinuousSource ()) {
131
+ decoder.read (mutable_collection);
132
+ return ;
133
+ }
134
+ }
114
135
for (decltype (auto ) item : mutable_collection) {
115
136
decode (item, decoder);
116
137
}
@@ -174,6 +195,14 @@ namespace scale {
174
195
raise (DecodeError::TOO_MANY_ITEMS);
175
196
}
176
197
198
+ if constexpr (std::same_as<std::remove_cvref_t <decltype (*std::begin (
199
+ mutable_collection))>,
200
+ uint8_t >) {
201
+ if (decoder.isContinuousSource ()) {
202
+ decoder.read (mutable_collection);
203
+ return ;
204
+ }
205
+ }
177
206
for (decltype (auto ) item : mutable_collection) {
178
207
decode (item, decoder);
179
208
}
0 commit comments