Skip to content

Commit 5945e56

Browse files
committed
Add &mut [u8] to readme and website
1 parent c5629f0 commit 5945e56

File tree

5 files changed

+17
-6
lines changed

5 files changed

+17
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ returns of functions.
323323
<tr><td>String</td><td>rust::String</td><td></td></tr>
324324
<tr><td>&amp;str</td><td>rust::Str</td><td></td></tr>
325325
<tr><td>&amp;[u8]</td><td>rust::Slice&lt;const uint8_t&gt;</td><td><sup><i>arbitrary &amp;[T] not implemented yet</i></sup></td></tr>
326+
<tr><td>&amp;mut [u8]</td><td>rust::Slice&lt;uint8_t&gt;</td><td><sup><i>arbitrary &amp;mut [T] not implemented yet</i></sup></td></tr>
326327
<tr><td><a href="https://docs.rs/cxx/1.0/cxx/struct.CxxString.html">CxxString</a></td><td>std::string</td><td><sup><i>cannot be passed by value</i></sup></td></tr>
327328
<tr><td>Box&lt;T&gt;</td><td>rust::Box&lt;T&gt;</td><td><sup><i>cannot hold opaque C++ type</i></sup></td></tr>
328329
<tr><td><a href="https://docs.rs/cxx/1.0/cxx/struct.UniquePtr.html">UniquePtr&lt;T&gt;</a></td><td>std::unique_ptr&lt;T&gt;</td><td><sup><i>cannot hold opaque Rust type</i></sup></td></tr>

book/src/SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
- [Reference: built-in bindings](bindings.md)
2626
- [String &mdash; rust::String](binding/string.md)
2727
- [&str &mdash; rust::Str](binding/str.md)
28-
- [&&#91;T&#93; &mdash; rust::Slice\<const T\>](binding/slice.md)
28+
- [&&#91;T&#93;, &mut &#91;T&#93; &mdash; rust::Slice\<T\>](binding/slice.md)
2929
- [CxxString &mdash; std::string](binding/cxxstring.md)
3030
- [Box\<T\> &mdash; rust::Box\<T\>](binding/box.md)
3131
- [UniquePtr\<T\> &mdash; std::unique\_ptr\<T\>](binding/uniqueptr.md)

book/src/binding/slice.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{{#title rust::Slice<T> — Rust ♡ C++}}
2-
# rust::Slice\<T\>
2+
# rust::Slice\<const T\>,&ensp;rust::Slice\<T\>
3+
4+
- Rust `&[T]` is written `rust::Slice<const T>` in C++
5+
- Rust `&mut [T]` is written `rust::Slice<T>` in C++
36

47
### Public API:
58

@@ -15,7 +18,10 @@ public:
1518
Slice(const Slice<T> &) noexcept;
1619
Slice(T *, size_t count) noexcept;
1720
21+
// if std::is_const<T> {
1822
Slice &operator=(const Slice<T> &) noexcept;
23+
// }
24+
Slice &operator=(Slice<T> &&) noexcept;
1925
2026
T *data() const noexcept;
2127
size_t size() const noexcept;
@@ -27,11 +33,14 @@ public:
2733

2834
### Restrictions:
2935

30-
Only &amp;\[u8\] i.e. rust::Slice\<const uint8\_t\> is currently implemented.
31-
Support for arbitrary &amp;\[T\] is coming.
36+
Only T=u8 i.e. rust::Slice\<const uint8\_t\> and rust::Slice\<uint8\_t\> are
37+
currently implemented. Support for arbitrary T is coming.
3238

3339
Allowed as function argument or return value. Not supported in shared structs.
34-
&amp;mut \[T\] is not supported yet.
40+
41+
Only rust::Slice\<const T\> is copy-assignable, not rust::Slice\<T\>. (Both are
42+
move-assignable.) You'll need to write std::move occasionally as a reminder that
43+
accidentally exposing overlapping &amp;mut \[T\] to Rust is UB.
3544

3645
## Example
3746

book/src/bindings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ returns of extern functions.
1212
<tr><td style="padding:3px 6px">String</td><td style="padding:3px 6px"><b><a href="binding/string.md">rust::String</a></b></td><td style="padding:3px 6px"></td></tr>
1313
<tr><td style="padding:3px 6px">&amp;str</td><td style="padding:3px 6px"><b><a href="binding/str.md">rust::Str</a></b></td><td style="padding:3px 6px"></td></tr>
1414
<tr><td style="padding:3px 6px">&amp;[u8]</td><td style="padding:3px 6px"><b><a href="binding/slice.md">rust::Slice&lt;const&nbsp;uint8_t&gt;</a></b></td><td style="padding:3px 6px"><sup><i>arbitrary &amp;[T] not implemented yet</i></sup></td></tr>
15+
<tr><td style="padding:3px 6px">&amp;mut [u8]</td><td style="padding:3px 6px"><b><a href="binding/slice.md">rust::Slice&lt;uint8_t&gt;</a></b></td><td style="padding:3px 6px"><sup><i>arbitrary &amp;mut [T] not implemented yet</i></sup></td></tr>
1516
<tr><td style="padding:3px 6px"><b><a href="binding/cxxstring.md">CxxString</a></b></td><td style="padding:3px 6px">std::string</td><td style="padding:3px 6px"><sup><i>cannot be passed by value</i></sup></td></tr>
1617
<tr><td style="padding:3px 6px">Box&lt;T&gt;</td><td style="padding:3px 6px"><b><a href="binding/box.md">rust::Box&lt;T&gt;</a></b></td><td style="padding:3px 6px"><sup><i>cannot hold opaque C++ type</i></sup></td></tr>
1718
<tr><td style="padding:3px 6px"><b><a href="binding/uniqueptr.md">UniquePtr&lt;T&gt;</a></b></td><td style="padding:3px 6px">std::unique_ptr&lt;T&gt;</td><td style="padding:3px 6px"><sup><i>cannot hold opaque Rust type</i></sup></td></tr>
@@ -43,7 +44,6 @@ matter of designing a nice API for each in its non-native language.
4344

4445
<table>
4546
<tr><th>name in Rust</th><th>name in C++</th></tr>
46-
<tr><td>&amp;mut [T]</td><td>rust::Slice&lt;T&gt;</td></tr>
4747
<tr><td>BTreeMap&lt;K, V&gt;</td><td><sup><i>tbd</i></sup></td></tr>
4848
<tr><td>HashMap&lt;K, V&gt;</td><td><sup><i>tbd</i></sup></td></tr>
4949
<tr><td>Arc&lt;T&gt;</td><td><sup><i>tbd</i></sup></td></tr>

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@
332332
//! <tr><td>String</td><td>rust::String</td><td></td></tr>
333333
//! <tr><td>&amp;str</td><td>rust::Str</td><td></td></tr>
334334
//! <tr><td>&amp;[u8]</td><td>rust::Slice&lt;const uint8_t&gt;</td><td><sup><i>arbitrary &amp;[T] not implemented yet</i></sup></td></tr>
335+
//! <tr><td>&amp;mut [u8]</td><td>rust::Slice&lt;uint8_t&gt;</td><td><sup><i>arbitrary &amp;mut [T] not implemented yet</i></sup></td></tr>
335336
//! <tr><td><a href="struct.CxxString.html">CxxString</a></td><td>std::string</td><td><sup><i>cannot be passed by value</i></sup></td></tr>
336337
//! <tr><td>Box&lt;T&gt;</td><td>rust::Box&lt;T&gt;</td><td><sup><i>cannot hold opaque C++ type</i></sup></td></tr>
337338
//! <tr><td><a href="struct.UniquePtr.html">UniquePtr&lt;T&gt;</a></td><td>std::unique_ptr&lt;T&gt;</td><td><sup><i>cannot hold opaque Rust type</i></sup></td></tr>

0 commit comments

Comments
 (0)