From 98b1370e467a9de2e4b6923a511841c0c1fba7ef Mon Sep 17 00:00:00 2001 From: Tobias Bucher Date: Thu, 10 Sep 2015 17:34:15 +0100 Subject: [PATCH] Add `io::Write` implementation akin to `Vec` --- src/lib.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 9e3d1d6..80f045b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ extern crate odds; extern crate nodrop; use std::cmp; +use std::io; use std::iter; use std::mem; use std::ptr; @@ -675,3 +676,19 @@ impl Ord for ArrayVec where A::Item: Ord { (**self).cmp(other) } } + +impl> io::Write for ArrayVec { + fn write(&mut self, data: &[u8]) -> io::Result { + unsafe { + let len = self.len(); + let mut tail = slice::from_raw_parts_mut(self.get_unchecked_mut(len), + A::capacity() - len); + let result = tail.write(data); + if let Ok(written) = result { + self.set_len(len + written); + } + result + } + } + fn flush(&mut self) -> io::Result<()> { Ok(()) } +}