From b6bef111c1ef977ddd2e80565cb7e4d2ce0b69ab Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Wed, 19 Nov 2025 01:49:18 +0300 Subject: [PATCH] Reorganized symbols related to position --- src/converter.rs | 3 ++- src/lib.rs | 7 ++----- src/pos/{ => default_counters}/index.rs | 0 src/pos/default_counters/mod.rs | 8 ++++++++ src/pos/{ => default_counters}/newline.rs | 3 +-- src/pos/default_counters/noop.rs | 17 +++++++++++++++++ src/pos/mod.rs | 22 +++++----------------- src/pos/nop.rs | 17 ----------------- src/pos/pos.rs | 4 ++++ src/pos/pos_counter.rs | 10 ++++++++++ 10 files changed, 49 insertions(+), 42 deletions(-) rename src/pos/{ => default_counters}/index.rs (100%) create mode 100644 src/pos/default_counters/mod.rs rename src/pos/{ => default_counters}/newline.rs (96%) create mode 100644 src/pos/default_counters/noop.rs delete mode 100644 src/pos/nop.rs create mode 100644 src/pos/pos.rs create mode 100644 src/pos/pos_counter.rs diff --git a/src/converter.rs b/src/converter.rs index 93d0cdd..3182097 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -2,8 +2,9 @@ #![allow(non_snake_case)] use crate::{ - CollectedSubstring, Keyword, KeywordComparatorIterator, Pos, Predicate, SourceStream, + CollectedSubstring, Keyword, KeywordComparatorIterator, Predicate, SourceStream, }; +use crate::pos::Pos; use std::marker::PhantomData; pub trait StreamConverter_Char { diff --git a/src/lib.rs b/src/lib.rs index 3284bc2..78ee0ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,15 +7,12 @@ mod ascii; mod converter; pub mod pos; +use pos::Pos; + pub trait Predicate { fn check(&mut self, chr: C) -> bool; } -pub trait Pos<'pos> {} - -impl Pos<'static> for () {} -impl Pos<'static> for usize {} - pub trait KeywordComparatorIterator<'keyword, C> { fn consume(&mut self, c: C) -> bool; } diff --git a/src/pos/index.rs b/src/pos/default_counters/index.rs similarity index 100% rename from src/pos/index.rs rename to src/pos/default_counters/index.rs diff --git a/src/pos/default_counters/mod.rs b/src/pos/default_counters/mod.rs new file mode 100644 index 0000000..16b7a48 --- /dev/null +++ b/src/pos/default_counters/mod.rs @@ -0,0 +1,8 @@ +mod index; +mod newline; +mod noop; + +pub use index::IndexPosCounter; +pub use newline::PosLineCol; +pub use newline::NewLinePosCounter; +pub use noop::NoopPosCounter; \ No newline at end of file diff --git a/src/pos/newline.rs b/src/pos/default_counters/newline.rs similarity index 96% rename from src/pos/newline.rs rename to src/pos/default_counters/newline.rs index e7471d0..5ebd864 100644 --- a/src/pos/newline.rs +++ b/src/pos/default_counters/newline.rs @@ -1,5 +1,4 @@ -use crate::Pos; -use crate::pos::PosCounter; +use crate::pos::{PosCounter, Pos}; pub struct PosLineCol { pub row: usize, diff --git a/src/pos/default_counters/noop.rs b/src/pos/default_counters/noop.rs new file mode 100644 index 0000000..85ecdb5 --- /dev/null +++ b/src/pos/default_counters/noop.rs @@ -0,0 +1,17 @@ +use crate::pos::PosCounter; + +pub struct NoopPosCounter {} + +impl Default for NoopPosCounter { + fn default() -> Self { + return NoopPosCounter {}; + } +} + +impl PosCounter<'static, C> for NoopPosCounter { + type P = (); + + fn update(&mut self, _: C) {} + + fn export(&self) {} +} diff --git a/src/pos/mod.rs b/src/pos/mod.rs index 9d918df..64db856 100644 --- a/src/pos/mod.rs +++ b/src/pos/mod.rs @@ -1,19 +1,7 @@ -use crate::Pos; +mod pos; +mod pos_counter; -pub trait PosCounter<'pos, C: Copy> { - type P: Pos<'pos>; +pub use pos::Pos; +pub use pos_counter::PosCounter; - fn update(&mut self, c: C); - - fn export(&self) -> Self::P; -} - - -mod index; -mod newline; -mod nop; - -pub use index::IndexPosCounter; -pub use newline::PosLineCol; -pub use newline::NewLinePosCounter; -pub use nop::NopPosCounter; \ No newline at end of file +pub mod default_counters; diff --git a/src/pos/nop.rs b/src/pos/nop.rs deleted file mode 100644 index 80e60d4..0000000 --- a/src/pos/nop.rs +++ /dev/null @@ -1,17 +0,0 @@ -use crate::pos::PosCounter; - -pub struct NopPosCounter {} - -impl Default for NopPosCounter { - fn default() -> Self { - return NopPosCounter {}; - } -} - -impl PosCounter<'static, C> for NopPosCounter { - type P = (); - - fn update(&mut self, _: C) {} - - fn export(&self) {} -} diff --git a/src/pos/pos.rs b/src/pos/pos.rs new file mode 100644 index 0000000..30d311e --- /dev/null +++ b/src/pos/pos.rs @@ -0,0 +1,4 @@ +pub trait Pos<'pos> {} + +impl Pos<'static> for () {} +impl Pos<'static> for usize {} \ No newline at end of file diff --git a/src/pos/pos_counter.rs b/src/pos/pos_counter.rs new file mode 100644 index 0000000..cda87ad --- /dev/null +++ b/src/pos/pos_counter.rs @@ -0,0 +1,10 @@ +use crate::pos::Pos; + +pub trait PosCounter<'pos, C: Copy> { + type P: Pos<'pos>; + + fn update(&mut self, c: C); + + fn export(&self) -> Self::P; +} +