summaryrefslogtreecommitdiffstats
path: root/library/core/src/slice/specialize.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/core/src/slice/specialize.rs')
-rw-r--r--library/core/src/slice/specialize.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/library/core/src/slice/specialize.rs b/library/core/src/slice/specialize.rs
new file mode 100644
index 000000000..80eb59058
--- /dev/null
+++ b/library/core/src/slice/specialize.rs
@@ -0,0 +1,23 @@
+pub(super) trait SpecFill<T> {
+ fn spec_fill(&mut self, value: T);
+}
+
+impl<T: Clone> SpecFill<T> for [T] {
+ default fn spec_fill(&mut self, value: T) {
+ if let Some((last, elems)) = self.split_last_mut() {
+ for el in elems {
+ el.clone_from(&value);
+ }
+
+ *last = value
+ }
+ }
+}
+
+impl<T: Copy> SpecFill<T> for [T] {
+ fn spec_fill(&mut self, value: T) {
+ for item in self.iter_mut() {
+ *item = value;
+ }
+ }
+}