diff options
Diffstat (limited to 'helix-core/src')
-rw-r--r-- | helix-core/src/lib.rs | 5 | ||||
-rw-r--r-- | helix-core/src/position.rs | 27 | ||||
-rw-r--r-- | helix-core/src/range.rs | 9 |
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 |