Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
radicle-term: Preallocate in Line::spaced()
Matthias Beyer committed 8 months ago
commit 93388e366c85ce151febeeb7e80c9c28a57ddf61
parent 3036509e420846c775a906b514052000cd2e987e
1 file changed +16 -6
modified crates/radicle-term/src/element.rs
@@ -183,13 +183,23 @@ impl Line {
    }

    /// Return a line with a single space between the given labels.
+
    // TODO: Make this impl trivial once [`Iterator::intersperse`] is stable.
    pub fn spaced(items: impl IntoIterator<Item = Label>) -> Self {
-
        let mut line = Self::default();
-
        for item in items.into_iter() {
-
            // Don't create spaces around empty labels.
-
            if item.is_blank() {
-
                continue;
-
            }
+
        let iter = items.into_iter();
+

+
        let mut line = Self {
+
            items: Vec::with_capacity({
+
                let (min, max) = iter.size_hint();
+
                let likely = max.unwrap_or(min);
+

+
                // Technically (likely + (likely - 1)), but we push the last space before
+
                // we pop it again, so we need that additional space anyways.
+
                likely * 2
+
            }),
+
        };
+

+
        // Don't create spaces around empty labels.
+
        for item in iter.filter(|i| !i.is_blank()) {
            line.push(item);
            line.push(Label::space());
        }