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(()) } +}