From 404be633c1b8f584c86aa4031516cf6a72374058 Mon Sep 17 00:00:00 2001 From: Gwilym Kuiper Date: Thu, 15 Apr 2021 23:05:53 +0100 Subject: [PATCH] Add implementation of set bits to save bit twiddling --- src/memory_mapped.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/memory_mapped.rs b/src/memory_mapped.rs index 0c0cf6f2..730de380 100644 --- a/src/memory_mapped.rs +++ b/src/memory_mapped.rs @@ -1,3 +1,5 @@ +use core::ops; + pub struct MemoryMapped { address: *mut T, } @@ -18,6 +20,24 @@ impl MemoryMapped { } } +impl MemoryMapped +where + T: From + + Copy + + ops::Shl + + ops::BitAnd + + ops::Sub + + ops::BitOr + + ops::Not, +{ + pub fn set_bits(&self, value: T, length: T, shift: T) { + let one: T = 1u8.into(); + let mask: T = (one << length) - one; + let current_val = self.get(); + self.set((current_val & !(mask << shift)) | ((value & mask) << shift)); + } +} + pub struct MemoryMapped1DArray { array: *mut [T; N], }