aboutsummaryrefslogtreecommitdiff
path: root/azalea-brigadier/src/context/string_range.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-04-18 18:14:25 +0000
committermat <github@matdoes.dev>2022-04-18 18:14:25 +0000
commit8d71fbf813391783531a9f7c70e75e105fabaf03 (patch)
treedd1d70370d3068c4aecd8aaf25174278dfbc1b29 /azalea-brigadier/src/context/string_range.rs
parentb3864af9c4af83552e37fd71a46262967572f9e6 (diff)
downloadazalea-drasl-8d71fbf813391783531a9f7c70e75e105fabaf03.tar.xz
change a BTreeMap to a HashMap
Diffstat (limited to 'azalea-brigadier/src/context/string_range.rs')
-rw-r--r--azalea-brigadier/src/context/string_range.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/azalea-brigadier/src/context/string_range.rs b/azalea-brigadier/src/context/string_range.rs
new file mode 100644
index 00000000..8ca88624
--- /dev/null
+++ b/azalea-brigadier/src/context/string_range.rs
@@ -0,0 +1,45 @@
+use std::cmp;
+
+#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
+pub struct StringRange {
+ start: usize,
+ end: usize,
+}
+
+impl StringRange {
+ pub fn new(start: usize, end: usize) -> Self {
+ Self { start, end }
+ }
+
+ pub fn at(pos: usize) -> Self {
+ Self::new(pos, pos)
+ }
+
+ pub fn between(start: usize, end: usize) -> Self {
+ Self::new(start, end)
+ }
+
+ pub fn encompassing(a: &Self, b: &Self) -> Self {
+ Self::new(cmp::min(a.start, b.start), cmp::max(a.end, b.end))
+ }
+
+ pub fn start(&self) -> usize {
+ self.start
+ }
+
+ pub fn end(&self) -> usize {
+ self.end
+ }
+
+ pub fn get<'a>(&self, reader: &'a str) -> &'a str {
+ &reader[self.start..self.end]
+ }
+
+ pub fn is_empty(&self) -> bool {
+ self.start == self.end
+ }
+
+ pub fn length(&self) -> usize {
+ self.end - self.start
+ }
+}