#index #generational #data-driven #entity #ecs

gen_indices

生成索引 -- 一个简单而强大的生成索引,用于数据驱动的实体设计

1 个不稳定版本

0.0.0 2020年5月10日

#19 in #generational

MIT 许可证

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