aboutsummaryrefslogtreecommitdiff
path: root/azalea-block/src/range.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-block/src/range.rs')
-rw-r--r--azalea-block/src/range.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/azalea-block/src/range.rs b/azalea-block/src/range.rs
new file mode 100644
index 00000000..6ccf4152
--- /dev/null
+++ b/azalea-block/src/range.rs
@@ -0,0 +1,33 @@
+use std::{collections::HashSet, ops::RangeInclusive};
+
+use crate::BlockState;
+
+#[derive(Debug, Clone)]
+pub struct BlockStates {
+ pub set: HashSet<BlockState>,
+}
+
+impl From<RangeInclusive<u32>> for BlockStates {
+ fn from(range: RangeInclusive<u32>) -> Self {
+ let mut set = HashSet::with_capacity((range.end() - range.start() + 1) as usize);
+ for id in range {
+ set.insert(BlockState { id });
+ }
+ Self { set }
+ }
+}
+
+impl IntoIterator for BlockStates {
+ type Item = BlockState;
+ type IntoIter = std::collections::hash_set::IntoIter<BlockState>;
+
+ fn into_iter(self) -> Self::IntoIter {
+ self.set.into_iter()
+ }
+}
+
+impl BlockStates {
+ pub fn contains(&self, state: &BlockState) -> bool {
+ self.set.contains(state)
+ }
+}