1use super::*;
3use std::{usize,cmp};
4
5fn as_usize(v: u64) -> usize {
8 if v > (usize::MAX as u64) {
10 usize::MAX
11 } else {
12 v as usize
13 }
14}
15
16impl ReadAt for [u8] {
17 fn read_at(&self, buf: &mut[u8], offs: u64) -> Result<usize> {
18 let src = self;
19 let offs = as_usize(offs);
20 if offs > src.len() {
21 return Ok(0);
22 }
23
24 let r = &src[offs..];
25 let l = cmp::min(buf.len(), r.len());
26 let r = &r[..l];
27 let buf = &mut buf[..l];
28
29 buf.copy_from_slice(r);
30 Ok(l)
31 }
32}
33
34impl WriteAt for [u8] {
35 fn write_at(&mut self, buf: &[u8], offs: u64) -> Result<usize> {
36 let offs = as_usize(offs);
37 if offs > self.len() {
38 return Ok(0);
39 }
40
41 let r = &mut self[offs..];
42 let l = cmp::min(buf.len(), r.len());
43 let r = &mut r[..l];
44 let buf = &buf[..l];
45
46 r.copy_from_slice(buf);
47 Ok(l)
48 }
49}
50
51#[test]
52fn do_t() {
53 let mut x = [0u8;128];
54 super::test_impl(&mut x[..]);
55}
56