types: introduce to_bytes_opt_vec function.

It converts a vector<bytes_view_opt> to a vector<bytes_opt>.
Used in a bunch of places.
This commit is contained in:
Kamil Braun
2019-10-21 10:16:05 +02:00
parent 8ff2aebd76
commit abe6c2d3d2
4 changed files with 15 additions and 13 deletions

View File

@@ -92,15 +92,8 @@ tuples::in_value::from_serialized(const fragmented_temporary_buffer::view& value
std::vector<std::vector<bytes_opt>> elements;
elements.reserve(l.size());
for (auto&& element : l) {
auto tuple_buff = ttype->decompose(element);
auto tuple = ttype->split(tuple_buff);
std::vector<bytes_opt> elems;
elems.reserve(tuple.size());
for (auto&& e : tuple) {
elems.emplace_back(to_bytes_opt(e));
}
elements.emplace_back(std::move(elems));
for (auto&& e : l) {
elements.emplace_back(to_bytes_opt_vec(ttype->split(ttype->decompose(e))));
}
return tuples::in_value(elements);
});

View File

@@ -112,10 +112,8 @@ public:
value(std::vector<bytes_opt> elements)
: _elements(std::move(elements)) {
}
value(std::vector<bytes_view_opt> elements) {
for (auto&& e : elements) {
_elements.push_back(e ? bytes_opt(bytes(e->begin(), e->size())) : bytes_opt());
}
value(std::vector<bytes_view_opt> elements)
: value(to_bytes_opt_vec(std::move(elements))) {
}
static value from_serialized(const fragmented_temporary_buffer::view& buffer, const tuple_type_impl& type) {
return with_linearized(buffer, [&] (bytes_view view) {

View File

@@ -96,6 +96,15 @@ sstring inet_to_string(const seastar::net::inet_address& addr) {
return out.str();
}
std::vector<bytes_opt> to_bytes_opt_vec(const std::vector<bytes_view_opt>& v) {
std::vector<bytes_opt> r;
r.reserve(v.size());
for (auto& e: v) {
r.push_back(to_bytes_opt(e));
}
return r;
}
static const char* byte_type_name = "org.apache.cassandra.db.marshal.ByteType";
static const char* short_type_name = "org.apache.cassandra.db.marshal.ShortType";
static const char* int32_type_name = "org.apache.cassandra.db.marshal.Int32Type";

View File

@@ -1055,6 +1055,8 @@ to_bytes_opt(bytes_view_opt bv) {
return std::nullopt;
}
std::vector<bytes_opt> to_bytes_opt_vec(const std::vector<bytes_view_opt>&);
inline
bytes_view_opt
as_bytes_view_opt(const bytes_opt& bv) {