Skip to content

Commit

Permalink
Remove Comparator generic on Entry*
Browse files Browse the repository at this point in the history
  • Loading branch information
al8n committed Jul 10, 2024
1 parent ca95386 commit b54aa7f
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 184 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# CHANGELOG

## 0.13.0

- Remove `Comparator` generic on `Entry*`

## 0.12.0

- Bump `rarena-allocator`'s version
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "skl"
version = "0.12.0"
version = "0.13.0"
edition = "2021"
rust-version = "1.56.0"
repository = "https://github.com/al8n/skl"
Expand Down
18 changes: 9 additions & 9 deletions src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ const CURRENT_VERSION: u16 = 0;
/// The tombstone value size, if a node's value size is equal to this value, then it is a tombstone.
const REMOVE: u32 = u32::MAX;

type UpdateOk<'a, 'b, T, C> = Either<
Option<VersionedEntryRef<'a, T, C>>,
Result<VersionedEntryRef<'a, T, C>, VersionedEntryRef<'a, T, C>>,
type UpdateOk<'a, 'b, T> = Either<
Option<VersionedEntryRef<'a, T>>,
Result<VersionedEntryRef<'a, T>, VersionedEntryRef<'a, T>>,
>;

#[derive(Debug)]
Expand Down Expand Up @@ -1737,15 +1737,15 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
failure: Ordering,
ins: &mut Inserter<T>,
upsert: bool,
) -> Result<UpdateOk<'a, 'b, T, C>, Either<E, Error>> {
) -> Result<UpdateOk<'a, 'b, T>, Either<E, Error>> {
let version = trailer.version();

// Safety: a fresh new Inserter, so safe here
let found_key = unsafe {
let (found, found_key, ptr) = self.find_splice(version, key.as_ref(), ins, true);
if found {
let node_ptr = ptr.expect("the NodePtr cannot be `None` when we found");
let old = VersionedEntryRef::from_node(node_ptr, self);
let old = VersionedEntryRef::from_node(node_ptr, &self.arena);

key.on_fail(&self.arena);

Expand Down Expand Up @@ -1908,7 +1908,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
let node_ptr = fr
.curr
.expect("the current should not be `None` when we found");
let old = VersionedEntryRef::from_node(node_ptr, self);
let old = VersionedEntryRef::from_node(node_ptr, &self.arena);

k.on_fail(&self.arena);

Expand Down Expand Up @@ -1969,15 +1969,15 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
#[allow(clippy::too_many_arguments)]
unsafe fn upsert<'a, 'b: 'a, E>(
&'a self,
old: VersionedEntryRef<'a, T, C>,
old: VersionedEntryRef<'a, T>,
node_ptr: NodePtr<T>,
key: &Key<'a, 'b>,
trailer: T,
value_size: u32,
f: &impl Fn(&mut VacantBuffer<'a>) -> Result<(), E>,
success: Ordering,
failure: Ordering,
) -> Result<UpdateOk<'a, 'b, T, C>, Either<E, Error>> {
) -> Result<UpdateOk<'a, 'b, T>, Either<E, Error>> {
match key {
Key::Occupied(_) | Key::Vacant(_) | Key::Pointer { .. } => node_ptr
.as_ref()
Expand All @@ -1992,7 +1992,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
let trailer = node.get_trailer_by_offset(&self.arena, offset);
let value = node.get_value_by_offset(&self.arena, offset, len);
Ok(Either::Right(Err(VersionedEntryRef {
map: self,
arena: &self.arena,
key,
trailer,
value,
Expand Down
32 changes: 16 additions & 16 deletions src/map/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
trailer: T,
key: &'b [u8],
value: &'b [u8],
) -> Result<Option<EntryRef<'a, T, C>>, Error> {
) -> Result<Option<EntryRef<'a, T>>, Error> {
if self.arena.read_only() {
return Err(Error::read_only());
}
Expand Down Expand Up @@ -537,7 +537,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
key: &'b [u8],
value_size: u32,
f: impl Fn(&mut VacantBuffer<'a>) -> Result<(), E>,
) -> Result<Option<EntryRef<'a, T, C>>, Either<E, Error>> {
) -> Result<Option<EntryRef<'a, T>>, Either<E, Error>> {
if self.arena.read_only() {
return Err(Either::Right(Error::read_only()));
}
Expand Down Expand Up @@ -575,7 +575,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
trailer: T,
key: &'b [u8],
value: &'b [u8],
) -> Result<Option<EntryRef<'a, T, C>>, Error> {
) -> Result<Option<EntryRef<'a, T>>, Error> {
if self.arena.read_only() {
return Err(Error::read_only());
}
Expand Down Expand Up @@ -661,7 +661,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
key: &'b [u8],
value_size: u32,
f: impl Fn(&mut VacantBuffer<'a>) -> Result<(), E>,
) -> Result<Option<EntryRef<'a, T, C>>, Either<E, Error>> {
) -> Result<Option<EntryRef<'a, T>>, Either<E, Error>> {
if self.arena.read_only() {
return Err(Either::Right(Error::read_only()));
}
Expand Down Expand Up @@ -743,7 +743,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
key: impl FnOnce(&mut VacantBuffer<'a>) -> Result<(), E>,
val_size: u32,
val: impl Fn(&mut VacantBuffer<'a>) -> Result<(), E>,
) -> Result<Option<EntryRef<'a, T, C>>, Either<E, Error>> {
) -> Result<Option<EntryRef<'a, T>>, Either<E, Error>> {
let vk = self.fetch_vacant_key(u32::from(key_size), key)?;

self
Expand Down Expand Up @@ -821,7 +821,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
key: impl FnOnce(&mut VacantBuffer<'a>) -> Result<(), E>,
val_size: u32,
val: impl Fn(&mut VacantBuffer<'a>) -> Result<(), E>,
) -> Result<Option<EntryRef<'a, T, C>>, Either<E, Error>> {
) -> Result<Option<EntryRef<'a, T>>, Either<E, Error>> {
let vk = self.fetch_vacant_key(u32::from(key_size), key)?;

self
Expand Down Expand Up @@ -860,7 +860,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
key: &'b [u8],
success: Ordering,
failure: Ordering,
) -> Result<Option<EntryRef<'a, T, C>>, Error> {
) -> Result<Option<EntryRef<'a, T>>, Error> {
self
.update(
trailer,
Expand Down Expand Up @@ -903,7 +903,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
&'a self,
trailer: T,
key: &'b [u8],
) -> Result<Option<EntryRef<'a, T, C>>, Error> {
) -> Result<Option<EntryRef<'a, T>>, Error> {
self
.update(
trailer,
Expand Down Expand Up @@ -980,7 +980,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
trailer: T,
key_size: u27,
key: impl FnOnce(&mut VacantBuffer<'a>) -> Result<(), E>,
) -> Result<Option<EntryRef<'a, T, C>>, Either<E, Error>> {
) -> Result<Option<EntryRef<'a, T>>, Either<E, Error>> {
let vk = self.fetch_vacant_key(u32::from(key_size), key)?;
let key = Key::RemoveVacant(vk);
self
Expand Down Expand Up @@ -1017,17 +1017,17 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
}

/// Returns the first entry in the map.
pub fn first(&self, version: u64) -> Option<EntryRef<'_, T, C>> {
pub fn first(&self, version: u64) -> Option<EntryRef<'_, T>> {
self.iter(version).seek_lower_bound(Bound::Unbounded)
}

/// Returns the last entry in the map.
pub fn last(&self, version: u64) -> Option<EntryRef<'_, T, C>> {
pub fn last(&self, version: u64) -> Option<EntryRef<'_, T>> {
self.iter(version).seek_upper_bound(Bound::Unbounded)
}

/// Returns the value associated with the given key, if it exists.
pub fn get<'a, 'b: 'a>(&'a self, version: u64, key: &'b [u8]) -> Option<EntryRef<'a, T, C>> {
pub fn get<'a, 'b: 'a>(&'a self, version: u64, key: &'b [u8]) -> Option<EntryRef<'a, T>> {
unsafe {
let (n, eq) = self.find_near(version, key, false, true); // findLessOrEqual.

Expand All @@ -1038,7 +1038,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
if eq {
return value.map(|val| {
EntryRef(VersionedEntryRef {
map: self,
arena: &self.arena,
key: node_key,
trailer,
value: Some(val),
Expand All @@ -1057,7 +1057,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {

value.map(|val| {
EntryRef(VersionedEntryRef {
map: self,
arena: &self.arena,
key: node_key,
trailer,
value: Some(val),
Expand All @@ -1073,7 +1073,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
&'a self,
version: u64,
upper: Bound<&'b [u8]>,
) -> Option<EntryRef<'a, T, C>> {
) -> Option<EntryRef<'a, T>> {
self.iter(version).seek_upper_bound(upper)
}

Expand All @@ -1083,7 +1083,7 @@ impl<T: Trailer, C: Comparator> SkipMap<T, C> {
&'a self,
version: u64,
lower: Bound<&'b [u8]>,
) -> Option<EntryRef<'a, T, C>> {
) -> Option<EntryRef<'a, T>> {
self.iter(version).seek_lower_bound(lower)
}

Expand Down
Loading

0 comments on commit b54aa7f

Please sign in to comment.