rust-osdev / volatile

Apache License 2.0
71 stars 19 forks source link

Implement copy for volatile? #9

Closed BuggStream closed 1 year ago

BuggStream commented 4 years ago

So I have been following the 'Writing an OS in Rust' guide. And while I was experimenting and reading through the code I noticed that Copy hasn't been implemented for Volatile.

This could be useful when writing code:

impl<T: Copy> Copy for Volatile<T> {
    // Empty.
}

After this the new line function for the VGA buffer can be implemented as follows:

fn new_line(&mut self) {
    &self.buffer.chars.copy_within(1.., 0);

    self.clear_row(BUFFER_HEIGHT - 1);
    self.column_position = 0;
}

Now I did notice that copy_within uses the normal ptr::copy instead of volatile_copy_memory. Is this a potential issue?

Anyway let me know if you want to add this, if so I will make a short MR.

videah commented 4 years ago

See https://github.com/embed-rs/volatile/pull/6#issuecomment-433612911 and https://github.com/embed-rs/volatile/pull/5#issuecomment-353783786 as to why this hasn't been done yet.

I would like to see VolatileArray be implemented, is that possible now? @phil-opp

BuggStream commented 4 years ago

See #6 (comment) and #5 (comment) as to why this hasn't been done yet.

I would like to see VolatileArray be implemented, is that possible now? @phil-opp

Oh it seems like I forgot to look at the MRs to check if this was already asked. Sorry about that. Anyway thanks for your answer.

I'd also be interested to know if something like VolatileArray could be useful.

phil-opp commented 4 years ago

I think it should be possible to implement VolatileArray and VolatileSlice types now that we have basic support for const generics in Rust, but I'm not 100% sure.

phil-opp commented 1 year ago

The new v0.5.0 release includes both a VolatilePtr type that implements Copy and (unstable) methods for accessing slices and arrays.