Skip to content

Commit 6c8ac69

Browse files
authored
Merge pull request #1367 from anforowicz/rust-slice-from-vec
Ergonomics: allow constructing `rust::Slice` from any C++ container.
2 parents a73ec24 + feacee0 commit 6c8ac69

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

include/cxx.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ class Slice final
176176
Slice() noexcept;
177177
Slice(T *, std::size_t count) noexcept;
178178

179+
template <typename C>
180+
explicit Slice(C& c) : Slice(c.data(), c.size()) {}
181+
179182
Slice &operator=(const Slice<T> &) &noexcept = default;
180183
Slice &operator=(Slice<T> &&) &noexcept = default;
181184

tests/ffi/tests.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,12 @@ extern "C" const char *cxx_run_test() noexcept {
884884
rust::String bad_utf16_rstring = rust::String::lossy(bad_utf16_literal);
885885
ASSERT(bad_utf8_rstring == bad_utf16_rstring);
886886

887+
std::vector<int> cpp_vec{1, 2, 3};
888+
rust::Slice<int> slice_of_cpp_vec(cpp_vec);
889+
ASSERT(slice_of_cpp_vec.data() == cpp_vec.data());
890+
ASSERT(slice_of_cpp_vec.size() == cpp_vec.size());
891+
ASSERT(slice_of_cpp_vec[0] == 1);
892+
887893
rust::Vec<int> vec1{1, 2};
888894
rust::Vec<int> vec2{3, 4};
889895
swap(vec1, vec2);

0 commit comments

Comments
 (0)