Sha256: e1d454ff47efac70fdaa709251a5a9c1c5637f931994ba3bf6a38c6db9145822

Contents?: true

Size: 1.49 KB

Versions: 30

Compression:

Stored size: 1.49 KB

Contents

use core::cmp::PartialEq;
use core::ops::{BitAnd, BitOr, Not};

pub trait Io {
    type Value: Copy + PartialEq + BitAnd<Output = Self::Value> + BitOr<Output = Self::Value> + Not<Output = Self::Value>;

    fn read(&self) -> Self::Value;
    fn write(&mut self, value: Self::Value);

    #[inline(always)]
    fn readf(&self, flags: Self::Value) -> bool  {
        (self.read() & flags) as Self::Value == flags
    }

    #[inline(always)]
    fn writef(&mut self, flags: Self::Value, value: bool) {
        let tmp: Self::Value = match value {
            true => self.read() | flags,
            false => self.read() & !flags,
        };
        self.write(tmp);
    }
}

pub struct ReadOnly<I> {
    inner: I
}

impl<I> ReadOnly<I> {
    pub const fn new(inner: I) -> ReadOnly<I> {
        ReadOnly {
            inner: inner
        }
    }
}

impl<I: Io> ReadOnly<I> {
    #[inline(always)]
    pub fn read(&self) -> I::Value {
        self.inner.read()
    }

    #[inline(always)]
    pub fn readf(&self, flags: I::Value) -> bool {
        self.inner.readf(flags)
    }
}

pub struct WriteOnly<I> {
    inner: I
}

impl<I> WriteOnly<I> {
    pub const fn new(inner: I) -> WriteOnly<I> {
        WriteOnly {
            inner: inner
        }
    }
}

impl<I: Io> WriteOnly<I> {
    #[inline(always)]
    pub fn write(&mut self, value: I::Value) {
        self.inner.write(value)
    }

    #[inline(always)]
    pub fn writef(&mut self, flags: I::Value, value: bool) {
        self.inner.writef(flags, value)
    }
}

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
wasmtime-23.0.2 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-22.0.0 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-21.0.1 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-20.0.2 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-20.0.0 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-18.0.3 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-17.0.1 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-17.0.0 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-16.0.0 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-15.0.1 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-15.0.0 ./ext/cargo-vendor/redox_syscall-0.4.1/src/io/io.rs
wasmtime-14.0.4 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-14.0.3 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-14.0.1 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-14.0.0 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-13.0.0 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-12.0.1 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-12.0.0 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-11.0.0 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs
wasmtime-10.0.1 ./ext/cargo-vendor/redox_syscall-0.2.16/src/io/io.rs