";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \
restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \
enum, trait, type, macro, \
diff --git a/ch4/os/all.html b/ch4/os/all.html
index 53d5b3ca..705a5750 100644
--- a/ch4/os/all.html
+++ b/ch4/os/all.html
@@ -1,5 +1,7 @@
List of all items in this crate
-
\ No newline at end of file
diff --git a/ch4/os/board/constant.CLOCK_FREQ.html b/ch4/os/board/constant.CLOCK_FREQ.html
index 21b6c272..146b54a9 100644
--- a/ch4/os/board/constant.CLOCK_FREQ.html
+++ b/ch4/os/board/constant.CLOCK_FREQ.html
@@ -1,6 +1,8 @@
CLOCK_FREQ in os::board - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.KERNEL_HEAP_SIZE.html b/ch4/os/config/constant.KERNEL_HEAP_SIZE.html
index d670f534..d77b42c0 100644
--- a/ch4/os/config/constant.KERNEL_HEAP_SIZE.html
+++ b/ch4/os/config/constant.KERNEL_HEAP_SIZE.html
@@ -1,6 +1,8 @@
KERNEL_HEAP_SIZE in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.KERNEL_STACK_SIZE.html b/ch4/os/config/constant.KERNEL_STACK_SIZE.html
index 0870895a..1e547346 100644
--- a/ch4/os/config/constant.KERNEL_STACK_SIZE.html
+++ b/ch4/os/config/constant.KERNEL_STACK_SIZE.html
@@ -1,6 +1,8 @@
KERNEL_STACK_SIZE in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.MEMORY_END.html b/ch4/os/config/constant.MEMORY_END.html
index 50a51128..5ab07242 100644
--- a/ch4/os/config/constant.MEMORY_END.html
+++ b/ch4/os/config/constant.MEMORY_END.html
@@ -1,6 +1,8 @@
MEMORY_END in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.PAGE_SIZE.html b/ch4/os/config/constant.PAGE_SIZE.html
index 6a65de1f..91a51506 100644
--- a/ch4/os/config/constant.PAGE_SIZE.html
+++ b/ch4/os/config/constant.PAGE_SIZE.html
@@ -1,6 +1,8 @@
PAGE_SIZE in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.PAGE_SIZE_BITS.html b/ch4/os/config/constant.PAGE_SIZE_BITS.html
index 5356ad2d..0a0d83fd 100644
--- a/ch4/os/config/constant.PAGE_SIZE_BITS.html
+++ b/ch4/os/config/constant.PAGE_SIZE_BITS.html
@@ -1,6 +1,8 @@
PAGE_SIZE_BITS in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.TRAMPOLINE.html b/ch4/os/config/constant.TRAMPOLINE.html
index 306d3252..420fd50c 100644
--- a/ch4/os/config/constant.TRAMPOLINE.html
+++ b/ch4/os/config/constant.TRAMPOLINE.html
@@ -1,6 +1,8 @@
TRAMPOLINE in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.TRAP_CONTEXT.html b/ch4/os/config/constant.TRAP_CONTEXT.html
index 54c8d95e..6f262eda 100644
--- a/ch4/os/config/constant.TRAP_CONTEXT.html
+++ b/ch4/os/config/constant.TRAP_CONTEXT.html
@@ -1,6 +1,8 @@
TRAP_CONTEXT in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/constant.USER_STACK_SIZE.html b/ch4/os/config/constant.USER_STACK_SIZE.html
index 7b13b4aa..2c8a959e 100644
--- a/ch4/os/config/constant.USER_STACK_SIZE.html
+++ b/ch4/os/config/constant.USER_STACK_SIZE.html
@@ -1,6 +1,8 @@
USER_STACK_SIZE in os::config - Rust
-
\ No newline at end of file
diff --git a/ch4/os/config/fn.kernel_stack_position.html b/ch4/os/config/fn.kernel_stack_position.html
index 3754af75..a154d187 100644
--- a/ch4/os/config/fn.kernel_stack_position.html
+++ b/ch4/os/config/fn.kernel_stack_position.html
@@ -1,7 +1,9 @@
kernel_stack_position in os::config - Rust
-
Return (bottom, top) of a kernel stack in kernel space.
-
+
\ No newline at end of file
diff --git a/ch4/os/console/fn.print.html b/ch4/os/console/fn.print.html
index cfcc29ed..d819b5cb 100644
--- a/ch4/os/console/fn.print.html
+++ b/ch4/os/console/fn.print.html
@@ -1,6 +1,8 @@
print in os::console - Rust
-
\ No newline at end of file
diff --git a/ch4/os/console/struct.Stdout.html b/ch4/os/console/struct.Stdout.html
index 38dd2dcd..5aad587d 100644
--- a/ch4/os/console/struct.Stdout.html
+++ b/ch4/os/console/struct.Stdout.html
@@ -1,19 +1,23 @@
Stdout in os::console - Rust
-
\ No newline at end of file
diff --git a/ch4/os/fn.clear_bss.html b/ch4/os/fn.clear_bss.html
index 2dbff164..6d1dd4bd 100644
--- a/ch4/os/fn.clear_bss.html
+++ b/ch4/os/fn.clear_bss.html
@@ -1,7 +1,9 @@
clear_bss in os - Rust
-
\ No newline at end of file
diff --git a/ch4/os/fn.rust_main.html b/ch4/os/fn.rust_main.html
index a96f0b8b..abb274a6 100644
--- a/ch4/os/fn.rust_main.html
+++ b/ch4/os/fn.rust_main.html
@@ -1,8 +1,10 @@
rust_main in os - Rust
-
\ No newline at end of file
diff --git a/ch4/os/index.html b/ch4/os/index.html
index cce08000..907f417e 100644
--- a/ch4/os/index.html
+++ b/ch4/os/index.html
@@ -1,8 +1,10 @@
os - Rust
-
\ No newline at end of file
diff --git a/ch4/os/lang_items/fn.panic.html b/ch4/os/lang_items/fn.panic.html
index 94ea66bd..d2dffb5e 100644
--- a/ch4/os/lang_items/fn.panic.html
+++ b/ch4/os/lang_items/fn.panic.html
@@ -1,7 +1,9 @@
panic in os::lang_items - Rust
-
\ No newline at end of file
diff --git a/ch4/os/loader/fn.get_app_data.html b/ch4/os/loader/fn.get_app_data.html
index 9a862678..c9dd8604 100644
--- a/ch4/os/loader/fn.get_app_data.html
+++ b/ch4/os/loader/fn.get_app_data.html
@@ -1,7 +1,9 @@
get_app_data in os::loader - Rust
-
\ No newline at end of file
diff --git a/ch4/os/loader/fn.get_num_app.html b/ch4/os/loader/fn.get_num_app.html
index e0af389b..d1bea9c7 100644
--- a/ch4/os/loader/fn.get_num_app.html
+++ b/ch4/os/loader/fn.get_num_app.html
@@ -1,7 +1,9 @@
get_num_app in os::loader - Rust
-
\ No newline at end of file
diff --git a/ch4/os/macro.print.html b/ch4/os/macro.print.html
index bb6aceda..611aa0bd 100644
--- a/ch4/os/macro.print.html
+++ b/ch4/os/macro.print.html
@@ -1,10 +1,12 @@
print in os - Rust
-
\ No newline at end of file
diff --git a/ch4/os/macro.println.html b/ch4/os/macro.println.html
index 229b7103..d931685c 100644
--- a/ch4/os/macro.println.html
+++ b/ch4/os/macro.println.html
@@ -1,10 +1,12 @@
println in os - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/constant.PA_WIDTH_SV39.html b/ch4/os/mm/address/constant.PA_WIDTH_SV39.html
index 6504b57c..85d3966b 100644
--- a/ch4/os/mm/address/constant.PA_WIDTH_SV39.html
+++ b/ch4/os/mm/address/constant.PA_WIDTH_SV39.html
@@ -1,7 +1,9 @@
PA_WIDTH_SV39 in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/constant.PPN_WIDTH_SV39.html b/ch4/os/mm/address/constant.PPN_WIDTH_SV39.html
index 943c0537..4cc98f51 100644
--- a/ch4/os/mm/address/constant.PPN_WIDTH_SV39.html
+++ b/ch4/os/mm/address/constant.PPN_WIDTH_SV39.html
@@ -1,6 +1,8 @@
PPN_WIDTH_SV39 in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/constant.VA_WIDTH_SV39.html b/ch4/os/mm/address/constant.VA_WIDTH_SV39.html
index 590044d6..0d180a29 100644
--- a/ch4/os/mm/address/constant.VA_WIDTH_SV39.html
+++ b/ch4/os/mm/address/constant.VA_WIDTH_SV39.html
@@ -1,6 +1,8 @@
VA_WIDTH_SV39 in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/constant.VPN_WIDTH_SV39.html b/ch4/os/mm/address/constant.VPN_WIDTH_SV39.html
index cc0f9ac3..c48409eb 100644
--- a/ch4/os/mm/address/constant.VPN_WIDTH_SV39.html
+++ b/ch4/os/mm/address/constant.VPN_WIDTH_SV39.html
@@ -1,6 +1,8 @@
VPN_WIDTH_SV39 in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.PhysAddr.html b/ch4/os/mm/address/struct.PhysAddr.html
index f4514f14..527d32e5 100644
--- a/ch4/os/mm/address/struct.PhysAddr.html
+++ b/ch4/os/mm/address/struct.PhysAddr.html
@@ -1,43 +1,47 @@
PhysAddr in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.PhysPageNum.html b/ch4/os/mm/address/struct.PhysPageNum.html
index 0430a19c..0e3fee07 100644
--- a/ch4/os/mm/address/struct.PhysPageNum.html
+++ b/ch4/os/mm/address/struct.PhysPageNum.html
@@ -1,40 +1,44 @@
PhysPageNum in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.SimpleRange.html b/ch4/os/mm/address/struct.SimpleRange.html
index 85bef5eb..d0a3563a 100644
--- a/ch4/os/mm/address/struct.SimpleRange.html
+++ b/ch4/os/mm/address/struct.SimpleRange.html
@@ -1,27 +1,31 @@
SimpleRange in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.SimpleRangeIterator.html b/ch4/os/mm/address/struct.SimpleRangeIterator.html
index c3f0475b..db3d7181 100644
--- a/ch4/os/mm/address/struct.SimpleRangeIterator.html
+++ b/ch4/os/mm/address/struct.SimpleRangeIterator.html
@@ -1,131 +1,138 @@
SimpleRangeIterator in os::mm::address - Rust
-
Creates an iterator which can use the peek and peek_mut methods
to look at the next element of the iterator without consuming it. See
their documentation for more information. Read more
🔬 This is a nightly-only experimental API. (iter_partition_in_place)
Reorders the elements of this iterator in-place according to the given predicate,
such that all those that return true precede all those that return false.
Returns the number of true elements found. Read more
🔬 This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate,
such that all those that return true precede all those that return false. Read more
🔬 This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the
closure returns a failure, the failure is propagated back to the caller immediately. Read more
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.VirtAddr.html b/ch4/os/mm/address/struct.VirtAddr.html
index 2b073ca8..71a46f34 100644
--- a/ch4/os/mm/address/struct.VirtAddr.html
+++ b/ch4/os/mm/address/struct.VirtAddr.html
@@ -1,41 +1,45 @@
VirtAddr in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/struct.VirtPageNum.html b/ch4/os/mm/address/struct.VirtPageNum.html
index f06481db..5a30f6c1 100644
--- a/ch4/os/mm/address/struct.VirtPageNum.html
+++ b/ch4/os/mm/address/struct.VirtPageNum.html
@@ -1,40 +1,44 @@
VirtPageNum in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/trait.StepByOne.html b/ch4/os/mm/address/trait.StepByOne.html
index 4ab7e1bf..93541eb5 100644
--- a/ch4/os/mm/address/trait.StepByOne.html
+++ b/ch4/os/mm/address/trait.StepByOne.html
@@ -1,8 +1,10 @@
StepByOne in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/address/type.VPNRange.html b/ch4/os/mm/address/type.VPNRange.html
index 566386d3..1bb2610d 100644
--- a/ch4/os/mm/address/type.VPNRange.html
+++ b/ch4/os/mm/address/type.VPNRange.html
@@ -1,7 +1,9 @@
VPNRange in os::mm::address - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/fn.init.html b/ch4/os/mm/fn.init.html
index 359d8c09..d6ed0e74 100644
--- a/ch4/os/mm/fn.init.html
+++ b/ch4/os/mm/fn.init.html
@@ -1,7 +1,9 @@
init in os::mm - Rust
-
initiate heap allocator, frame allocator and kernel space
+
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/fn.frame_alloc.html b/ch4/os/mm/frame_allocator/fn.frame_alloc.html
index 5ecbcb00..13b991f6 100644
--- a/ch4/os/mm/frame_allocator/fn.frame_alloc.html
+++ b/ch4/os/mm/frame_allocator/fn.frame_alloc.html
@@ -1,7 +1,9 @@
frame_alloc in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/fn.frame_allocator_test.html b/ch4/os/mm/frame_allocator/fn.frame_allocator_test.html
index 41a5e33f..6b29de3a 100644
--- a/ch4/os/mm/frame_allocator/fn.frame_allocator_test.html
+++ b/ch4/os/mm/frame_allocator/fn.frame_allocator_test.html
@@ -1,7 +1,9 @@
frame_allocator_test in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/fn.frame_dealloc.html b/ch4/os/mm/frame_allocator/fn.frame_dealloc.html
index d8aa0382..5789f1e6 100644
--- a/ch4/os/mm/frame_allocator/fn.frame_dealloc.html
+++ b/ch4/os/mm/frame_allocator/fn.frame_dealloc.html
@@ -1,7 +1,9 @@
frame_dealloc in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/fn.init_frame_allocator.html b/ch4/os/mm/frame_allocator/fn.init_frame_allocator.html
index 87c2d8ec..b853fd2a 100644
--- a/ch4/os/mm/frame_allocator/fn.init_frame_allocator.html
+++ b/ch4/os/mm/frame_allocator/fn.init_frame_allocator.html
@@ -1,7 +1,9 @@
init_frame_allocator in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html b/ch4/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html
index f58d15d9..1eec2f7e 100644
--- a/ch4/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html
+++ b/ch4/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html
@@ -1,21 +1,25 @@
FRAME_ALLOCATOR in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/struct.FrameTracker.html b/ch4/os/mm/frame_allocator/struct.FrameTracker.html
index cb0a35e1..d2295eed 100644
--- a/ch4/os/mm/frame_allocator/struct.FrameTracker.html
+++ b/ch4/os/mm/frame_allocator/struct.FrameTracker.html
@@ -1,20 +1,24 @@
FrameTracker in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/struct.StackFrameAllocator.html b/ch4/os/mm/frame_allocator/struct.StackFrameAllocator.html
index 2d7534de..7705fe29 100644
--- a/ch4/os/mm/frame_allocator/struct.StackFrameAllocator.html
+++ b/ch4/os/mm/frame_allocator/struct.StackFrameAllocator.html
@@ -1,20 +1,24 @@
StackFrameAllocator in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/trait.FrameAllocator.html b/ch4/os/mm/frame_allocator/trait.FrameAllocator.html
index d7123fca..ce4592b1 100644
--- a/ch4/os/mm/frame_allocator/trait.FrameAllocator.html
+++ b/ch4/os/mm/frame_allocator/trait.FrameAllocator.html
@@ -1,10 +1,12 @@
FrameAllocator in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/frame_allocator/type.FrameAllocatorImpl.html b/ch4/os/mm/frame_allocator/type.FrameAllocatorImpl.html
index cfd60085..4c3f6369 100644
--- a/ch4/os/mm/frame_allocator/type.FrameAllocatorImpl.html
+++ b/ch4/os/mm/frame_allocator/type.FrameAllocatorImpl.html
@@ -1,6 +1,8 @@
FrameAllocatorImpl in os::mm::frame_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/heap_allocator/fn.handle_alloc_error.html b/ch4/os/mm/heap_allocator/fn.handle_alloc_error.html
index 407ad3d7..c4ff68c9 100644
--- a/ch4/os/mm/heap_allocator/fn.handle_alloc_error.html
+++ b/ch4/os/mm/heap_allocator/fn.handle_alloc_error.html
@@ -1,7 +1,9 @@
handle_alloc_error in os::mm::heap_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/heap_allocator/fn.heap_test.html b/ch4/os/mm/heap_allocator/fn.heap_test.html
index 95985613..896d07de 100644
--- a/ch4/os/mm/heap_allocator/fn.heap_test.html
+++ b/ch4/os/mm/heap_allocator/fn.heap_test.html
@@ -1,6 +1,8 @@
heap_test in os::mm::heap_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/heap_allocator/fn.init_heap.html b/ch4/os/mm/heap_allocator/fn.init_heap.html
index d3d6421a..1d73dd5f 100644
--- a/ch4/os/mm/heap_allocator/fn.init_heap.html
+++ b/ch4/os/mm/heap_allocator/fn.init_heap.html
@@ -1,7 +1,9 @@
init_heap in os::mm::heap_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html b/ch4/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html
index f5ec0139..9e67f29e 100644
--- a/ch4/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html
+++ b/ch4/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html
@@ -1,7 +1,9 @@
HEAP_ALLOCATOR in os::mm::heap_allocator - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/heap_allocator/static.HEAP_SPACE.html b/ch4/os/mm/heap_allocator/static.HEAP_SPACE.html
index 111d8709..2477fea1 100644
--- a/ch4/os/mm/heap_allocator/static.HEAP_SPACE.html
+++ b/ch4/os/mm/heap_allocator/static.HEAP_SPACE.html
@@ -1,7 +1,9 @@
HEAP_SPACE in os::mm::heap_allocator - Rust
-
SV39 page-based virtual-memory architecture for RV64 systems, and
everything about memory management, like frame allocator, page table,
map area and memory set, is implemented here.
Every task or process has a memory_set to control its virtual memory.
initiate heap allocator, frame allocator and kernel space
-
+
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/enum.MapType.html b/ch4/os/mm/memory_set/enum.MapType.html
index c9d0b5c5..857f0ea8 100644
--- a/ch4/os/mm/memory_set/enum.MapType.html
+++ b/ch4/os/mm/memory_set/enum.MapType.html
@@ -1,28 +1,32 @@
MapType in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.ebss.html b/ch4/os/mm/memory_set/fn.ebss.html
index 11f33595..c176efd5 100644
--- a/ch4/os/mm/memory_set/fn.ebss.html
+++ b/ch4/os/mm/memory_set/fn.ebss.html
@@ -1,6 +1,8 @@
ebss in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.edata.html b/ch4/os/mm/memory_set/fn.edata.html
index b4eec0d9..d70995f6 100644
--- a/ch4/os/mm/memory_set/fn.edata.html
+++ b/ch4/os/mm/memory_set/fn.edata.html
@@ -1,6 +1,8 @@
edata in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.ekernel.html b/ch4/os/mm/memory_set/fn.ekernel.html
index ec06c973..670628a2 100644
--- a/ch4/os/mm/memory_set/fn.ekernel.html
+++ b/ch4/os/mm/memory_set/fn.ekernel.html
@@ -1,6 +1,8 @@
ekernel in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.erodata.html b/ch4/os/mm/memory_set/fn.erodata.html
index a4c1c77a..103e005a 100644
--- a/ch4/os/mm/memory_set/fn.erodata.html
+++ b/ch4/os/mm/memory_set/fn.erodata.html
@@ -1,6 +1,8 @@
erodata in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.etext.html b/ch4/os/mm/memory_set/fn.etext.html
index 1ecbf9d3..f0ba6136 100644
--- a/ch4/os/mm/memory_set/fn.etext.html
+++ b/ch4/os/mm/memory_set/fn.etext.html
@@ -1,6 +1,8 @@
etext in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.remap_test.html b/ch4/os/mm/memory_set/fn.remap_test.html
index 764366b9..2ec4087b 100644
--- a/ch4/os/mm/memory_set/fn.remap_test.html
+++ b/ch4/os/mm/memory_set/fn.remap_test.html
@@ -1,6 +1,8 @@
remap_test in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.sbss_with_stack.html b/ch4/os/mm/memory_set/fn.sbss_with_stack.html
index 84a2931b..142f28ff 100644
--- a/ch4/os/mm/memory_set/fn.sbss_with_stack.html
+++ b/ch4/os/mm/memory_set/fn.sbss_with_stack.html
@@ -1,6 +1,8 @@
sbss_with_stack in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.sdata.html b/ch4/os/mm/memory_set/fn.sdata.html
index d79948a9..2d04a752 100644
--- a/ch4/os/mm/memory_set/fn.sdata.html
+++ b/ch4/os/mm/memory_set/fn.sdata.html
@@ -1,6 +1,8 @@
sdata in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.srodata.html b/ch4/os/mm/memory_set/fn.srodata.html
index ce2598a4..4876d607 100644
--- a/ch4/os/mm/memory_set/fn.srodata.html
+++ b/ch4/os/mm/memory_set/fn.srodata.html
@@ -1,6 +1,8 @@
srodata in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.stext.html b/ch4/os/mm/memory_set/fn.stext.html
index d950b37d..7b7c17c1 100644
--- a/ch4/os/mm/memory_set/fn.stext.html
+++ b/ch4/os/mm/memory_set/fn.stext.html
@@ -1,6 +1,8 @@
stext in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/fn.strampoline.html b/ch4/os/mm/memory_set/fn.strampoline.html
index ad7ef39d..7b9e5f4f 100644
--- a/ch4/os/mm/memory_set/fn.strampoline.html
+++ b/ch4/os/mm/memory_set/fn.strampoline.html
@@ -1,6 +1,8 @@
strampoline in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/struct.KERNEL_SPACE.html b/ch4/os/mm/memory_set/struct.KERNEL_SPACE.html
index b59b0b8d..c320d618 100644
--- a/ch4/os/mm/memory_set/struct.KERNEL_SPACE.html
+++ b/ch4/os/mm/memory_set/struct.KERNEL_SPACE.html
@@ -1,20 +1,24 @@
KERNEL_SPACE in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/struct.MapArea.html b/ch4/os/mm/memory_set/struct.MapArea.html
index 532cf3e4..983599f5 100644
--- a/ch4/os/mm/memory_set/struct.MapArea.html
+++ b/ch4/os/mm/memory_set/struct.MapArea.html
@@ -1,23 +1,27 @@
MapArea in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/struct.MapPermission.html b/ch4/os/mm/memory_set/struct.MapPermission.html
index 19d5ed0c..36c18787 100644
--- a/ch4/os/mm/memory_set/struct.MapPermission.html
+++ b/ch4/os/mm/memory_set/struct.MapPermission.html
@@ -1,54 +1,56 @@
MapPermission in os::mm::memory_set - Rust
-
Returns the union of between the flags in self and other.
Specifically, the returned set contains all flags which are
present in eitherselforother, including any which are
present in both (see Self::symmetric_difference if that
is undesirable).
This is equivalent to using the | operator (e.g.
ops::BitOr), as in flags | other.
Specifically, the returned set contains the flags present which
are present in self or other, but that are not present in
@@ -56,65 +58,67 @@ both. Equivalently, it contains the flags present in exactly
one of the sets self and other.
This is equivalent to using the ^ operator (e.g.
ops::BitXor), as in flags ^ other.
\ No newline at end of file
diff --git a/ch4/os/mm/memory_set/struct.MemorySet.html b/ch4/os/mm/memory_set/struct.MemorySet.html
index 446d4590..790a390d 100644
--- a/ch4/os/mm/memory_set/struct.MemorySet.html
+++ b/ch4/os/mm/memory_set/struct.MemorySet.html
@@ -1,24 +1,28 @@
MemorySet in os::mm::memory_set - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/page_table/fn.translated_byte_buffer.html b/ch4/os/mm/page_table/fn.translated_byte_buffer.html
index 9e2bd9e5..946e8c90 100644
--- a/ch4/os/mm/page_table/fn.translated_byte_buffer.html
+++ b/ch4/os/mm/page_table/fn.translated_byte_buffer.html
@@ -1,7 +1,9 @@
translated_byte_buffer in os::mm::page_table - Rust
-
translate a pointer to a mutable u8 Vec through page table
-
+
\ No newline at end of file
diff --git a/ch4/os/mm/page_table/struct.PTEFlags.html b/ch4/os/mm/page_table/struct.PTEFlags.html
index 193c30c7..0797238b 100644
--- a/ch4/os/mm/page_table/struct.PTEFlags.html
+++ b/ch4/os/mm/page_table/struct.PTEFlags.html
@@ -1,54 +1,56 @@
PTEFlags in os::mm::page_table - Rust
-
Returns the union of between the flags in self and other.
Specifically, the returned set contains all flags which are
present in eitherselforother, including any which are
present in both (see Self::symmetric_difference if that
is undesirable).
This is equivalent to using the | operator (e.g.
ops::BitOr), as in flags | other.
Specifically, the returned set contains the flags present which
are present in self or other, but that are not present in
@@ -56,65 +58,67 @@ both. Equivalently, it contains the flags present in exactly
one of the sets self and other.
This is equivalent to using the ^ operator (e.g.
ops::BitXor), as in flags ^ other.
\ No newline at end of file
diff --git a/ch4/os/mm/page_table/struct.PageTable.html b/ch4/os/mm/page_table/struct.PageTable.html
index 898d7ac4..89061bb6 100644
--- a/ch4/os/mm/page_table/struct.PageTable.html
+++ b/ch4/os/mm/page_table/struct.PageTable.html
@@ -1,21 +1,25 @@
PageTable in os::mm::page_table - Rust
-
\ No newline at end of file
diff --git a/ch4/os/mm/page_table/struct.PageTableEntry.html b/ch4/os/mm/page_table/struct.PageTableEntry.html
index 2de5d907..4209230c 100644
--- a/ch4/os/mm/page_table/struct.PageTableEntry.html
+++ b/ch4/os/mm/page_table/struct.PageTableEntry.html
@@ -1,23 +1,27 @@
PageTableEntry in os::mm::page_table - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html b/ch4/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html
index 11240f3f..fca7335b 100644
--- a/ch4/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html
+++ b/ch4/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html
@@ -1,6 +1,8 @@
SBI_CONSOLE_PUTCHAR in os::sbi - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/constant.SBI_SET_TIMER.html b/ch4/os/sbi/constant.SBI_SET_TIMER.html
index b8c22ab8..5fcd7bc4 100644
--- a/ch4/os/sbi/constant.SBI_SET_TIMER.html
+++ b/ch4/os/sbi/constant.SBI_SET_TIMER.html
@@ -1,6 +1,8 @@
SBI_SET_TIMER in os::sbi - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/constant.SBI_SHUTDOWN.html b/ch4/os/sbi/constant.SBI_SHUTDOWN.html
index 1019984f..bfed6936 100644
--- a/ch4/os/sbi/constant.SBI_SHUTDOWN.html
+++ b/ch4/os/sbi/constant.SBI_SHUTDOWN.html
@@ -1,6 +1,8 @@
SBI_SHUTDOWN in os::sbi - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/fn.console_putchar.html b/ch4/os/sbi/fn.console_putchar.html
index 5eadeec8..e1fb70a4 100644
--- a/ch4/os/sbi/fn.console_putchar.html
+++ b/ch4/os/sbi/fn.console_putchar.html
@@ -1,7 +1,9 @@
console_putchar in os::sbi - Rust
-
use sbi call to putchar in console (qemu uart handler)
+
\ No newline at end of file
diff --git a/ch4/os/sbi/fn.sbi_call.html b/ch4/os/sbi/fn.sbi_call.html
index ba4d5230..66b7ef38 100644
--- a/ch4/os/sbi/fn.sbi_call.html
+++ b/ch4/os/sbi/fn.sbi_call.html
@@ -1,7 +1,9 @@
sbi_call in os::sbi - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/fn.set_timer.html b/ch4/os/sbi/fn.set_timer.html
index c7761375..4e4ca12e 100644
--- a/ch4/os/sbi/fn.set_timer.html
+++ b/ch4/os/sbi/fn.set_timer.html
@@ -1,7 +1,9 @@
set_timer in os::sbi - Rust
-
\ No newline at end of file
diff --git a/ch4/os/sbi/fn.shutdown.html b/ch4/os/sbi/fn.shutdown.html
index e8324d4d..86c284c1 100644
--- a/ch4/os/sbi/fn.shutdown.html
+++ b/ch4/os/sbi/fn.shutdown.html
@@ -1,8 +1,10 @@
shutdown in os::sbi - Rust
-
Wrap a static data structure inside it so that we are
able to access it without any unsafe.
-
+
\ No newline at end of file
diff --git a/ch4/os/sync/up/struct.UPSafeCell.html b/ch4/os/sync/up/struct.UPSafeCell.html
index 006b5c1b..71f5082b 100644
--- a/ch4/os/sync/up/struct.UPSafeCell.html
+++ b/ch4/os/sync/up/struct.UPSafeCell.html
@@ -1,8 +1,10 @@
UPSafeCell in os::sync::up - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/constant.SYSCALL_EXIT.html b/ch4/os/syscall/constant.SYSCALL_EXIT.html
index a7ac151b..e46f4bcc 100644
--- a/ch4/os/syscall/constant.SYSCALL_EXIT.html
+++ b/ch4/os/syscall/constant.SYSCALL_EXIT.html
@@ -1,6 +1,8 @@
SYSCALL_EXIT in os::syscall - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/constant.SYSCALL_GET_TIME.html b/ch4/os/syscall/constant.SYSCALL_GET_TIME.html
index f068b52f..3930aa98 100644
--- a/ch4/os/syscall/constant.SYSCALL_GET_TIME.html
+++ b/ch4/os/syscall/constant.SYSCALL_GET_TIME.html
@@ -1,6 +1,8 @@
SYSCALL_GET_TIME in os::syscall - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/constant.SYSCALL_WRITE.html b/ch4/os/syscall/constant.SYSCALL_WRITE.html
index 608006c0..b7777110 100644
--- a/ch4/os/syscall/constant.SYSCALL_WRITE.html
+++ b/ch4/os/syscall/constant.SYSCALL_WRITE.html
@@ -1,6 +1,8 @@
SYSCALL_WRITE in os::syscall - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/constant.SYSCALL_YIELD.html b/ch4/os/syscall/constant.SYSCALL_YIELD.html
index 4bfc058a..a976cfa6 100644
--- a/ch4/os/syscall/constant.SYSCALL_YIELD.html
+++ b/ch4/os/syscall/constant.SYSCALL_YIELD.html
@@ -1,6 +1,8 @@
SYSCALL_YIELD in os::syscall - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/fn.syscall.html b/ch4/os/syscall/fn.syscall.html
index 42310bad..31ac27b0 100644
--- a/ch4/os/syscall/fn.syscall.html
+++ b/ch4/os/syscall/fn.syscall.html
@@ -1,7 +1,9 @@
syscall in os::syscall - Rust
-
handle syscall exception with syscall_id and other arguments
+
\ No newline at end of file
diff --git a/ch4/os/syscall/fs/constant.FD_STDOUT.html b/ch4/os/syscall/fs/constant.FD_STDOUT.html
index acbdf2fc..6e494fa8 100644
--- a/ch4/os/syscall/fs/constant.FD_STDOUT.html
+++ b/ch4/os/syscall/fs/constant.FD_STDOUT.html
@@ -1,6 +1,8 @@
FD_STDOUT in os::syscall::fs - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/fs/fn.sys_write.html b/ch4/os/syscall/fs/fn.sys_write.html
index 426a98a1..5d240723 100644
--- a/ch4/os/syscall/fs/fn.sys_write.html
+++ b/ch4/os/syscall/fs/fn.sys_write.html
@@ -1,7 +1,9 @@
sys_write in os::syscall::fs - Rust
-
The single entry point to all system calls, syscall(), is called
whenever userspace wishes to perform a system call using the ecall
instruction. In this case, the processor raises an ‘Environment call from
@@ -12,10 +14,10 @@ U-mode’ exception, which is handled as one of the cases in
sys_ then the name of the syscall. You can find functions like this in
submodules, and you should also implement syscalls this way.
handle syscall exception with syscall_id and other arguments
-
+
\ No newline at end of file
diff --git a/ch4/os/syscall/process/fn.sys_exit.html b/ch4/os/syscall/process/fn.sys_exit.html
index b84b4814..772c59a7 100644
--- a/ch4/os/syscall/process/fn.sys_exit.html
+++ b/ch4/os/syscall/process/fn.sys_exit.html
@@ -1,7 +1,9 @@
sys_exit in os::syscall::process - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/process/fn.sys_get_time.html b/ch4/os/syscall/process/fn.sys_get_time.html
index d50c06bf..d32fdcd7 100644
--- a/ch4/os/syscall/process/fn.sys_get_time.html
+++ b/ch4/os/syscall/process/fn.sys_get_time.html
@@ -1,7 +1,9 @@
sys_get_time in os::syscall::process - Rust
-
\ No newline at end of file
diff --git a/ch4/os/syscall/process/fn.sys_yield.html b/ch4/os/syscall/process/fn.sys_yield.html
index f883a279..333a032f 100644
--- a/ch4/os/syscall/process/fn.sys_yield.html
+++ b/ch4/os/syscall/process/fn.sys_yield.html
@@ -1,7 +1,9 @@
sys_yield in os::syscall::process - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/context/struct.TaskContext.html b/ch4/os/task/context/struct.TaskContext.html
index 5a80dbdb..5b41b9bd 100644
--- a/ch4/os/task/context/struct.TaskContext.html
+++ b/ch4/os/task/context/struct.TaskContext.html
@@ -1,8 +1,10 @@
TaskContext in os::task::context - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/fn.current_trap_cx.html b/ch4/os/task/fn.current_trap_cx.html
index 8f75802d..0a60c58e 100644
--- a/ch4/os/task/fn.current_trap_cx.html
+++ b/ch4/os/task/fn.current_trap_cx.html
@@ -1,7 +1,9 @@
current_trap_cx in os::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/fn.current_user_token.html b/ch4/os/task/fn.current_user_token.html
index 6d6d09f3..db9efc56 100644
--- a/ch4/os/task/fn.current_user_token.html
+++ b/ch4/os/task/fn.current_user_token.html
@@ -1,7 +1,9 @@
current_user_token in os::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/fn.exit_current_and_run_next.html b/ch4/os/task/fn.exit_current_and_run_next.html
index 178ef6e9..65b1f104 100644
--- a/ch4/os/task/fn.exit_current_and_run_next.html
+++ b/ch4/os/task/fn.exit_current_and_run_next.html
@@ -1,7 +1,9 @@
exit_current_and_run_next in os::task - Rust
-
Exit the current ‘Running’ task and run the next task in task list.
+
\ No newline at end of file
diff --git a/ch4/os/task/fn.mark_current_exited.html b/ch4/os/task/fn.mark_current_exited.html
index 784d3445..50ba2588 100644
--- a/ch4/os/task/fn.mark_current_exited.html
+++ b/ch4/os/task/fn.mark_current_exited.html
@@ -1,7 +1,9 @@
mark_current_exited in os::task - Rust
-
Change the status of current Running task into Exited.
+
\ No newline at end of file
diff --git a/ch4/os/task/fn.mark_current_suspended.html b/ch4/os/task/fn.mark_current_suspended.html
index eda6df26..e3a02837 100644
--- a/ch4/os/task/fn.mark_current_suspended.html
+++ b/ch4/os/task/fn.mark_current_suspended.html
@@ -1,7 +1,9 @@
mark_current_suspended in os::task - Rust
-
Change the status of current Running task into Ready.
+
\ No newline at end of file
diff --git a/ch4/os/task/fn.run_first_task.html b/ch4/os/task/fn.run_first_task.html
index 6a642229..f373b942 100644
--- a/ch4/os/task/fn.run_first_task.html
+++ b/ch4/os/task/fn.run_first_task.html
@@ -1,7 +1,9 @@
run_first_task in os::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/fn.run_next_task.html b/ch4/os/task/fn.run_next_task.html
index bc4671ff..f037343d 100644
--- a/ch4/os/task/fn.run_next_task.html
+++ b/ch4/os/task/fn.run_next_task.html
@@ -1,8 +1,10 @@
run_next_task in os::task - Rust
-
Switch current Running task to the task we have found,
or there is no Ready task and we can exit with all applications completed
-
+
\ No newline at end of file
diff --git a/ch4/os/task/fn.suspend_current_and_run_next.html b/ch4/os/task/fn.suspend_current_and_run_next.html
index 765bc8fd..ad504dd3 100644
--- a/ch4/os/task/fn.suspend_current_and_run_next.html
+++ b/ch4/os/task/fn.suspend_current_and_run_next.html
@@ -1,7 +1,9 @@
suspend_current_and_run_next in os::task - Rust
-
Suspend the current ‘Running’ task and run the next task in task list.
-
+
\ No newline at end of file
diff --git a/ch4/os/task/struct.TASK_MANAGER.html b/ch4/os/task/struct.TASK_MANAGER.html
index c38ffd0e..b8dc1d10 100644
--- a/ch4/os/task/struct.TASK_MANAGER.html
+++ b/ch4/os/task/struct.TASK_MANAGER.html
@@ -1,31 +1,35 @@
TASK_MANAGER in os::task - Rust
-
Generally, the first task in task list is an idle task (we call it zero process later).
But in ch4, we load apps statically, so the first task is a real app.
\ No newline at end of file
diff --git a/ch4/os/task/struct.TaskContext.html b/ch4/os/task/struct.TaskContext.html
index e9d772c1..926bae71 100644
--- a/ch4/os/task/struct.TaskContext.html
+++ b/ch4/os/task/struct.TaskContext.html
@@ -1,8 +1,10 @@
TaskContext in os::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/struct.TaskManager.html b/ch4/os/task/struct.TaskManager.html
index 0d19927d..7764426b 100644
--- a/ch4/os/task/struct.TaskManager.html
+++ b/ch4/os/task/struct.TaskManager.html
@@ -1,8 +1,10 @@
TaskManager in os::task - Rust
-
Generally, the first task in task list is an idle task (we call it zero process later).
But in ch4, we load apps statically, so the first task is a real app.
\ No newline at end of file
diff --git a/ch4/os/task/struct.TaskManagerInner.html b/ch4/os/task/struct.TaskManagerInner.html
index c9323243..f08176df 100644
--- a/ch4/os/task/struct.TaskManagerInner.html
+++ b/ch4/os/task/struct.TaskManagerInner.html
@@ -1,21 +1,25 @@
TaskManagerInner in os::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/switch/fn.__switch.html b/ch4/os/task/switch/fn.__switch.html
index 0ce4ae3a..a1b1fa71 100644
--- a/ch4/os/task/switch/fn.__switch.html
+++ b/ch4/os/task/switch/fn.__switch.html
@@ -1,8 +1,10 @@
__switch in os::task::switch - Rust
-
Switching to a different task’s context happens here. The actual
implementation must not be in Rust and (essentially) has to be in assembly
language (Do you know why?), so this module really is just a wrapper around
@@ -10,5 +12,5 @@ language (Do you know why?), so this module really is just a wrapper around
Switch to the context of next_task_cx_ptr, saving the current context
in current_task_cx_ptr.
-
+
\ No newline at end of file
diff --git a/ch4/os/task/task/enum.TaskStatus.html b/ch4/os/task/task/enum.TaskStatus.html
index 859cf9c7..064affcb 100644
--- a/ch4/os/task/task/enum.TaskStatus.html
+++ b/ch4/os/task/task/enum.TaskStatus.html
@@ -1,28 +1,32 @@
TaskStatus in os::task::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/task/task/struct.TaskControlBlock.html b/ch4/os/task/task/struct.TaskControlBlock.html
index 20d79d93..7521c25d 100644
--- a/ch4/os/task/task/struct.TaskControlBlock.html
+++ b/ch4/os/task/task/struct.TaskControlBlock.html
@@ -1,22 +1,26 @@
TaskControlBlock in os::task::task - Rust
-
\ No newline at end of file
diff --git a/ch4/os/timer/constant.MSEC_PER_SEC.html b/ch4/os/timer/constant.MSEC_PER_SEC.html
index af551c7d..5cf83142 100644
--- a/ch4/os/timer/constant.MSEC_PER_SEC.html
+++ b/ch4/os/timer/constant.MSEC_PER_SEC.html
@@ -1,6 +1,8 @@
MSEC_PER_SEC in os::timer - Rust
-
\ No newline at end of file
diff --git a/ch4/os/timer/constant.TICKS_PER_SEC.html b/ch4/os/timer/constant.TICKS_PER_SEC.html
index 42b136ef..f75f843f 100644
--- a/ch4/os/timer/constant.TICKS_PER_SEC.html
+++ b/ch4/os/timer/constant.TICKS_PER_SEC.html
@@ -1,6 +1,8 @@
TICKS_PER_SEC in os::timer - Rust
-
\ No newline at end of file
diff --git a/ch4/os/timer/fn.get_time.html b/ch4/os/timer/fn.get_time.html
index ef71dfd0..51ee925f 100644
--- a/ch4/os/timer/fn.get_time.html
+++ b/ch4/os/timer/fn.get_time.html
@@ -1,6 +1,8 @@
get_time in os::timer - Rust
-
\ No newline at end of file
diff --git a/ch4/os/timer/fn.get_time_ms.html b/ch4/os/timer/fn.get_time_ms.html
index 94f045cd..d438c352 100644
--- a/ch4/os/timer/fn.get_time_ms.html
+++ b/ch4/os/timer/fn.get_time_ms.html
@@ -1,7 +1,9 @@
get_time_ms in os::timer - Rust
-
\ No newline at end of file
diff --git a/ch4/os/timer/fn.set_next_trigger.html b/ch4/os/timer/fn.set_next_trigger.html
index 8a80d195..03dce4da 100644
--- a/ch4/os/timer/fn.set_next_trigger.html
+++ b/ch4/os/timer/fn.set_next_trigger.html
@@ -1,7 +1,9 @@
set_next_trigger in os::timer - Rust
-
trap context structure containing sstatus, sepc and registers
-
+
\ No newline at end of file
diff --git a/ch4/os/trap/context/struct.TrapContext.html b/ch4/os/trap/context/struct.TrapContext.html
index 1ac25746..7acfe48a 100644
--- a/ch4/os/trap/context/struct.TrapContext.html
+++ b/ch4/os/trap/context/struct.TrapContext.html
@@ -1,8 +1,10 @@
TrapContext in os::trap::context - Rust
-
\ No newline at end of file
diff --git a/ch4/os/trap/fn.enable_timer_interrupt.html b/ch4/os/trap/fn.enable_timer_interrupt.html
index 2565e7a6..5e85e8cf 100644
--- a/ch4/os/trap/fn.enable_timer_interrupt.html
+++ b/ch4/os/trap/fn.enable_timer_interrupt.html
@@ -1,7 +1,9 @@
enable_timer_interrupt in os::trap - Rust
-
\ No newline at end of file
diff --git a/ch4/os/trap/fn.init.html b/ch4/os/trap/fn.init.html
index d6bf1957..d0623663 100644
--- a/ch4/os/trap/fn.init.html
+++ b/ch4/os/trap/fn.init.html
@@ -1,7 +1,9 @@
init in os::trap - Rust
-
\ No newline at end of file
diff --git a/ch4/os/trap/fn.set_kernel_trap_entry.html b/ch4/os/trap/fn.set_kernel_trap_entry.html
index fda98ef4..3e8e33b7 100644
--- a/ch4/os/trap/fn.set_kernel_trap_entry.html
+++ b/ch4/os/trap/fn.set_kernel_trap_entry.html
@@ -1,6 +1,8 @@
set_kernel_trap_entry in os::trap - Rust
-
\ No newline at end of file
diff --git a/ch4/os/trap/fn.set_user_trap_entry.html b/ch4/os/trap/fn.set_user_trap_entry.html
index 8f0c1ce7..6b82ac2b 100644
--- a/ch4/os/trap/fn.set_user_trap_entry.html
+++ b/ch4/os/trap/fn.set_user_trap_entry.html
@@ -1,6 +1,8 @@
set_user_trap_entry in os::trap - Rust
-
\ No newline at end of file
diff --git a/ch4/os/trap/fn.trap_from_kernel.html b/ch4/os/trap/fn.trap_from_kernel.html
index ef68cb6c..79a5262d 100644
--- a/ch4/os/trap/fn.trap_from_kernel.html
+++ b/ch4/os/trap/fn.trap_from_kernel.html
@@ -1,9 +1,11 @@
trap_from_kernel in os::trap - Rust
-
Unimplement: traps/interrupts/exceptions from kernel mode
Todo: Chapter 9: I/O device
-
+
\ No newline at end of file
diff --git a/ch4/os/trap/fn.trap_handler.html b/ch4/os/trap/fn.trap_handler.html
index d55c09b6..451e8a0b 100644
--- a/ch4/os/trap/fn.trap_handler.html
+++ b/ch4/os/trap/fn.trap_handler.html
@@ -1,8 +1,10 @@
trap_handler in os::trap - Rust
-
handle an interrupt, exception, or system call from user space
-
+
\ No newline at end of file
diff --git a/ch4/os/trap/fn.trap_return.html b/ch4/os/trap/fn.trap_return.html
index baf9f2a6..6e4301cb 100644
--- a/ch4/os/trap/fn.trap_return.html
+++ b/ch4/os/trap/fn.trap_return.html
@@ -1,10 +1,12 @@
trap_return in os::trap - Rust
-
set the new addr of __restore asm function in TRAMPOLINE page,
set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table,
finally, jump to new addr of __restore asm function
-
+
\ No newline at end of file
diff --git a/ch4/os/trap/index.html b/ch4/os/trap/index.html
index adbfe267..921a2027 100644
--- a/ch4/os/trap/index.html
+++ b/ch4/os/trap/index.html
@@ -1,8 +1,10 @@
os::trap - Rust
-
For rCore, we have a single trap entry point, namely __alltraps. At
initialization in init(), we set the stvec CSR to point to it.
All traps go through __alltraps, which is defined in trap.S. The
@@ -13,17 +15,17 @@ context, ensuring that Rust code safely runs, and transfers control to
was. For example, timer interrupts trigger task preemption, and syscalls go
to syscall().
set the new addr of __restore asm function in TRAMPOLINE page,
set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table,
finally, jump to new addr of __restore asm function
-
+
\ No newline at end of file
diff --git a/ch4/os/trap/struct.TrapContext.html b/ch4/os/trap/struct.TrapContext.html
index f0f0b2b4..a0c54605 100644
--- a/ch4/os/trap/struct.TrapContext.html
+++ b/ch4/os/trap/struct.TrapContext.html
@@ -1,8 +1,10 @@
TrapContext in os::trap - Rust
-
\ No newline at end of file
diff --git a/ch4/rustdoc.css b/ch4/rustdoc.css
index deed2f8a..674a5af6 100644
--- a/ch4/rustdoc.css
+++ b/ch4/rustdoc.css
@@ -1 +1 @@
- @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.4 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.4rem;}h3{font-size:1.3rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{margin:0;padding:0;}.main-heading{display:flex;border-bottom:1px dashed #DDDDDD;padding-bottom:6px;margin-bottom:15px;padding-left:1px;}.main-heading a:hover{text-decoration:underline;}#toggle-all-docs{text-decoration:none;}h2,.top-doc h3,.top-doc h4,.sidebar .others h3{border-bottom:1px solid;}h3.code-header{font-size:1.1rem;}h4.code-header{font-size:1rem;}h3.code-header,h4.code-header{font-weight:600;border-bottom-style:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,.out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}.content ul.crate a.crate{font-size:1rem/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{width:200px;overflow-y:scroll;position:sticky;min-width:200px;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(:first-child){transition:opacity 0.5s,visibility 0.2s;opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*{opacity:1;visibility:visible;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.hidden{display:none !important;}.logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.logo-container>img{height:100px;width:100px;}.sidebar .location{border:1px solid;font-size:1.0625rem;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:0.9375rem;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;overflow-wrap:anywhere;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:0.875rem;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:1.0625rem;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.3rem;}.top-doc .docblock h3{font-size:1.15rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.1rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.95rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;margin-left:auto;margin-right:0;font-size:1.15rem;padding:0 0 0 12px;font-weight:normal;float:right;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:break-word;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;overflow-wrap:normal;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:0.81rem;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:1.5625rem;position:absolute;top:-6px;left:-19px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;}nav:not(.sidebar){flex-grow:1;border-bottom:1px solid;padding-bottom:10px;margin-bottom:25px;}.source nav:not(.sidebar).sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:1.0625rem;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;max-width:960px;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}.search-results-title{display:inline;}#search-settings{font-size:1.5rem;font-weight:500;margin-bottom:20px;}#crate-search{min-width:115px;margin-top:5px;margin-left:0.2em;padding-left:0.3em;padding-right:23px;border:0;border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:1.0625rem;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{padding:3px;margin-bottom:5px;font-size:0.9rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.2rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.8rem;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.impl .srclink{font-size:1.0625rem;}.rightside{float:right;}.has-srclink{font-size:1rem;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.3rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.code-attribute{font-weight:300;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;margin-right:5px;}h3.variant{font-weight:600;font-size:1.1rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.top-doc .docblock>.section-header:first-child{margin-left:15px;}.top-doc .docblock>.section-header:first-child:hover>a:before{left:-10px;}.docblock>.section-header:first-child{margin-top:0;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.2rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-34px;top:9px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;font-size:16px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:16px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);overflow-wrap:normal;}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.1875rem;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:1.0625rem;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.rustdoc.source .sidebar{transition:width .5s;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){body{padding-top:0px;}main{padding-left:15px;padding-top:0px;}#theme-picker{display:none;width:0;}.rustdoc{flex-direction:column;}.rustdoc:not(.source)>.sidebar{width:100%;height:45px;min-height:40px;max-height:45px;margin:0;padding:0 15px;position:static;z-index:11;overflow-y:hidden;}.rustdoc.source>.sidebar{position:fixed;top:0;left:0;margin:0;z-index:11;width:0;}.sidebar.mobile{position:sticky !important;top:0;left:0;width:100%;margin-left:0;background-color:rgba(0,0,0,0);}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:1.5rem;}.sidebar .location:empty{padding:0;}.rustdoc:not(.source) .sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;top:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}.source nav:not(.sidebar).sub{margin-left:32px;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.theme-picker{z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:1.3125rem;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{border-radius:4px;border:0;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock table code{overflow-wrap:normal;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;}
\ No newline at end of file
+ @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{margin:0;padding:0;}.main-heading{display:flex;flex-wrap:wrap;justify-content:space-between;padding-bottom:6px;margin-bottom:15px;}.main-heading a:hover{text-decoration:underline;}#toggle-all-docs{text-decoration:none;}h2,.top-doc h3,.top-doc h4{border-bottom:1px solid;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;border-bottom-style:none;margin:0;padding:0;margin-top:0.6em;margin-bottom:0.4em;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,.out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}button{padding:1px 6px;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{font-size:0.875rem;width:250px;min-width:200px;overflow-y:scroll;position:sticky;height:100vh;top:0;left:0;}.sidebar-elems,.sidebar>.location{padding-left:24px;}.sidebar .location{overflow-wrap:anywhere;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(#sidebar-toggle){opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*:not(#sidebar-toggle){opacity:1;visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.hidden{display:none !important;}.sidebar .logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.block{padding:0;}.block ul,.block li{padding:0;margin:0;list-style:none;}.block a,h2.location a{display:block;padding:0.25rem;margin-left:-0.25rem;text-overflow:ellipsis;overflow:hidden;}.sidebar h2{border-bottom:none;font-weight:500;padding:0;margin:0;margin-top:0.7rem;margin-bottom:0.7rem;}.sidebar h3{font-size:1.125rem;font-weight:500;padding:0;margin:0;}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;}.mobile-topbar{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.line-numbers{text-align:right;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;font-size:1.125rem;font-weight:normal;float:right;}.method>.code-header,.trait-impl>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:break-word;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.125rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.875rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.item-info{display:block;}.content .item-info code{font-size:0.875rem;}.content .item-info{position:relative;margin-left:24px;}.sub-variant>div>.item-info{margin-top:initial;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;margin-left:0;}nav.sub{flex-grow:1;margin-bottom:25px;}.source nav.sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.block a.current.crate{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.25rem;}.search-container{position:relative;display:flex;height:34px;}.search-container>*{height:100%;}.search-results-title{display:inline;}#search-settings{font-size:1.5rem;font-weight:500;margin-bottom:20px;}#crate-search{min-width:115px;margin-top:5px;margin-left:0.25em;padding-left:0.3125em;padding-right:23px;border:0;border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container{margin-top:4px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:1px solid;border-radius:2px;padding:8px;font-size:1rem;transition:border-color 300ms ease;width:100%;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:inline-block;}.stab{padding:3px;margin-bottom:5px;font-size:0.875rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.25rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.875rem;line-height:1.2;margin-bottom:0;margin-left:0.3125em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.rightside{float:right;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.code-attribute{font-weight:300;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;}h3.variant{font-weight:600;font-size:1.125rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;display:block;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-38px;top:4px;}.theme-picker button{outline:none;}#settings-menu,#help-button{margin-left:4px;outline:none;}#theme-picker,#copy-path{height:34px;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:5px;width:33px;border:1px solid;border-radius:2px;cursor:pointer;}#help-button{font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:20px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);overflow-wrap:normal;}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.125rem;display:block;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.625rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{padding-top:0px;display:block;}main{padding-left:15px;padding-top:0px;}.rustdoc,.main-heading{flex-direction:column;}.content .out-of-band{text-align:left;margin-left:initial;padding:initial;}.content .out-of-band .since::before{content:"Since ";}#copy-path{display:none;}.sidebar .sidebar-logo,.sidebar .location{display:none;}.sidebar-elems{margin-top:1em;}.sidebar{position:fixed;top:45px;left:-1000px;margin-left:0;background-color:rgba(0,0,0,0);margin:0;padding:0;z-index:11;height:calc(100vh - 45px);}.source main,.source .sidebar{top:0;padding:0;}.sidebar.shown,.sidebar.expanded,.sidebar:focus-within{left:0;}.rustdoc.source>.sidebar{position:fixed;margin:0;z-index:11;width:0;}.mobile-topbar .location a{padding:0;margin:0;}.mobile-topbar .location{border:none;padding:0;margin:auto 0.5em auto auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:24px;}.mobile-topbar .logo-container{max-height:45px;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin-left:20px;margin-top:5px;margin-bottom:5px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.source .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;}.source nav:not(.sidebar).sub{margin-left:32px;}#theme-picker{display:none;width:0;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}#crate-search{border-radius:4px;border:0;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.method-toggle summary,.implementors-toggle summary,.impl{margin-bottom:0.75em;}.method-toggle[open]{margin-bottom:2em;}.implementors-toggle[open]{margin-bottom:2em;}#trait-implementations-list .method-toggle,#synthetic-implementations-list .method-toggle,#blanket-implementations-list .method-toggle{margin-bottom:1em;}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;}
\ No newline at end of file
diff --git a/ch4/search-index.js b/ch4/search-index.js
index 5ccc4547..02f4c707 100644
--- a/ch4/search-index.js
+++ b/ch4/search-index.js
@@ -1,4 +1,4 @@
var searchIndex = JSON.parse('{\
-"os":{"doc":"The main module and entrypoint","t":[0,5,0,0,0,0,0,14,14,5,0,0,0,0,0,0,17,17,17,17,17,17,17,17,17,5,3,11,11,11,11,5,11,11,11,11,5,5,5,0,0,0,5,0,0,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,8,6,3,3,12,10,11,11,11,11,11,11,11,12,10,11,11,11,12,11,5,5,5,11,11,11,11,5,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,7,7,5,5,5,13,13,3,3,3,4,3,18,18,18,18,12,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,12,11,11,5,11,5,5,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,18,18,18,3,3,3,18,18,18,18,18,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,5,5,5,5,0,3,11,11,11,11,12,11,11,11,11,11,17,17,17,17,0,0,5,17,5,5,5,5,3,3,3,3,12,11,11,11,11,11,11,0,12,5,5,11,5,11,11,11,11,11,11,12,11,11,11,5,11,5,11,12,12,5,11,5,11,12,12,5,0,0,12,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,5,13,13,13,3,4,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,12,11,12,11,11,11,11,11,11,17,17,5,5,5,3,0,5,5,12,12,12,5,5,12,5,5,12,5,12,3,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["board","clear_bss","config","console","lang_items","loader","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","CLOCK_FREQ","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","kernel_stack_position","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","panic","get_app_data","get_num_app","address","frame_allocator","heap_allocator","init","memory_set","page_table","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_pte_array","get_start","indexes","into","into","into","into","into","into","into_iter","into_iter","l","ne","ne","ne","ne","new","new","next","page_offset","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","r","step","step","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","FRAME_ALLOCATOR","FrameAllocator","FrameAllocatorImpl","FrameTracker","StackFrameAllocator","__private_field","alloc","alloc","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc","deref","drop","end","fmt","frame_alloc","frame_allocator_test","frame_dealloc","from","from","from","init","init_frame_allocator","into","into","into","new","new","new","ppn","recycled","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","HEAP_ALLOCATOR","HEAP_SPACE","handle_alloc_error","heap_test","init_heap","Framed","Identical","KERNEL_SPACE","MapArea","MapPermission","MapType","MemorySet","R","U","W","X","__private_field","activate","all","areas","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","copy_data","data_frames","deref","difference","ebss","edata","ekernel","empty","eq","eq","erodata","etext","extend","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","map","map_one","map_perm","map_trampoline","map_type","ne","new","new_bare","new_kernel","not","page_table","partial_cmp","push","remap_test","remove","sbss_with_stack","sdata","set","srodata","stext","strampoline","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","unmap_one","vpn_range","A","D","G","PTEFlags","PageTable","PageTableEntry","R","U","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","is_all","is_empty","is_valid","map","ne","new","new","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translated_byte_buffer","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","union","unmap","writable","SBI_CONSOLE_PUTCHAR","SBI_SET_TIMER","SBI_SHUTDOWN","console_putchar","sbi_call","set_timer","shutdown","up","UPSafeCell","borrow","borrow_mut","exclusive_access","from","inner","into","new","try_from","try_into","type_id","SYSCALL_EXIT","SYSCALL_GET_TIME","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","FD_STDOUT","sys_write","sys_exit","sys_get_time","sys_yield","TASK_MANAGER","TaskContext","TaskManager","TaskManagerInner","__private_field","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","context","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","find_next_task","from","from","from","get_current_token","get_current_trap_cx","inner","into","into","into","mark_current_exited","mark_current_exited","mark_current_suspended","mark_current_suspended","num_app","ra","run_first_task","run_first_task","run_next_task","run_next_task","s","sp","suspend_current_and_run_next","switch","task","tasks","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","__switch","Exited","Ready","Running","TaskControlBlock","TaskStatus","base_size","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","from","from","get_trap_cx","get_user_token","into","into","memory_set","new","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_into","try_into","type_id","type_id","MSEC_PER_SEC","TICKS_PER_SEC","get_time","get_time_ms","set_next_trigger","TrapContext","context","enable_timer_interrupt","init","kernel_satp","kernel_sp","sepc","set_kernel_trap_entry","set_user_trap_entry","sstatus","trap_from_kernel","trap_handler","trap_handler","trap_return","x","TrapContext","app_init_context","borrow","borrow_mut","from","into","kernel_satp","kernel_sp","sepc","set_sp","sstatus","trap_handler","try_from","try_into","type_id","x"],"q":["os","","","","","","","","","","","","","","","","os::board","os::config","","","","","","","","","os::console","","","","","","","","","","os::lang_items","os::loader","","os::mm","","","","","","os::mm::address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::frame_allocator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::heap_allocator","","","","","os::mm::memory_set","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::page_table","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sbi","","","","","","","os::sync","os::sync::up","","","","","","","","","","","os::syscall","","","","","","","os::syscall::fs","","os::syscall::process","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","os::trap","","","","","","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","",""],"d":["","clear BSS segment","Constants used in rCore","SBI console driver, for text output","The panic handler","Loading user applications into memory","Memory management implementation","print string macro","println string macro","the rust entry-point of os","SBI call wrappers","Synchronization and interior mutability primitives","Implementation of syscalls","Task management implementation","RISC-V timer-related functionality","Trap handling functionality","","","","","","","","","","Return (bottom, top) of a kernel stack in kernel space.","","","","","","","","","","","panic handler","get applications data","Get the total number of applications.","Implementation of physical and virtual address and page …","Implementation of FrameAllocator which controls all the …","The global allocator","initiate heap allocator, frame allocator and kernel space","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","","","physical address","","Definitions","physical page number","a simple range structure for type T","iterator for the simple range structure","","","a simple range structure for virtual page number","","virtual address","virtual page number","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","frame allocator instance through lazy_static!","","","manage a frame which has the same lifecycle as the tracker","an implementation for frame allocator","","","","","","","","","","","","","","","","","allocate a frame","a simple test for frame allocator","deallocate a frame","","","","","initiate the frame allocator using ekernel and MEMORY_END","","","","","","","","","","","","","","","","","","heap allocator instance","heap space ([u8; KERNEL_HEAP_SIZE])","panic when heap allocation error occurs","","initiate heap allocator","","","a memory set instance through lazy_static! managing kernel …","map area structure, controls a contiguous piece of virtual …","map permission corresponding to that in pte: R W X U","map type for memory set: identical or framed","memory set structure, controls virtual-memory space","","","","","","","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","data: start-aligned but maybe with shorter length assume …","","","Returns the difference between the flags in self and other.","","","","Returns an empty set of flags.","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Include sections in elf and trampoline and TrapContext and …","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","Mention that trampoline is not collected by areas.","","","","","Without kernel stacks.","Returns the complement of this set of flags.","","","","","Removes the specified flags in-place.","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","page table entry flags","page table structure","page table entry structure","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Temporarily used to get arguments from user space.","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","translate a pointer to a mutable u8 Vec through page table","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","use sbi call to putchar in console (qemu uart handler)","general sbi call","use sbi call to set timer","use sbi call to getchar from console (qemu uart handler) …","Uniprocessor interior mutability primitives","Wrap a static data structure inside it so that we are able …","","","Exclusive access inner data in UPSafeCell. Panic if the …","","inner data","","User is responsible to guarantee that inner struct is only …","","","","","","","","File and filesystem-related syscalls","Process management syscalls","handle syscall exception with syscall_id and other …","","write buf of length len to a file with fd","task exits and submit an exit code","get current time ","current task gives up resources for other tasks","a TaskManager global instance through lazy_static!","task context structure containing some registers","The task manager, where all the tasks are managed.","The task manager inner in ‘UPSafeCell’","","","","","","","","Implementation of TaskContext","id of current Running task","Get the current ‘Running’ task’s trap contexts.","Get the current ‘Running’ task’s token.","","Exit the current ‘Running’ task and run the next task …","Find next task to run and return task id.","","","","Get the current ‘Running’ task’s token.","Get the current ‘Running’ task’s trap contexts.","use inner value to get mutable access","","","","Change the status of current Running task into Exited.","Change the status of current Running task into Exited.","Change the status of current Running task into Ready.","Change the status of current Running task into Ready.","total number of tasks","return address ( e.g. __restore ) of __switch ASM function","Run the first task in task list.","Run the first task in task list.","Switch current Running task to the task we have found, or …","Switch current Running task to the task we have found, or …","callee saved registers: s 0..11","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Rust wrapper around __switch.","Types related to task management","task list","","","","","","","","","","task context structure containing some registers","","","","set Task Context{__restore ASM funciton: trap_return, sp: …","","return address ( e.g. __restore ) of __switch ASM function","callee saved registers: s 0..11","kernel stack pointer of app","","","","init task context","Switch to the context of next_task_cx_ptr, saving the …","","","","task control block structure","task status: UnInit, Ready, Running, Exited","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","get current time in microseconds","set the next timer interrupt","trap context structure containing sstatus, sepc and …","Implementation of TrapContext","enable timer interrupt in sie CSR","initialize CSR stvec as the entry of __alltraps","Addr of Page Table","kernel stack","CSR sepc","","","CSR sstatus ","Unimplement: traps/interrupts/exceptions from kernel mode …","handle an interrupt, exception, or system call from user …","Addr of trap_handler function","set the new addr of __restore asm function in TRAMPOLINE …","general regs[0..31]","trap context structure containing sstatus, sepc and …","init app context","","","","","Addr of Page Table","kernel stack","CSR sepc","set stack pointer to x_2 reg (sp)","CSR sstatus ","Addr of trap_handler function","","","","general regs[0..31]"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,2,3,6,2,3,4,5,7,6,2,3,4,5,7,2,3,2,3,4,5,7,2,3,4,5,7,2,3,4,5,6,6,2,3,4,5,2,3,2,3,4,5,6,2,2,2,3,3,3,4,4,4,5,5,5,7,4,7,4,4,7,5,6,2,3,4,5,7,6,7,7,2,3,4,5,6,7,6,2,3,2,3,4,5,7,8,5,2,3,4,5,7,6,2,3,4,5,7,6,2,3,4,5,7,6,2,3,4,5,7,0,0,0,0,0,9,10,11,12,11,9,12,11,9,11,10,11,9,12,11,12,0,0,0,12,11,9,11,0,12,11,9,10,12,11,12,11,12,11,9,12,11,9,12,11,9,0,0,0,0,0,13,13,0,0,0,0,0,14,14,14,14,15,16,14,16,14,14,14,14,14,14,14,14,16,17,15,13,14,16,17,15,13,14,13,14,13,14,14,14,14,17,17,15,14,0,0,0,14,13,14,0,0,14,13,14,14,14,14,14,16,17,15,13,14,14,14,14,16,14,14,14,16,14,14,16,17,15,13,14,14,14,17,17,17,16,17,14,17,16,16,14,16,14,16,0,14,0,0,14,0,0,0,14,14,14,13,14,14,16,16,16,17,15,13,14,16,17,15,13,14,16,17,15,13,14,14,17,17,17,18,18,18,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,20,18,19,20,18,19,18,19,18,19,18,18,18,18,18,19,18,19,18,20,20,19,18,18,18,18,18,20,20,18,19,18,18,18,18,20,18,18,18,18,20,18,19,18,18,19,20,18,20,19,18,18,19,19,18,20,18,18,18,18,18,19,18,20,20,0,20,18,19,20,18,19,20,18,19,18,20,19,0,0,0,0,0,0,0,0,0,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,22,23,24,22,0,24,0,0,22,0,23,23,24,22,23,23,23,23,24,22,0,23,0,23,23,25,0,23,0,23,25,25,0,0,0,24,23,24,22,23,24,22,23,24,22,0,25,25,25,25,25,25,25,25,25,25,25,25,0,26,26,26,0,0,27,27,26,27,26,26,26,26,27,26,27,27,27,26,27,27,27,27,26,27,27,26,27,26,27,26,0,0,0,0,0,0,0,0,0,28,28,28,0,0,28,0,0,28,0,28,0,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],"f":[null,[[]],null,null,null,null,null,null,null,[[],["never",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",15]]],null,[[]],[[]],[[]],[[]],[[["arguments",3]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["str",15]],["result",6]],[[["panicinfo",3]],["never",15]],[[["usize",15]]],[[],["usize",15]],null,null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[],["physaddr",3]],[[],["virtaddr",3]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[],["simplerange",3]],[[]],[[]],[[]],[[]],[[]],[[["physaddr",3]],["ordering",4]],[[["virtaddr",3]],["ordering",4]],[[["physpagenum",3]],["ordering",4]],[[["virtpagenum",3]],["ordering",4]],null,null,[[["physaddr",3]],["bool",15]],[[["virtaddr",3]],["bool",15]],[[["physpagenum",3]],["bool",15]],[[["virtpagenum",3]],["bool",15]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["usize",15]]],[[]],[[["physpagenum",3]]],[[]],[[["usize",15]]],[[["virtpagenum",3]]],[[["usize",15]]],[[]],[[["physaddr",3]]],[[["virtaddr",3]]],[[]],[[["usize",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["physaddr",3]],["bool",15]],[[["virtaddr",3]],["bool",15]],[[["physpagenum",3]],["bool",15]],[[["virtpagenum",3]],["bool",15]],[[]],[[]],[[],["option",4]],[[],["usize",15]],[[],["usize",15]],[[["physaddr",3]],["option",4,[["ordering",4]]]],[[["virtaddr",3]],["option",4,[["ordering",4]]]],[[["physpagenum",3]],["option",4,[["ordering",4]]]],[[["virtpagenum",3]],["option",4,[["ordering",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,[[],["option",4,[["physpagenum",3]]]],[[],["option",4,[["physpagenum",3]]]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["physpagenum",3]]],[[["physpagenum",3]]],[[],["upsafecell",3]],[[]],null,[[["formatter",3]],["result",6]],[[],["option",4,[["frametracker",3]]]],[[]],[[["physpagenum",3]]],[[]],[[]],[[]],[[["physpagenum",3],["physpagenum",3]]],[[]],[[]],[[]],[[]],[[]],[[["physpagenum",3]]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[["layout",3]],["never",15]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],null,[[]],[[]],[[["mappermission",3]]],[[]],[[],["u8",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["maptype",4]],[[],["mappermission",3]],[[]],[[]],[[["mappermission",3]],["ordering",4]],[[]],[[],["bool",15]],[[["pagetable",3]]],null,[[],["arc",3]],[[]],null,null,null,[[]],[[["maptype",4]],["bool",15]],[[["mappermission",3]],["bool",15]],null,null,[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["u8",15]],["option",4]],[[["u8",15]]],[[["u8",15]]],[[]],[[["intoiterator",8]]],[[]],[[]],[[["virtaddr",3],["virtaddr",3],["mappermission",3]]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["pagetable",3]]],[[["pagetable",3],["virtpagenum",3]]],null,[[]],null,[[["mappermission",3]],["bool",15]],[[["virtaddr",3],["virtaddr",3],["maptype",4],["mappermission",3]]],[[]],[[]],[[]],null,[[["mappermission",3]],["option",4,[["ordering",4]]]],[[["maparea",3],["option",4]]],[[]],[[]],null,null,[[["bool",15]]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[["pagetable",3]]],[[["pagetable",3],["virtpagenum",3]]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["pteflags",3]]],[[]],[[],["u8",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["pteflags",3]],[[],["pagetableentry",3]],[[]],[[]],[[["pteflags",3]],["ordering",4]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[["pteflags",3]],["bool",15]],[[],["bool",15]],[[["intoiterator",8]]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[],["pteflags",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[["u8",15]],["option",4]],[[["u8",15]]],[[["u8",15]]],[[["intoiterator",8]]],[[["usize",15]]],[[]],[[]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["virtpagenum",3],["physpagenum",3],["pteflags",3]]],[[["pteflags",3]],["bool",15]],[[]],[[["physpagenum",3],["pteflags",3]]],[[]],[[["pteflags",3]],["option",4,[["ordering",4]]]],[[],["physpagenum",3]],[[],["bool",15]],[[]],null,[[["bool",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["usize",15],["usize",15]],["vec",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[["virtpagenum",3]]],[[],["bool",15]],null,null,null,[[["usize",15]]],[[["usize",15],["usize",15],["usize",15],["usize",15]],["usize",15]],[[["usize",15]]],[[],["never",15]],null,null,[[]],[[]],[[],["refmut",3]],[[]],null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,[[["usize",15]],["isize",15]],null,[[["usize",15],["usize",15]],["isize",15]],[[["i32",15]],["never",15]],[[],["isize",15]],[[],["isize",15]],null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[],["trapcontext",3]],[[],["usize",15]],[[],["taskmanager",3]],[[]],[[],["option",4,[["usize",15]]]],[[]],[[]],[[]],[[],["usize",15]],[[],["trapcontext",3]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[],["never",15]],[[]],[[]],null,null,[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],[[]],[[["usize",15]]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["taskstatus",4]],[[]],[[["taskstatus",4]],["bool",15]],[[]],[[]],[[],["trapcontext",3]],[[],["usize",15]],[[]],[[]],null,[[["usize",15]]],null,null,[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[],["usize",15]],[[],["usize",15]],[[]],null,null,[[]],[[]],null,null,null,[[]],[[]],null,[[],["never",15]],[[],["never",15]],null,[[],["never",15]],null,null,[[["usize",15],["usize",15],["usize",15],["usize",15],["usize",15]]],[[]],[[]],[[]],[[]],null,null,null,[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"Stdout"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"PhysPageNum"],[3,"VirtPageNum"],[3,"SimpleRangeIterator"],[3,"SimpleRange"],[8,"StepByOne"],[3,"FRAME_ALLOCATOR"],[8,"FrameAllocator"],[3,"StackFrameAllocator"],[3,"FrameTracker"],[4,"MapType"],[3,"MapPermission"],[3,"KERNEL_SPACE"],[3,"MemorySet"],[3,"MapArea"],[3,"PTEFlags"],[3,"PageTableEntry"],[3,"PageTable"],[3,"UPSafeCell"],[3,"TASK_MANAGER"],[3,"TaskManager"],[3,"TaskManagerInner"],[3,"TaskContext"],[4,"TaskStatus"],[3,"TaskControlBlock"],[3,"TrapContext"]]}\
+"os":{"doc":"The main module and entrypoint","t":[0,5,0,0,0,0,0,14,14,5,0,0,0,0,0,0,17,17,17,17,17,17,17,17,17,5,3,11,11,11,11,5,11,11,11,11,5,5,5,0,0,0,5,0,0,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,8,6,3,3,12,10,11,11,11,11,11,11,11,12,10,11,11,11,12,11,5,5,5,11,11,11,11,5,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,7,7,5,5,5,13,13,3,3,3,4,3,18,18,18,18,12,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,12,11,11,5,11,5,5,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,18,18,18,3,3,3,18,18,18,18,18,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,5,5,5,5,0,3,11,11,11,11,12,11,11,11,11,11,17,17,17,17,0,0,5,17,5,5,5,5,3,3,3,3,12,11,11,11,11,11,11,0,12,5,5,11,5,11,11,11,11,11,11,12,11,11,11,5,11,5,11,12,12,5,11,5,11,12,12,5,0,0,12,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,5,13,13,13,3,4,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,12,11,12,11,11,11,11,11,11,17,17,5,5,5,3,0,5,5,12,12,12,5,5,12,5,5,12,5,12,3,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["board","clear_bss","config","console","lang_items","loader","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","CLOCK_FREQ","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","kernel_stack_position","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","panic","get_app_data","get_num_app","address","frame_allocator","heap_allocator","init","memory_set","page_table","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_pte_array","get_start","indexes","into","into","into","into","into","into","into_iter","into_iter","l","ne","ne","ne","ne","new","new","next","page_offset","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","r","step","step","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","FRAME_ALLOCATOR","FrameAllocator","FrameAllocatorImpl","FrameTracker","StackFrameAllocator","__private_field","alloc","alloc","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc","deref","drop","end","fmt","frame_alloc","frame_allocator_test","frame_dealloc","from","from","from","init","init_frame_allocator","into","into","into","new","new","new","ppn","recycled","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","HEAP_ALLOCATOR","HEAP_SPACE","handle_alloc_error","heap_test","init_heap","Framed","Identical","KERNEL_SPACE","MapArea","MapPermission","MapType","MemorySet","R","U","W","X","__private_field","activate","all","areas","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","copy_data","data_frames","deref","difference","ebss","edata","ekernel","empty","eq","eq","erodata","etext","extend","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","map","map_one","map_perm","map_trampoline","map_type","ne","new","new_bare","new_kernel","not","page_table","partial_cmp","push","remap_test","remove","sbss_with_stack","sdata","set","srodata","stext","strampoline","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","union","unmap","unmap_one","vpn_range","A","D","G","PTEFlags","PageTable","PageTableEntry","R","U","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","complement","contains","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","is_all","is_empty","is_valid","map","ne","new","new","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translated_byte_buffer","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","union","unmap","writable","SBI_CONSOLE_PUTCHAR","SBI_SET_TIMER","SBI_SHUTDOWN","console_putchar","sbi_call","set_timer","shutdown","up","UPSafeCell","borrow","borrow_mut","exclusive_access","from","inner","into","new","try_from","try_into","type_id","SYSCALL_EXIT","SYSCALL_GET_TIME","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","FD_STDOUT","sys_write","sys_exit","sys_get_time","sys_yield","TASK_MANAGER","TaskContext","TaskManager","TaskManagerInner","__private_field","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","context","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","find_next_task","from","from","from","get_current_token","get_current_trap_cx","inner","into","into","into","mark_current_exited","mark_current_exited","mark_current_suspended","mark_current_suspended","num_app","ra","run_first_task","run_first_task","run_next_task","run_next_task","s","sp","suspend_current_and_run_next","switch","task","tasks","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","__switch","Exited","Ready","Running","TaskControlBlock","TaskStatus","base_size","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","from","from","get_trap_cx","get_user_token","into","into","memory_set","new","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_into","try_into","type_id","type_id","MSEC_PER_SEC","TICKS_PER_SEC","get_time","get_time_ms","set_next_trigger","TrapContext","context","enable_timer_interrupt","init","kernel_satp","kernel_sp","sepc","set_kernel_trap_entry","set_user_trap_entry","sstatus","trap_from_kernel","trap_handler","trap_handler","trap_return","x","TrapContext","app_init_context","borrow","borrow_mut","from","into","kernel_satp","kernel_sp","sepc","set_sp","sstatus","trap_handler","try_from","try_into","type_id","x"],"q":["os","","","","","","","","","","","","","","","","os::board","os::config","","","","","","","","","os::console","","","","","","","","","","os::lang_items","os::loader","","os::mm","","","","","","os::mm::address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::frame_allocator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::heap_allocator","","","","","os::mm::memory_set","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::mm::page_table","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sbi","","","","","","","os::sync","os::sync::up","","","","","","","","","","","os::syscall","","","","","","","os::syscall::fs","","os::syscall::process","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","os::trap","","","","","","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","",""],"d":["","clear BSS segment","Constants used in rCore","SBI console driver, for text output","The panic handler","Loading user applications into memory","Memory management implementation","print string macro","println string macro","the rust entry-point of os","SBI call wrappers","Synchronization and interior mutability primitives","Implementation of syscalls","Task management implementation","RISC-V timer-related functionality","Trap handling functionality","","","","","","","","","","Return (bottom, top) of a kernel stack in kernel space.","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","panic handler","get applications data","Get the total number of applications.","Implementation of physical and virtual address and page …","Implementation of FrameAllocator which controls all the …","The global allocator","initiate heap allocator, frame allocator and kernel space","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","","","physical address","","Definitions","physical page number","a simple range structure for type T","iterator for the simple range structure","","","a simple range structure for virtual page number","","virtual address","virtual page number","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","frame allocator instance through lazy_static!","","","manage a frame which has the same lifecycle as the tracker","an implementation for frame allocator","","","","","","","","","","","","","","","","","allocate a frame","a simple test for frame allocator","deallocate a frame","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","initiate the frame allocator using ekernel and MEMORY_END","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","heap allocator instance","heap space ([u8; KERNEL_HEAP_SIZE])","panic when heap allocation error occurs","","initiate heap allocator","","","a memory set instance through lazy_static! managing kernel …","map area structure, controls a contiguous piece of virtual …","map permission corresponding to that in pte: R W X U","map type for memory set: identical or framed","memory set structure, controls virtual-memory space","","","","","","","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","data: start-aligned but maybe with shorter length assume …","","","Returns the difference between the flags in self and other.","","","","Returns an empty set of flags.","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Include sections in elf and trampoline and TrapContext and …","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","Mention that trampoline is not collected by areas.","","","","","Without kernel stacks.","Returns the complement of this set of flags.","","","","","Removes the specified flags in-place.","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","page table entry flags","page table structure","page table entry structure","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Temporarily used to get arguments from user space.","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","translate a pointer to a mutable u8 Vec through page table","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","use sbi call to putchar in console (qemu uart handler)","general sbi call","use sbi call to set timer","use sbi call to getchar from console (qemu uart handler) …","Uniprocessor interior mutability primitives","Wrap a static data structure inside it so that we are able …","","","Exclusive access inner data in UPSafeCell. Panic if the …","Returns the argument unchanged.","inner data","Calls U::from(self).","User is responsible to guarantee that inner struct is only …","","","","","","","","File and filesystem-related syscalls","Process management syscalls","handle syscall exception with syscall_id and other …","","write buf of length len to a file with fd","task exits and submit an exit code","get current time ","current task gives up resources for other tasks","a TaskManager global instance through lazy_static!","task context structure containing some registers","The task manager, where all the tasks are managed.","The task manager inner in ‘UPSafeCell’","","","","","","","","Implementation of TaskContext","id of current Running task","Get the current ‘Running’ task’s trap contexts.","Get the current ‘Running’ task’s token.","","Exit the current ‘Running’ task and run the next task …","Find next task to run and return task id.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the current ‘Running’ task’s token.","Get the current ‘Running’ task’s trap contexts.","use inner value to get mutable access","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Change the status of current Running task into Exited.","Change the status of current Running task into Exited.","Change the status of current Running task into Ready.","Change the status of current Running task into Ready.","total number of tasks","return address ( e.g. __restore ) of __switch ASM function","Run the first task in task list.","Run the first task in task list.","Switch current Running task to the task we have found, or …","Switch current Running task to the task we have found, or …","callee saved registers: s 0..11","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Rust wrapper around __switch.","Types related to task management","task list","","","","","","","","","","task context structure containing some registers","","","Returns the argument unchanged.","set Task Context{__restore ASM funciton: trap_return, sp: …","Calls U::from(self).","return address ( e.g. __restore ) of __switch ASM function","callee saved registers: s 0..11","kernel stack pointer of app","","","","init task context","Switch to the context of next_task_cx_ptr, saving the …","","","","task control block structure","task status: UnInit, Ready, Running, Exited","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","get current time in microseconds","set the next timer interrupt","trap context structure containing sstatus, sepc and …","Implementation of TrapContext","enable timer interrupt in sie CSR","initialize CSR stvec as the entry of __alltraps","Addr of Page Table","kernel stack","CSR sepc","","","CSR sstatus ","Unimplement: traps/interrupts/exceptions from kernel mode …","handle an interrupt, exception, or system call from user …","Addr of trap_handler function","set the new addr of __restore asm function in TRAMPOLINE …","general regs[0..31]","trap context structure containing sstatus, sepc and …","init app context","","","Returns the argument unchanged.","Calls U::from(self).","Addr of Page Table","kernel stack","CSR sepc","set stack pointer to x_2 reg (sp)","CSR sstatus ","Addr of trap_handler function","","","","general regs[0..31]"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,2,3,6,2,3,4,5,7,6,2,3,4,5,7,2,3,2,3,4,5,7,2,3,4,5,7,2,3,4,5,6,6,2,3,4,5,2,3,2,3,4,5,6,2,2,2,3,3,3,4,4,4,5,5,5,7,4,7,4,4,7,5,6,2,3,4,5,7,6,7,7,2,3,4,5,6,7,6,2,3,2,3,4,5,7,8,5,2,3,4,5,7,6,2,3,4,5,7,6,2,3,4,5,7,6,2,3,4,5,7,0,0,0,0,0,9,10,11,12,11,9,12,11,9,11,10,11,9,12,11,12,0,0,0,12,11,9,11,0,12,11,9,10,12,11,12,11,12,11,9,12,11,9,12,11,9,0,0,0,0,0,13,13,0,0,0,0,0,14,14,14,14,15,16,14,16,14,14,14,14,14,14,14,14,16,17,15,13,14,16,17,15,13,14,13,14,13,14,14,14,14,17,17,15,14,0,0,0,14,13,14,0,0,14,13,14,14,14,14,14,16,17,15,13,14,14,14,14,16,14,14,14,16,14,14,16,17,15,13,14,14,14,17,17,17,16,17,14,17,16,16,14,16,14,16,0,14,0,0,14,0,0,0,14,14,14,13,14,14,16,16,16,17,15,13,14,16,17,15,13,14,16,17,15,13,14,14,17,17,17,18,18,18,0,0,0,18,18,18,18,18,18,18,18,18,18,18,18,19,18,18,20,18,19,20,18,19,18,19,18,19,18,18,18,18,18,19,18,19,18,20,20,19,18,18,18,18,18,20,20,18,19,18,18,18,18,20,18,18,18,18,20,18,19,18,18,19,20,18,20,19,18,18,19,19,18,20,18,18,18,18,18,19,18,20,20,0,20,18,19,20,18,19,20,18,19,18,20,19,0,0,0,0,0,0,0,0,0,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,22,23,24,22,0,24,0,0,22,0,23,23,24,22,23,23,23,23,24,22,0,23,0,23,23,25,0,23,0,23,25,25,0,0,0,24,23,24,22,23,24,22,23,24,22,0,25,25,25,25,25,25,25,25,25,25,25,25,0,26,26,26,0,0,27,27,26,27,26,26,26,26,27,26,27,27,27,26,27,27,27,27,26,27,27,26,27,26,27,26,0,0,0,0,0,0,0,0,0,28,28,28,0,0,28,0,0,28,0,28,0,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],"f":[null,[[]],null,null,null,null,null,null,null,[[],["never",0]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",0]]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[["arguments",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0],["str",0]],["result",6]],[[["panicinfo",3]],["never",0]],[[["usize",0]]],[[],["usize",0]],null,null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0]],["physaddr",3]],[[["",0]],["virtaddr",3]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0]],["simplerange",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["physaddr",3]],["ordering",4]],[[["",0],["virtaddr",3]],["ordering",4]],[[["",0],["physpagenum",3]],["ordering",4]],[[["",0],["virtpagenum",3]],["ordering",4]],null,null,[[["",0],["physaddr",3]],["bool",0]],[[["",0],["virtaddr",3]],["bool",0]],[[["",0],["physpagenum",3]],["bool",0]],[[["",0],["virtpagenum",3]],["bool",0]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[["usize",0]]],[[["physpagenum",3]]],[[["usize",0]]],[[["virtpagenum",3]]],[[]],[[["usize",0]]],[[["physaddr",3]]],[[]],[[]],[[["usize",0]]],[[["virtaddr",3]]],[[]],[[["",0]]],[[["",0]]],[[["",0]],["",0]],[[["",0]]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["",0],["physaddr",3]],["bool",0]],[[["",0],["virtaddr",3]],["bool",0]],[[["",0],["physpagenum",3]],["bool",0]],[[["",0],["virtpagenum",3]],["bool",0]],[[]],[[]],[[["",0]],["option",4]],[[["",0]],["usize",0]],[[["",0]],["usize",0]],[[["",0],["physaddr",3]],["option",4,[["ordering",4]]]],[[["",0],["virtaddr",3]],["option",4,[["ordering",4]]]],[[["",0],["physpagenum",3]],["option",4,[["ordering",4]]]],[[["",0],["virtpagenum",3]],["option",4,[["ordering",4]]]],null,[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,null,null,[[["",0]],["option",4,[["physpagenum",3]]]],[[["",0]],["option",4,[["physpagenum",3]]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0],["physpagenum",3]]],[[["",0],["physpagenum",3]]],[[["",0]],["upsafecell",3]],[[["",0]]],null,[[["",0],["formatter",3]],["result",6]],[[],["option",4,[["frametracker",3]]]],[[]],[[["physpagenum",3]]],[[]],[[]],[[]],[[["",0],["physpagenum",3],["physpagenum",3]]],[[]],[[]],[[]],[[]],[[]],[[["physpagenum",3]]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,[[["layout",3]],["never",0]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]]],[[]],null,[[]],[[["",0]]],[[["mappermission",3]]],[[["",0]]],[[["",0]],["u8",0]],null,[[]],[[["",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["maptype",4]],[[["",0]],["mappermission",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["mappermission",3]],["ordering",4]],[[]],[[["",0]],["bool",0]],[[["",0],["pagetable",3]]],null,[[["",0]],["arc",3]],[[]],null,null,null,[[]],[[["",0],["maptype",4]],["bool",0]],[[["",0],["mappermission",3]],["bool",0]],null,null,[[["",0],["intoiterator",8]]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["u8",0]],["option",4]],[[["u8",0]]],[[["u8",0]]],[[]],[[["intoiterator",8]]],[[["",0],["",0]]],[[["",0]]],[[["",0],["virtaddr",3],["virtaddr",3],["mappermission",3]]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0],["pagetable",3]]],[[["",0],["pagetable",3],["virtpagenum",3]]],null,[[["",0]]],null,[[["",0],["mappermission",3]],["bool",0]],[[["virtaddr",3],["virtaddr",3],["maptype",4],["mappermission",3]]],[[]],[[]],[[]],null,[[["",0],["mappermission",3]],["option",4,[["ordering",4]]]],[[["",0],["maparea",3],["option",4]]],[[]],[[["",0]]],null,null,[[["",0],["bool",0]]],null,null,null,[[]],[[["",0]]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["usize",0]],[[["",0],["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[["",0],["pagetable",3]]],[[["",0],["pagetable",3],["virtpagenum",3]]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[["",0]]],[[["pteflags",3]]],[[["",0]]],[[["",0]],["u8",0]],null,null,[[]],[[["",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["pteflags",3]],[[["",0]],["pagetableentry",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["pteflags",3]],["ordering",4]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[["",0],["pteflags",3]],["bool",0]],[[["",0]],["bool",0]],[[["",0],["intoiterator",8]]],[[["",0],["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["",0],["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["",0]],["pteflags",3]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[["u8",0]],["option",4]],[[["u8",0]]],[[["u8",0]]],[[["intoiterator",8]]],[[["usize",0]]],[[["",0],["",0]]],[[["",0]]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0],["virtpagenum",3],["physpagenum",3],["pteflags",3]]],[[["",0],["pteflags",3]],["bool",0]],[[]],[[["physpagenum",3],["pteflags",3]]],[[]],[[["",0],["pteflags",3]],["option",4,[["ordering",4]]]],[[["",0]],["physpagenum",3]],[[["",0]],["bool",0]],[[["",0]]],null,[[["",0],["bool",0]]],[[]],[[["",0]]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["usize",0]],[[["",0],["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["usize",0],["usize",0]],["vec",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[["",0],["virtpagenum",3]]],[[["",0]],["bool",0]],null,null,null,[[["usize",0]]],[[["usize",0],["usize",0],["usize",0],["usize",0]],["usize",0]],[[["usize",0]]],[[],["never",0]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["refmut",3]],[[]],null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,null,[[["usize",0]],["isize",0]],null,[[["usize",0],["usize",0]],["isize",0]],[[["i32",0]],["never",0]],[[],["isize",0]],[[],["isize",0]],null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,[[],["trapcontext",3]],[[],["usize",0]],[[["",0]],["taskmanager",3]],[[]],[[["",0]],["option",4,[["usize",0]]]],[[]],[[]],[[]],[[["",0]],["usize",0]],[[["",0]],["trapcontext",3]],null,[[]],[[]],[[]],[[]],[[["",0]]],[[]],[[["",0]]],null,null,[[]],[[["",0]],["never",0]],[[]],[[["",0]]],null,null,[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[["usize",0]]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["taskstatus",4]],[[["",0],["",0]]],[[["",0],["taskstatus",4]],["bool",0]],[[]],[[]],[[["",0]],["trapcontext",3]],[[["",0]],["usize",0]],[[]],[[]],null,[[["usize",0]]],null,null,[[["",0]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,[[],["usize",0]],[[],["usize",0]],[[]],null,null,[[]],[[]],null,null,null,[[]],[[]],null,[[],["never",0]],[[],["never",0]],null,[[],["never",0]],null,null,[[["usize",0],["usize",0],["usize",0],["usize",0],["usize",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],null,null,null,[[["",0],["usize",0]]],null,null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null],"p":[[3,"Stdout"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"PhysPageNum"],[3,"VirtPageNum"],[3,"SimpleRangeIterator"],[3,"SimpleRange"],[8,"StepByOne"],[3,"FRAME_ALLOCATOR"],[8,"FrameAllocator"],[3,"StackFrameAllocator"],[3,"FrameTracker"],[4,"MapType"],[3,"MapPermission"],[3,"KERNEL_SPACE"],[3,"MemorySet"],[3,"MapArea"],[3,"PTEFlags"],[3,"PageTableEntry"],[3,"PageTable"],[3,"UPSafeCell"],[3,"TASK_MANAGER"],[3,"TaskManager"],[3,"TaskManagerInner"],[3,"TaskContext"],[4,"TaskStatus"],[3,"TaskControlBlock"],[3,"TrapContext"]]}\
}');
if (window.initSearch) {window.initSearch(searchIndex)};
\ No newline at end of file
diff --git a/ch4/search.js b/ch4/search.js
index 3aa50607..a8026db5 100644
--- a/ch4/search.js
+++ b/ch4/search.js
@@ -1,2 +1,2 @@
-(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[result.id];obj.lev=result.lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates[obj.fullPath]){continue}duplicates[obj.fullPath]=true;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){var result=results[entry];result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};ar.push(result)}}results=ar;if(results.length===0){return[]}results.sort(function(aaa,bbb){var a,b;a=(aaa.word!==val);b=(bbb.word!==val);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==window.currentCrate);b=(bbb.item.crate!==window.currentCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(var i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){var found=false;if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){found=obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return found?0:MAX_LEV_DISTANCE+1}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(isExact,res,fullId,id,index,lev){if(lev===0||(!isExact&&lev<=MAX_LEV_DISTANCE)){if(res[fullId]!==undefined){var result=res[fullId];if(result.dontValidate||result.lev<=lev){return}}res[fullId]={id:id,index:index,dontValidate:isExact,lev:lev,}}}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i0){firstNonZeroDistance=distance;break}}in_args=firstNonZeroDistance}addIntoResults(true,results_in_args,fullId,i,-1,in_args);addIntoResults(true,results_returned,fullId,i,-1,returned);if(is_module){addIntoResults(true,results,fullId,i,-1,0)}}}query.inputs=inputs.map(function(input){return input.name});query.output=output.name}else{query.inputs=[val];query.output=val;query.search=val;val=val.replace(/_/g,"");var valGenerics=extractGenerics(val);var paths=valLower.split("::");removeEmptyStringsFromArray(paths);val=paths[paths.length-1];var contains=paths.slice(0,paths.length>1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}addIntoResults(false,results_in_args,fullId,j,index,in_args);addIntoResults(false,results_returned,fullId,j,index,returned);if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}addIntoResults(false,results,fullId,j,index,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type="",query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :( "+"Try on DuckDuckGo?
"+"Or try looking in one of these:
The Rust Reference "+" for technical details about the language.