9 个版本
0.2.7 | 2020年2月6日 |
---|---|
0.2.6 | 2020年1月8日 |
0.2.2 | 2019年12月31日 |
0.1.1 |
|
在 Rust 模式 中排名第 1228
每月下载量 34
用于 2 个包(通过 col_macros)
30KB
325 行
此包提供了一些模式中的高级内存抽象,用于确保内存和异常安全。
它为某些转换的情况和一些内存或 ptr 模块中的不安全函数提供了安全抽象,不提供自定义分配器或垃圾回收器,也不依赖于 core::alloc
不稳定的库。
此包通过启用 serde_support
功能为一些结构体提供了 serde 支持。
版本
目前此包仅为 nightly 版本,如果以下特性得到稳定: vec_leak
,const_fn
,untagged_unions
和 const_fn_union
,则将进行更改。
用法
use high_mem_utils::{Catch, DontDropOpt, DropBy};
let mut string = String::from("Hello world!");
let catch = Catch::new_str(string.clone());
assert_eq!(catch.leaked().to_string(), string); // leaked returns &&mut str,not use to_string
// it's a bit difficult cast rigth now
assert_eq!(catch.seal(), string); // catch consumed
let mut a = [1, 2, 3];
{
let elem = DropBy::new([2, 3, 4], |e: [u32; 3]| { a = e.clone(); });
assert_eq!(*elem, Some([2, 3, 4]));
}
assert_eq!(a, [2, 3, 4]);
unsafe {
let b = DontDropOpt::new([1, 2, 3]); // we're not dropping here because we will have two variables
// pointing to the same memory and "b" lives for shorter
a = [0; 3];
b.as_ref().unwrap().as_ptr().copy_to(a.as_mut_ptr(), 3);
}
assert_eq!(a, [1, 2, 3]);
许可证
此代码受 Unlicense 许可证许可。
依赖项
~83–260KB