1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#![deny(missing_docs)]
#[macro_use]
extern crate mopa;
#[cfg(feature="parallel")]
extern crate pulse;
#[cfg(feature="parallel")]
extern crate threadpool;
#[cfg(feature="parallel")]
extern crate num_cpus;
#[cfg(feature="ticket")]
extern crate ticketed_lock;
extern crate fnv;
extern crate tuple_utils;
extern crate atom;
pub use storage::{Storage, UnprotectedStorage, AntiStorage,
VecStorage, HashMapStorage, NullStorage, InsertResult,
MaskedStorage};
pub use world::{Component, World, EntityBuilder, Entities, CreateEntities,
Allocator};
pub use join::{Join, JoinIter};
pub use gate::Gate;
#[cfg(feature="parallel")]
pub use planner::*;
mod storage;
mod world;
mod bitset;
mod gate;
mod join;
#[cfg(feature="parallel")]
mod planner;
#[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)]
pub struct Generation(i32);
impl Generation {
pub fn is_alive(&self) -> bool {
self.0 > 0
}
fn die(&mut self) {
debug_assert!(self.is_alive());
self.0 = -self.0;
}
fn raised(self) -> Generation {
debug_assert!(!self.is_alive());
Generation(1 - self.0)
}
}
pub type Index = u32;
#[derive(Clone, Copy, Debug, Hash, Eq, Ord, PartialEq, PartialOrd)]
pub struct Entity(Index, Generation);
impl Entity {
#[cfg(test)]
pub fn new(index: Index, gen: Generation) -> Entity {
Entity(index, gen)
}
#[inline]
pub fn get_id(&self) -> Index { self.0 }
#[inline]
pub fn get_gen(&self) -> Generation { self.1 }
}