Skip to content

Commit 5b787fb

Browse files
authored
Merge pull request #25 from Databean/arc_raf
Implement `ReadAt` and `Size` for `Arc<RandomAccessFile>`
2 parents a0ee50d + 42f5db8 commit 5b787fb

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Diff for: src/raf.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::io::{Seek, SeekFrom};
44
use std::os::unix::fs::FileExt;
55
#[cfg(windows)]
66
use std::os::windows::fs::FileExt;
7-
use std::{fs::File, io, io::Write, path::Path};
7+
use std::{fs::File, io, io::Write, path::Path, sync::Arc};
88

99
use super::{ReadAt, Size, WriteAt};
1010

@@ -151,3 +151,17 @@ impl Size for RandomAccessFile {
151151
self.file.size()
152152
}
153153
}
154+
155+
impl ReadAt for Arc<RandomAccessFile> {
156+
#[inline]
157+
fn read_at(&self, pos: u64, buf: &mut [u8]) -> io::Result<usize> {
158+
(**self).read_at(pos, buf)
159+
}
160+
}
161+
162+
impl Size for Arc<RandomAccessFile> {
163+
#[inline]
164+
fn size(&self) -> io::Result<Option<u64>> {
165+
(**self).size()
166+
}
167+
}

Diff for: tests/test.rs

+17
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::{
33
fs::File,
44
io::{Error, ErrorKind, Read, Result, Seek, SeekFrom},
55
str,
6+
sync::Arc,
67
};
78

89
#[cfg(feature = "byteorder")]
@@ -118,6 +119,22 @@ fn test_size_cursor() {
118119
assert!(s.contains("\n"));
119120
}
120121

122+
#[test]
123+
fn test_clone_size_cursor() {
124+
let file = Arc::new(RandomAccessFile::open("tests/pi.txt").unwrap());
125+
let mut curs = SizeCursor::new(file);
126+
let mut curs_copy = curs.clone();
127+
128+
let mut buf = [0; 4];
129+
assert_eq!(4, curs.read(&mut buf).unwrap());
130+
let s = str::from_utf8(buf.as_ref()).unwrap();
131+
assert_eq!(s, "3.14");
132+
133+
assert_eq!(4, curs_copy.read(&mut buf).unwrap());
134+
let s = str::from_utf8(buf.as_ref()).unwrap();
135+
assert_eq!(s, "3.14");
136+
}
137+
121138
#[test]
122139
#[cfg(feature = "byteorder")]
123140
fn test_byteio() {

0 commit comments

Comments
 (0)