| 335 | /// Invariant: The whole address space of this node is in addressable memory. |
| 336 | #[rr::invariant("INV_IN_RANGE": "node.(base_address) + (page_size_in_bytes_nat node.(max_node_size)) ≤ MaxInt usize")] |
| 337 | struct PageStorageTreeNode { |
| 338 | // Page token owned by this node. `None` means that this page token has already been allocated or that it has been divided into smaller |
| 339 | // pages token that were stored in this node's children. |
| 340 | #[rr::field("<#>@{{ option }} maybe_page_token")] |
| 341 | page_token: Option<Page<UnAllocated>>, |
| 342 | // Specifies what size of the page token can be allocated by exploring the tree starting at this node. |
| 343 | // Invariant: if page token exist, then the its size is the max allocable size. Otherwise, the max allocable page size is the max |
| 344 | // allocable page size of children |
| 345 | #[rr::field("<#>@{{ option }} max_sz")] |
| 346 | max_allocable_page_size: Option<PageSize>, |
| 347 | // Invariant: Children store page tokens smaller than the page token stored in the parent node |
| 348 | #[rr::field("<#> children")] |
| 349 | children: Vec<Self>, |
| 350 | } |
| 351 | |
| 352 | #[rr::context("onceG Σ memory_layout")] |
| 353 | #[rr::context("MachineConfig")] |
nothing calls this directly
no outgoing calls
no test coverage detected