Require any Router also implements MessageRouter
[rust-lightning] / lightning / src / util / indexed_map.rs
index 2b5bbac0ddc583e188a9b36b2833cbb42bb74eea..39565f048c07a25f30a6749b5057a55a15278664 100644 (file)
@@ -21,7 +21,7 @@ use core::ops::{Bound, RangeBounds};
 /// actually backed by a [`HashMap`], with some additional tracking to ensure we can iterate over
 /// keys in the order defined by [`Ord`].
 ///
-/// (C-not exported) as bindings provide alternate accessors rather than exposing maps directly.
+/// This is not exported to bindings users as bindings provide alternate accessors rather than exposing maps directly.
 ///
 /// [`BTreeMap`]: alloc::collections::BTreeMap
 #[derive(Clone, Debug, Eq)]
@@ -39,6 +39,14 @@ impl<K: Clone + Hash + Ord, V> IndexedMap<K, V> {
                }
        }
 
+       /// Constructs a new, empty map with the given capacity pre-allocated
+       pub fn with_capacity(capacity: usize) -> Self {
+               Self {
+                       map: HashMap::with_capacity(capacity),
+                       keys: Vec::with_capacity(capacity),
+               }
+       }
+
        #[inline(always)]
        /// Fetches the element with the given `key`, if one exists.
        pub fn get(&self, key: &K) -> Option<&V> {
@@ -150,7 +158,7 @@ impl<K: Hash + Ord + PartialEq, V: PartialEq> PartialEq for IndexedMap<K, V> {
 
 /// An iterator over a range of values in an [`IndexedMap`]
 ///
-/// (C-not exported) as bindings provide alternate accessors rather than exposing maps directly.
+/// This is not exported to bindings users as bindings provide alternate accessors rather than exposing maps directly.
 pub struct Range<'a, K: Hash + Ord, V> {
        inner_range: Iter<'a, K>,
        map: &'a HashMap<K, V>,
@@ -166,7 +174,7 @@ impl<'a, K: Hash + Ord, V: 'a> Iterator for Range<'a, K, V> {
 
 /// An [`Entry`] for a key which currently has no value
 ///
-/// (C-not exported) as bindings provide alternate accessors rather than exposing maps directly.
+/// This is not exported to bindings users as bindings provide alternate accessors rather than exposing maps directly.
 pub struct VacantEntry<'a, K: Hash + Ord, V> {
        #[cfg(feature = "hashbrown")]
        underlying_entry: hash_map::VacantEntry<'a, K, V, hash_map::DefaultHashBuilder>,
@@ -178,7 +186,7 @@ pub struct VacantEntry<'a, K: Hash + Ord, V> {
 
 /// An [`Entry`] for an existing key-value pair
 ///
-/// (C-not exported) as bindings provide alternate accessors rather than exposing maps directly.
+/// This is not exported to bindings users as bindings provide alternate accessors rather than exposing maps directly.
 pub struct OccupiedEntry<'a, K: Hash + Ord, V> {
        #[cfg(feature = "hashbrown")]
        underlying_entry: hash_map::OccupiedEntry<'a, K, V, hash_map::DefaultHashBuilder>,
@@ -190,7 +198,7 @@ pub struct OccupiedEntry<'a, K: Hash + Ord, V> {
 /// A mutable reference to a position in the map. This can be used to reference, add, or update the
 /// value at a fixed key.
 ///
-/// (C-not exported) as bindings provide alternate accessors rather than exposing maps directly.
+/// This is not exported to bindings users as bindings provide alternate accessors rather than exposing maps directly.
 pub enum Entry<'a, K: Hash + Ord, V> {
        /// A mutable reference to a position within the map where there is no value.
        Vacant(VacantEntry<'a, K, V>),