1 个不稳定版本
0.0.0 | 2020年5月10日 |
---|
#19 in #generational
10KB
98 行
生成索引
简介
这是一个“做好一件事”的范畴下的包。在这里我们实现了“骨架”生成索引,没有添加所有装饰。你可以自由使用它来实现自己的实体组件系统/数据驱动应用程序。
稍后,我们将提供一些以后将实现向量的功能。
设计
在 Rust 中,尤其是在游戏开发中,但在其他领域,使用实体方法而不是传统的面向对象方法会更好,原因之一是它可以让借用检查器感到满意。
此外,这将更容易优化缓存,以保持你的数据结构相邻,以便它们最终进入你的 L2 或 L3 缓存。
因此,存在 Gen-Indices。
索引和生成号
基本上,当你获取一个新的索引时,它将附带一个初始生成号为零。当你删除该索引时,它将被缓存在删除队列中。当请求新的索引时,它将首先检查删除队列,如果存在条目,则将其提供给你,并增加生成号。
新的索引始终是单调递增的;它永远不会被重置。生成号也是如此。
示例
extern crate gen_indices;
extern crate num;
use gen_indices::*;
use num::{Num, zero, one};
let gi = GenIndexEntitySet::<u64, u64>::new();
// first index
let idx1 = gi.lock().unwrap().next_index();
println!("first: {:?}", idx1);
// second index
let idx2 = gi.lock().unwrap().next_index();
println!("first: {:?}", idx2);
// delete first index and then get next index
if let Err(e) = gi.lock().unwrap().delete_index(idx1) {
println!("Error: {}", e);
}
let idx3 = gi.lock().unwrap().next_index();
println!("first: {:?}", idx3);
依赖项
~475KB