Files
2020-07-14 14:12:44 +00:00

27 lines
5.2 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `c_vec` crate."><meta name="keywords" content="rust, rustlang, rust-lang, c_vec"><title>c_vec - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../dark.css"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><script src="../storage.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="shortcut icon" href="../favicon.ico"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../c_vec/index.html'><div class='logo-container'><img src='../rust-logo.png' alt='logo'></div></a><p class='location'>Crate c_vec</p><div class="sidebar-elems"><a id='all-types' href='all.html'><p>See all c_vec's items</p></a><div class="block items"><ul><li><a href="#structs">Structs</a></li></ul></div><p class='location'></p><script>window.sidebarCurrent = {name: 'c_vec', ty: 'mod', relpath: '../'};</script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='out-of-band'><span id='render-detail'><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class='inner'>&#x2212;</span>]</a></span><a class='srclink' href='../src/c_vec/lib.rs.html#10-505' title='goto source code'>[src]</a></span><span class='in-band'>Crate <a class="mod" href=''>c_vec</a></span></h1><div class='docblock'><p>Library to interface with chunks of memory allocated in C.</p>
<p>It is often desirable to safely interface with memory allocated from C,
encapsulating the unsafety into allocation and destruction time. Indeed,
allocating memory externally is currently the only way to give Rust shared
mut state with C programs that keep their own references; vectors are
unsuitable because they could be reallocated or moved at any time, and
importing C memory into a vector takes a one-time snapshot of the memory.</p>
<p>This module simplifies the usage of such external blocks of memory. Memory
is encapsulated into an opaque object after creation; the lifecycle of the
memory can be optionally managed by Rust, if an appropriate destructor
closure is provided. Safety is ensured by bounds-checking accesses, which
are marshalled through get and set functions.</p>
<p>There are three unsafe functions: the two constructors, and the
unwrapping method. The constructors are unsafe for the
obvious reason (they act on a pointer that cannot be checked inside the
method), but <code>into_inner()</code> is somewhat more subtle in its unsafety.
It returns the contained pointer, but at the same time destroys the CVec
without running its destructor. This can be used to pass memory back to
C, but care must be taken that the ownership of underlying resources are
handled correctly, i.e. that allocated memory is eventually freed
if necessary.</p>
</div><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table><tr class='module-item'><td><a class="struct" href="struct.CSlice.html" title='c_vec::CSlice struct'>CSlice</a></td><td class='docblock-short'><p>The type representing an 'unsafe' foreign chunk of memory</p>
</td></tr><tr class='module-item'><td><a class="struct" href="struct.CSliceIter.html" title='c_vec::CSliceIter struct'>CSliceIter</a></td><td class='docblock-short'><p>Iterator over <code>CSlice</code>.</p>
</td></tr><tr class='module-item'><td><a class="struct" href="struct.CVec.html" title='c_vec::CVec struct'>CVec</a></td><td class='docblock-short'><p>The type representing a foreign chunk of memory.</p>
</td></tr><tr class='module-item'><td><a class="struct" href="struct.CVecIter.html" title='c_vec::CVecIter struct'>CVecIter</a></td><td class='docblock-short'><p>Iterator over <code>CVec</code>.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "c_vec";</script><script src="../aliases.js"></script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>