Skip to content

Commit 92b0c6a

Browse files
committed
Re-organise the blockdevice.rs file.
1 parent ae72878 commit 92b0c6a

File tree

1 file changed

+92
-92
lines changed

1 file changed

+92
-92
lines changed

src/blockdevice.rs

Lines changed: 92 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,6 @@ pub struct Block {
1616
pub contents: [u8; Block::LEN],
1717
}
1818

19-
/// The linear numeric address of a block (or sector).
20-
///
21-
/// The first block on a disk gets `BlockIdx(0)` (which usually contains the
22-
/// Master Boot Record).
23-
#[cfg_attr(feature = "defmt-log", derive(defmt::Format))]
24-
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
25-
pub struct BlockIdx(pub u32);
26-
27-
/// The a number of blocks (or sectors).
28-
///
29-
/// Add this to a `BlockIdx` to get an actual address on disk.
30-
#[cfg_attr(feature = "defmt-log", derive(defmt::Format))]
31-
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
32-
pub struct BlockCount(pub u32);
33-
34-
/// An iterator returned from `Block::range`.
35-
pub struct BlockIter {
36-
inclusive_end: BlockIdx,
37-
current: BlockIdx,
38-
}
39-
40-
/// A block device - a device which can read and write blocks (or
41-
/// sectors). Only supports devices which are <= 2 TiB in size.
42-
pub trait BlockDevice {
43-
/// The errors that the `BlockDevice` can return. Must be debug formattable.
44-
type Error: core::fmt::Debug;
45-
/// Read one or more blocks, starting at the given block index.
46-
fn read(&self, blocks: &mut [Block], start_block_idx: BlockIdx) -> Result<(), Self::Error>;
47-
/// Write one or more blocks, starting at the given block index.
48-
fn write(&self, blocks: &[Block], start_block_idx: BlockIdx) -> Result<(), Self::Error>;
49-
/// Determine how many blocks this device can hold.
50-
fn num_blocks(&self) -> Result<BlockCount, Self::Error>;
51-
}
52-
5319
impl Block {
5420
/// All our blocks are a fixed length of 512 bytes. We do not support
5521
/// 'Advanced Format' Hard Drives with 4 KiB blocks, nor weird old
@@ -67,64 +33,6 @@ impl Block {
6733
}
6834
}
6935

70-
impl Default for Block {
71-
fn default() -> Self {
72-
Self::new()
73-
}
74-
}
75-
76-
impl core::ops::Add<BlockCount> for BlockIdx {
77-
type Output = BlockIdx;
78-
fn add(self, rhs: BlockCount) -> BlockIdx {
79-
BlockIdx(self.0 + rhs.0)
80-
}
81-
}
82-
83-
impl core::ops::AddAssign<BlockCount> for BlockIdx {
84-
fn add_assign(&mut self, rhs: BlockCount) {
85-
self.0 += rhs.0
86-
}
87-
}
88-
89-
impl core::ops::Add<BlockCount> for BlockCount {
90-
type Output = BlockCount;
91-
fn add(self, rhs: BlockCount) -> BlockCount {
92-
BlockCount(self.0 + rhs.0)
93-
}
94-
}
95-
96-
impl core::ops::AddAssign<BlockCount> for BlockCount {
97-
fn add_assign(&mut self, rhs: BlockCount) {
98-
self.0 += rhs.0
99-
}
100-
}
101-
102-
impl core::ops::Sub<BlockCount> for BlockIdx {
103-
type Output = BlockIdx;
104-
fn sub(self, rhs: BlockCount) -> BlockIdx {
105-
BlockIdx(self.0 - rhs.0)
106-
}
107-
}
108-
109-
impl core::ops::SubAssign<BlockCount> for BlockIdx {
110-
fn sub_assign(&mut self, rhs: BlockCount) {
111-
self.0 -= rhs.0
112-
}
113-
}
114-
115-
impl core::ops::Sub<BlockCount> for BlockCount {
116-
type Output = BlockCount;
117-
fn sub(self, rhs: BlockCount) -> BlockCount {
118-
BlockCount(self.0 - rhs.0)
119-
}
120-
}
121-
122-
impl core::ops::SubAssign<BlockCount> for BlockCount {
123-
fn sub_assign(&mut self, rhs: BlockCount) {
124-
self.0 -= rhs.0
125-
}
126-
}
127-
12836
impl core::ops::Deref for Block {
12937
type Target = [u8; 512];
13038
fn deref(&self) -> &[u8; 512] {
@@ -159,6 +67,33 @@ impl core::fmt::Debug for Block {
15967
}
16068
}
16169

70+
impl Default for Block {
71+
fn default() -> Self {
72+
Self::new()
73+
}
74+
}
75+
76+
/// A block device - a device which can read and write blocks (or
77+
/// sectors). Only supports devices which are <= 2 TiB in size.
78+
pub trait BlockDevice {
79+
/// The errors that the `BlockDevice` can return. Must be debug formattable.
80+
type Error: core::fmt::Debug;
81+
/// Read one or more blocks, starting at the given block index.
82+
fn read(&self, blocks: &mut [Block], start_block_idx: BlockIdx) -> Result<(), Self::Error>;
83+
/// Write one or more blocks, starting at the given block index.
84+
fn write(&self, blocks: &[Block], start_block_idx: BlockIdx) -> Result<(), Self::Error>;
85+
/// Determine how many blocks this device can hold.
86+
fn num_blocks(&self) -> Result<BlockCount, Self::Error>;
87+
}
88+
89+
/// The linear numeric address of a block (or sector).
90+
///
91+
/// The first block on a disk gets `BlockIdx(0)` (which usually contains the
92+
/// Master Boot Record).
93+
#[cfg_attr(feature = "defmt-log", derive(defmt::Format))]
94+
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
95+
pub struct BlockIdx(pub u32);
96+
16297
impl BlockIdx {
16398
/// Convert a block index into a 64-bit byte offset from the start of the
16499
/// volume. Useful if your underlying block device actually works in
@@ -174,6 +109,65 @@ impl BlockIdx {
174109
}
175110
}
176111

112+
impl core::ops::Add<BlockCount> for BlockIdx {
113+
type Output = BlockIdx;
114+
fn add(self, rhs: BlockCount) -> BlockIdx {
115+
BlockIdx(self.0 + rhs.0)
116+
}
117+
}
118+
119+
impl core::ops::AddAssign<BlockCount> for BlockIdx {
120+
fn add_assign(&mut self, rhs: BlockCount) {
121+
self.0 += rhs.0
122+
}
123+
}
124+
125+
impl core::ops::Sub<BlockCount> for BlockIdx {
126+
type Output = BlockIdx;
127+
fn sub(self, rhs: BlockCount) -> BlockIdx {
128+
BlockIdx(self.0 - rhs.0)
129+
}
130+
}
131+
132+
impl core::ops::SubAssign<BlockCount> for BlockIdx {
133+
fn sub_assign(&mut self, rhs: BlockCount) {
134+
self.0 -= rhs.0
135+
}
136+
}
137+
138+
/// The a number of blocks (or sectors).
139+
///
140+
/// Add this to a `BlockIdx` to get an actual address on disk.
141+
#[cfg_attr(feature = "defmt-log", derive(defmt::Format))]
142+
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
143+
pub struct BlockCount(pub u32);
144+
145+
impl core::ops::Add<BlockCount> for BlockCount {
146+
type Output = BlockCount;
147+
fn add(self, rhs: BlockCount) -> BlockCount {
148+
BlockCount(self.0 + rhs.0)
149+
}
150+
}
151+
152+
impl core::ops::AddAssign<BlockCount> for BlockCount {
153+
fn add_assign(&mut self, rhs: BlockCount) {
154+
self.0 += rhs.0
155+
}
156+
}
157+
158+
impl core::ops::Sub<BlockCount> for BlockCount {
159+
type Output = BlockCount;
160+
fn sub(self, rhs: BlockCount) -> BlockCount {
161+
BlockCount(self.0 - rhs.0)
162+
}
163+
}
164+
165+
impl core::ops::SubAssign<BlockCount> for BlockCount {
166+
fn sub_assign(&mut self, rhs: BlockCount) {
167+
self.0 -= rhs.0
168+
}
169+
}
170+
177171
impl BlockCount {
178172
/// How many blocks are required to hold this many bytes.
179173
///
@@ -200,6 +194,12 @@ impl BlockCount {
200194
}
201195
}
202196

197+
/// An iterator returned from `Block::range`.
198+
pub struct BlockIter {
199+
inclusive_end: BlockIdx,
200+
current: BlockIdx,
201+
}
202+
203203
impl BlockIter {
204204
/// Create a new `BlockIter`, from the given start block, through (and
205205
/// including) the given end block.

0 commit comments

Comments
 (0)