aboutsummaryrefslogtreecommitdiff
path: root/helix-core/src
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-05-20 09:14:51 +0000
committerBlaž Hrastnik2020-05-20 09:14:51 +0000
commit240e5f4e3d27415b792776dd126d15302d53e83b (patch)
tree8579f77ca5d200bafd7df09ab93ceb65e5bdce3b /helix-core/src
Initial import.
Diffstat (limited to 'helix-core/src')
-rw-r--r--helix-core/src/lib.rs5
-rw-r--r--helix-core/src/position.rs27
-rw-r--r--helix-core/src/range.rs9
3 files changed, 41 insertions, 0 deletions
diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs
new file mode 100644
index 00000000..71a66030
--- /dev/null
+++ b/helix-core/src/lib.rs
@@ -0,0 +1,5 @@
+mod position;
+mod range;
+
+use position::Position;
+use range::Range;
diff --git a/helix-core/src/position.rs b/helix-core/src/position.rs
new file mode 100644
index 00000000..8c82b83b
--- /dev/null
+++ b/helix-core/src/position.rs
@@ -0,0 +1,27 @@
+/// Represents a single point in a text buffer. Zero indexed.
+#[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+pub struct Position {
+ pub row: usize,
+ pub col: usize,
+}
+
+impl Position {
+ pub fn new(row: usize, col: usize) -> Self {
+ Self { row, col }
+ }
+
+ pub fn is_zero(self) -> bool {
+ self.row == 0 && self.col == 0
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_ordering() {
+ // (0, 5) is less than (1, 0 w v f)
+ assert!(Position::new(0, 5) < Position::new(1, 0));
+ }
+}
diff --git a/helix-core/src/range.rs b/helix-core/src/range.rs
new file mode 100644
index 00000000..46411664
--- /dev/null
+++ b/helix-core/src/range.rs
@@ -0,0 +1,9 @@
+use crate::Position;
+
+#[derive(Clone, Copy, PartialEq, Eq)]
+pub struct Range {
+ pub start: Position,
+ pub end: Position,
+}
+
+// range traversal iters