Implement position structs

This commit is contained in:
Alex Kotov 2023-04-08 22:15:11 +04:00
parent 6bc2ffde90
commit 0517db026c
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
2 changed files with 55 additions and 0 deletions

3
src/lib.rs Normal file
View File

@ -0,0 +1,3 @@
mod pos;
pub use pos::*;

52
src/pos.rs Normal file
View File

@ -0,0 +1,52 @@
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct LinePos {
index: usize,
lineno: usize,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct CharPos {
line: LinePos,
col: usize,
}
impl LinePos {
pub fn new(index: usize, lineno: usize) -> Self {
assert!(lineno >= 1);
Self { index, lineno }
}
pub fn index(&self) -> usize {
self.index
}
pub fn lineno(&self) -> usize {
self.lineno
}
}
impl CharPos {
pub fn new(index: usize, lineno: usize, col: usize) -> Self {
assert!(col >= 1);
Self {
line: LinePos::new(index, lineno),
col,
}
}
pub fn line(&self) -> LinePos {
self.line
}
pub fn index(&self) -> usize {
self.line.index
}
pub fn lineno(&self) -> usize {
self.line.lineno
}
pub fn col(&self) -> usize {
self.col
}
}