Move Unclipped into separate file
This commit is contained in:
parent
525d84e5bf
commit
09e6d44873
2 changed files with 60 additions and 68 deletions
|
@ -1,13 +1,14 @@
|
||||||
mod offset_utf16;
|
mod offset_utf16;
|
||||||
mod point;
|
mod point;
|
||||||
mod point_utf16;
|
mod point_utf16;
|
||||||
|
mod unclipped;
|
||||||
|
|
||||||
use arrayvec::ArrayString;
|
use arrayvec::ArrayString;
|
||||||
use bromberg_sl2::{DigestString, HashMatrix};
|
use bromberg_sl2::{DigestString, HashMatrix};
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::{
|
use std::{
|
||||||
cmp, fmt, io, mem,
|
cmp, fmt, io, mem,
|
||||||
ops::{Add, AddAssign, Range, Sub, SubAssign},
|
ops::{AddAssign, Range},
|
||||||
str,
|
str,
|
||||||
};
|
};
|
||||||
use sum_tree::{Bias, Dimension, SumTree};
|
use sum_tree::{Bias, Dimension, SumTree};
|
||||||
|
@ -15,73 +16,7 @@ use sum_tree::{Bias, Dimension, SumTree};
|
||||||
pub use offset_utf16::OffsetUtf16;
|
pub use offset_utf16::OffsetUtf16;
|
||||||
pub use point::Point;
|
pub use point::Point;
|
||||||
pub use point_utf16::PointUtf16;
|
pub use point_utf16::PointUtf16;
|
||||||
|
pub use unclipped::Unclipped;
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
||||||
pub struct Unclipped<T>(pub T);
|
|
||||||
|
|
||||||
impl<T: std::fmt::Debug> std::fmt::Debug for Unclipped<T> {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
f.debug_tuple("Unclipped").field(&self.0).finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Default> Default for Unclipped<T> {
|
|
||||||
fn default() -> Self {
|
|
||||||
Unclipped(T::default())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> From<T> for Unclipped<T> {
|
|
||||||
fn from(value: T) -> Self {
|
|
||||||
Unclipped(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T: sum_tree::Dimension<'a, ChunkSummary>> sum_tree::Dimension<'a, ChunkSummary>
|
|
||||||
for Unclipped<T>
|
|
||||||
{
|
|
||||||
fn add_summary(&mut self, summary: &'a ChunkSummary, _: &()) {
|
|
||||||
self.0.add_summary(summary, &());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: TextDimension> TextDimension for Unclipped<T> {
|
|
||||||
fn from_text_summary(summary: &TextSummary) -> Self {
|
|
||||||
Unclipped(T::from_text_summary(summary))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_assign(&mut self, other: &Self) {
|
|
||||||
TextDimension::add_assign(&mut self.0, &other.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Add<T, Output = T>> Add<Unclipped<T>> for Unclipped<T> {
|
|
||||||
type Output = Unclipped<T>;
|
|
||||||
|
|
||||||
fn add(self, rhs: Unclipped<T>) -> Self::Output {
|
|
||||||
Unclipped(self.0 + rhs.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Sub<T, Output = T>> Sub<Unclipped<T>> for Unclipped<T> {
|
|
||||||
type Output = Unclipped<T>;
|
|
||||||
|
|
||||||
fn sub(self, rhs: Unclipped<T>) -> Self::Output {
|
|
||||||
Unclipped(self.0 - rhs.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: AddAssign<T>> AddAssign<Unclipped<T>> for Unclipped<T> {
|
|
||||||
fn add_assign(&mut self, rhs: Unclipped<T>) {
|
|
||||||
self.0 += rhs.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: SubAssign<T>> SubAssign<Unclipped<T>> for Unclipped<T> {
|
|
||||||
fn sub_assign(&mut self, rhs: Unclipped<T>) {
|
|
||||||
self.0 -= rhs.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
const CHUNK_BASE: usize = 6;
|
const CHUNK_BASE: usize = 6;
|
||||||
|
|
57
crates/rope/src/unclipped.rs
Normal file
57
crates/rope/src/unclipped.rs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
use crate::{ChunkSummary, TextDimension, TextSummary};
|
||||||
|
use std::ops::{Add, AddAssign, Sub, SubAssign};
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
pub struct Unclipped<T>(pub T);
|
||||||
|
|
||||||
|
impl<T> From<T> for Unclipped<T> {
|
||||||
|
fn from(value: T) -> Self {
|
||||||
|
Unclipped(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: sum_tree::Dimension<'a, ChunkSummary>> sum_tree::Dimension<'a, ChunkSummary>
|
||||||
|
for Unclipped<T>
|
||||||
|
{
|
||||||
|
fn add_summary(&mut self, summary: &'a ChunkSummary, _: &()) {
|
||||||
|
self.0.add_summary(summary, &());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: TextDimension> TextDimension for Unclipped<T> {
|
||||||
|
fn from_text_summary(summary: &TextSummary) -> Self {
|
||||||
|
Unclipped(T::from_text_summary(summary))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_assign(&mut self, other: &Self) {
|
||||||
|
TextDimension::add_assign(&mut self.0, &other.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Add<T, Output = T>> Add<Unclipped<T>> for Unclipped<T> {
|
||||||
|
type Output = Unclipped<T>;
|
||||||
|
|
||||||
|
fn add(self, rhs: Unclipped<T>) -> Self::Output {
|
||||||
|
Unclipped(self.0 + rhs.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Sub<T, Output = T>> Sub<Unclipped<T>> for Unclipped<T> {
|
||||||
|
type Output = Unclipped<T>;
|
||||||
|
|
||||||
|
fn sub(self, rhs: Unclipped<T>) -> Self::Output {
|
||||||
|
Unclipped(self.0 - rhs.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: AddAssign<T>> AddAssign<Unclipped<T>> for Unclipped<T> {
|
||||||
|
fn add_assign(&mut self, rhs: Unclipped<T>) {
|
||||||
|
self.0 += rhs.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: SubAssign<T>> SubAssign<Unclipped<T>> for Unclipped<T> {
|
||||||
|
fn sub_assign(&mut self, rhs: Unclipped<T>) {
|
||||||
|
self.0 -= rhs.0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue