mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-07 11:11:30 +00:00
51 lines
1 KiB
Rust
51 lines
1 KiB
Rust
|
use std::ops::{Add, AddAssign, Sub};
|
||
|
|
||
|
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd)]
|
||
|
pub struct OffsetUtf16(pub usize);
|
||
|
|
||
|
impl<'a> Add<&'a Self> for OffsetUtf16 {
|
||
|
type Output = Self;
|
||
|
|
||
|
fn add(self, other: &'a Self) -> Self::Output {
|
||
|
Self(self.0 + other.0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Add for OffsetUtf16 {
|
||
|
type Output = Self;
|
||
|
|
||
|
fn add(self, other: Self) -> Self::Output {
|
||
|
Self(self.0 + other.0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl<'a> Sub<&'a Self> for OffsetUtf16 {
|
||
|
type Output = Self;
|
||
|
|
||
|
fn sub(self, other: &'a Self) -> Self::Output {
|
||
|
debug_assert!(*other <= self);
|
||
|
Self(self.0 - other.0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Sub for OffsetUtf16 {
|
||
|
type Output = OffsetUtf16;
|
||
|
|
||
|
fn sub(self, other: Self) -> Self::Output {
|
||
|
debug_assert!(other <= self);
|
||
|
Self(self.0 - other.0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl<'a> AddAssign<&'a Self> for OffsetUtf16 {
|
||
|
fn add_assign(&mut self, other: &'a Self) {
|
||
|
self.0 += other.0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl AddAssign<Self> for OffsetUtf16 {
|
||
|
fn add_assign(&mut self, other: Self) {
|
||
|
self.0 += other.0;
|
||
|
}
|
||
|
}
|