macho_core/model/addr/
range.rs1use std::fmt;
2
3use super::types::{ThinFileOffset, Va};
4
5#[derive(Clone, Copy, PartialEq, Eq)]
6pub struct AddressRange<A: Copy> {
8 pub start: A,
10 pub size: u64,
12}
13
14impl<A: Copy + fmt::Debug + std::ops::Add<u64, Output = A>> AddressRange<A> {
15 pub fn new(start: A, size: u64) -> Self {
17 Self { start, size }
18 }
19
20 pub fn end(&self) -> A {
22 self.start + self.size
23 }
24
25 pub fn is_empty(&self) -> bool {
27 self.size == 0
28 }
29}
30
31impl<A: Copy + fmt::Debug + std::ops::Add<u64, Output = A> + PartialOrd> AddressRange<A> {
32 pub fn contains(&self, addr: A) -> bool {
34 addr >= self.start && addr < self.end()
35 }
36}
37
38impl<A: Copy + fmt::Debug> fmt::Debug for AddressRange<A> {
39 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40 f.debug_struct("AddressRange")
41 .field("start", &self.start)
42 .field("size", &self.size)
43 .finish()
44 }
45}
46
47pub type FileRange = AddressRange<ThinFileOffset>;
49pub type VaRange = AddressRange<Va>;