@@ -1741,8 +1741,37 @@ impl<A: Allocator + Clone> RawTableInner<A> {
1741
1741
self . set_ctrl ( index, h2 ( hash) ) ;
1742
1742
}
1743
1743
1744
+ /// Replaces the hash in the control byte at the given index with the provided one,
1745
+ /// and possibly also replicates the new control byte at the end of the array of control
1746
+ /// bytes, returning the old control byte.
1747
+ ///
1748
+ /// This function does not make any changes to the `data` parts of the table,
1749
+ /// or any changes to the the `items` or `growth_left` field of the table.
1750
+ ///
1751
+ /// # Safety
1752
+ ///
1753
+ /// The safety rules are directly derived from the safety rules for [`RawTableInner::set_ctrl_h2`]
1754
+ /// and [`RawTableInner::ctrl`] methods. Thus, in order to uphold the safety contracts for both
1755
+ /// methods, you must observe the following rules when calling this function:
1756
+ ///
1757
+ /// * The [`RawTableInner`] has already been allocated;
1758
+ ///
1759
+ /// * The `index` must not be greater than the `RawTableInner.bucket_mask`, i.e.
1760
+ /// `index <= RawTableInner.bucket_mask` or, in other words, `(index + 1)` must
1761
+ /// be no greater than the number returned by the function [`RawTableInner::buckets`].
1762
+ ///
1763
+ /// Calling this function on a table that has not been allocated results in [`undefined behavior`].
1764
+ ///
1765
+ /// See also [`Bucket::as_ptr`] method, for more information about of properly removing
1766
+ /// or saving `data element` from / into the [`RawTable`] / [`RawTableInner`].
1767
+ ///
1768
+ /// [`RawTableInner::set_ctrl_h2`]: RawTableInner::set_ctrl_h2
1769
+ /// [`RawTableInner::buckets`]: RawTableInner::buckets
1770
+ /// [`Bucket::as_ptr`]: Bucket::as_ptr
1771
+ /// [`undefined behavior`]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
1744
1772
#[ inline]
1745
1773
unsafe fn replace_ctrl_h2 ( & self , index : usize , hash : u64 ) -> u8 {
1774
+ // SAFETY: The caller must uphold the safety rules for the [`RawTableInner::replace_ctrl_h2`]
1746
1775
let prev_ctrl = * self . ctrl ( index) ;
1747
1776
self . set_ctrl_h2 ( index, hash) ;
1748
1777
prev_ctrl
0 commit comments