Struct io_interner::IOInterner
source · pub struct IOInterner<T: Write + Read + Seek + ?Sized> {
pub inner: Mutex<T>,
}
Expand description
Fields§
§inner: Mutex<T>
The underlying writer wrapped into a Mutex
.
The data pointed by existing [IOEntry
] instances would change and thus the comparison
algorithm would mess up if you do not ensure that already existing data remain equal after
releasing a lock,it’s advisable to only write at the end.
Implementations§
source§impl<T: Write + Read + Seek> IOInterner<T>
impl<T: Write + Read + Seek> IOInterner<T>
sourcepub fn from_buf<U>(x: U) -> IOInterner<Cursor<U>> ⓘwhere
Cursor<U>: Write + Read + Seek,
pub fn from_buf<U>(x: U) -> IOInterner<Cursor<U>> ⓘwhere Cursor<U>: Write + Read + Seek,
Create a new IOInterner
that uses as common storage x
.
sourcepub fn map<U: Write + Read + Seek, F: FnOnce(T) -> U>(
self,
f: F
) -> Result<IOInterner<U>, PoisonError<T>>
pub fn map<U: Write + Read + Seek, F: FnOnce(T) -> U>( self, f: F ) -> Result<IOInterner<U>, PoisonError<T>>
Returns an IOInterner<U>
after applying the closure f
to it’s inner value.
Errors
See Mutex::into_inner
.
source§impl<T: Write + Read + Seek + ?Sized> IOInterner<T>
impl<T: Write + Read + Seek + ?Sized> IOInterner<T>
sourcepub fn try_intern<U: Read + Seek>(&self, buf: U) -> Result<(IOObj<'_, T>, bool)>
pub fn try_intern<U: Read + Seek>(&self, buf: U) -> Result<(IOObj<'_, T>, bool)>
Like Self::get_or_intern
instead that will return also a bool
indicating whether the
entry was not there before.
Errors
See Self::get_or_intern
.
sourcepub fn get_or_intern<U: Read + Seek>(&self, buf: U) -> Result<IOObj<'_, T>>
pub fn get_or_intern<U: Read + Seek>(&self, buf: U) -> Result<IOObj<'_, T>>
Creates a new IOEntry
object that will be able to generate IOObj
that always read
same bytes as buf
from T
so buf
will be written at the end if it’s not already.
The IOObj
does not implement Write
as that would mess up equality of two
[IOEntry
] instances pointing to the same position with same length which it’s actually
the comparison algorithm.
The cursor of the inner Mutex<T>
field it’s setted at final of the IOPos
returned
which would be at final if the data had to be written.
Errors
This function returns any io::Error
that could result from [seek
] and [read
]
operation applied to buf
or any [seek
],[read
] or write
one applied to
self.inner
.
Panics
This function panics if the Mutex
it’s poisoned.
Race conditions
if a &File
it’s passed down as buf
,the length of the file it’s readed at init and while
comparing the contents new bytes added thought another &File
gotta be ignored.
sourcepub fn get_or_intern_bytes(
&self,
bytes: impl AsRef<[u8]>
) -> Result<IOObj<'_, T>>
pub fn get_or_intern_bytes( &self, bytes: impl AsRef<[u8]> ) -> Result<IOObj<'_, T>>
Convenience for self.get_or_intern(io::Cursor::new(bytes))
.
Trait Implementations§
source§impl<'a, T: Write + Read + Seek + ?Sized> Read for &'a IOInterner<T>
impl<'a, T: Write + Read + Seek + ?Sized> Read for &'a IOInterner<T>
source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
buf
. Read more1.0.0 · source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moresource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere Self: Sized,
Read
. Read moresource§impl<T: Write + Read + Seek + ?Sized> Read for IOInterner<T>
impl<T: Write + Read + Seek + ?Sized> Read for IOInterner<T>
source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moresource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
buf
. Read more1.0.0 · source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moresource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read moresource§impl<'a, T: Write + Read + Seek + ?Sized> Seek for &'a IOInterner<T>
impl<'a, T: Write + Read + Seek + ?Sized> Seek for &'a IOInterner<T>
source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
1.55.0 · source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
source§impl<T: Write + Read + Seek + ?Sized> Seek for IOInterner<T>
impl<T: Write + Read + Seek + ?Sized> Seek for IOInterner<T>
source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
1.55.0 · source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
source§impl<'a, T: Write + Read + Seek + ?Sized> Write for &'a IOInterner<T>
impl<'a, T: Write + Read + Seek + ?Sized> Write for &'a IOInterner<T>
source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)source§impl<T: Write + Read + Seek + ?Sized> Write for IOInterner<T>
impl<T: Write + Read + Seek + ?Sized> Write for IOInterner<T>
source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)