diff options
Diffstat (limited to 'src/devices/file/directory_entry.rs')
-rw-r--r-- | src/devices/file/directory_entry.rs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/src/devices/file/directory_entry.rs b/src/devices/file/directory_entry.rs deleted file mode 100644 index 7f0e69b..0000000 --- a/src/devices/file/directory_entry.rs +++ /dev/null @@ -1,57 +0,0 @@ -use super::*; - -use std::cmp::Ordering; - -#[derive(PartialEq, Eq)] -pub struct DirectoryChild { - pub byte_path: Vec<u8>, - pub entry_type: EntryType, -} - -impl PartialOrd for DirectoryChild { - fn partial_cmp(&self, other: &Self) -> Option<Ordering> { - Some(self.cmp(other)) - } -} - -impl Ord for DirectoryChild { - fn cmp(&self, other: &Self) -> Ordering { - match self.entry_type.cmp(&other.entry_type) { - Ordering::Equal => - compare_ascii_arrays(&self.byte_path,&other.byte_path), - other => other, - } - } -} - -// Compare two ASCII arrays in case-agnostic alphabetic order. -fn compare_ascii_arrays(left: &[u8], right: &[u8]) -> Ordering { - let l = std::cmp::min(left.len(), right.len()); - let lhs = &left[..l]; - let rhs = &right[..l]; - - for i in 0..l { - let a = remap_ascii(lhs[i]); - let b = remap_ascii(rhs[i]); - match a.cmp(&b) { - Ordering::Equal => (), - non_eq => return non_eq, - } - } - - left.len().cmp(&right.len()) -} - -// Remap ASCII values so that they sort in case-agnostic alphabetic order: -// !"#$%&'()*+,-./0123456789:;<=>? -// @`AaBbCcDdEeFfGgHhIiJjKkLlMmNnOo -// PpQqRrSsTtUuVvWwXxYyZz[{\|]}^~_ -fn remap_ascii(c: u8) -> u8 { - if 0x40 <= c && c <= 0x5F { - (c - 0x40) * 2 + 0x40 - } else if 0x60 <= c && c <= 0x7F { - (c - 0x60) * 2 + 0x41 - } else { - c - } -} |