Tape

Struct Tape 

Source
pub struct Tape<F> {
    pub running: bool,
    pub tap: Option<Tap<F>>,
}
Expand description

The struct that emulates a simple tape recorder.

Fields§

§running: bool

true if the tape is playing, depending on the Tap variant it may indicate tape playback or recording. false then the tape has stopped.

§tap: Option<Tap<F>>

Some(tap) indicates the tape cassette is inserted, None - there is no tape.

Implementations§

Source§

impl<F: Write + Read + Seek> Tape<F>

Source

pub fn new_with_tape(file: F) -> Self

Returns a new instance of Tape with the tape file inserted.

Source

pub fn insert_as_reader(&mut self, file: F) -> Option<Tap<F>>

Inserts the tape file as a Tap::Reader. Returns the previously inserted Tap instance.

Source

pub fn try_insert_as_writer(&mut self, file: F) -> Result<Option<Tap<F>>>

Tries to insert the tape file as a Tap::Writer. Returns the previously inserted Tap instance.

Source

pub fn eject(&mut self) -> Option<Tap<F>>

Ejects and returns the previously inserted Tap instance.

Source

pub fn make_reader(&mut self) -> Result<bool>

Transforms the inserted Tap into the Tap::Reader on success.

Returns Ok(true) if the inserted Tap was a Tap::Writer. In this instance, the cursor position of the reader is set to the beginning of a file and this method ensures that the chunk being currently written is comitted thus ensuring the integrity of the TAP file and also calls the Write::flush on the file before transforming it.

If the inserted Tap is already a Tap::Reader or if there is no Tap inserted returns Ok(false).

Source

pub fn make_writer(&mut self) -> Result<bool>

Transforms the inserted Tap into the Tap::Writer on success.

Returns Ok(true) if the inserted Tap was a Tap::Reader. In this instance the cursor position of the reader is set to the end of a file.

If the inserted Tap is already a Tap::Writer or if there is no Tap inserted returns Ok(false).

Source

pub fn is_ejected(&self) -> bool

Returns true if there is no Tap inserted, otherwise returns false.

Source

pub fn is_inserted(&self) -> bool

Returns true if there is a Tap inserted, otherwise returns false.

Source

pub fn is_running(&self) -> bool

Returns true if there is some Tap inserted and Tape::running is true, otherwise returns false.

Source

pub fn is_idle(&self) -> bool

Returns true if no Tap is inserted or Tape::running is false, otherwise returns true.

Source

pub fn tap_state(&self) -> TapState

Returns the current status of the inserted tape as an enum.

Source

pub fn is_playing(&self) -> bool

Returns true if there is a Tap::Reader variant inserted and Tape::running is true, otherwise returns false.

Source

pub fn is_recording(&self) -> bool

Returns true if there is a Tap::Writer variant inserted and Tape::running is true, otherwise returns false.

Source

pub fn reader_mut(&mut self) -> Option<&mut TapChunkPulseIter<F>>

Returns a mutable reference to the pulse iterator if the current variant of Tape::tap is Tap::Reader.

Source

pub fn writer_mut(&mut self) -> Option<&mut TapChunkWriter<F>>

Returns a mutable reference to the tap chunk writer if the current variant of Tape::tap is Tap::Writer.

Source

pub fn reader_ref(&self) -> Option<&TapChunkPulseIter<F>>

Returns a reference to the pulse iterator if the current variant of Tape::tap is Tap::Reader.

Source

pub fn writer_ref(&self) -> Option<&TapChunkWriter<F>>

Returns a reference to the tap chunk writer if the current variant of Tape::tap is Tap::Writer.

Source

pub fn playing_reader_mut(&mut self) -> Option<&mut TapChunkPulseIter<F>>

Returns a mutable reference to the pulse iterator if there is a Tap::Reader variant inserted and Tape::running is true, otherwise returns None.

Source

pub fn recording_writer_mut(&mut self) -> Option<&mut TapChunkWriter<F>>

Returns a mutable reference to the tap chunk writer if there is a Tap::Writer variant inserted and Tape::running is true, otherwise returns None.

Source

pub fn try_reader_mut(&mut self) -> Result<Option<TapChunkReaderMut<'_, F>>>

Returns a clone of TapChunkReader with a mutable reference to the file under the guard that ensures the position of the underlying file is set back to where it was before this method was called when the guard goes out of scope.

Source

pub fn play(&mut self) -> Result<bool>

Sets Tape::running to true and ensures the inserted variant is a Tap::Reader.

Returns Ok(true) if the state of self changes.

Source

pub fn record(&mut self) -> Result<bool>

Sets Tape::running to true and ensures the inserted variant is a Tap::Writer.

Returns Ok(true) if the state of self changes.

Source

pub fn stop(&mut self)

Sets Tape::running to false.

Source

pub fn rewind(&mut self) -> bool

Conditionally rewinds a tape if it’s inserted and its variant is Tap::Reader. In this instance returns true. Otherwise returns false.

Source

pub fn forward_chunk(&mut self) -> Result<Option<bool>>

Conditionally forwards a tape to the next chunk if it’s inserted and its variant is Tap::Reader. In this instance returns Ok(Some(was_next_chunk)). Otherwise returns Ok(None).

Source

pub fn rewind_prev_chunk(&mut self) -> Result<Option<u32>>

Conditionally rewinds a tape to the previous chunk if it’s inserted and its variant is Tap::Reader. In this instance returns Ok(Some(chunk_no)). Otherwise returns Ok(None).

Source

pub fn rewind_chunk(&mut self) -> Result<Option<u32>>

Conditionally rewinds a tape to the beginning of the current chunk if it’s inserted and its variant is Tap::Reader. In this instance returns Ok(Some(chunk_no)). Otherwise returns Ok(None).

Source

pub fn rewind_nth_chunk(&mut self, chunk_no: u32) -> Result<Option<bool>>

Conditionally rewinds or forwards a tape to the nth chunk if it’s inserted and its variant is Tap::Reader. In this instance returns Ok(Some(was_a_chunk)). Otherwise returns Ok(None).

Trait Implementations§

Source§

impl<F: Debug> Debug for Tape<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<F> Default for Tape<F>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<F> Freeze for Tape<F>
where F: Freeze,

§

impl<F> !RefUnwindSafe for Tape<F>

§

impl<F> Send for Tape<F>
where F: Send,

§

impl<F> Sync for Tape<F>
where F: Sync,

§

impl<F> Unpin for Tape<F>
where F: Unpin,

§

impl<F> !UnwindSafe for Tape<F>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<S, T> IntoSample<S> for T
where S: FromSample<T>,

Source§

fn into_sample(self) -> S

Convert to S a sample type from self.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V