Skip to content

Commit

Permalink
feat: add get_full to index_map::FrozenIndexMap
Browse files Browse the repository at this point in the history
refactor: fix variable names in `index_map.rs` and `index_set.rs`
  • Loading branch information
yegorvk committed Jul 16, 2024
1 parent 2e98582 commit 07bec53
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 deletions.
29 changes: 28 additions & 1 deletion src/index_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ impl<K: Eq + Hash, V: StableDeref, S: BuildHasher> FrozenIndexMap<K, V, S> {
/// # Examples
///
/// ```
/// use elsa::FrozenIndexMap;
/// use elsa::index_map::FrozenIndexMap;
///
/// let map = FrozenIndexMap::new();
/// map.insert(1, Box::new("a"));
Expand Down Expand Up @@ -186,6 +186,33 @@ impl<K: Eq + Hash, V: StableDeref, S: BuildHasher> FrozenIndexMap<K, V, S> {
ret
}

/// Returns a reference to the key, along with its index and a reference to its value
///
/// # Examples
///
/// ```
/// use elsa::index_map::FrozenIndexMap;
///
/// let map = FrozenIndexMap::new();
/// map.insert("1", Box::new("a"));
/// assert_eq!(map.get_full("1"), Some((0, "1", &"a")));
/// assert_eq!(map.get_full("2"), None);
/// ```
pub fn get_full<Q>(&self, k: &Q) -> Option<(usize, &K::Target, &V::Target)>
where
Q: ?Sized + Hash + Equivalent<K>,
K: StableDeref,
{
assert!(!self.in_use.get());
self.in_use.set(true);
let ret = unsafe {
let map = self.map.get();
(*map).get_full(k).map(|(i, k, v)| (i, &**k, &**v))
};
self.in_use.set(false);
ret
}

/// Applies a function to the owner of the value corresponding to the key (if any).
///
/// The key may be any borrowed form of the map's key type, but
Expand Down
10 changes: 5 additions & 5 deletions src/index_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ impl<T: Eq + Hash + StableDeref, S: BuildHasher> FrozenIndexSet<T, S> {
/// # Example
/// ```
/// use elsa::index_set::FrozenIndexSet;
/// let map = FrozenIndexSet::new();
/// assert_eq!(map.insert_full(Box::new("a")), (0, &"a"));
/// assert_eq!(map.insert_full(Box::new("b")), (1, &"b"));
/// let set = FrozenIndexSet::new();
/// assert_eq!(set.insert_full(Box::new("a")), (0, &"a"));
/// assert_eq!(set.insert_full(Box::new("b")), (1, &"b"));
/// ```
pub fn insert_full(&self, value: T) -> (usize, &T::Target) {
assert!(!self.in_use.get());
Expand Down Expand Up @@ -163,8 +163,8 @@ impl<T: Eq + Hash + StableDeref, S: BuildHasher> FrozenIndexSet<T, S> {
assert!(!self.in_use.get());
self.in_use.set(true);
let ret = unsafe {
let map = self.set.get();
(*map).get_index_of(k)
let set = self.set.get();
(*set).get_index_of(k)
};
self.in_use.set(false);
ret
Expand Down

0 comments on commit 07bec53

Please sign in to comment.