mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/item/storage.rs')
-rw-r--r--src/item/storage.rs44
1 files changed, 25 insertions, 19 deletions
diff --git a/src/item/storage.rs b/src/item/storage.rs
index fd5be32..e6ec368 100644
--- a/src/item/storage.rs
+++ b/src/item/storage.rs
@@ -12,6 +12,7 @@ pub struct Storage {
}
impl Storage {
+ #[must_use]
pub const fn new() -> Self {
Self {
base: Vec::new(),
@@ -19,14 +20,17 @@ impl Storage {
}
}
+ #[must_use]
pub fn is_empty(&self) -> bool {
self.total == 0
}
+ #[must_use]
pub fn get_total(&self) -> u64 {
self.total
}
+ #[must_use]
pub fn get(&self, ty: item::Type) -> u32 {
match self.base.get(u16::from(ty) as usize) {
None => 0,
@@ -40,12 +44,12 @@ impl Storage {
None => {
self.base.resize(idx + 1, 0);
self.base[idx] = count;
- self.total += count as u64;
+ self.total += u64::from(count);
0
}
Some(curr) => {
let prev = *curr;
- self.total = self.total - prev as u64 + count as u64;
+ self.total = self.total - u64::from(prev) + u64::from(count);
*curr = count;
prev
}
@@ -59,14 +63,14 @@ impl Storage {
let actual = add.min(max);
self.base.resize(idx + 1, 0);
self.base[idx] = actual;
- self.total += add as u64;
+ self.total += u64::from(add);
(actual, actual)
}
Some(curr) => {
if *curr < max {
let actual = add.min(max - *curr);
*curr += actual;
- self.total += actual as u64;
+ self.total += u64::from(actual);
(actual, *curr)
} else {
(0, *curr)
@@ -87,7 +91,7 @@ impl Storage {
if add <= max {
self.base.resize(idx + 1, 0);
self.base[idx] = add;
- self.total += add as u64;
+ self.total += u64::from(add);
Ok((add, add))
} else {
Err(TryAddError {
@@ -101,7 +105,7 @@ impl Storage {
Some(curr) => {
if *curr <= max && max - *curr <= add {
*curr += add;
- self.total += add as u64;
+ self.total += u64::from(add);
Ok((add, *curr))
} else {
Err(TryAddError {
@@ -122,7 +126,7 @@ impl Storage {
if *curr > min {
let actual = sub.min(*curr - min);
*curr -= actual;
- self.total -= actual as u64;
+ self.total -= u64::from(actual);
(actual, *curr)
} else {
(0, *curr)
@@ -148,7 +152,7 @@ impl Storage {
Some(curr) => {
if *curr >= min && *curr - min >= sub {
*curr -= sub;
- self.total -= sub as u64;
+ self.total -= u64::from(sub);
Ok((sub, *curr))
} else {
Err(TrySubError {
@@ -177,7 +181,7 @@ impl Storage {
if curr < max_each {
let actual = (*add).min(max_each - curr);
self.base[idx] += actual;
- added += actual as u64;
+ added += u64::from(actual);
}
}
// process the final element (which we've retrieved first)
@@ -185,7 +189,7 @@ impl Storage {
if curr < max_each {
let actual = (*add_last).min(max_each - curr);
self.base[last] += actual;
- added += actual as u64;
+ added += u64::from(actual);
}
// update total
self.total += added;
@@ -209,7 +213,7 @@ impl Storage {
let actual = (*add).min(max_each - curr);
self.base[idx] += actual;
*add -= actual;
- added += actual as u64;
+ added += u64::from(actual);
}
}
// process the final element (which we've retrieved first)
@@ -218,7 +222,7 @@ impl Storage {
let actual = (*add_last).min(max_each - curr);
self.base[last] += actual;
*add_last -= actual;
- added += actual as u64;
+ added += u64::from(actual);
}
// update totals
self.total += added;
@@ -237,7 +241,7 @@ impl Storage {
if *curr > min_each {
let actual = (*sub).min(*curr - min_each);
self.base[idx] -= actual;
- subbed += actual as u64;
+ subbed += u64::from(actual);
}
} else {
break;
@@ -258,12 +262,12 @@ impl Storage {
let lhs = &mut self.base[..end];
let rhs = &mut other.base[..end];
// process items by increasing ID
- for (l, r) in lhs.into_iter().zip(rhs) {
+ for (l, r) in lhs.iter_mut().zip(rhs) {
if *l > min_each && *r > min_each {
let actual = (*l - min_each).min(*r - min_each);
*l -= actual;
*r -= actual;
- subbed -= actual as u64;
+ subbed -= u64::from(actual);
}
}
// update totals
@@ -273,14 +277,16 @@ impl Storage {
(subbed, self.total, other.total)
}
- pub fn iter<'s>(&'s self) -> Iter<'s> {
+ #[must_use]
+ pub fn iter(&self) -> Iter<'_> {
Iter {
base: self.base.iter().enumerate(),
all: true,
}
}
- pub fn iter_nonzero<'s>(&'s self) -> Iter<'s> {
+ #[must_use]
+ pub fn iter_nonzero(&self) -> Iter<'_> {
Iter {
base: self.base.iter().enumerate(),
all: false,
@@ -288,7 +294,7 @@ impl Storage {
}
pub fn clear(&mut self) {
- self.base.clear()
+ self.base.clear();
}
}
@@ -375,7 +381,7 @@ impl<'l> Iterator for Iter<'l> {
type Item = (item::Type, u32);
fn next(&mut self) -> Option<Self::Item> {
- while let Some((idx, cnt)) = self.base.next() {
+ for (idx, cnt) in self.base.by_ref() {
if *cnt > 0 || self.all {
if let Ok(ty) = item::Type::try_from(idx as u16) {
return Some((ty, *cnt));