From 1fd2c709b710aaaff86905bb34bf0160a1c695b4 Mon Sep 17 00:00:00 2001 From: wyfcyx Date: Wed, 10 Jan 2024 15:27:46 +0000 Subject: [PATCH] deploy: 85e2f4d3b6e98a1067608c16af603deb1c003aee --- ch6-dev/.lock | 0 ch6-dev/FiraSans-Medium.woff | Bin 186824 -> 0 bytes ch6-dev/FiraSans-Regular.woff | Bin 183268 -> 0 bytes ch6-dev/NanumBarunGothic.ttf.woff | Bin 677868 -> 0 bytes ch6-dev/SourceCodePro-It.ttf.woff | Bin 58444 -> 0 bytes ch6-dev/SourceCodePro-Regular.ttf.woff | Bin 68152 -> 0 bytes ch6-dev/SourceCodePro-Semibold.ttf.woff | Bin 68080 -> 0 bytes ch6-dev/SourceSerif4-Bold.ttf.woff | Bin 110552 -> 0 bytes ch6-dev/SourceSerif4-Bold.ttf.woff2 | Bin 81320 -> 0 bytes ch6-dev/SourceSerif4-It.ttf.woff | Bin 78108 -> 0 bytes ch6-dev/SourceSerif4-It.ttf.woff2 | Bin 59860 -> 0 bytes ch6-dev/SourceSerif4-Regular.ttf.woff | Bin 103604 -> 0 bytes ch6-dev/SourceSerif4-Regular.ttf.woff2 | Bin 76180 -> 0 bytes ch6-dev/ayu.css | 1 - ch6-dev/brush.svg | 1 - ch6-dev/dark.css | 1 - ch6-dev/down-arrow.svg | 1 - ch6-dev/help.html | 1 + .../implementors/core/clone/trait.Clone.js | 6 +- ch6-dev/implementors/core/cmp/trait.Eq.js | 6 +- ch6-dev/implementors/core/cmp/trait.Ord.js | 6 +- .../implementors/core/cmp/trait.PartialEq.js | 6 +- .../implementors/core/cmp/trait.PartialOrd.js | 6 +- .../implementors/core/convert/trait.From.js | 6 +- ch6-dev/implementors/core/fmt/trait.Binary.js | 6 +- ch6-dev/implementors/core/fmt/trait.Debug.js | 6 +- .../implementors/core/fmt/trait.LowerHex.js | 6 +- ch6-dev/implementors/core/fmt/trait.Octal.js | 6 +- .../implementors/core/fmt/trait.UpperHex.js | 6 +- ch6-dev/implementors/core/fmt/trait.Write.js | 6 +- ch6-dev/implementors/core/hash/trait.Hash.js | 6 +- .../core/iter/traits/collect/trait.Extend.js | 6 +- .../iter/traits/collect/trait.FromIterator.js | 6 +- .../iter/traits/collect/trait.IntoIterator.js | 6 +- .../iter/traits/iterator/trait.Iterator.js | 6 +- .../implementors/core/marker/trait.Copy.js | 6 +- .../implementors/core/marker/trait.Freeze.js | 6 +- .../implementors/core/marker/trait.Send.js | 6 +- .../core/marker/trait.StructuralEq.js | 6 +- .../core/marker/trait.StructuralPartialEq.js | 6 +- .../implementors/core/marker/trait.Sync.js | 6 +- .../implementors/core/marker/trait.Unpin.js | 6 +- .../implementors/core/ops/arith/trait.Sub.js | 6 +- .../core/ops/arith/trait.SubAssign.js | 6 +- .../implementors/core/ops/bit/trait.BitAnd.js | 6 +- .../core/ops/bit/trait.BitAndAssign.js | 6 +- .../implementors/core/ops/bit/trait.BitOr.js | 6 +- .../core/ops/bit/trait.BitOrAssign.js | 6 +- .../implementors/core/ops/bit/trait.BitXor.js | 6 +- .../core/ops/bit/trait.BitXorAssign.js | 6 +- .../implementors/core/ops/bit/trait.Not.js | 6 +- .../core/ops/deref/trait.Deref.js | 6 +- .../implementors/core/ops/drop/trait.Drop.js | 6 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 6 +- .../panic/unwind_safe/trait.UnwindSafe.js | 6 +- .../easy_fs/block_dev/trait.BlockDevice.js | 6 +- .../lazy_static/trait.LazyStatic.js | 6 +- .../lock_api/mutex/trait.RawMutex.js | 3 + .../implementors/os/board/trait.QEMUExit.js | 3 - ch6-dev/implementors/os/fs/trait.File.js | 6 +- .../os/mm/address/trait.StepByOne.js | 6 +- .../frame_allocator/trait.FrameAllocator.js | 6 +- .../virtio_drivers/hal/trait.Hal.js | 3 + ch6-dev/light.css | 1 - ch6-dev/main.js | 8 - ch6-dev/noscript.css | 1 - ch6-dev/os/all.html | 8 +- ch6-dev/os/board/constant.CLOCK_FREQ.html | 9 +- ch6-dev/os/board/constant.EXIT_FAILURE.html | 8 - .../os/board/constant.EXIT_FAILURE_FLAG.html | 8 - ch6-dev/os/board/constant.EXIT_RESET.html | 8 - ch6-dev/os/board/constant.EXIT_SUCCESS.html | 8 - ch6-dev/os/board/constant.MEMORY_END.html | 9 +- ch6-dev/os/board/constant.MMIO.html | 9 +- .../os/board/constant.QEMU_EXIT_HANDLE.html | 8 - ch6-dev/os/board/constant.VIRT_TEST.html | 8 - ch6-dev/os/board/fn.exit_code_encode.html | 9 - ch6-dev/os/board/index.html | 16 +- ch6-dev/os/board/sidebar-items.js | 2 +- ch6-dev/os/board/struct.RISCV64.html | 27 - ch6-dev/os/board/trait.QEMUExit.html | 17 - ch6-dev/os/board/type.BlockDeviceImpl.html | 9 +- .../os/config/constant.KERNEL_HEAP_SIZE.html | 9 +- .../os/config/constant.KERNEL_STACK_SIZE.html | 9 +- ch6-dev/os/config/constant.PAGE_SIZE.html | 9 +- .../os/config/constant.PAGE_SIZE_BITS.html | 9 +- ch6-dev/os/config/constant.TRAMPOLINE.html | 9 +- ch6-dev/os/config/constant.TRAP_CONTEXT.html | 9 +- .../os/config/constant.USER_STACK_SIZE.html | 9 +- ch6-dev/os/config/index.html | 13 +- ch6-dev/os/config/sidebar-items.js | 2 +- ch6-dev/os/console/fn.print.html | 9 +- ch6-dev/os/console/index.html | 13 +- ch6-dev/os/console/sidebar-items.js | 2 +- ch6-dev/os/console/struct.Stdout.html | 33 +- .../drivers/block/fn.block_device_test.html | 9 +- ch6-dev/os/drivers/block/index.html | 13 +- .../drivers/block/sdcard/constant.SD_CS.html | 10 - .../block/sdcard/constant.SD_CS_GPIONUM.html | 9 - ...ant.SD_START_DATA_MULTIPLE_BLOCK_READ.html | 9 - ...nt.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html | 9 - ...stant.SD_START_DATA_SINGLE_BLOCK_READ.html | 9 - ...tant.SD_START_DATA_SINGLE_BLOCK_WRITE.html | 9 - .../block/sdcard/constant.SEC_LEN.html | 8 - ch6-dev/os/drivers/block/sdcard/enum.CMD.html | 61 - .../drivers/block/sdcard/enum.InitError.html | 29 - .../drivers/block/sdcard/fn.init_sdcard.html | 8 - .../os/drivers/block/sdcard/fn.io_init.html | 9 - ch6-dev/os/drivers/block/sdcard/index.html | 24 - .../os/drivers/block/sdcard/sidebar-items.js | 1 - .../block/sdcard/struct.PERIPHERALS.html | 24 - .../drivers/block/sdcard/struct.SDCard.html | 23 - .../block/sdcard/struct.SDCardCID.html | 37 - .../block/sdcard/struct.SDCardCSD.html | 59 - .../block/sdcard/struct.SDCardInfo.html | 31 - .../block/sdcard/struct.SDCardWrapper.html | 21 - ch6-dev/os/drivers/block/sidebar-items.js | 2 +- .../os/drivers/block/struct.BLOCK_DEVICE.html | 32 +- .../block/virtio_blk/constant.VIRTIO0.html | 9 +- .../block/virtio_blk/fn.virtio_dma_alloc.html | 9 - .../virtio_blk/fn.virtio_dma_dealloc.html | 9 - .../virtio_blk/fn.virtio_phys_to_virt.html | 9 - .../virtio_blk/fn.virtio_virt_to_phys.html | 9 - .../os/drivers/block/virtio_blk/index.html | 12 +- .../drivers/block/virtio_blk/sidebar-items.js | 2 +- .../block/virtio_blk/struct.QUEUE_FRAMES.html | 34 +- .../block/virtio_blk/struct.VirtIOBlock.html | 30 +- .../block/virtio_blk/struct.VirtioHal.html | 13 + ch6-dev/os/drivers/index.html | 11 +- ch6-dev/os/drivers/sidebar-items.js | 2 +- ch6-dev/os/fn.clear_bss.html | 11 +- ch6-dev/os/fn.rust_main.html | 13 +- ch6-dev/os/fs/fn.list_apps.html | 11 +- ch6-dev/os/fs/fn.open_file.html | 11 +- ch6-dev/os/fs/index.html | 28 +- .../fs/inode/constant.BLOCK_CACHE_SIZE.html | 1 + ch6-dev/os/fs/inode/fn.list_apps.html | 11 +- ch6-dev/os/fs/inode/fn.open_file.html | 11 +- ch6-dev/os/fs/inode/index.html | 20 +- ch6-dev/os/fs/inode/sidebar-items.js | 2 +- ch6-dev/os/fs/inode/struct.OSInode.html | 44 +- ch6-dev/os/fs/inode/struct.OSInodeInner.html | 34 +- ch6-dev/os/fs/inode/struct.OpenFlags.html | 149 +- ch6-dev/os/fs/inode/struct.ROOT_INODE.html | 34 +- ch6-dev/os/fs/inode/type.InodeType.html | 5 + ch6-dev/os/fs/sidebar-items.js | 2 +- ch6-dev/os/fs/stdio/index.html | 14 +- ch6-dev/os/fs/stdio/sidebar-items.js | 2 +- ch6-dev/os/fs/stdio/struct.Stdin.html | 34 +- ch6-dev/os/fs/stdio/struct.Stdout.html | 34 +- ch6-dev/os/fs/struct.OSInode.html | 44 +- ch6-dev/os/fs/struct.OpenFlags.html | 149 +- ch6-dev/os/fs/struct.Stdin.html | 34 +- ch6-dev/os/fs/struct.Stdout.html | 34 +- ch6-dev/os/fs/trait.File.html | 30 +- ch6-dev/os/index.html | 45 +- ch6-dev/os/lang_items/fn.panic.html | 9 +- ch6-dev/os/lang_items/index.html | 12 +- ch6-dev/os/lang_items/sidebar-items.js | 2 +- ch6-dev/os/macro.print.html | 16 +- ch6-dev/os/macro.println.html | 16 +- .../os/mm/address/constant.PA_WIDTH_SV39.html | 9 +- .../mm/address/constant.PPN_WIDTH_SV39.html | 9 +- .../os/mm/address/constant.VA_WIDTH_SV39.html | 9 +- .../mm/address/constant.VPN_WIDTH_SV39.html | 9 +- ch6-dev/os/mm/address/index.html | 23 +- ch6-dev/os/mm/address/sidebar-items.js | 2 +- ch6-dev/os/mm/address/struct.PhysAddr.html | 76 +- ch6-dev/os/mm/address/struct.PhysPageNum.html | 69 +- ch6-dev/os/mm/address/struct.SimpleRange.html | 51 +- .../address/struct.SimpleRangeIterator.html | 331 ++-- ch6-dev/os/mm/address/struct.VirtAddr.html | 72 +- ch6-dev/os/mm/address/struct.VirtPageNum.html | 65 +- ch6-dev/os/mm/address/trait.StepByOne.html | 18 +- ch6-dev/os/mm/address/type.VPNRange.html | 18 +- ch6-dev/os/mm/fn.frame_alloc.html | 11 +- ch6-dev/os/mm/fn.frame_dealloc.html | 11 +- ch6-dev/os/mm/fn.init.html | 11 +- ch6-dev/os/mm/fn.kernel_token.html | 11 +- ch6-dev/os/mm/fn.remap_test.html | 11 +- ch6-dev/os/mm/fn.translated_byte_buffer.html | 15 +- ch6-dev/os/mm/fn.translated_ref.html | 11 +- ch6-dev/os/mm/fn.translated_refmut.html | 11 +- ch6-dev/os/mm/fn.translated_str.html | 11 +- .../os/mm/frame_allocator/fn.frame_alloc.html | 11 +- .../fn.frame_allocator_test.html | 11 +- .../mm/frame_allocator/fn.frame_dealloc.html | 11 +- .../fn.init_frame_allocator.html | 11 +- ch6-dev/os/mm/frame_allocator/index.html | 22 +- .../os/mm/frame_allocator/sidebar-items.js | 2 +- .../struct.FRAME_ALLOCATOR.html | 36 +- .../frame_allocator/struct.FrameTracker.html | 36 +- .../struct.StackFrameAllocator.html | 32 +- .../frame_allocator/trait.FrameAllocator.html | 18 +- .../type.FrameAllocatorImpl.html | 13 +- .../heap_allocator/fn.handle_alloc_error.html | 11 +- .../os/mm/heap_allocator/fn.heap_test.html | 9 +- .../os/mm/heap_allocator/fn.init_heap.html | 11 +- ch6-dev/os/mm/heap_allocator/index.html | 17 +- ch6-dev/os/mm/heap_allocator/sidebar-items.js | 2 +- .../heap_allocator/static.HEAP_ALLOCATOR.html | 11 +- .../mm/heap_allocator/static.HEAP_SPACE.html | 11 +- ch6-dev/os/mm/index.html | 44 +- ch6-dev/os/mm/memory_set/enum.MapType.html | 44 +- ch6-dev/os/mm/memory_set/fn.ebss.html | 9 +- ch6-dev/os/mm/memory_set/fn.edata.html | 9 +- ch6-dev/os/mm/memory_set/fn.ekernel.html | 9 +- ch6-dev/os/mm/memory_set/fn.erodata.html | 9 +- ch6-dev/os/mm/memory_set/fn.etext.html | 9 +- ch6-dev/os/mm/memory_set/fn.kernel_token.html | 11 +- ch6-dev/os/mm/memory_set/fn.remap_test.html | 11 +- .../os/mm/memory_set/fn.sbss_with_stack.html | 9 +- ch6-dev/os/mm/memory_set/fn.sdata.html | 9 +- ch6-dev/os/mm/memory_set/fn.srodata.html | 9 +- ch6-dev/os/mm/memory_set/fn.stext.html | 9 +- ch6-dev/os/mm/memory_set/fn.strampoline.html | 9 +- ch6-dev/os/mm/memory_set/index.html | 21 +- ch6-dev/os/mm/memory_set/sidebar-items.js | 2 +- .../os/mm/memory_set/struct.KERNEL_SPACE.html | 34 +- ch6-dev/os/mm/memory_set/struct.MapArea.html | 39 +- .../mm/memory_set/struct.MapPermission.html | 145 +- .../os/mm/memory_set/struct.MemorySet.html | 59 +- .../page_table/fn.translated_byte_buffer.html | 15 +- .../os/mm/page_table/fn.translated_ref.html | 11 +- .../mm/page_table/fn.translated_refmut.html | 11 +- .../os/mm/page_table/fn.translated_str.html | 11 +- ch6-dev/os/mm/page_table/index.html | 21 +- ch6-dev/os/mm/page_table/sidebar-items.js | 2 +- ch6-dev/os/mm/page_table/struct.PTEFlags.html | 135 +- .../os/mm/page_table/struct.PageTable.html | 52 +- .../mm/page_table/struct.PageTableEntry.html | 56 +- .../os/mm/page_table/struct.UserBuffer.html | 43 +- .../page_table/struct.UserBufferIterator.html | 338 ++-- ch6-dev/os/mm/sidebar-items.js | 2 +- ch6-dev/os/mm/struct.FrameTracker.html | 36 +- ch6-dev/os/mm/struct.KERNEL_SPACE.html | 34 +- ch6-dev/os/mm/struct.MapPermission.html | 145 +- ch6-dev/os/mm/struct.MemorySet.html | 59 +- ch6-dev/os/mm/struct.PageTable.html | 52 +- ch6-dev/os/mm/struct.PageTableEntry.html | 56 +- ch6-dev/os/mm/struct.PhysAddr.html | 76 +- ch6-dev/os/mm/struct.PhysPageNum.html | 69 +- ch6-dev/os/mm/struct.UserBuffer.html | 43 +- ch6-dev/os/mm/struct.UserBufferIterator.html | 338 ++-- ch6-dev/os/mm/struct.VirtAddr.html | 72 +- ch6-dev/os/mm/struct.VirtPageNum.html | 65 +- ch6-dev/os/mm/trait.StepByOne.html | 18 +- ch6-dev/os/sbi/constant.SBI_CLEAR_IPI.html | 8 - .../os/sbi/constant.SBI_CONSOLE_GETCHAR.html | 8 - .../os/sbi/constant.SBI_CONSOLE_PUTCHAR.html | 8 - .../os/sbi/constant.SBI_REMOTE_FENCE_I.html | 8 - .../sbi/constant.SBI_REMOTE_SFENCE_VMA.html | 8 - .../constant.SBI_REMOTE_SFENCE_VMA_ASID.html | 8 - ch6-dev/os/sbi/constant.SBI_SEND_IPI.html | 8 - ch6-dev/os/sbi/constant.SBI_SET_TIMER.html | 8 - ch6-dev/os/sbi/constant.SBI_SHUTDOWN.html | 8 - ch6-dev/os/sbi/fn.console_getchar.html | 11 +- ch6-dev/os/sbi/fn.console_putchar.html | 11 +- ch6-dev/os/sbi/fn.sbi_call.html | 9 - ch6-dev/os/sbi/fn.set_timer.html | 11 +- ch6-dev/os/sbi/fn.shutdown.html | 11 +- ch6-dev/os/sbi/index.html | 18 +- ch6-dev/os/sbi/sidebar-items.js | 2 +- ch6-dev/os/sidebar-items.js | 2 +- ch6-dev/os/sync/index.html | 17 +- ch6-dev/os/sync/sidebar-items.js | 2 +- ch6-dev/os/sync/struct.RawExclusiveLock.html | 14 + ch6-dev/os/sync/struct.UPSafeCell.html | 41 +- ch6-dev/os/sync/up/index.html | 15 +- ch6-dev/os/sync/up/sidebar-items.js | 2 +- .../os/sync/up/struct.RawExclusiveLock.html | 14 + ch6-dev/os/sync/up/struct.UPSafeCell.html | 41 +- .../os/syscall/constant.SYSCALL_CLOSE.html | 9 +- ch6-dev/os/syscall/constant.SYSCALL_EXEC.html | 9 +- ch6-dev/os/syscall/constant.SYSCALL_EXIT.html | 9 +- ch6-dev/os/syscall/constant.SYSCALL_FORK.html | 9 +- .../os/syscall/constant.SYSCALL_GETPID.html | 9 +- .../os/syscall/constant.SYSCALL_GET_TIME.html | 9 +- ch6-dev/os/syscall/constant.SYSCALL_OPEN.html | 9 +- ch6-dev/os/syscall/constant.SYSCALL_READ.html | 9 +- .../os/syscall/constant.SYSCALL_WAITPID.html | 9 +- .../os/syscall/constant.SYSCALL_WRITE.html | 9 +- .../os/syscall/constant.SYSCALL_YIELD.html | 9 +- ch6-dev/os/syscall/fn.syscall.html | 11 +- ch6-dev/os/syscall/fs/fn.sys_close.html | 9 +- ch6-dev/os/syscall/fs/fn.sys_open.html | 9 +- ch6-dev/os/syscall/fs/fn.sys_read.html | 9 +- ch6-dev/os/syscall/fs/fn.sys_write.html | 9 +- ch6-dev/os/syscall/fs/index.html | 12 +- ch6-dev/os/syscall/fs/sidebar-items.js | 2 +- ch6-dev/os/syscall/index.html | 20 +- ch6-dev/os/syscall/process/fn.sys_exec.html | 9 +- ch6-dev/os/syscall/process/fn.sys_exit.html | 9 +- ch6-dev/os/syscall/process/fn.sys_fork.html | 9 +- .../os/syscall/process/fn.sys_get_time.html | 9 +- ch6-dev/os/syscall/process/fn.sys_getpid.html | 9 +- .../os/syscall/process/fn.sys_waitpid.html | 11 +- ch6-dev/os/syscall/process/fn.sys_yield.html | 9 +- ch6-dev/os/syscall/process/index.html | 13 +- ch6-dev/os/syscall/process/sidebar-items.js | 2 +- ch6-dev/os/syscall/sidebar-items.js | 2 +- ch6-dev/os/task/constant.IDLE_PID.html | 11 +- ch6-dev/os/task/context/index.html | 13 +- ch6-dev/os/task/context/sidebar-items.js | 2 +- .../os/task/context/struct.TaskContext.html | 44 +- ch6-dev/os/task/fn.add_initproc.html | 11 +- ch6-dev/os/task/fn.add_task.html | 11 +- ch6-dev/os/task/fn.current_task.html | 11 +- ch6-dev/os/task/fn.current_trap_cx.html | 11 +- ch6-dev/os/task/fn.current_user_token.html | 11 +- .../os/task/fn.exit_current_and_run_next.html | 11 +- ch6-dev/os/task/fn.fetch_task.html | 11 +- ch6-dev/os/task/fn.pid_alloc.html | 11 +- ch6-dev/os/task/fn.run_tasks.html | 11 +- ch6-dev/os/task/fn.schedule.html | 11 +- .../task/fn.suspend_current_and_run_next.html | 11 +- ch6-dev/os/task/fn.take_current_task.html | 11 +- ch6-dev/os/task/index.html | 49 +- ch6-dev/os/task/manager/fn.add_task.html | 11 +- ch6-dev/os/task/manager/fn.fetch_task.html | 11 +- ch6-dev/os/task/manager/index.html | 16 +- ch6-dev/os/task/manager/sidebar-items.js | 2 +- .../os/task/manager/struct.TASK_MANAGER.html | 34 +- .../os/task/manager/struct.TaskManager.html | 40 +- .../os/task/pid/fn.kernel_stack_position.html | 11 +- ch6-dev/os/task/pid/fn.pid_alloc.html | 11 +- ch6-dev/os/task/pid/index.html | 18 +- ch6-dev/os/task/pid/sidebar-items.js | 2 +- ch6-dev/os/task/pid/struct.KernelStack.html | 40 +- ch6-dev/os/task/pid/struct.PID_ALLOCATOR.html | 34 +- ch6-dev/os/task/pid/struct.PidAllocator.html | 38 +- ch6-dev/os/task/pid/struct.PidHandle.html | 31 +- .../os/task/processor/fn.current_task.html | 11 +- .../os/task/processor/fn.current_trap_cx.html | 11 +- .../task/processor/fn.current_user_token.html | 11 +- ch6-dev/os/task/processor/fn.run_tasks.html | 11 +- ch6-dev/os/task/processor/fn.schedule.html | 11 +- .../task/processor/fn.take_current_task.html | 11 +- ch6-dev/os/task/processor/index.html | 22 +- ch6-dev/os/task/processor/sidebar-items.js | 2 +- .../os/task/processor/struct.PROCESSOR.html | 34 +- .../os/task/processor/struct.Processor.html | 44 +- ch6-dev/os/task/sidebar-items.js | 2 +- ch6-dev/os/task/struct.INITPROC.html | 34 +- ch6-dev/os/task/struct.KernelStack.html | 40 +- ch6-dev/os/task/struct.PidAllocator.html | 38 +- ch6-dev/os/task/struct.PidHandle.html | 31 +- ch6-dev/os/task/struct.Processor.html | 44 +- ch6-dev/os/task/struct.TaskContext.html | 44 +- ch6-dev/os/task/struct.TaskManager.html | 40 +- ch6-dev/os/task/switch/fn.__switch.html | 12 +- ch6-dev/os/task/switch/index.html | 12 +- ch6-dev/os/task/switch/sidebar-items.js | 2 +- ch6-dev/os/task/task/enum.TaskStatus.html | 41 +- ch6-dev/os/task/task/index.html | 13 +- ch6-dev/os/task/task/sidebar-items.js | 2 +- .../os/task/task/struct.TaskControlBlock.html | 30 +- .../task/struct.TaskControlBlockInner.html | 30 +- ch6-dev/os/timer/constant.MSEC_PER_SEC.html | 9 +- ch6-dev/os/timer/constant.TICKS_PER_SEC.html | 9 +- ch6-dev/os/timer/fn.get_time.html | 11 +- ch6-dev/os/timer/fn.get_time_ms.html | 11 +- ch6-dev/os/timer/fn.set_next_trigger.html | 11 +- ch6-dev/os/timer/index.html | 16 +- ch6-dev/os/timer/sidebar-items.js | 2 +- ch6-dev/os/trap/context/index.html | 13 +- ch6-dev/os/trap/context/sidebar-items.js | 2 +- .../os/trap/context/struct.TrapContext.html | 57 +- .../os/trap/fn.enable_timer_interrupt.html | 11 +- ch6-dev/os/trap/fn.init.html | 11 +- ch6-dev/os/trap/fn.set_kernel_trap_entry.html | 9 +- ch6-dev/os/trap/fn.set_user_trap_entry.html | 9 +- ch6-dev/os/trap/fn.trap_from_kernel.html | 13 +- ch6-dev/os/trap/fn.trap_handler.html | 13 +- ch6-dev/os/trap/fn.trap_return.html | 13 +- ch6-dev/os/trap/index.html | 31 +- ch6-dev/os/trap/sidebar-items.js | 2 +- ch6-dev/os/trap/struct.TrapContext.html | 57 +- ch6-dev/rustdoc.css | 1 - ch6-dev/search-index.js | 5 +- ch6-dev/search.js | 2 - ch6-dev/settings.css | 1 - ch6-dev/settings.html | 18 +- ch6-dev/settings.js | 1 - ch6-dev/source-files.js | 3 - ch6-dev/source-script.js | 1 - ch6-dev/src-files.js | 4 + ch6-dev/src/os/boards/qemu.rs.html | 201 +-- ch6-dev/src/os/config.rs.html | 57 +- ch6-dev/src/os/console.rs.html | 117 +- ch6-dev/src/os/drivers/block/mod.rs.html | 107 +- ch6-dev/src/os/drivers/block/sdcard.rs.html | 1536 ----------------- .../src/os/drivers/block/virtio_blk.rs.html | 297 ++-- ch6-dev/src/os/drivers/mod.rs.html | 19 +- ch6-dev/src/os/fs/inode.rs.html | 561 +++--- ch6-dev/src/os/fs/mod.rs.html | 79 +- ch6-dev/src/os/fs/stdio.rs.html | 211 ++- ch6-dev/src/os/lang_items.rs.html | 73 +- ch6-dev/src/os/main.rs.html | 307 ++-- ch6-dev/src/os/mm/address.rs.html | 1097 ++++++------ ch6-dev/src/os/mm/frame_allocator.rs.html | 469 +++-- ch6-dev/src/os/mm/heap_allocator.rs.html | 179 +- ch6-dev/src/os/mm/memory_set.rs.html | 1435 ++++++++------- ch6-dev/src/os/mm/mod.rs.html | 119 +- ch6-dev/src/os/mm/page_table.rs.html | 971 ++++++----- ch6-dev/src/os/sbi.rs.html | 155 +- ch6-dev/src/os/sync/mod.rs.html | 23 +- ch6-dev/src/os/sync/up.rs.html | 155 +- ch6-dev/src/os/syscall/fs.rs.html | 267 ++- ch6-dev/src/os/syscall/mod.rs.html | 181 +- ch6-dev/src/os/syscall/process.rs.html | 339 ++-- ch6-dev/src/os/task/context.rs.html | 121 +- ch6-dev/src/os/task/manager.rs.html | 151 +- ch6-dev/src/os/task/mod.rs.html | 465 +++-- ch6-dev/src/os/task/pid.rs.html | 391 +++-- ch6-dev/src/os/task/processor.rs.html | 343 ++-- ch6-dev/src/os/task/switch.rs.html | 37 +- ch6-dev/src/os/task/task.rs.html | 719 ++++---- ch6-dev/src/os/timer.rs.html | 79 +- ch6-dev/src/os/trap/context.rs.html | 191 +- ch6-dev/src/os/trap/mod.rs.html | 489 +++--- .../COPYRIGHT-23e9bde6c69aea69.txt} | 14 +- .../FiraSans-LICENSE-db4b642586e02d97.txt} | 4 + .../FiraSans-Medium-8f9a781e4970d388.woff2} | Bin .../FiraSans-Regular-018c141bf0843ffd.woff2} | Bin .../LICENSE-APACHE-b91fa81cba47b86a.txt} | 0 .../LICENSE-MIT-65090b722b3f6c56.txt} | 0 ...numBarunGothic-0f09457c7a19b7c6.ttf.woff2} | Bin ...mBarunGothic-LICENSE-18c5adf4b52b4041.txt} | 4 + ...urceCodePro-It-1cc31594bf4f1f79.ttf.woff2} | Bin ...ourceCodePro-LICENSE-d180d465a756484a.txt} | 4 + ...odePro-Regular-562dcc5011b6de7d.ttf.woff2} | Bin ...dePro-Semibold-d899c5a5c4aeb14a.ttf.woff2} | Bin ...urceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 | Bin 0 -> 81540 bytes ...SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 | Bin 0 -> 59716 bytes .../SourceSerif4-LICENSE-3bb119e13b1258b7.md} | 5 + ...eSerif4-Regular-46f98efaafac5295.ttf.woff2 | Bin 0 -> 76260 bytes .../clipboard-7571035ce49a181d.svg} | 0 .../favicon-16x16-8b506e7a72182f1c.png} | Bin .../favicon-2c020d218678b618.svg} | 0 .../favicon-32x32-422f7d1d52889060.png} | Bin ch6-dev/static.files/main-c5bd66d33317d69f.js | 12 + .../normalize-76eba96aa4d2e634.css} | 0 .../noscript-5d8b3c7633ad77ba.css | 1 + .../rust-logo-151179464ae7ed46.svg} | 0 .../static.files/rustdoc-fa3bb1812debf86c.css | 10 + .../scrape-examples-ef1e698c1d417c0c.js | 1 + .../static.files/search-5f5ec5419eadd0c9.js | 5 + .../static.files/settings-74424d7eec62a23e.js | 17 + .../src-script-3280b574d94e47b4.js | 1 + .../static.files/storage-fec3eaa3851e447d.js | 1 + .../static.files/wheel-7b819b6101059cd0.svg | 1 + ch6-dev/storage.js | 1 - ch6-dev/toggle-minus.svg | 1 - ch6-dev/toggle-plus.svg | 1 - ch6-dev/wheel.svg | 1 - 456 files changed, 7546 insertions(+), 11943 deletions(-) mode change 100755 => 100644 ch6-dev/.lock delete mode 100644 ch6-dev/FiraSans-Medium.woff delete mode 100644 ch6-dev/FiraSans-Regular.woff delete mode 100644 ch6-dev/NanumBarunGothic.ttf.woff delete mode 100644 ch6-dev/SourceCodePro-It.ttf.woff delete mode 100644 ch6-dev/SourceCodePro-Regular.ttf.woff delete mode 100644 ch6-dev/SourceCodePro-Semibold.ttf.woff delete mode 100644 ch6-dev/SourceSerif4-Bold.ttf.woff delete mode 100644 ch6-dev/SourceSerif4-Bold.ttf.woff2 delete mode 100644 ch6-dev/SourceSerif4-It.ttf.woff delete mode 100644 ch6-dev/SourceSerif4-It.ttf.woff2 delete mode 100644 ch6-dev/SourceSerif4-Regular.ttf.woff delete mode 100644 ch6-dev/SourceSerif4-Regular.ttf.woff2 delete mode 100644 ch6-dev/ayu.css delete mode 100644 ch6-dev/brush.svg delete mode 100644 ch6-dev/dark.css delete mode 100644 ch6-dev/down-arrow.svg create mode 100644 ch6-dev/help.html create mode 100644 ch6-dev/implementors/lock_api/mutex/trait.RawMutex.js delete mode 100644 ch6-dev/implementors/os/board/trait.QEMUExit.js create mode 100644 ch6-dev/implementors/virtio_drivers/hal/trait.Hal.js delete mode 100644 ch6-dev/light.css delete mode 100644 ch6-dev/main.js delete mode 100644 ch6-dev/noscript.css delete mode 100644 ch6-dev/os/board/constant.EXIT_FAILURE.html delete mode 100644 ch6-dev/os/board/constant.EXIT_FAILURE_FLAG.html delete mode 100644 ch6-dev/os/board/constant.EXIT_RESET.html delete mode 100644 ch6-dev/os/board/constant.EXIT_SUCCESS.html delete mode 100644 ch6-dev/os/board/constant.QEMU_EXIT_HANDLE.html delete mode 100644 ch6-dev/os/board/constant.VIRT_TEST.html delete mode 100644 ch6-dev/os/board/fn.exit_code_encode.html delete mode 100644 ch6-dev/os/board/struct.RISCV64.html delete mode 100644 ch6-dev/os/board/trait.QEMUExit.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_CS.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/constant.SEC_LEN.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/enum.CMD.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/enum.InitError.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/fn.init_sdcard.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/fn.io_init.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/index.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/sidebar-items.js delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.PERIPHERALS.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.SDCard.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.SDCardCID.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.SDCardCSD.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.SDCardInfo.html delete mode 100644 ch6-dev/os/drivers/block/sdcard/struct.SDCardWrapper.html delete mode 100644 ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html delete mode 100644 ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html delete mode 100644 ch6-dev/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html delete mode 100644 ch6-dev/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html create mode 100644 ch6-dev/os/drivers/block/virtio_blk/struct.VirtioHal.html create mode 100644 ch6-dev/os/fs/inode/constant.BLOCK_CACHE_SIZE.html create mode 100644 ch6-dev/os/fs/inode/type.InodeType.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_CLEAR_IPI.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_CONSOLE_GETCHAR.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_REMOTE_FENCE_I.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_SEND_IPI.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_SET_TIMER.html delete mode 100644 ch6-dev/os/sbi/constant.SBI_SHUTDOWN.html delete mode 100644 ch6-dev/os/sbi/fn.sbi_call.html create mode 100644 ch6-dev/os/sync/struct.RawExclusiveLock.html create mode 100644 ch6-dev/os/sync/up/struct.RawExclusiveLock.html delete mode 100644 ch6-dev/rustdoc.css delete mode 100644 ch6-dev/search.js delete mode 100644 ch6-dev/settings.css delete mode 100644 ch6-dev/settings.js delete mode 100644 ch6-dev/source-files.js delete mode 100644 ch6-dev/source-script.js create mode 100644 ch6-dev/src-files.js delete mode 100644 ch6-dev/src/os/drivers/block/sdcard.rs.html rename ch6-dev/{COPYRIGHT.txt => static.files/COPYRIGHT-23e9bde6c69aea69.txt} (83%) rename ch6-dev/{FiraSans-LICENSE.txt => static.files/FiraSans-LICENSE-db4b642586e02d97.txt} (99%) rename ch6-dev/{FiraSans-Medium.woff2 => static.files/FiraSans-Medium-8f9a781e4970d388.woff2} (100%) rename ch6-dev/{FiraSans-Regular.woff2 => static.files/FiraSans-Regular-018c141bf0843ffd.woff2} (100%) rename ch6-dev/{LICENSE-APACHE.txt => static.files/LICENSE-APACHE-b91fa81cba47b86a.txt} (100%) rename ch6-dev/{LICENSE-MIT.txt => static.files/LICENSE-MIT-65090b722b3f6c56.txt} (100%) rename ch6-dev/{NanumBarunGothic.ttf.woff2 => static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2} (100%) rename ch6-dev/{NanumBarunGothic-LICENSE.txt => static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt} (99%) rename ch6-dev/{SourceCodePro-It.ttf.woff2 => static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2} (100%) rename ch6-dev/{SourceCodePro-LICENSE.txt => static.files/SourceCodePro-LICENSE-d180d465a756484a.txt} (99%) rename ch6-dev/{SourceCodePro-Regular.ttf.woff2 => static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2} (100%) rename ch6-dev/{SourceCodePro-Semibold.ttf.woff2 => static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2} (100%) create mode 100644 ch6-dev/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 create mode 100644 ch6-dev/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 rename ch6-dev/{SourceSerif4-LICENSE.md => static.files/SourceSerif4-LICENSE-3bb119e13b1258b7.md} (94%) create mode 100644 ch6-dev/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 rename ch6-dev/{clipboard.svg => static.files/clipboard-7571035ce49a181d.svg} (100%) rename ch6-dev/{favicon-16x16.png => static.files/favicon-16x16-8b506e7a72182f1c.png} (100%) rename ch6-dev/{favicon.svg => static.files/favicon-2c020d218678b618.svg} (100%) rename ch6-dev/{favicon-32x32.png => static.files/favicon-32x32-422f7d1d52889060.png} (100%) create mode 100644 ch6-dev/static.files/main-c5bd66d33317d69f.js rename ch6-dev/{normalize.css => static.files/normalize-76eba96aa4d2e634.css} (100%) create mode 100644 ch6-dev/static.files/noscript-5d8b3c7633ad77ba.css rename ch6-dev/{rust-logo.svg => static.files/rust-logo-151179464ae7ed46.svg} (100%) create mode 100644 ch6-dev/static.files/rustdoc-fa3bb1812debf86c.css create mode 100644 ch6-dev/static.files/scrape-examples-ef1e698c1d417c0c.js create mode 100644 ch6-dev/static.files/search-5f5ec5419eadd0c9.js create mode 100644 ch6-dev/static.files/settings-74424d7eec62a23e.js create mode 100644 ch6-dev/static.files/src-script-3280b574d94e47b4.js create mode 100644 ch6-dev/static.files/storage-fec3eaa3851e447d.js create mode 100644 ch6-dev/static.files/wheel-7b819b6101059cd0.svg delete mode 100644 ch6-dev/storage.js delete mode 100644 ch6-dev/toggle-minus.svg delete mode 100644 ch6-dev/toggle-plus.svg delete mode 100644 ch6-dev/wheel.svg diff --git a/ch6-dev/.lock b/ch6-dev/.lock old mode 100755 new mode 100644 diff --git a/ch6-dev/FiraSans-Medium.woff b/ch6-dev/FiraSans-Medium.woff deleted file mode 100644 index 7d742c5fb7d4597ae140f8418f52ffe03dc75343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186824 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

W=jJ>x1=hAmW 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 K4`YsgT&eiD=t+k3M&gZ?bM{*ho&j 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 z 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 diff --git a/ch6-dev/FiraSans-Regular.woff b/ch6-dev/FiraSans-Regular.woff deleted file mode 100644 index d8e0363f4e1a000568d782653291e14c66ee3485..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183268 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⋘6;xf~32d$0yk&7>f75=aNfY{aX;P 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ȫt(PxR${=poRw4*a?_M2*akmH!V-Xt0A{c`H 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�mPX# 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�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 (}T-D1^GP<^82Uij;8#+ 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

sGP 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Ɋz2 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 diff --git a/ch6-dev/SourceCodePro-Semibold.ttf.woff b/ch6-dev/SourceCodePro-Semibold.ttf.woff deleted file mode 100644 index 61bc67b80252dc41fef75b08604adc1a09c34761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68080 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 Dg^bl@ diff --git a/ch6-dev/SourceSerif4-Bold.ttf.woff b/ch6-dev/SourceSerif4-Bold.ttf.woff deleted file mode 100644 index 8ad41888e6e3f9f4439052ae6b14ece2cdfcd7cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110552 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Ǭ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 N>ZPvCW|kqQ1ONsnDE9yW diff --git a/ch6-dev/SourceSerif4-It.ttf.woff b/ch6-dev/SourceSerif4-It.ttf.woff deleted file mode 100644 index 2a34b5c42a8aaca17a3c6a37a33489ab0cf2193f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78108 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 Ef5?p+(f|Me diff --git a/ch6-dev/SourceSerif4-It.ttf.woff2 b/ch6-dev/SourceSerif4-It.ttf.woff2 deleted file mode 100644 index 1cbc021a3aa22e1469542d531e9115fb78d497ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59860 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 diff --git a/ch6-dev/SourceSerif4-Regular.ttf.woff b/ch6-dev/SourceSerif4-Regular.ttf.woff deleted file mode 100644 index 45a5521ab0c77a02ebf55a3f7305faccc02e2894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103604 zcmZsCV{|1!)9}s4cCvA@v7KyeJK5N_ZQItywr$(?#y7V0<#}=5Ki|yMX;yW0_jGkn zRgJ5hs3-sg004j_H3AU7L(tDk0ND5a|G5MOltcg^uzKG`qW=M7V(l(rB?+-_+{*7X z)c*j8n6StLDaH!am~(9;{u_-kmbZwCOtm;nGN0ssKTzk=#gWm7A6699nx zyWY4L0AyM(_zip1%vj&(8&~ZckL^D|Aj)H5_MQ2i7x$ee{00)(4LDOXYbUpFzDT}V z7W{5|^RlaK*vi)MyB_X$KVS*I!LG{w*R-|1+jqMlwcmKS|G@_z0i4_DTN?uax8mOe zmGaG#EUT&?h@GvY69Dk=4*)>-0RY$^!tty={%cIZKp<$lz$A1LxgP+apule$fK3Ka z$NviHA56cHK6{`#LC?O^pnxC$$prx1Kn(Sa^z?RLTH^iv_s4wwzZ7vj{eDsSIdcIb zPa#zPr+jOAcCdFmZnziWfC$tC!URCY1JdROLL1xy0-}coaYees7jTV%go#95r;H_5 zF5L@v#27h=dC6cs77pM!#ZLR6!SPT8eTWDSEhleRV)(?86{UtaxH~zt2dA%>JorJ# z&I20W1prTjQ~u^@C>1oWlH)1Vcg)lJ-mb;dO83vs!{w&NMzi(*KF)7n2Y*hhJ}pd- z2CB+@m3f>K79?aH;-=4@793u+ZcEHdchoO@RGnYM;w<~6TLrZxL@#W_R*SBy_)xbb zE#wds5`8i8jo#;h0o*8*tZz+8H#N5#;Mh6bxi_B-(YGBH{p^(cpDLlc;^>#mMml&l z7*@F&e9{j-&i7U0?Fs!$-P7ynV}0+<2rLXf3QI2t!@A`fu7T~F{n+8v{U3BMJ$kq< zByA%}O?PlVpwnU_#JyD}Ga8~_y7>}N4h6M-4U!ijpXPNDgrE=E6VePbPJ;@aLq;A% zq^Wunu|7?(j;rHipx!yuLbd5c9lrC+BMzx;TS4`ej8srBj$6qu?bwcy9GHF$&IEbE zG;zGCX+J?e=)gVbK&Z!A(oPDR5NZyVQsi9+M!JHpdV^GgT#&u>UnaVh+)FS?l8)X_ zW6>l`?eQ#QZd!lTV;^h9G}t`}fa!u`T@48A)1T5f&R&H$ zpU{Ki^aXzm=%4tH%xT6P;VDt$mlVHeAue_vR)2%1q zm(l0W{m#~Oh?S^zgwng{a!2+xj~D;tx7dqjOLZV1ag4<%Iz@^@ zu1gQ7@>n0A@sNO>JD61gK@s0XRDt`aT`oT7m+9zbU*XoY-u(G}DJyU*LIZ(nGhiL6 z{y>@e073)uHK!%0vtmKEtWz0PTVQH9bHR`{L)-S(+q?5v^42awv>hh% z(~qTg)wq$q&+FVJg{IFS!Cg#O#CBrk3sn-E9Hh+DpK?0~GNVg#S<+g(!rKLPKDN=$ zE9Q+INNqf?dRJyLc2dX%LPe5sf`g&qC4%mmk#=J-z?76U&&s)NI>1U9CLUPW~TnjTH?VtmYjM)zH%{qT7u2 zH<=FxppIy3#=13N-_XO4RU1co8yfirE(;p@j6VyahD6m?mW_B+m7gb$n78$C+pns+ z;N53zFJ)QV8_Gh{Eo8oW2oG>*&YKs54z+|Q2^XsoZr z2BxsF-pzgJ9!Yo9jwT#gu)n6vyPbenDlc(k7I+D}G%ct(sIygwIAx?SND{>w=YDk@ z4Ly{W5>rGW@&w(X3Es7D;5{E<(FOZHwZ?3h0#CW#uF;5hL|YvfFK20(=ZxMP4L!B& zUw&(~H!0M5p1a<*Y-%gLD!tvY6{Y)mlO3r$cNtb!KwXw??E+3;hIW2fnnLJL)Pu{} z-ZZ>8FX9bNpC6uaXt(p-kuAF|DqhXlp6UZ$ad$g<`>t+?y2=F;W`AC7=#}VJO=&${ zhuNQKJT1R+p~ujgHafaUFU1meK-<_jANw^N5QmrtyEaw_>N?0@Ye$5c`ajqGAFODu z?(eyRyH+)C{<(=VX!f?kb!V8ophEMCvNJ|gN_p%~(_T7_bbeGcQ`Th}zfjk>K+K+V#iqg1Nt8CQ$h z#FL~w`q<0Z$O$|5ms}0`q#o~})er5b>0xU>87F6E8PbI#zvgn+a{wRitgz87k(^!` z$d*b>{{0qkF!@KuX{TcI9PY;$9Em4A8IKer&$qNcAh0SvYW#>;CnD%`rEH2{{-v#{ zuz~r~O21C{;2YJ~iRpW8I= zit-C)H64Y;d5WmS5agzfkun#?E~#9fbVbaqF?dfcuXQwxeb}g!wV5;W4ayM82J?1k zXiwxxCa7m{lr5gtokM$ST6V6nq1a!^+b%>nSp@E=Y^$L(ul(e)y$|%o zRR>?p&vNGR);JKz&bV<)8q}u+(@ThUbP4M({-}cSW*5^r&IGc5w zxjFUXXJm9Eeywq?6w%}7FXy(L!UN_pTG|uDR0Qb3cmPB4O> zc#mVb*iMgBiYg5M`|yCnjQSnvAlFWwUS(!H-C8_d+JD-ve%N~3QHs>nCjc-4C>c{_Yi`gacB-H$X^&;vom( z{z>A&i{gQeKP1SKaJ*{xIa~FJc&u7?1t5a@BN>c@$&5rXj6~Rs#1IaI=?+Bk4@7tm zFyjmJ9boy9{|Gp<46@MlGI|Bm->`NMvAabgMopLwH~f&sPpcRQ6j`j(?ty zfZ$S49x|&_R*_gt%1|D%!^ zYIzUmo6tuSBt{cPW#QMo7xKOD!<__Wz!9@U3r$xNi5^~5!&Wu4P~4?l(&#FG^gD#PCZW@aFCuJGlotr zv0xEiuqZWI#?8=tJA=x~UvNsPo`rAMmIEqxl_1{7hg8gvuyDvoEiB)&J5DJ!j9W2v zO!7L8{$*jG1if4Ivi4!=X&-N=>L~B9Xgh7iZp&y-X-nxqP=}^%Ic%!e5UEN~F|Mdu zTEMoQYCO__t&*!+agpXq!JCn_DXF8~FbrL5JMVNs?nu*~uC{t=hTI^&7<+{C4DMRj zF}1B_-_X3sdc=Rr^&aFsl0B6@Y2LzjP2&pf$nFUCtoE!E<7VW6=8@nY<1yz>A+IP& zC`m5qa&2=>bvNklBbST?xoUC zuFFu{s#I8pvy`3PchJO*wLcejq2kK2-q7JH$r_=@v3{6Q28#FZ*@$$!vGa2rvo**!b<_2pl0|lEN6J z2FS;TSfr&az-U0vy*$JHCUmRLb8dvry+FdVKAHuA(#h+(P6ZO;wOwWV2i>sbm zXjkAkS6r?HdT7c05Riook6`AjIDW|2S?=)A?U_}5?HgpX2k9LYWiV;su#nAYILdE} z0;Vkpd=iNx(~H1|C(0ag>`fM*)CRi+#yXc&rX zoQ&=qAn1lk8FKPCXm_F%FY+dY*s^8^Ns{xX5<6C(F#e)#dgJjM9qRqo>%_DR!!w4>e zE-t-3kAu9Ay)v?W_6Ysv2m{av!x9L6ln6uCvIC&g!`|Gxg3ql#k+lYG)cQhNC+#T$ zbs5vt>(W^5Lk8^q3+z*f?P7@SvkPW}%^8!6Y7?{U{JM-XCKHG1|7?$*m3G4`6xbVu zOs0}z>!Mm1$dr$<78NfyW{7BK=xk-EGoN^A=h8YgH!rHJYiyW9W>s1@cE!xkaf*(d zqT!VVI@Kb~<#9@fLT2jc$E-keO3h7B*YFwkLT%$Fwuwu8_vF`nOS@MP}Vx`k~*|1nQjpk=$OuP;1&4R|tc@t$m z$U1mgIgI{F$AvR#n~dYC6T&LQGRo&L&PCJR7en%x8`8k)V-faz`GY zULJ&A0l7vVVMYO$FPFqekn%lh{u!L~ns}X&W1ShClYvx&30Z>~dYyrCoe4{Wkuijc zD}(`u*U+2B6qH7vmc|gztH1p@>7h2MsV*V9HbbU1M5Zofsx~6pKHktS+|WLF-#!}E zJ}c2KFws64^*ZhDI?NGy`sMjA>~p_+7lMtwE$^k>J7w$C2Mr}D`c8Vg7q(#wZVDWe za=jEnI%$V-$vKlUX_glq@?NUA`!8O1s+ohlzlo8z{M`wdT6gwO`x@0^P=G?uP`yHC z02j;;J4g^>5Vy~PTkc-Jcu@s3pSzj$ChHcQywW?#wK3h~`n2A<{T{FW!sI8RDDw-k*X%z&W2xBoXEp5!!CwM{gf6H|0ydbDK01`Aub>$ z_5K@=m_S@&ozt3MOvBPu}N`0%sV;a(}D`Q$%va&`h(|SM0T&W zBNEl;oL6=?O8uUMhkCBz9+$43c}@!Dp&*s?HB6^Z`4RIT+orasn4Pq;xP|03c6*q| z#o0qQU-sT#_~S$5f1AB10sBYE$HEoss-afGB3cBv~f z@gu7DGB`K+BdGT_mJZTedNAfTZ8&Sb zZHMYjj2h}|wI|+HIBW4$$I7+8n$l~YCn!O9Qz1cz>vgyq&TE+`K~A`HZcaz+O|Y8g zYtb7(w@vP*Y1RHU8pqFe$Ybsb?$Wc)<{t71-3RSV#@AtI-?VP-9#a*mCn7qpr%mu# z+Y0w%0DU;e!0<%38tM}xQ~1lC^txu1n*~_1OneVpaUCLD|`A6w%o}1EJE$ z&t8%`XQz70m#<4C^p-UHyHbRIsMO1*eROqo5M4>}l{MaGCNh+TDhZ@;|^O}6`p@8!uKRb(4)*LSF zEGVtEK%;~9EVi`*)P**qlhe@LShBF`3WPQTSdQV(;eUux&LWJ{$-QpUf`-!H?1M|m z!$@fpzsD|>MzdCPEVrwug+7@1!&kGqw7aZctQ*#x`F&IqBXE7*F%CqYbKH|27(V5_ zD1>=OVI;e;(jK7{ln+{(v8IA8k?KfUwiW_uZaCM6NQG3xR~BsOI6Ndf{U04DXEpbt z8)K!yyHRZOKeVXeQrwvF_7n|E2Q`5VsSt*w+ma(~jcF7&Y@B0714iL33zT#`#gd(Y zvW{2`N_$yODHCCBC|CJ+T4XfCC^1*XQrad~PU^K1dtFWq6A{)ZR|Ol|Z0B)qd|M~= zhN**)K$}!hF%n+!*!I7_iEfBI<`4TR!x0x2=-BDRy@GU{-0ej63hv7%EK`n9p{IbD zC>aa%H|QOtAF_ftuYo}b_hQglz=DJW5C|j|hC z6XzNYc+5F(7Fin9Tr)(tNvG)9GBA+n#fPlmXh}YOVI!l9LOgVlUBhr zG&+CM60=38pwr7tgv*p14o%F%7%-cO+&DDGuVSpLb)sAUYEEWDx0T5Zw=S3(+L*;K z@HCUUk!?&~)mhi*WWM<266S(_CDIX&SG+akxqxi&1Qfq9cS>5d=G5?F!XtJ`jX}?m zED7hyUl=k~VDuC*jik@N8}ghtHh2TV)WJ9vtzJ1LtBJI0oFlf2R7l^+Xpu!E8$QaQOVxp@w;CgNYO6oA&#RRTvNL zPW&#S=CEzF8UfpI+Psz_%Q-FssT1v+_518qCJ)_C1aHFTG+wkC34-vd{MaF!S#kqQ zpwf-#efp}#t5zqYH&Js;H=3=WZg^F3%@EE!yFn^Y^G4x5Yt{Hw$BX5I&?VW2jyJ`J z$R*2%k~iCj)Fse|me=2h*d@`2nm68u+$GwFo;T)`@GsV%*<;iv9q$Z{F~3oR_=Y(eG~~(1bJ80=w$eK$_5|E|-H>mIJyPlibu{@Wq)eFb zd5xLD&6SxViJ`AhVx+H}(ywH7aek%9FOda_!F86dXUhzsUl(~Cq_}x)@u45ov_btQ zpP;l<$Y--mD31%brK4SR7eqwx7nJ%;7lHoga848PWX`^)fB?j0XB-)hv zc-qAJJlc@hY_rkd`})*s|7XtziB%C-U1V4EWuML?f(L&;z6Vn1Y6nmO+VjL7`fXBi zDE>NVI5jNU{0Fpzxg<2DnFaKixkvbHl1b`y(y}PtBlP;usnrr79P|uO8k!zR16>2O zg0=;6L(iOeLDQf7fUY?agtnbhgoJ)FHwu@JAC9|D8&0?m8&0vy9!{*yAxp3eCri1G zBTKc5HHp9WQ;D++ZH}{xY!=XbWNmPwCh08bsLlKU-wORWuK^#{Udqf@{sNK z^ib%B^pNPMH#sr{znx->^@+F9lM>oP5%>fF(8x|MmU zRMV)srg`ykZ?F4!_J;G(<&TsEM+M;=m?E&Erz;*()Ste4NTIw)&WT)MU-V2Ma1G$+ zf&vHJZ#46$R%~sYdjFr0Znn-*+WEGzvP0nPN3RVVHsq==Ygya0IH+}1c`v(m)bdR7 z9+B8baDHUXO`9LLTedH4eO_9)cD#)x>X6%JwM=jwY2RMD*L2#Fa7sweqecS8#3bV_ z3X#plJmU3@P}0Rz<|dsWv<2B`dG5iw`s?dNEAh^TLh2-}@HK~;>x9n#+CKNs?5AE= zJj1`U`5^j+@%82G*Zf;+n{m7`=tRlsOTB)2ZwVt-45P{SS0h;t*WQc!O>Przx~CM! zM1lPW?i2zw(6CQ63?iHmFAa&G)(j#mmmn&@ycTM?kM1`_>OcI>0NbBVmNDKri z{T8cG8~XIPA&GYQ)&16PP&2!@Y8;yw z-SEEUYUPdP)z}q}l(-PSDyS?6Z*%9$lIQE2$6O9~!=~ zgJC4$Mq#VSQSanX__>=f`2ausCGJw|OaciqEV=ugivKmoy0}_ybfu~xR}?QTo|-*0 ziE1cS1utuyb!qqE8(h`;~o=)GZ*2E*D*rE5+RFM zH$qky=>~&^G`8cvc48n(VhzeO$&1bt&Inh@2zNV5Io2!ea zB%&LUs*5bAMC*sTS?GkV94b9Kdj=TpXa>Pwa` zVak-QRUAiY{7z?Q8y z$<6pV0PBX=#kh@Po9Wu$ar_bdE|2Y{mkYBPY%+`Q(aZl6JW(HkCfKt;mHFz;#PO|nbFQj<}b3z$?muHCHogLsvA#(1&0 zUvu4aU3J`bW>&K2=G?a2*gIH!_Q!^!KqNKzUnl>@DaHLt$I;194 zC9}-KRiM2S@+kS1{4w@Q(G_A}D+SQs@tWU-thjy->TSV>$fgn z91j}?+utRlRlst!8a;G^r0ArHq=4J3@^Xvf2zfl!F4Y!=8b#A3-#i~Ah&3VzNq(k# z=vPS0kcok&-6K2G-v~SWRD^i(q@&nif^cD=yYbQAn-_`(6m4*fD0xA{9K*Q&1>;Yy z!m^q^mQa=wmQLff>)l`nvgz-aU`ZfIQpoE zXy$0xXzFMfVv|nmQ>*z5-ptT+p`($M<&+_e_4=LLjtQSB zg+7G=`)T!g^|`juF%G`Akk;YW%Ic2ll1nz5BCezEeV;w`!?knwE4(uqPrg0po8V_j z?nv8_r~R6nnZe%%*vMq~@!H}MouW;}D)QV9>6a3Sg<|vgoZ>kpH49HC$M>Elgs6tX zCOD2^RejU??vF7wel@|i?N`Y?Ej!0w_(1$xh-QdvaB7GW$m7uRV2@CQP}$JT;EiC< zV8~#x;F4g>VAbGQVF%G-QT}gnVC&?zh+bsaWEg2sVL-m0ynnGzy@#`B_AdOcny>vs z>aP@r?4xW(;^m*}KNE}3i|32Ci}uxU?EaYpRsRnqeyd)7`EM6RYFy|9{!6}>k`I;d=5r6V8;qVNECA5X{{8lN z+Wz<9hRv|C#U>(mOvZY;`O8(dgIqHQnEfvJO1yy#`>VisF2hWzk$4>v&tFymGncHA zg$++LO2JLVi@^u(OBjx97}XUzz)g;ga3nERf;>5RT&}6aLt&uw?oXJ9=t@5MtRoQp z9s_$8;gxG45Uc;(^!E|YMl#;0jUi&)@oH+uW5x%z$cAu-m?b1@pH?l(|8#>800^xv zt1h@~zpU#{@k!p+H`80S_-*#v@>ze<_^(-~ZDEv&661o?g24hUs>OWzU4~RfMTTi6 zLAtIwr&@~UFyD5Sx<}u(Ht7PCMyQX(#x8z#&B}iVOl#&Ha6zVR>xSvx$vlq4;38g#yE8Kl> zdGBkF(>~Kpy_1$V#X%~#$bFs%I$13|F&E7_+Wx|I%X#R)!vWDf>s_9W0z8Rsocl0n zFEm+?b``2QAWKi~H&RS6^RA-XPu?IDuL?Fr%yMdFt)+4dR~1*CCv(?crM`x~{kxPW zm8az=wkNvB>PMT$%g2Q7^X~U>JW!_j8u{(935(o* zkeJ8Qr8J|RE^c+5UA}EDyXKtny1J%1y1Kf0S0B5|*e1xUyU3La`%HP=MSC&Bt3*8* z{?rNHiKb*ARS7s@APyOt;&tpDp_ugg%K|ChP4FSviuPjbwp)BI(=TS*3ew}Lul??P zfE-}k73_oJ{o%|2lEUzA@ebnFjYdP_{!2DaMK{6J4BcFL5PfK1r{>Ei_4< zby~?}nfIzf5Yl9EGE`^?clRKsyM~7SDk#!o2+tr>q$XqCx7m>JgSNYV&4u4F8E-MH z2N@0=Xg1sl)wbqkbVtP-38*FmMr7Q7_ZlBUaaLIHZ2)#O?a%nzv3$V_KUJi`1IL6h zVn?h!FVyq0K167(joq{( z#t4zOhtmN?6u`i3Izm`wD$ojw1m{Y~Li}#i^wMK>!u@y2VdCh{y$$rXpYD(}dHmRz zlJ@2&;;vy@;Y@h|j*9q9AACzp)OIsvNAr*R#L?!g5?!FR*7qm@lj2FQaKZAihQ9W4b31@<73l+Bk8JU5+_F^ffdh$|uZX%-Y z;B122+ zl+4k+WV8dnm|y!ni5qK8H{OUp5cAaMj6eDx+!QJN(}365=;S|VNBp`Mnb`$qkn*2~ z{(z+}O-5_dLi`Ok-sKEfNCK(e`mLebVac8Sb3<9P!;uC#)G(jgqCunsCA^v{q4Ja| zWF$5U0YAGEMh-V*{|^fW!J3Xzmp2PO!IqA8gEvXcp>j0jPLmp-6O%NTzc1M-51X(U zA+NY>n`jrhu;;w~G?I-x1zjIeTw_VN+Aue5gIR}1GiyCTBg-tFIP)0l+W&`aVJTXL zxls7TtxN!CB{ku5@N2mEgnx4pl2dlh09S)(v9zUaF>Kjqg9}>`PM6PuA~)M6OSSbG zrOJy886`}lZy$ZUiN=q7yJg0szAA?nM&$R&IF^`Si_Ei$sF$L~Z-@x7!WPoWJi`F2 z=#*O0KM9%*n+Kj5G0hK4OY8&UIOW=wG!iAYRJ##LvR_@ere-~j)w%SmLr=4@ggSBL zD82fdQXuh3jv^|`^_7xEv@?0^!3mEz^^`)wZ_O4t{t z%uz*RKUG*-w}i_yN<2@K;r2|0Y$brF>uYh$)97FKBgWZBzFw|`gShK zpgSIMosZ)Ex>R!!vwW+D;|;>iMB3xrCoWL@f{nH5sw{rpOvgiFf^YoukvH5O|FAi2 zNI@++3$^8*$>N;F#$cIf%ao*B5+ zAxv&#d)bL`#t5zn-d&#S#!K)^z3idVi|N~)L7A+%ow3vsD@!pyL#`IWc**8eo$TaF z1$V$Eu)~1HFJTcb;yz7-OjHs)P~iUO`=K#0?>_H+vC)DLTF!=7SI0VTvMkjvyHC#f z>bsHo530IL0oF!>0=3qV8yzAwu+P=wsr@n1j;cCbFK;&^cV!+rF$XR3Xp^VGo)#@C z;U^I`%U8TjNCHd|-=r8=4v_QdKWiiocABw;H+<%{M9s_3vNIRys zw$932LX1@d!aoDhheE2hytgnCyZ=~IR-tucz?Loc(0T0-;T1YIWw?cMSV_l1kiThg*x(fx8^RD{Bmp3GAYz23!Eg7^dMWUL-T&U3X+z^wVJrco0 zAJB~%ANsG?4x;GW2$S9@g zw%PmZGhXMzKxNloj2x+FTJ+q}C4`dyWLF{H?#WFMC3mQGH!Z^WJ1f^d%#Bu3h;dDw#hMx`NHFglxpI0PB7oENvQP;BKw{Wb z3+C25^p#fx*Hd&xs+djMl`M=^dj~61Ig)LhmTh4T@%3dVMUv;?tUNV zV@M&l304;lDO@SnQ+VPGrG=t+N=8;EYotLl;#aIa`3BKBt&3akn%1-t*|Ivjp!0l6 z2SLaP6n6caK#SlESE=8Xj=wY`TgEI$4GEd`(qI{68>rIvUROz#Msj=MecF7{G;<@k zU>f+x@$LyK`W|&Hf|3`UlNDrUMDxwP?ObGv)hp3kXF|B61%hr>`;e01N0XUlmF+1h zlR&Mw(IQ15P1z<64WXpv4ck~{H7waDD>t#tB{;j-N6|@{`*8duo-3t4>1{#pklTuP z5m5871A?<38tS|hj;n&jvr8z3z9IpiR;c7>-N>*2uTRK`yZI`ithLFDt2zo;AVSJsE zWU8}ve%Z6^5?zbLDq~Dz7%XY2)A8rv+7>C|GEk=G(1(IFAezAPgwT3zK3mTya`uKrA1*JN%;RD5FaR8dXFrUu$zgnE-nUb+CF4#Toq2SlUENhNPD3$8?p!gDG(`*hGh2BAOe@LE&^zIh; zzghUKbhyhM&u~3W)2(UHZ<4MpK=1G~X1QHumQwXZV)|>VZdXe#gFwg*63>V?OJs{V z6UgX#8b9T%FE5dFbT8Ts+$`&w94#p4dtWr@qCu{);#GO{=swLKH`<+zUq&4?p^Wsl zn~qt!Z%!D4JdEDC!|3tdtu1=jrCa&Yn~1|2Q$B{kiO}C%#puq*iPk)SXy~7>z6hjF znKWZ?d8pyN)~^%HLdo&I0YXTwazJq1g-Vp8TJs`p<+Mic(8UC!r;&Z`lw1Xc3MyPN zx6Uyib*}-%aXV1dE&|6Xl2_RKFn_K!(&WJd9f%?kHo6}U;rm-uddPfg7d5Z!*R9C9 z7TQI$vL zYO;tJ2Ibs&;h>JN0*QzOnzGE8!$C&tkivnB3JOQpx@pPN*~j0ruBUC!nor%UF5so> zv}4=$RVg0^EP_92YR6>9lPu;7bLX=O0{|khZ?dDkYF9en&|usA0^x}q$->YIg97Jt zgJo~vg?V7}N`vi)YUPjTkm0Yoi_Bm2lMAV@hBH$!MeaHDi^u;G4bwTPR2l+I1`l z@072u2j0KEr&y3|h4nymzJ@aN)ZZmz3xg3`-F`b)uwY){V`E@1Wh*n7dvvZWr!GT= zfuNwleOAS}4l&SwQ56Aoo-8k5;UOe(D4$E4nG_1hOI6`zI8bEqzh*M@J*6)lb4H#; z#!06l(J@ze^vnKHGkm@}!}e@NhSJA-(0+MeL2_NY-;9&_9*!PYl3)aK5=_B>ahV zbrL<~;kkGI`6zPB)HQO>?wY8cPn_?Y*H(%ka_2eayD%qTnYvXdd0_@V$5(@Kl9Ol# zuZh#lUQ`z$~`djt0)QwlZ_4DjsXgLT^ z`OY0vQ+5telC~imQy$ECt~K5BE+GcB&^M=BbsynmyJn~6A%dT|AjmwR-VqCNtRzge zQ7$!l51+?~1x4x)0a=rNrT0WME4`Jp3>8%hq;a*_Qhs&?OUkrXstGh`0bH6kc4U^HZ2S{}n4lhfTkntrj+=>|86bF)jvkQ+Z*j&vd#|RfK^wASc9HMTgq$zTnlD$5i;r zcBFvCfc`<%Z(2vn`%ee!RzK8Mi1(i{BX2>_3_rEkXibO_Z){hH@cP7IhDr<)29BnF z9+x(JTh>BWQ;3Rd-tIYk!q*!Y$F5f4rZ&fDx}~s0mO~1KW(kU_6KCe3GP>c=E=ku= z$px_lDUMC`ZTQYSTt%kM{E^z08?k^|20EF;n$_p8HiZ{vj>l)wj~9MMc^Sf=J(dfb z+KEelsc$jeedlTpv|q$N4%pkvA0wzlSa{sgV_Zc zR6qY0C)kdi>9460K`bB~k+K$RzV75t4+h!kz!f%G&V@%Rk0y_<>;vsJ zA%mLyxAGP06IfkI(XqgQS9eF!@81^g+uB6SL*-PLXowFv%`k6JSK@hZ3lY2I(`0ub zw-k&sf_0^Qyt2(26_JO$q|aXQY-y;>+>)-Lfa8)?@@P(ckEc*Cl@4u>Tco#JYN&V) z^$|M+KM3T2!XpC%nPo#RrTF--=%#fOQ(}xoHc|%14X5~p3+%2TTC^}cC39lPL*_Fh zfEgq${YBa9%tPWJ1%aG+pEMPcm$*w0>RX#j;O=f86oSI+)=F>)TK*oDh&44jXY26$e#;*fn`)E%v+=logTsz$N; zh{U#YrGkLh$(IL+L>1?IzTRTp!_d_V;$B}_)dr}8nUo0{#r}qI6csNO>(b%UgZi*S znjuBnmPhBB3PujEw8Ir%26waP+E@jO?cW->bj2qYRVHioZUyPwn$e7`vK?LN>?F(_ zt@+lJ1*saewWWvFQ7PpkM(`50lgt*ax_UZRP+fBm& zj$=W&WZOQb)zZYTdE?n6?)(a-wr2 z1>Uy~S;(odWA(i&8RvwwpSiFA%LgB3l6RUc7a^KU|Es`->^@t?qvV+mWJXb?K4VvA zggRI>+Od1@i;Dxw%5(w3{_YI^TgxZj(bZYE42)`!945l$h}Y)|7|##3V|2Zs_oxJ z2J~vtf{5N)3mCRYTv6QfVP9TdZQqv7>?pV!^*&&)m=f_}7Pu3VyZ?==joDVES{1s( zZ#!{h3b#cMZ#v1fh_^Tx#W8(3tW3sIy)m`dJ4jIM7XL32%r|Mzym#nv|Hr3(FFE+T zp`YB{PU<#D>+^@9pD9=;<~7JzOf`nem3^a#ZX%0)!|xw&Fr5pH=9o_2q?k1)S6Amw zoHS=#R&7R9a%evEJ*{UIJjv(yE^nh4ht`@nQ1G@*h?^~%SP(bMKO3vXUotXOKFJj= zT9#A_JHvJi2x61oQ>deEEcK#>nmlnYytNch>5plly#!p%ZM9!T=R~Q_)D6C_gh1LI zh$g`ZgOa=IT$FYCzkg*y$FiEoM&TY3X3NJs8Ed$K(=LuFHf6#Tdqa~5sX5QAj&gC{ zjqaWbEXoqnc^|j&JVgDp7Aleo<(|KDF}`dU&Pxirin_%4U8kLg7j0eB$?fTm!biMb zGMcoLQ;r*H8kR;=PR%Fc0qL-?A;JU^p|h43V_&Y_Z#P51{mwHr;cXactlLi{5mRVt zQg@I_R#me2mOAdu1q-R;;P+lri@H;}J;S||GQdS{v#DxkN$z?Y94(h&X-j?HaYK8G zF1?biy6G@M{peKZiA7RzwF(^D3Ozc#%;$;S*T>m2b>60U_*YH$8_0A16 zE??NG17NFz)fUH2DF@w|#7+*+9|_V*Ibc_%VgF|?iwwu8#Qry_|A{OQ7G!rxxgjfD zV)pCWJb$u=fBKY!nTGovg9)Mp9c4L-Z0D}XSpv17@re^fI*qBSxA}fn_m$X1bE{-2C{Y_TwRxX4Jajanyg+uMt=K0DVctrs%X3^pYVd#Da1J(WE5 zi;crhOLuxqzH3NkhiC8lKZigu?7l?Pjt)4y%Dj`T3%zb!@3M{3rkB#2LZ^MPCj=)+ zF&(gPadss@mB4%C`WoS4DV_{iqG&TcajOu2ar)5sAl|g#cH=D%cIjGB)R@KKW}jd) zi%EWTKt`WV1@cOsBREVRQl2Ms?cYkZiKux4^4g=(OMptJ1k?EF6(70B()Qw4{T&ZH zr~ zD2=MrFTf%MNlfyyg%A*?DpjEt{_+hFeDRU`yN7~TWb zvEEmtuNU@}WmjSdiw0@V&C(y?HhP}OIPzPRDUZ~eAIQaCBq*X*y{E?kqjo*n^`8Ttr%Kg#9F1x3txj$#Dyg7v%ZE0>U-^ZTH$6U`s{e~PLO@Q=u zq`D51(5%E;B29ec8`Lgo@7xhWVlKITNkj`N8}gvJ<1%JBJ}KsP9!Njf(nYgW1STi?2Qvn~ zK|N=3CbZ;82Lb@E&47lLZ_c2OELZwM92`}=!~CjMH3B(rLV(D1rZ!VKPg<{iqjA<) z?p{6_8#YYrAb-sK!C@~%uuoWAwA^aU@JPRzEM8g0?D2rwPx4r~vsu|5Z2I~4^pt%T zH`|MDW)Ue`D9gL)FBqONR>e%1j-~I*zv=Yyl`GyQuKZd`y6*f-zWXm|rd3yd0VL$q zQNAm3?-@pyotMV$(&$M&QPHLmsQWYtlSOVwR<{|TFjN13o=Q}dre%U`}$rQ;)Sv}*K^6j0vzac1*jjWx(idsW}h>>7Z^ zXN~85=>C_~(H9@rodbmGufod7S)Q8S3OuYRd7d%@$aDip)O|W%w*^-wDxrA%;eB}C z%!?}Vabho-E6+_iI)@|T(FA!q{q4IVHedXgTPWMT?cu4D6sH8~ppFWz%oN%C%F66S zfSH17!+qL0q0HnJ1=Z84nbu{u?f13Ptoq?Cn&Q5K8gK;f6_%yx!?-e2~; z@u*jbL)U4)6W90sELqf@I)B1SQxEQH)ASHqrawPR>D&!;f5OtIpub#s2^uEWydMbp zB&5yAxbXR;jwjVvc(Pw?hx=*{i8|~hqIC+q)g4w;H5OOuJZL5IWaak6kwJG$E2^4{ z$+hXp1E74-q|G0(E1(uPYGZU56c3H)+ojDA`d6i*m&-JR1cggk5fY@W- zE(GvHd_)C6LwsQDGJ$^c?h+BDafA1O-jdn)=L|7^FV%fU-)2vM?$GR-1UR6*R)G+q zu5W-6AH6Am3Q*m`TCK;y?u>y8k?slxDBbOh!J+3n4_Z+>~V1-8y2q)Er}3+j6ZtPQ{tZIp&mKnG~mKhA#I&8C6lHO2?66 z3J@=>A0i+dn_um&!Y%&XRS3;KFO?%Tz0VIOTAKbVbNusA*a2gLczP(OSHM zxv6zVguqV@u9DVkH1nv}9%)Y=>7tC^gwUOpGdy`QjNvFbu=ti7)1z&E?r zspsL`U$aV!z(BiT|kD5W3NV%2n1nzt!9~ zE8jbQFZ*N=JeUafd$^YO5hG41(K#RWu9zj2^TtsK`uu#qI@&y1*!uV8BsI}kiaEox z*n`s&mhFSU^wzQAQ>_JD2+l)giMFOkx?#zsznS=;$60Y2T&Vv-@fy@8@>}RPD|#<; zHe?q7C-|SA;wV-!sm;43nR7#@A?dl zl9q9dGEXD?AXpm~5wFl%=_fwkcL=l$e5a zl3@V^i+n-riu&7$6AQD=oDI5Jvny>_jnYNpo1nQsz@nn$tXl#Ykxef+~(Iv86x%Cl|Poh(bq zz^|5Y{Lgggac~Py)*25*FU*=sn@X|T)Do=L>*J@Wa$yf##U)B1ep6{y5qwc;4loD8 zBKE?p>b!O7rH|LTf~Y?GoOP(d+fe$c^3h8VapYSvt{|kt4d!a0N^t0?H1QW+VO!L$ zfAK3*zOSa$%u>WtKaWl%r3Mqw6yba*Q6kgJcPX=8X&k|frQp6R@dL<3mpBlx99!(C zOZ>3V6GGFYt8P6GmNQ&Rt4QB8|7^AFm;P4^Bo2hBr4{bgs*g~^r`ez!1l|K7t?d~A zzB#hq3F8-QNfB|@p80XLQTY*iQ}iohuM{xCQlJ&LU&1g z_C8enX znHbZI={b;3ir>kl+O^sptzKWX1e7UJCpGxQLU?dQcng0X-6x5zVVMzWpQ0^}PuhdO zaLR3cE0`Wi^|l8tAN z-Sf@a=No|i@8it97@7HFuGJPa6Q(l9l5yq1tCfl@iBF%;q5nVyONh!DHGKfEc5qaGWAE8j+610Nbf{3V%9x>p-qZl+@oHOZ_^+1-< z@UeV-gzHdrGC$VyX6P{ekNYP$IP~^%n(1QfGnEtkp9iORx_6~-&Ti<1pHO!!Z!~Oh ztADv|xx&aaW#0Rdg(44SEvX$pzX9jR1(&XRRAS7|cA7tP92klSIV87}C_kU(F z@0Q{s0aa`=7j7`tklyu>0H6Y7yZ_RF){s_|tes2Wx3J9)=&s~1&aTGF?c$WC^X?bJ z8w!J)o?|DA+$(;q=wGnu=E40gFpR8c{prf8Fr@iO%JZ-k@i}p+qN3EoXJaGSRqs2o z&n|qqF>m8*iEi7|U7ioeQ{E2d7AKH*Nezh4LC!EXGnRI$~6^XC#PVepaza3&sP}Cm#DZDA}7O-Y#Ot zXerHiIT1GqnRA~z-hCH#J*~S&@{zRCU4Z5HU+&YjTg2g~bhHp(S}sY6>mn64tQ;^4 zeB?kSOeV3P^=xm_3=C1;AJN)*DA_EI!yYJL79S|fI1Er(xk&3AKT|FeyLYT%b4B7; zZ#{1YF?l#WUPcX3`uWG~v(YvYCJVTNY8ax_!uoPJL9+)Iy5VOC1UnawuM+j&w3rw)2GNl? z%24tECUkJ6c|Y&=1fYyZ;Jnpvzayk8botaVXdBk5=?}#8Fq;-erH^Dw{YJ&;mG`o7 zxn`ku^5Ls0z8$}}6MQ+dYW19sa##M$nY8M5LTB3pA`6^S=M+OFgnCf)Acs}jImcB) z1&ou6hmNXBe42+1bjMbBVp2Klr>zFrt*ko9E}71vz3$(PyDp!gQft0{Sh|qHs9Cic zHR(REViuNe$TUv3)hPAUk^DAe$i8~|EWn+C;y^^Exq8b>CK_4U^iMOdhfQ518>w#Y z_K*d(KebTG{ld4^XXlAU7U6fIwuQdPZ@SgK;{O#-Poi(e-mV2zy{`Ka@&@v$5}rvkFz7!l&BDp52ouUNC&~@q%<^z8Q4^clk!&c8sUXIW>I07AIeKb#2=RKVmwt+v<+M9rt?6 z&%S0Jhn;+1`=3V3U5}h)%Hp!;u!lGqcm25sHdwoukeFcDh)+*_rmS7w zqL3x5)aSc9O6-J>TQrDNU?*(wz^t z8gk2>@k4`h%NsSN<`~`EIyuk-eG9QS7td~8Y^cC3;s|**Q5A>;Y{c|FVLC0dw2j5G z8v73=jK(w7X<_+GBFIZq5{L58zo)00MLySJuCDMKTdEc^n%A5aEflwZy@D*RcrHNd zYgho1Tm>1);WY4o}J=V!`1O@OVGC6aPzM zTRy~Bzn~l8X@*^Iv>ku2v{tYlhl5A%?~t8EnNm8_!td<| zWG=pHU$vS!|LAhNXPbuHvIb4D)#@z=n9in#+zMx>(+cz2y$R=GCLVpULUywzA#4uU zKRUew>hH67rvn@Js|SEQIT;?MMF&i$`W@Rt?{q{hrF4u-UJhdSCY(sT=&e`~}K>gvTv8$7*Qr z0MAe7yt%)r)6ER)PN^ulO9MKR`D$7)2)w_&`0vpQgHqF7=^CY#Gi9d~+O^^=que;w z_lSSR5YcG>WhzE4W@#D)r(?tt#ulKOc`qO;Jq7!cZbW@EmMzwS$8OmSJ(iSt?Yo;s z8}#7(7}jYK38PC`XS=(%(qyxO>Wp%aaP6Z;su>XXjDl*VPwJ9T@Op;^Vv1?Zf61jf z_@LB$n|<(QN-o_n4XSI-rmC0ewX~cn13@WL%eVu>(4Ges{FXB$tT=7fx~w=Om%pQf ziV6A8XFgRu9k2xTbIZ2hu@@ys1ekJ3Yi%cu;v6F7PD``-N>LW#XuqSyu1%uRLg(p- z2@KbW6?I+8YQHL?BXGI10qdl_(`K-T9$lQDVuh-xvWlCGXqT(1SyQ0CR%K_{eVmYc z!(N^Va#LgE+d<38H5Z)^<+_|EHmzhXd#Sz)fNkcsb39i&0bw+{sgIS6(rTT#jY3Xo zmnU~5K-WiY?GsFsJdEm|)O3}aR5rE9Ef-$L8zC%ijx_N* zTXZJ{_jGa0l8x?06EcB{2LjPbpkJ)lvXhShC(e`U{@(f7#q-mPI()fC#@ti+b$|cn zWU%j>t<=c4M^MoRxR5(1&ebI0`}3f-{p3-`xG6MvWoLizZOyfOHH<&$#!6P?;)kZs zu`L2HF~yR1Z-ArT`9waLZXDTX|5Bq7P(v`LWl~0;d+97)!&fvKZC1+OzII-+6)ZK! z{#Ot*U%t(MCemc)tw76GX}ENq9-nO`xAX4deXZk9Utn%hDsou{ydGT&V<;K_bX086 zh?*l$l)bx(;ifRZcb>iw3x8)X4x(+gVJ9cfW{2BVDoEg}cJ-;s{EsrdoI`Hk7tqUtYXWX8s_Hu(RynWF&++!U2Ba3o~%|UT;3L6HwCM=?fFk zKbYxBKa&m~@0IEeW2XR+M{DoG3k(8h8xk3EW zdTak$6Q!zaOIzKQ`&Tef{9QdYMs*jytADL}<8qRPPmCud7%h8yrGs>KXM(OL#MW}b ze79d#eBm1M-|zb|1Glf8^skjGDX9c2-`7`)mur@Xf8TdRLoV^@8`Ru;2xJv{WD`+q z`c>MbdK93kK)a&HY`H=Ic-N7xiyqWiP0U928UZM+AE{K)bzt0^?Z1t7H91;@EA4-(L0<`*{Em=oQeh> zKY8OfnEa?jXM>yAYWWi1U#FWvjVvU;g2o5*e=T#)y_n3-89o2&{N#4$ok!q9$CSR3 zzJlMEy4&f;Z{%NPdtyGw6X!vMV6t1(mr+ONmb1LGGnu5tP?Pa;TXmw_oMJ9xfy4Y{ zN!#^u>lJ^iFdO(Ax2C7a6UMR&I~q(1tb(tBz4ap9^t!h3qNW_>lcGazbt2s<3Hey~ zO%;vK97}-mMQOGJ$1)efCD-6~+HUI-`qq*mDBrzguG0txpkj9|P@E8v%WgK|+XTPK z&%+eKR@rl(G{NX(xu!a_1QEza3a}5ZYpIQ=<`S{fgkwR0`qiouTcH{Gcl-0LuN*RwBKtf$>+`XQzGGmx(z%(u!a@EQov&O20|oYKkb zF`NdY^!^RS1Fx=^5}vf)7e2F<1mlJs=WDh!{vn%YAx0~Rk$(NG2;F_r!CpA$4JY>5 zuHCw`+-&(zje~C9wGSA>EM;27d?7rR&n6ba`Yt)Lj$MBI6yDDV$rGuFlL&ZNy!!^1*DR$| z7F@e=an0*U9s|0pM5WO8o?|mM(CRgly9sr=I6ls4Nv(mWz~#sMo&9W^+Zahuq&D8y z8{J(V;WxV3mC+liUWu+@U)7M@^=QzZ+(dWq&yr%sJgl5iZmJYw)^{KC#uXc`HB8k| zEhdfiBfq4v8NbomjX$Y2ik-mog_?REyF6%6n?J9#(Nv^fh>t%v?w)3GTJcwg$7F=I zb_Zgjo@gjzyhb~*>G+mAi^vjBA>K9u>LpWEm25&^kGx}nK0Qw)wD?b~El_1=^m_Vk zDF7-gFS4N^Q8%l>pRD|vk0V(MV$8OVqZGO(LZ+_axLNvQrB=1SQ8TQDX^QlZSS=Zq zQKj%5ZFUB$1!I{O=XL3lMkEt$s+Curu2WbfNzcfPk&a+t^bRGqRzx$lOSBbnrS(C! z6gGeK$XoK{&`Y<7nP4chnXo)ah^n5aB#NT$i1yez2Yn2g`ua9#bL9_yj;2bP(cFkR z)T@H;0I0OP3?ISnAl~4HFZNRj>z@0Ovs&q^;emW<7qV%HSBaxNg0-t?0OFg{9k_>43#r&M*pC|Q7gD0l z6Z5bWi_-?m;Y=y*VI9%V8Tp#0W>1E{E)H%cHuxY7(UXMX*b?2MB+=19cI(-bDXT$O zuHL-Y?FTN%{Y{kog)OoOAVoP1z@tm>r%2YOzrZD>=7zg3E3UNV`$ucApm4+lKOg7& z`def2xV5GSSUojafiD#OBJe{el0K^+ISKz>mGp++Y>n~3c~s#G<-)*TqMfsB01J)u zJ_4Ea^?jC+Tx#S?z-z)%*|4+gVTLfxeKeQ>>f(doP8A${D#f|AOZ?-XB;yzUVT>*^ zVnzU#dh$aAc3et3=Oi9e5=0|hhLd=WAR7ROlqP*neTr}@Gcg+GO z3NFe}_wo6UI(=AWFsY)psnjwVN9d`kE?sU_kXw=js7$`$N$JYKZ=(`Aw5H8Y1oT&lf;OHm>WtrW-1n{`X;6Af4 z`gp=c|J|8W9RC73@Jwy{LzRB_I1&qnE`0Z$fvA#T;)Om6M+l_(A(ehN$3y+&6HCmZ zo)zt&Jvfw;4m2Y$b!4Ygse%SjZ^mf~ zVMcrpT?K^6xgiS91l>}0GEFk*&|~dOxG4|BlySs^GR;}H%TRHYKSs|pBxagA<;!ER zc&XL|iIVR<;5G}GL`A-l;VrihfvF7Uq%I)DF)xiqO(&0_pvXX;GO((S&p%r(=A_ce z)UTE$LLu6t0tV1=Fk~TfEmT=$en?j?HFcfJveA(%@~ zMZzy*Bu%Qs5yS1q#EZI%74BMruLxMu=D3lHPQZjDbC}S~Q+02PVQV zn9x|pcy+7jv6xaMOB;~@mNSy)%E-u%v>R;*Im+ZxD&4yrX@3pKm25*8iqO>XNF;4kFtif{msd*#5*~ z8#k>6v9if(Y%tFvj0j&NP~geZk2k|iC}Zo#Ntp{LgSWy$Sk;dx<5gA|$65t@!?W$@ zXGSU<>Bm2((lnkvZMPy6$^)k-p9~t(`uri?o}q4SEN2s~|3_i=HQAnFe{(&Qg$sp@ zQa5FrbP1;DqooZg*(RElnp7#dG+Sm1;fk5 zK4n7GVyrV;hrZfTn;a&T5UO>%>{45_*2ur`*DU9))OS;&kBDRgN1a7`g;l`2Ec3Hv{=2)4fuX}URf9|^Nj^DS;?s)$CE~`a|HyDMC zT6*!5bv+&PuIHv{ycjFau50K>VxeZVF~9iFN>Wzo1&5m-)_6Yh4dH+KBak(M=f`yF&!5> zEWT{8JP9u!a%UAIGdB#IHz0tve ziDuZC@}s6qw1-Q$39L%jLh3y3_mBdAi7>Lce439q1c|LT*R{)eyf zmz9ue^fUZ}9qMm)M!zS?JW?72KAS?lvMuUwd%gykZ_u?@z3eQRJq11aQ7QQH4X;lP zCj*9kDm^jo<{QJi{p3fS8kks0EXS#rFD9SMm{6Fg5K%FYQo_~Ax~Gav_H*FKEIutD zv}G*>b8Nb@W(_l{Drwj(t8^olZyrlc=dA;a9<5V!80Mg=1Ea$!pI@Osu5#Y0lfgBW z%`Vqm3>k?CV-$~=bM#e6@9@Wy^NLsQA_@E2yRCUv20Dl$pHB~J%H~U)5Q-9bQ?XY& zKl^KpUQ9=A;ua+GhtAF;9|^Tte?1-Rn|lH5I>d;!@z$K)^;bMwt9G6fF!O8rOD&#S zzDre(TYCuHy$i4YC0^F$C|If z<1fOk*kQhtv^;~EB(QmrM@NUX&!n#3dAAvwXI)w2f7$TAib6M&Tt0rCYz=tFTE<;A zRc+K5xM%X(3xVaH*{wHkF#MW8h2ICL3V(my$x-z{`J<;r@A!XzYX2>q$tS7^R{r@> zs%`bvQHq7IERbVOqWolOi}zaVHroX5%OtQM%z}kBhABF5o*-bjsm|Up-Aqo5rIg=UMR$npK^O#7NlBT?4%jsKk$`w2WY5{yeor1E zd9o};2HN_ADH(wNZQcy_k5Pvu-1&0dzDzshA#YIs#-Xv_ zlg?f(u80pIoN&LIUs5_Ge5%FskD`(@rO6VTaH&6-dgN&i&oH9ZXR(=Gpbaj>3{IWL z(p6>k1iLKz@ZlaiyJ0*Zbq&ZequQK*K4ltZ8o%8HEF&3jkFGs;G`i@H)EEF4)=GOH zExR<|fp4cZ)vV$lg>6qT&sYaP{JB%8{}6mK9-1_KdTJ8zRP^eeqlDYSHUB6p6s)(D zx6-o2==IVzYSg6CDx5L%QOq7Ykv&wzv@Sg49li^+B)k3|8qS};ChgH^Zn3?gadB&` zrr9-|Mi=e7F5SAMJHid(_YW+}{oxL)T+OZBn~}$YnLVq8<|FCgoO0hLF}}<>zDzj| zPq>?s8ojM*#e?C<3%!t0u|ymhtxwd@DHs@(K)N&g`>9Dwt8p=|2<DfpNC!m#>(n#~`!2IWl{I)7!Iv$0=$aV>wKp0+h&7EI-Rz1)NRb=; zz692uS1YLf-H?JydukoJzYDBy7wb!6sOS^;k}m^oRbSQr!%LmK^7Q!fa(Ykdq;Lho zums>{^)%4ocL9<0%wJ4WmW@1F`4UiPhVZHhU|TT=lXD@!na^?GxUyK_`LWARIRR`xPXsE_ez;;I-;K3seMq

W73DCa^X50)n4{jt&}61APZ}D1#93D}Lz-fI5SE14c0|0tWI%_M3u7dc`NG&E)FMjiW0WhX2uz(ihg@NW}cRDfRvr3iKiFK=B6w1(IjSTr=XA zku(~K*s0oo0;q}kLx}FZ%g;$;Bs5!5G6D*If1K9`(_mqoeaO)y9JB+H$`c2w9I+kS zTWGQWwSgt%Xr?!uKl~|O7~a)DWHXkuJT#Sz^_;YKc6a8(Emc@Lc>Iv?Kkfe?APy6t z{8=bq<4Nyp{s~0^tc{+cjGla~$1KpWT%@Q-iJ_XG&~HBfuMNh{&%B8#OFYo9Acs*n ziMu2Q((;>u&m6D8q?Z|}ttQfu!P-AA6qEePAPuP zF6j6aOdJ+(u-J^mKMVFT6Kv3tQ!m5pB#yq|IwnXZPga;QSFZ**E5&0A>+r!hcIiQ( z71Hq&3iJ@+3~kid?FpaZKQU!Q}qbKwQ6FJxfpkgV8G3Flb@#Yx$Ed?tFsF7^H&q)XjEW-ghS^c!UgT=)=B$pSKF_Ok8smBzO~pj zzei%5H#FC?l5jWo6grDV7AI@<`d*D|EId(A<+fb9%Flf^=D3hTFIEM?c_NDBW{ttI9is0 z6t(t~pHh}a{dg|fpgK_+lI52uIm7VDz)%1e%7N~avQ1?hyJY(CDhik0(sTRhNN0;- z>Z_BjT+PQ5l;_R|6$yIodt%=n%BIdnN0FH&wowXmQxz>@TuN=JSP+n0|GkIB)hIt2 zc1yxMFB%k0Js6V%DYk1A7fwbv^Ie;t&cNl<6+2lL`NTfNi|?Ygo-I)Gp74n{Up~p| z7E{!S27{+ys&_a^8y>TvmW7n$!3-!1~;Q zq!cK_VDO@%Mr`}_py_2$&XFWLlPr6|wpTTmj(FhU!qIMJWW<#62mf*>*{M{sggvQz z(Uhv2t(k>u2HHBbEsYm(-=L-7Ua+-2vGV&YXNlgo^4-dfC4^`yY(+J;Cb4v?G4}#m zzA?9u7wk2ax%bt?)P_D}iXDF2I{z*6*`7`S!;XVm2(9?1VT1~;iqxFD?%B63Kr=bJ zoD*+_H3{7-NFYa!%&O^v>k)F3>HFU8mr7UL(ttU+e@3h++LL<^D@O*y#ul1^jD@@B z5MTX>1)U%qV-N2hK?y-{t#XsTGZ_6Vf$8&XY zE_xVBn{PvkGf+ON9Sn}^bx9MZ+eeY{}K%b%9!NKJDESCoCgp1RqH+mBcfMai#Wj zb~{==46W9Der>)lide0?1HnFF!QW?6p^l$>7aoqEp|wU{pf{y=+JH!RV^rBMOM52` zVBt_Uq44Eq46EeF;i?sLYw4Q!$fR&^s7TuWa>(%~~dI z6P#!nOT*ZR81OpP`ZdYxxxZ#*lVq$Cykkz?p5-GP`*N1=D18(rMc&A`0AyO7{WZz# znTS-9SW1pBwH1$N0A`egtGdr_nNinuOx#xlKb9U zLB2sZ(U5cAxL!wonk%}f(;&1mM(56XoyIR@y%s2^)wQpG1|sG1id(!$&zt&_Rce%9 z-}9RVYbMDU;i)AnH;ad#nh+w7AYBb(VAY8c)Mcb5)3@ek~<@ zIsS@=&}zkSmf)~fpnfZq&d}sHcmmYmDjD?AgggJ)Cau+UKsnJX? zX6vplRn_kFDq7et;^Z@FDOImWmf<5Y3Y)TO)y;Nm+OT)RC#6uUw2Us$xE0 zY*$Asl|9kSs2nR8VhCq@79T_V)hTw{k5&T4WFTSidnGd!j+uM>&M4T%0L*K3@i=_A zQ0gFhDL1y>N5rBb`@L#Gm&RYlwlTsUsiOdZy|J3J9LW9bdJZQlddh0A7?k?w!9u#o zUFK(@ZWJW5KFB~WEQ5&1r$RlVf$h9?jAZq)_`fAvqHOzW0Ta?5_$^`HFP)<1_?FEc zTAuLc5hD^2TUd?hQjtTZZmsGjd4C1rF~_3m;v@zR%6;r2N+Eye)qTbFkOpgtt!Jfh zc?6HN8z*p|V=YBy^D5x2I%(cF5`Jd=ys!X2lPFp2?F3l1MnT0z+T|iVN7)fb?yL0C zSoM$YSu*mjjZOtXx8e=UdL{Tz?w3nf6GCtSIyn$w<;XfE=-9BXV#@~g-6jX^6>#KT z76S^T)}q2m=S@AvtlZl+pM3!#LKyy3mmISKu>Pd|vvHhfA}e5m%f*ijX_#^XjS_Sm zX$18ikIN7yaFm70DW@m48WOF=r1bkUPzI#Y8T#pZL1x_9v)F^_#`*$Sc;Q3;W}pML zT}UuuNB&;ypDy<)Q%wl%jhTmiT;%+PpG)T`cvDoVNYE}y2%Zt5#K9`y#Gv(%>(FJ^CY|%_<(M@S>E2Z zW>%v%93>D>zapln+Lvqrr_j)gX1Y|^ZM1%%*M2q#d?HoTIv7|vfy-x}x{YPCm%s0f zDVIv$kA$ZqjKpLVa8x@LS?baLwq0O=B2eh{SB2^ z0z?HGUudv38CVu)qzk!Zl62t?Z&$ya+mS`7-%gcHm3c~=rox{4r>=%zcIid`Xf33@ zN3I$vwFio<8o&E^H8Fcz8P(bezZu|M>;SoL9OhLp!=bt{VN0H-DP5w6d} z!njwJgUC=VnJYD{H$U%SdhRhneRe*Npjvi5kuq4*u0?G?c4)f<#zqWMp8MYVQ*6*% zAuEzN($bu}OS&t=LEB+Za1f=~y6|yjAiB-mzDkC!Q>Km~s`fAMDO9#nJ4bv7 zH;hT2RoNYCPZ=W}dSU>nXBymScry!@tI?xVHRzm4r0Vs6o6aeLjQb1mJc-LaWOVr# z1rks6K?EDrdvCdatzSl9p!pk5IveG}?dB_vbHE!oDj>lQ5o&hyR^yR1Ee6SY`>9an zp5|{^O!BC0T3t-pv**|$w62MG3dP!te{;t_c!K*yhMij^g2r{N!iqWmY(y}i-I63( z)-1^FU-;BM$WFB#zL_q;zG7{3K}Wj~yl8%v_nZ|nvwlyW{G*)_S1p~$mNreLI_grO ztuX9==y&*1a2IXo9-&!6n4;~*c6NopU)AFlS@j&&xoMTJzuE)W>%jYs{2bMlcm%>B z01u%oM>Vcot_%%`s*k=eFO;fnuexv`f1f6PHQ(vSzZTE^77*n>XSS0%Em8M}WBu6+ zQ2nM)l>7A4`HZ8jpf(H7Dhdo(OlPTE>Spz4r-kg{R&26ig5FmM_|X?pg7ms4oMRIU z4NsOcB;C0fEmM;eUgSN4)xI^1B*ns9R3+IgSI9la$@Uc*MuBG0r@Ccp@x#N4Me3S; z+2D_E{gfRCmq<&>R(ZEK6Rb8u6@!gP>JFIBG@6|__Uy3T$xlSnV3Ia%43o4Og}`;4 zJWOJw(+3mQd`K2tR8_}c-4$HvSr_r1#bhx!t4vSh`<$dR74tlyWQkJGfwwe8NV-$X z1BeDrwVTEok9-Ptq37_5&ZTSH?#rYzr7g7`e(2q1Q2jfT=4Mg>nz-P!E|)5a@(`2O zu03JBzW9kb5!a`ydm^=-4#1SdReC7UHHD^8?No0EIJwpGBLsi=y0Rhofd#jCr#W$c zK%4%y$DuoM@#|?1^s5j*Otux&V;Ueyv;9eKNbzQ&$ci{A@(Jh1^(zGHx5FcMJbxri zP>xc=<6K8m?(oDMqR1e>!)+^46v@}F#FN10OX;UQlpnK#cuQBeb@(TLgXhLGw^r-` zz;mT%foTu2r?-Fo&d3<7yVFk304Ls$ekr1YdFCZ5!G8Os_rCC|Q@kEW*c(VO zL^OIkL+dnw6~ZNl3KZ}M3GJxt$YTm@2z(MNAH?Cg!IdE)vFgps1o0SOH$U3gxWZH} z?t1H;>5UpGA^gy1M&0#+;>(6^VL(!fe1|4aGvC!D;vx5@IFkMi9w=Yr!$W9wA;WvW zjpXmrM(q(O>K~)&9HA&W{pOPh?CgC*Buf#>E%0N|@JAiG5SG}+KwI|rI?m{HhrYio zyA@UX4DZ6PQGdPitc6S}9CiC}}s^<&&-+xwf}Ii{2qf z06h4$ri8?#-LQbehiSRxC#n6oONVP)!TxYmlN~RFe>>NfnX|9jPn^^yiHhX1R|EF* zG=Pai_cL2p0JU=D9S)~*0pfksb4gLOym@@dGZ7xmEMAnbn0n4sB!Mzk00`00e)h3JE{srl=o8YUau|M1Q0 zabU|GkiLT&XK|2pTOTV~L?W=ADU=$cFi`5GcqbbFr-b1_B#~YmnR+U!U{ZGn%2`*U zBir=IlXMUlJaGyMWS2f3v9||+!Izx-H6BN$w2*oLqY{DFXmL;w?XVVo{*RB3S~NGI zKxs{R^x_u9 zr_1xW#I?ZHro1oaeJQu=xgx75XVgXf@a2Kr#)Pyxqm}U7;>Um=BAVvG_UgVo+6Rx4 z+bd|R;1um{_+L>dw&(3jDu-{<#4xU&*r4bV6fGW3)q1&V4w$mTih)DjOxzxy2mGh+ zS<6m#q%`?M<&DEGh5IGKHR((W6^qD-%yBCsVRV*C^`7b7bG#(ZQs8`MJTCw(t&2); zg=c$&!(R}Hdy9~(J2{iHdf`;5#<(oox;q2Y;zPr)2k%;&eA~~UBl2Yhs}S60qa6rP zYj0-HI^%Qh+_zbAX!|AG<;S>|JE9slTQ5~c!Sw_DP}Al6E3Rye?Gx3_VdF#i?hNFz zG0G*fk=K3~5M|syqrfx&Gfx}6Fhy~%){n9bqjU~4%}T-XxGT@54|{GI-C`$d(7$#db&aGt=ExqYs8gc8UN55R#foBh{S>o(vPmh zu2UcOx{td*tTq&Ly02oEa55#R9avu>aK=uX(_%$QEpqSEDe!~+PgmulUU))7YcTW+ zx8twco-Wo+96$z9COv5pcwZ=+om7TLq*BNl^2v~H4P*vh7??O;c_Zf!=4ju00bj6B zxT}!-Tp`8#n~+>LX~WkO^~k8qaKkV+xd?>Cz&Y*`97d&GBNh|l1{E8sG&>~s z7GSR@D%)f<(h9)G`(^ubEh}004OZ0oNm!wf@iuG}v00AK;NTxGpU=$n*riMAvyIw% ze5@dqH1>RPlONwv1wqxmb5M=gOfZKm4B@tOCyrVI*Z@z5^2EE$nJr!(Efl=1vr-Vs zrheeW)$d$k50rbv8XN*RGK}jgm!)r^$l22+ky2?U1f)k-gz76|Lwt<#p;VG_B}3)w zvnn@o_oo3ThkSirw^FJ8^_6i6%utJWHo;FT z{H33O=&97CF+Z?;%aX!@YkG!xlN|C;Y}4wdR;^Ae^fuwr>c;P$)P?E;ZcIoW&^F@@ zvhytou6Q+ct4M=Qbp!IcnCK*S>OS>ONZlqpI|zToy4_68xZ@ghAFTf-o^*Y7^wNIc zjGjzvSKiyw^>zHo)8h|uJ@e=G-$8-?_7idQ6VLryN?$!0^--w-ytg;(sG(lr@ya6C z&i{EWVFwf7Q~%2U2U%iHc#f;3cGbOiPWZy_Q6Lg)&D;1VwO24g9Z%Q)0Z%}%zkc?; z#XQ5lB#EAQ;KASn4+I~C{}1luE&%c%_&88+H`F_dXZmI+*ZQ7u%QeH+CAI_t7Hc42 z<$iy{*4^#3+B_bc)r+oNxH?ii!8?lh+}fvr_NPf7`6TgKLIB@efa)SK4(kJ*_?^wH zm*Mk;MRcjHeg|4-L#g=7xo>|bw=@^h@%>(J9=%Y%(1zC4@35gc$o8FYzBX8a!>-i(*zAU{M=S>XTzn0DT(uPXa5cNjLjqaxU=tud&Ut_|6NISQSpZ2 z4eEpN&DN1bGW2_NC!vFczIg;27jlHi-;+wxPqHWYpHB$jcL%2N7U;(t34UX@q&o|Ys-QK+zdX!JRDk#t z`4;+5EK%v^DmAX&>k>3K8Z+Eszwo^*5X0K8c(UsCt%xRa=4sqW)wh6iM~xdqa`rKt7aeKRrE>7>L&j;gM8k9IiU@VSL_g z+x%Z)?sYvOCn5_cHE^UYE}%1+43OtLE+p%x5*}Y4OoEd(Z%<^fcdl|;WiS#Nh#Et7 zsiQxVpR4p8_)NLhbLotlPRzWuZVFD?4f4di@!616=27d)`=-u)XgjNIAD_|02-nJ|dd{U(<&KBHBAzfXkf_@vKIbU8No2P27IR z_=XFs>Bj^BC5`1lze76+_uDQJC?)e!TaC4H2F5CI{LnG;QuzF($4GxeGM zpP&@)U5{?c)bAtzMPPs8AZfyHtq@F>rttPICrz=@h|Pa^1-&S0H`jmv)UVN~xm|oo z5sjjKp8F2fzgEBRl3zgS0F?eMlnz7br9pjL?LP;1HerEvB)N`!s4?TOzXqxL_wn^5 zIHK=;Ttwd*T-FYCu$LHmX{~lC2O&r{0xR|jrEKlA7Qd2)k2b^N#vOpx^kAE7sJCm5 z`W&?1PG6H=W!Lz%=9MbiQRwq^4)5EkuX+O|qtP;k&ihc`x4+d@w)P*Y8&X-NP3i55 zoYlYQrYYaLRj2=YTQ=fgy!He>>*DX^U%{JJ)iewkkqDyL%+h*YWveHGSS+gdVjD z9j)JqB(v#rk)-~4bX28r3;)8F^Ul9b?g48m#Vd@o(2vqc=%>+csKAI!P=WDXweCx3 z>pMo2u0LaZr~VlzwF+vB;@VjK=Vi4w)JR>GJ`d2}3Fy@x;a{R`)ozWdK8vR7|6JNO z@csGzJklY5p0E8P+V&?CO4Xk={i*)xdcWpfQ~fo4{Z-SuY690)g}NBF6rE>iI!z0q zKJO~7VSpVbc<2wA^Wb}JeWOzC5&ZSImZ7wc$}`A~@(hK1Y|GdRUW1mAQw_d8gVHQt zF(;wEYNI~jJRi8|r`Z80OE+qm#f>AG%(;IRc+^UCE6do%X-wp&NPI3pTJ2Ql$xYYZvQrOrFm!Z~u&u_K|Qktqymw` zWAEkBgVuBUc{#a-6&u9N}Zvke@rYf%V*QPU+Z4Xw4TjkJr!r0dM-g#>ukiKR_$H zTh4=F)M*>pcp`$WE%)xQS}V9XkQ-^&*cEmGlZpldTB}?ql^MM%k8VWn@kYx6KDo*o zOL<-6F;90vBQ_N5o-U`-s;cju+=%=02f&}l8ghpyil#x0&}nqvjW^!-)29_rKdnGL zh^fC>e+60Um!b>Nc`WBU(A~uS$QiR;E0hV*eaJ2n+Vqx9WwnR( zYoQc69ZLCF!$}C?`$6o}`$-e=Y4R0}4VtUND>(4u^S9+~PKQ0;MqV7x`h5%&@Mqb6 zhx|8l`LzOf7W+x?qrbVC|6nZF$e)4y1=31f4E0iw-=7v%1pNZi`rYpWMN)Dl@o(}l zj_%ahS5J^p;sNrXgn&|(m!{s`)58~qaMcft7sSbLmdC{X$<>Uw(p%NfQF3*m6H+#+s zKs;PjyG;Pm6LK#8CF_q}0-VT0yOh91VarLqAeMQPy=>RX8F;d&Foek(ZO&S>Mu}FV zVLZKT*+b+{i7sk4p;%V7OXH~8Eqc95ZqX&lw~T6+N@bQSX|*l}<-P}X?uR;|+;I^b z%b~c!ELRxhI;fhg_4P6ujaFjRTC!#+_ZZZ75!AQ5Tvuy&NAj)KSdLI`C+Q+SM!tdP zSnSL&%^W;GtUKE|*^C0ZccNe&Q?S-?`Sc>_5o2T<^_G zY;uK8q*#9@d!^Kg73<0T^=7SBEi`G)RyD5(jPVD=!_@hwz*vx4WeUASHhU1R05@Eb zFPsfds8Xz#Z`L%g*nU5oEE5oEj~$s5yQ1UvpLNz*hHZn}$Up4Zp}py*MxGal4^vy0 z=b^T)TBSSZ9D>z4^8&Ep&#>oEGWbNVe2cCtFOA22VXVeR)>e4rjmX+q{^s4p83e_y zEC}=I#qi(xg*m-R?iKlR#k}4w5y}|3)#_e7-7W}tTyZc6B+sa0FrHfg&m`zzE#Sd@ z2R?gim@&CGUJh9uu7zk~zmEFi6FQ`=I=GNwfa4{wSDyJt@F)g#<`J|B>i=ME-~5hw zEAff>M@iOp5bym4AT#q-cx&-%05JpPZGb#BpM|&g9sr0DAa4M^?~_4dkbIkv0Y1(V z$+PXF#a4qaD%qbTgLZ*YttC9 zy+|A)A7Qz#&K@5HtQqTT0KI6IR2Rc~bxaUI?^W|-#Ch{K0KGb(_dSA|-$dq!BNV${ zs3%-Y$7Md>6tmWWwUu#!x^%hHNye_wE0vR5Az=U@nOhj67tFw;mX%VbjOz2;>);WWdvi&k37IdMT-^;tDQVSgGMKnN=9yH z;zP?Cv||8TqoHFP54P0QY>}92Q3EBz2!$unZWCU;%53b?UwoXFqpmfW)H>HRgZb6^ zX|~7At*o9@bFz=}7Fu#I*MPtOnamxJ@y=>>k@laQ3ab|^+wnTN{thxM*UMkPcsXhZ zFkaiq@p8K5c!K}L>7!*-BN}U;Matj)fHfRX{JUHY%jicWR|5$ijDdKKQiBfEuwxQ0 zu;yE~(Sa}H0+(jLF(oxh6?&yee_$*h}12wl% z7QkX}V(~A!e61c|6Xk7!M9}0^sh!#|Z4kynMz>Ps((3JEp!Cc$jRUj6q+BFX#$|z| zTr5!-^thhyLp|SsdK}B@S?*e1rh38JS5RHg&uu!nrUc1+Dk6`F7Za}_YJ#%oziEUtek{R;;8i^qB1k3gDY zXW=-lf#(Ir=9}avcuo*OzZDkEKS%JlzW&M#Ns?y=pZr+u(#}-vV(wu;Ed`GV@VXm8 zrpVhG>tpFGou+kOCuRD7)j!t#=(PJn0g{TixC}~psah#T6?sD8`*A3G63U?<+uirp}r!gi4fz$Kvk`Lju67#|ZnB({~a+>8<+Mj0FCq#bW zg`49G%Hu~z!ic1uL0b)Nl1pSS$zn0~tG-@@UKJHI^`n|c_w0G}&C${4R;+jqk@wxV zZ5vw~$7!fd)s&JK8&8$e|Ba_g5fGIb@}AbGN4npcbL0CtE1S~Yqi3K10l3}-2xN1 z*TjJpS8tq~+laJicH_ob^bj)6qOBLT=ML^dv-Q{K&>0uyI}Xhvv|-|m;Fv!d91Ebi zz21o+I%9lt&OaJN?5nM~>g`<4&=KUV*`pIlcq6x(b=k!*FTD#S$t=A@0Dx&ycG&rIk`jqcf*N zF+HCzHdornb;z&|p|*C5n9tY6Ln)J9&66t9n^r+L2c^-O7(c&nV;{p%RFKI=!UMA@ zflwh_=`FG9I#)-Xs8?G1_ zx@1-9tXT&=d)EQqb*uIty!@=~2Yd$ziW{$Y<5N#;En}8D_k>DQ!j{E^<`~Yuk)Ja? zwdJ1$kwLCuB(mwn5qQn8l76MrLSad>fhn(L8!+`L|gSPr_Ho_+``2X z#c!$fi|DVyqW*1!4l80Y`ArDT>x;r;{{yN<*XD`SZWLgK%F7nt&D``uH zeC_hy;Y%u#V5>@y)DE?EUf6!)@jOG{1!@`m#@|wEPr@lPN7SpBJ0~MyId9n2a;R;L zS_7l%Y#bN=@1PNX4z<&SpS3;wqFn3&S8HJLR0W`^Q=eS9dxnV|ZW zP12OdTbb1Hb_hMROp^W+=rUl6@eb`4mQc9IXnIL!(XUQ@388KEpKT-W?MAANAHLz( zl}mUduisMIkzhF!-&R7Wi{PUE6BNIpl|NW-V*Wfww9*kIvj2@y+sdY$ryjxei<@+w zYA~Z0n$$L;&X8vG259wIGtzNm{|Vi)2`10FU&lvWzNohp?cwq1et)KCSAII%zA+Q& z(eqa*C2Fybk?192S;S=ai}WM!p1yPS@WEK+WiUC&`EBO*Bgl-Hf&E6Z$#cP!TvCnH(y@toq6vs-$btr?P?1QWgWe3w0zTK z@A|ma{-TCJUnob#Xc9TjaQ~S(XkB3%z z_3k7iY#FW36H7n<%%1&XD2iUM&&g6bEOKqsB6?qi&bNL z**h9jd3VUWs;OR?tj(VvFdJx_lD49V&mTdklQaeO-h|3x3IrN4Qqt&d@-22o&0ly@ zi(}jHvwTKDLB-swZKzGE@RzsEItI>LQ~v|ng4UniVQe3oY}cEgv1cq!zrr{+5?sIU zV{_D~D!1zsJ4XHSB28Bku8ug~h2Du?hBmvQo;;nyQxjU~&*w8Od$O1c$$ry9bh%tY zrX&6lJ%2(Xr<8gLEs-i+#(5cO;Sr9%GCoX``7!n>S+} z*;F@cxM(@g;)oY!!qci%8-hjwV}dRTle^b7K z%9Ao9xM-JqCa&AD`(tYZ!(X~?*A3%N^1GQ!&prL}>aiW^OV2&yvUX_aCa6<|UMFbW zw|;8rpnoD3M${UKP{KDdQoTeZ3&}hC(UeBA`QU^r;ec_hw-el+{r^O75=Fpr9FJHJ z3cpdtMPy*pHfmv&B}Rhmu%K;X1Dv;v#Z78`$X75%nP9{uBZxX=xb7Eh-&n@LI+GY(D1ltPo$smbkFZAseQ z{cgNpR$FnZEG-C5ryX)nQhsQITy#&HKF3f2a8uM7#r~qFtodz%H zwo#pOm6RtEAf{yTm5qYc5|NaTNR3gV7mH;fTfo6Hb_cCht#R^xWI}sr$>e!!eJN+C zhQhRD%fWGX+=)A=E#IE=`~KL_ZvV#G%?EV&d@Z{%Po~>m(if~MJ0npFrT&;J%NV>8 z&})JPz2?kyI{DMLu8R4g3ql^ z42D+}B(mXB=eSlfuB@TK?o`hT5)D@pMGcH=cP-9ET>BkxKuK6n8WE7wVDFXYN}Z>d zO0&hz)1u*`Wvm=7SjOdG&Bo7cFYa0~wy!+~@un;-VM?S-@*bzOTyZ#f~cLz{{C9P>n^H`s> zn9z??j&{#b$8e!Mz`igCTSzOL3e|08d!JRc5>a0;71qJ-e!ZTtBzzwBSgaT(FI3a25RoxXLt6bxo(2auw&s&A52`deN?p=*K(OqfMLZugk8z z!PUEW1y#85Mo0G?K86Mj+Ehu{yi-o$_o^C;RWH}cK|kw*IYa!?0nr0B zQ`#=qOGV~^3;PKrWL#5*ig!uCMcRpQ9@_FX$itfYp-!%HOgZvb< z8<@cN=Y1#a0jvP%Gz|<`(gi{Wty9U)yj0ZM3w-{_dTD`dUm2qqgUCS}6;jCs7fPOx zexBU2%P}2V=nbFNG1O-snBb9P$G*l(o(``M*~C_}!n@jaCXLmSIU-km@}4zBr}*dU`Sekpgvrf;FD;m&KD}o?rvikPm26Q@O;dLZ(-#7?3CD zdROcoWZb6845+VCcjhcHKRshPxN2ZvrrqRb26vCv=5nR>YJuSN<{b@v&Ce}LWJ5zY z`UX?i)RraI>FJvawC(6F45*NaQ5n@)PsQu6dB@tB1VW!p)BHf#qlZD(^d z^Dxa=J7D;J4sK|Hf4>Pgb8sv%IR8N||2`Hz{};$VO)<^3e-hf>#Dn4c8*mm6`)0|! zpIiwZRNsHsg90f9Ib`|P>P~(86z-HByHgIe$aBTHV|z~(s#m=Z)rgDZpm~Ry| z4y|QZu zhUHDKN@<*nM)tRoFYrsJ4>jy>@6JxiZ7lD6FiP$xy9xhsqa>eaKa5a8vOH@YCTY3S z-_|u1E^f$GT@HyNKufGqSFNYt+}}CbZnffZ;#H}WYX(;AY~u?lyDcaf3`R7RKsem* zYmckxYQhN<^S661#s|wBwUU z8f;dYuJ^`qH8EGMQ?ls-mO zf-td!R)B};*ai^*my>!lFCM4f4E;%!f-B*7r1{xOrOU1uKg-iYF3l1F!Bg-JQrZKS zcS?*ECeOAmWdMKT-}#uqaIHvi9;?Q8G3hFDciCOrV7zZY~L8 zS0Tdik8gbAADIvT>c;Gjn!zgg9B#R$>FOVI<5;M2*&E~?#22WlS5)Fa-W?9Cv)pks zTai)X&IuND&cmfG%JQ|Mqf!t#&iX>D9s4jd@xz3ouEtKeInT}!j+%@jA&G}|3B~rL zs;<5=q*odgTAkBcVJfeQR_d#xRs%5yG;;vx?a&WW6$zI^Ytg0C$c;)vsIsA6nOs!F z^x;_IDxIdXF>$swhj^)&s zB@_L_)*@ilsGX!X=1kNoN?RijNxbmPG+lY`6>uJMCtRr3F{jwEom=Smo$*T*YHPVc zBG-FWqZ5@~4Q|J9H?)odI&Fi#=)~}ulJ`uxe@!ksm4!!>HTBPaIt?VtR_3qjCG$XyUg=lZd@F(+Y4802K`@=1|sWsIL}-drLLmzpbG znT)H_TpE^^Y+e`c?crn?W*buqdxc&DA1ID4y+Pap$G4$?^vC%H+vVm6Hh3zoNJp#l zV+mD`8n>=08mlyw+njQv)KF;%RMxhYC9ups9CG(u-N=n5TmywVwJemt-IYu! z&_W3WC2%#q9!i0qKeDiF#?s0t+63+gXIUYJj|z3#%8_W5ucS(+u29;bREt>)NF&9# z=Bv=UaqEu;_iuH0HA`3Z3+#9D#*t4`u;=oCcmo?mncofL>?J~lQp{QKd*seQGcE}6)s)7oJY zp!|1;k=e!X{hGq`-n+hbZ$qV4rB?-vUp-}@*d z{{R3VLFDgBv`}GLZ>C$R?Wy^iMgfkd-bSx*G)?B@ZxU0+R>+0&1CGuS&H-or#y9{I zKm`Fc_LtYWh*=B{277Cd))z~vM*7^tZi>9K$2rnaB+_w1`>0Z`fP4|+XyjSlIMkyn zv=PsOvW*mgjqf&ZB#4bbJwiRbL=eM3gg*YAAUF$I0VdHLY?h!UqM4Fz+=4XJHu6=7 zwt0n-TR-0IqO|VaTlpdLk1H=^dZe51jU2=$AZ8iGYXIppMfaUa8WdCJ%g$QZ#GnU& zy4g(=+bosYABw>T;Mf{Nx}(>pF4>%Y3yR)#I;5ht5B7GG_de{E)E-I`>X+QGHD?2!gVtS_evLa>Nbj9P&k9fg;k(r zUMF{f{{*IcO_JCF! zXs_wLYKXj@8jHW7rAh}!<_^*D@$P}E2M4dVUyw`Hf7hPAtLwQs#fiG@xAyd(I&$Px zKgw2ngV+p5#Y_3k!dO{Gip_=60y&jas{y4v(+>5C8g0lk)N|qx&@M|##$8ic8kIXj zW;bXVCAtO&d%TjHGL16T#?har)JlbtZ%TgIZ+wa z1L6mZ1aX-joPGE!SJocRi1zJF?(7n|6%MU2x38)b6Cu*YVsJtO0h8QpjFvMdHys z{cj3sh-G#qy*B)PHm4>6IL?l3V?7IUy|k323CbZisnvpDuNH7vk;Vwx@u~s0YMObH^My&t%-xJ-JK9UphgPmMiKTrK{#_a zj8R~g=0su{2oiSe<_xl1(46Uq(vm-C)c++z#=@Rgx2@l*$)9=eExa!yhp{mCK~1pX zeOQ?J=WJItEVr^x;jYV~Jdt-|m!K^NXcboo;;YyWP976@1)BmG_zYkkLt~+!y=y0) zDd<61yOuwfeO6vC&pykq=fe%@x#w2W^s)Z;S$G~%B1l3kHZhvpa0=0|G+H#tG#Wg~ z@|CbSRlFtYf|%}bSOKViVkrAhNUafw)7r;PQN!TAbo`R7**E8ioAtHgUqgVM4hr5Y z)YNRURuW*obJ9zKJ4o+D=h)4oqc@F@!+&oX>z?$2>~6v{MO@Z#Y+&G6N2Krmi!VOa zJ9z5Qq5Fs4JKA&A@bFbVa9m1Z#`G5;JtN$Qa(Qs{+ef6&zG{4t`Z$E~wU?H#MP7$j-#S<{G>&Z`_Ep@vo{6 zNtSnGNeCuTB41=1`A?7w+y7^MkxvksS_4Ca$$e#0FKfTC=LRa%fMnxy5D)!MF@rUmmT%zJ+@r?xywo z+1P`&UQb*6pr}?`R9v)fXWN4^is3+@f&1)BG;Se8QwTb>7Oi1#CGH5vq%k)1>vU-` zxCNrGbY6fySV8ZoaY?xoBJaDZLBdi19$sw+#T=)60%6Wd5BX?cHD4P1H0RL~)#`p$ zFiU!Qqdd_h`|CGW%#EfsZ9C<4LwN;oAoE4hjZ^8c>Wu@DY_0ohQb=|%Lg<~ot~)w= zSvReOmq!h)`isLbTA2V--7YGV5~#DZWD zzFz`I&QQuCPy!e7pg{`vqj6ua2Mr=v#fOH(VNGr{BolbI_&BmJxjKKI{%mE{ zc*i>uBWteNFf4R1ntcU+ZWy%G+PUuE)FrKQm2If~bCm44N1S!N;$jW$$m3d90)mcr zK^<*DaK-;d#0&5!djDgQuL-a29rn8i1#tk;97{uDyUt{`4v8Ze%`YzPZfa5d#L5YC=`LT&3U*sno*7f zo~=;byuhdCj=*+$X#|~P$2*Eh@RYEAL&8>Hsi`O9`|F2K4)tBtKe`cQA0o-XaB2HB z8}w0lBS}oIxaMxFefXdD?fvj%$0gn z(AX#_qV;cb5}#mcT>T6SUrG{~U*$YY9p?^#)ep50-{W2{kQebH;SE-dEtr5Sy>%5^ zFbRLTg57ruFsx+d-3<9fVrs`AHSemnXOic-nH4a6y3kEDD}dTp;F21Ya8TBAGH0LK?P7c-Il3`DuShuS{_gJs&~vP=wc}I= zH8nawQU7o_(^2ml>yQos(3Xycf9crZng~Vy=#aanZAsgVQ|@SqI2&b>W`9-21-@*b z_4@qPE^Kpw&p|8&&OO^1Fn(}xamaETMQ-RHh$?v0@%gJ<8|_Kkv{T`5C|pyB4#j!( z(k?;|-zXQr$0T)d0l&pAau>=*fg|!wiBa)9_0}V@BjD~X>eHAgsL$T64+*33I@yDj z>2lWwN7BC0b?5z%niKX4cJVuR-~FBbe?Ejq{~0v;7J&fSyyu8BFavEX)Ko;vHG)~) z;@gdL+cC-*i$l(Nv$g< zfCLuf3dtqmno${5l?HO^gOD>p?B8Wud2Az(W#eHHe7a)}rVScJD!Ew+?>kO~Jh5;x z7^o~ukd@P+?zz30x|$hzYpuCLpCX88%##iVTz;=)$FVYPXMEBqZ4SAb-8nmd8cK)< zpVVVZoCwq>6K zGCkgpriteu-HvrohAAbmDeto0W%r+m57+U52_Q5Z$}GAvZB2Q3jkZi@DKnUb#N?V0 zpKPgDRhdjGn@k3eeaLJolc`Eo-$KXJ&!KaCb$NOwgPkk0T#;oo$m4ctwJQlgdk%Oz z08x945=S2`jZ&f9T@gwtD|$+83Qu)xhrQf03vsiS7KnV#;i4o?>cIl%sgX;fp;4Iw ziZF#&33FxDaKwXoQ3ZBbfxG6Qkb;63HTa74TDVVWs5?H2#=(a$Q1oM0kxr!vMdTKn zR$Hdf)VTcD_Lb#0IpxAAsbypIu2e(23CrFS5Qzn8kSbg%J`X@VN!m$0lm&lB$CvKA z=Swujzw{M-KJulKHaK91m5%Jk!5o{8;-Nog4}%Z<=|QC10TVo`TcWl3I;cF$HOshvyVIQy7(4a7ps|EnGX7#N|d3_KLU&okA^^) z*vx;9`lp>uw*cR%EdsSrdW?NZNth5CNFSs70eY^?S;*i`h_0N8gcL$0HWq`Q76;A8 z(026J5cT7j8PtCCqZeapctfJ-UkvF$S|UOKeh2Bq1oZg}CGjZnD~KYAs*Tz5>pzQ` z;5?c%tXd)XWJ^+oZ<7}@XI9V69FA|ynEa~oI~7GLp8-B@s51ss0Bp{_z6k)O@AlqS zyIEePZtVrr4zr?4-PYYLzw(md0~xvGGZK5C_}1Mevg5~w4rUZ3bz8hjxC&Hn&XmaB zT3AqkD@0=WBYUl=cyZ^#wp@ly5$aPEXV~l_1|aVOY>C6WEJx1pZ*Uu!qlOc2xZY)1 z1K?S_(X;kj&S;}nxG|%xA5fS;mS5`Qcyo;A4KzI44qQol zjgBq!(=ItZxIiXvZ8OD9)T2I96>y2ga)bg!1N{(1BNqifANbmc;os4y-V@M2f8Rp= z_y+Y)^Rvun&ZNX2xlAhDg2#?bL&VLzW4C_HXguGm=Y`EPwrhq>P;-{(L3$osTb%6p zDU)WyR32teUyuZ#DbtW@Ew!k!r^R5l699j8)0lUD{tYylFE{+svC##^BtjCcA9X0I zIxHejtEXWafk3kwYth8NAo^a4bICjeInE>sKyY$p6Sw~WfONVs)he$neSn$)8n3!( z)VpQ=ue8Ryo3$M7$@8NDoeLrtkI?R4qtj5)mOOhzXmCy z+DOj)8&_R!-ffVTVWVj3>}+c8=xDCp(L!v_-wx-+ty>edJ6l_KShjCl*tKh6+x9?w z_fWz8uxm@W_Q2@KMM;QCvUCod0l%X&YB;+;whg$(0kuQuqZCL~82ZgumUqIS(WsKg zBvp2;Q_^EohRXYzCik@h(7RX*eg`+`8Ab-|qc%mQai>;QOgiL!_JCB>9ZdJVsD~0g zlMD!Qb`0?bAp&B-^7HrLvlQpl>;mt=^UJ~9{;gta{-Hn_vvG;-4Fs*naX>^LI6bKNq5JdVTIMP*&waqG}jgG}EpQ~2wKbYCo>Fc%?#Z*eW zzI9M|_NAhcmQaVqVBI7?esu0YOsiQODHadRi{eG|19p$PDF$g%G;T)vLJ)BWdb+9m zw&Ak_WwT`Aa~N^Ug`U5#BoaJ}e(!`B38aPo432w^pq^h3#T>MAHBt5oC%!-}y{!`f zw`=3{rcHljYo-87Y%*1sXfjn?prlrHTgZvJx(SYs`X6v6MO@YuB!%TfPH8Upk#=bh#g(mN8>gM?roIeta%}YCT6UDZy|eME)3pwGLPbVmOV_ z8jVn*IdjZ5WVH_4aNHw9{27iy6&fXEt00N_JC+zPlP@-n+RvhPIcP5f6z^8AXq?SClR~#%W77yNenrvOk}pqP(Uh5dD)EuXhO2n(v-7SBold0{ zmiK#P;0MJHrzHFNFMmwta7eS0*Ihz-R&J@-SCiY->ZQac9Ek@BLO|y14}nOa zqx1y;UvG7}$O{kO$Ei$*vW6}p(2Ken(mPvPcBa#CW#5@@?a7`7)&}rI-{#GI+1lhq zBclgu>7_g{vA1U&*;|68^MnS{F+hpQ$p|&AlgptK^6b}=uTEXsuCZ&(KCii=OrzAw z_K3ij(X~F``a!A(n#BsI+FWXiTC%@nd}G9{z{s(dpiln-+X#fKLdCy99~p0$+;QS_ zlu3fL)@5HCPkuvg0>`6lkK08TVV_%97xub2XY4-JvfEANv(r2%g%-eTw9hO0Uv_Ch zfnC{aR{B1@TIO+4Pz!jSW$)9qH6s1S%>{jB$m3;49tm zm<)s~d&FWx#TBh~CZe3PD)mqr*)EZ#7z)yBa_F#g^cqU zcqNX>W9ao%%P?xJW?umpA~4&*AlGXybW2H%E*5ZXA$*hpj)jHemdbH@7S6{o$5Mn0 zT(h4B*;$`n%~j)6J$Cnsz8ZADk)85}6wYFBxp}LGGisHRC?dKT(bMXt=9_ob1^Ob; zt}q&fWeT&bY1H2xaJAWV6%+DwCzd*Myh?WEc6hMbmT|huwJkz&alUoTUG6SRWazb3 z3EqZWGH~xzgG|X)tOrexCr(j$9NA$29*Vy>eA#8-5w}~O-PE+fMNLT8rdIHg5~?cw zhruS+ThXp?K^g?AkIH`ctsl6bdHWrAu-<>IuVKcCoToF5K5&9fK>|m&lv-^u1+kt< zgrGAalJt1$lSxqb&zTS2GzCZUk-nAN89vH53);m!DQW4u|j7?shm} zvafwt3fpe(tH(5C{1UV_p9hv8ezyk}pq2a{Y`sfhM|u>Bfe_EZ{otzql_&^UQ5E~2 zijidR;8o=Q+ruY>gkSfgmO>@*@93@?u73eXw~cQOQo}v?<`6*;4|_aPcyehk{7Y@* zu)^cAD&ncjrs<`?t`rqP^}4&orNs)n9b3J`i^$GSC#E?bV0+4>bkH>s1w!xy@BJRji)K@W=)JF6^H(C{9@O}S)aq((FlF0`_ zS8|}}I0}s`io^x47^LJ7NYeA^jgy`_t3;ujx}x7;5~*ax$?ooCiP+m@Zy&PPZvReq zDmAE2C%aPe_&mqXUx~F=R-%y0N=w92g~_C}bxqZ_?rr?j*!+eq z>HefKxWGP*?kSMlrO^VeS2q?*#DSkl4FQu6Gg%`5WIvOa3lco>)SX0aUebtl^vEX< zzV{<0V`Vowx3_l6YM!(nenej>kk+$Cl*BK&Sw5^24IV*qJ-G9aGVsHFoqdd9jX3jb zjH$8?)EYG>G#_3L{rm5SW5^s;qm6?@vw&Y9?a*86FoP~Z@jUWjKi%)9w)nQ znBR0`9}&;qRWs8QAP5l==$Wahfp=w*@0}+D-7^qd|I+K=JygLJ+0be&lS2qS4v1%Q zWp2@7t~_II;uMQd?H+8et*+^Coe1|ED$D;C8}v7(dpd$!e{O9Eq}u&)t^RWGaf3oS zHXdn2AtNl~<-i<@UaN#Z!0JIX^0`)^L?Y*UU z0|0d!fu#cQ7EpqT_2+Mkh2Y^8;Ug)Ov4k^DX0B%5z(Ci~Tnt%iA z7DD&1huXe9!)_tcE+AJ($fXC+O=4^>I~I;Y1}9sL9&X<(5gU~zV~NU8)ikV6ghHN{ z#?Fl2u1k=X4UyW(aBF8*cWUSPjy8?TYRiyA}hy0tB} zIgPTA;a=(l@E#vZjs*n$4EIvAAdT=PleG63#WmIRDCxCg_iC=S|A3(-vhxm!(BtXo zAUki9kZm_hJhKYkol`!%_3cuJLUPq7o8!&ErJz1$f3I*9Plp4%8z+Ex&k-spV+qFN zohL~=sj)0Y*9ZrE0=G%_Q z-VBaWQEfWvNhrV{*tHGpbZrAk;`6?5rCyu9_RbuAa%f>?b&aXQudw)6d6R&C^7H`E^&usBy7NP&B!Krz_0V=FvJ!qOvzsIzXukvfII$dwRME~N zC<``7v5A_$)EYuRlRMC}2d&5+7#II6jEh$ZTvQxck7(n&@GvNRX%};5lD=EQtx6>R zxCwxpKh$vL7AgXM%LnVPoTp;ncP`Fu*$jTRI5)rfWvE&Y$AmZRY`?gNyah$Phl+08 z)qb>xj1Ie$4sd4o9wGRs@S+`icMG#~!UJgZyuD+LXid~L*tTt(w{6?DZJW3Iwr$(C zZQHhO>+9#8`6e@y%->1Q$@x)9W!J7T~KAo)e_OOtO53!4aXOHscpFeuP_ff*bc*omuTSB9~-D6-qxdo;~xRd5h zn)iWw)$htSMupANJ&^5@tgaa_2T^eXJ%SZy;<|2ELyzH**}>d#c^#Z<&Sghgh!|*J zH6WHi67(WYG>LPbko;q$gZuh&zDO8V~oj_AYIA z<*~*?Dozz!-VPVuL|wqaq6_TyoR3)1g~wG6I|lptf9%TzJ1~)@rmpZP@H{Z85kzKp z?x@~q_XqxbqaiLTodg5{RDoB1_#tSY(gHkw*@bp>!b&(@jJ$P~j2i`KgUGJbh zfUIg8*DR)7O8vO#EA1G}aLLSB)2ybcs4s1jlzG$lX_nDedN8*-P??g6s*-iHo5g9B9`P0+Neqwl=DY<)LU3&Gd?|Bl&oT;8Xu$8*ZT5scXzCg7T$LCb~l+8-g@=6 zSK^^qHqPGJ++2IPOM^7ZZq)eL(Cfo?t@EuoJ3E8buDfW4>3es(>m?>?tHWWC{YgOP};{buWw#9XKy|t)0WeT3GPTXC$JgL7X|qX7aO?Czck2M{LtjO zo%3&m(;?k@x<6U z>@k$upTw;ESb&Ym|&~ucyR>tc8nze^S3vx%QGvdZ#1gkgy+}y zHZNrY_Or{a8X^v}j%h2{FhX+E%c?0*-o|xw1`$wjbmPX98PbcPeg7(h85fZq;7t!L z?NxkDhNCfgE!=G`yYK?9#&4Mh8RJZvR!h#5(qYbv!Ax=yk)Jtj^RzxZ=MB1BO_WC3 zU~#@9MOs^AXu@(ueR6|(RwJ%;^2)e4b%aSiC*K;_kE8Agw#B#r%XL|J4obrV(4TQ7 z%ZeK+9o%w1o4hP~Dpf+i;j$-b4q(hjBth0}$CUqTj-3+1hTOkN4U!pi|dj0AT1nd66di8x<0)WxJz1Nc+b`vGV z!BmK@9H~>YM zzncaAO$V^>vkAbvhL1~%a7)O()_^^cI1yK==<2Utr?VMz69(O#{)a!#R)CTG568cs$@Tt?%nP?=V5pvfFsc3QQnEy|9v{xK;%bkwK8Gi9B|M z6aXMUnjoxQjLs%Y7DdIM^Klt0jk4v%QP_>lUoAVKj09(&fTd6R_w z5xkl0tM!GRW(^+DzzxAPY=9Ys_tbC>G#n3&LnbU9=IO^H8@_Mg zG0*tVyXPTSKWhw(x7Pl&Yk=4t!LGp;;*V)FruWJ8gCcxBC=<%F5;eea;y9dgC{Ptm zS#O!1n^t{Js!wrA>opoe9tP0_T7X#n%7j5705=(>gPGhvSwR2eQ4mCtlNHsPo<-a( zZUh)O>o8%~7w~|u3}SyUHI1|i!d*N2l%zK7!{}-rovRKn?Y0~PyOGuzzUAwu=9o91 z1KjP+chca~B4skv++q*g6r&iRm95n@pJc3<9(;EB2DfQ&4e;&ot4JI|P|nXe0p`C;u2ok7|feoQA<2 zNPZtPC9)6Va8f&4zSXURXv!)X$BN+-`eqch#Z_G95VU=lK5>#50Uw)h0S^b7?vhm{ z62^7eRoeJN!B!9nHQ3F&9*DQ25+B(ylcDJ@9ClMmSx@bi-IqO$h*I6MyVP^edd6UJ|gs2qnxZz~fVyJ~r_LbSr*ZH*IDN;hb0|Q=cN<^gklzv;z;p ztiG+t_)n~GvR~!&O_W`47^jo6fcjSVF3<8z66ri_E#$Qyvn1XY4BjyG!5u@Vn(BZSC3R`dyN< zTneYX{If`Qd~+{0clVQ!Yvgp>8h*~AH!5!0RY11$p8YO;^gBTQ`SYQhEXpyoGIfA& zAwh9qmT+L21eI;EhgS`SycH$5?J%WYZ8w!1fCIDn7P^()?ACF{T&6YL9+Bp}VxSg& ze|uO8e4VS!UFZL^dm?Cbzam+?A)O2NSs`g{v9UOv9pc%+Z-tfiBB@q@uSFMXq|ZuH zq@K^=KA>w<8ffv`>2Db;YXRi!1D3C-0d)Rei$x3oZ;+!oyBJixtr+sET`WPOwbdhZg5zMO%zn@?=nv%_t!As!>ovZE9O*ti@$iG-*m>%MrDEM)zj=%cBQZ zr$id3-zHU6e-?>mQB+7~?pnUc>aMOaUi5P&9imFv@|qd%93ooXsLTZ_f-&~c`YWPm zK*K#!%pqRP9#Yu$h<}_Ns(XBw5ZkSp+u_GqE+KimK`5c`o?#V^FoKQU(D2t_`vvJd zrb^$AU8I~Nt2Iz5=Ix(=bFC%gfx0?yTZTQVOrE(7@hy#xToe5eB~I-Z(&9C!qDl=Ux-+%-O1BwBI!5?dCter82E3D3 z;>*`M_hFQ@7gI>bk>#+;Yk7Cl&tK6JIKm+^>C zc6>S94!Cim?3+#5M>ja2fCDwGf&eu}e!4&@jy`n|l-9^et_zN4fRFTXO(Av0M9A6& zRnC<(&Wx50rmz_y(F+!WfrT#S*oej6@z5RXb9)~QHN%CnUFompv) z|KgWb-gNv%5@Fz!E!(4Tn>z!JLn`&G+M~5! z$t(uH#85VhAW37cN49o&ftlJIP4jUhaAwDe*s~s@%>CKc|#~ayVprP_3WQ z?Bj==!wbS2oBfv(djy9>L`M~2yZVwj`nS8ot<1NxrMpgmCej&AZ*lcW4;=};64J~V zqC22u`{4VvCPgsy>Q@T0o)FTAm`4pyLuhg7HxK2Ic2}83k3?+WKYY8V9G#`lPN;an zOmc$W(=2%b@9=!_^Z>y04yA~+F@u%B}d=gUs_MtVEQx0ib=1`wa*VQ=SM1xZW(aIlbYFmg<;MPzN3cU+%Nn4On>8s@1AP z1Lhi~`z#Fn!k}eG8iIiH^)~9FB1V@+@br<&Q~IbW&oa(oJs7?D`8{Qcb8=eY2td z1R-ouY?-1D>eVj1x}*%1?@D&Yc-+#w{;F_FxHQ4;Z)QE)j%Pv>!WwboHm~ zu2;`<3F+PI7QTyG6#-wg;+u@QW=o%~f!Y^ix*(RI?)w$hRjdkS_&m>Se!W10qY3Ut z*?Mx@WRf8KQ5S<}zx7Kz`*vl+`sssCl_pYe&vaz?&k}p__)_y*DW2iQDlkpCc2jyv zIjrK9|3Lw|^8Lv3YC1DnZOD|{wHM}6+TaaefF)6|evf;jQa9Z6srBMwJvYP;))VUn z^(C+F_>$NT*Vx94WoSW=J5oNy$qjiymLb#{o4dip068<_XHLFm*ZnydBweHLIt2jB$c*+BUogh0#SoHlc@e*T0$*XO30h z-$;b)j&|k%YQ7R6ScBkcn-BW; z2;xy=8H<=`7y!58fx?;RWtiS5C^I+#OE|C=1GpuI7k|$t+_wL7FMjQ0UC#|D z3kCRU$a+p-X&iYxeoJcAP(R{{-w#^0>)MHb-k)!Lj!9GSr<6-u>p~t@k5C{8#OSw% z2bsY;5^Q-zYEzN#kYIBZww=s~Z!d72?!p=>G2e_Dwl!*F(XeSic5t=X+w^(>cEP~} zl-e*_0jp7j(G)7nO(H1=MZeZM*qE89MBxMOe@=-%QRE4|SuwE*>bFGLn0m>5N!H9( zh3P&1PNm070((W{+x?j3qbusuLQ4|#?KqZe3y=L1VyE0)_lzjALQn#{P@NMLDW~Kf zYKpu#A@tgkbE6RiWR{2Mx6;}AQJ!xDE%oA0*k)-ty7)Rbmug9uS=ZmMV2=nfCq&<`l#b%uR%M8h4dTR|Cp z73&Ot16X@gENmwnV$h3Sj2YC!3a83mkwYs#4ZU4n$6!0N6<(uR(dP5WKDuU>$pC_sxjZQjZ5!^$(XVOIF(sck z(BEM&b#X^|a=dqYj`d{LR1Ew*(pg{G`4FTNU0g}Y%_IjoGCx8(-I^83ywFyR=@9BG zxds4L#^1#t3U1xxFWFGi(XuF+1t-IGuq*EurPcVB5Q`HA5Qtk?r%^y6* zb3KGgiAW_-W#Rz8ES)3QM$Xc#h$l!?m01ad&P>vU>San#WdHCm(`0gYG(J4cCA$Kl z{d4s|2@pN@$*QzeeEf$B8kIxH+=<8@O2EJ)-q5f+6l*BBb^kSWf;U#T@7EC;FS zQTe*$WT)|jtZN{5hF_B!Mm-GK(HYJA-Kb3#rq=uDAKo!2|7r7;yS3WYNY3j z>z#EJg@h<0KCv_Qs#u#sRkJ141RZYwkw5{pOk%F(b+cNga+xiNYItOuY-mIl-tnQM zuP&s9`4{*O<@#YPbBC}-5Ac#J->H12PhG$?OJgbX%Tz{UxxqS5TWZ+ld%Ay@2l`HQ zB_bucie;}e4XuiW(3^`~2_Xa5u)x`0$JsY+*8^~iZrrLx=}KBpSN)f|d3HDbov3&! zhUEzqn*gTyw>V(gwWlE6v{$ald}0+~GHPnmxjG9R3>5?W#c7D}Z8%I#D5*OZ%A;z)?1Hpk><^8Tam4VKC{eWM9&LmuOe3Y0MA2x4ubuI4xt zxd$_TqlwJfDuO0_FQ%`a#!llud>f!#lZ9`aop>rpVS92YQWJTa3|(J{>HW_o68#sk z?cNEc{!SgRsW&<*R+4ae>a0lQcHuGK3ee}~)h-c`#f|87* z4D^cQ(UZ|vHJ`GS8#W2k1fNi{jX~E5UMHWc9BH=s)5Kk%oUx~UVH>CW^@>jmkjUHs zL#vJHfUfgCH`l>szG>1OvmN5^Atlp1eDrK%S3ejZZDXuz-E(>lJSFHao;cXmCjRN- zfc0AF_};!X)2!l@{^`59)AgcIspOm z_X=vr!ci0UFUZbVGwj)KliN3pZVqJV1Yl6E3iMZvhnn>bT#i#MepeF}>wnA+d7PaR z`b6XKUd@Q4O^cP4IfU^#Gwp~bJgu-!Ur*|P zqD{*N>o=H~#;{j1#YBdK&~p$8jvp;(hVTcCCgxMz+~W`-JI^F81#jBes5Dc6M_21F zN1>}xMp_CQ*MStM8#4TQ*UQ1yAcgu!=!q0AcxVW%!zXce53&CE38pY_Y`!bVrY{yz z_${F(!&w9{-3R#gQ#`ok-Xy&@+-D{~-Jf5c=YUSgJ|2v0AAcU=X?#6FD6n+$^4}95Hh4UJ49uZ~2r>Rt)e0Db1d47A!eT ztH`yT!>!5uO66#`bSt4_MzJ)I9cM?b_A?M(VW%=mLLk~zP$ZxPWhf~S(lTMd)NdCy z3Oc3oiY(Kd(o)4LR_Y1kB9XNbQ>Qkn6<$|tMvv|_j-=VNNU#D0YPH1jOHcc7NsGR< zGhQO7E{SPqs_YI95i|R)2l1EhVIm-H;_%1Uek0VQ8E}(?*UZrY}5MHZ(;VgbDD$q z+uelx#JvcB*{}nU(e@r^97fLb4N0%^=J$fzI4m=!&k;#?!Y#w_ne$T3i^lllpUS^< z8zAqzm!u#X{%#qG)@rM>AKmM4s0a zp%JnB( zkSzR>Fu6+LAa`g06X(O@-`hnzLFjGiP-(qRWM~M$bLDv zoL>pU6&5E5V8&9IWWXwbR}K~STorgvwprC`EU^%N<+X1Wv~<|H%i3MU@^rGZ)0?rF z-Pl?H=6#!{z*x_Kx=8~nxII|Rw!h*XMKGEuEGiqHRQsxIS9M#&;xR4M=#zc816$Nq^Lgts#QG^ZE%njbuaAK+~f?A@nM5yFRi{Ery0 z1b8F4jGz?zX>XHX&am!Z?#+~st>0sQOAwmaDCy2$zH?C+`XS}Q1N3vc6 znc~A55m=Y$YvcS8jTLoguNu+0Wl_axF-5>m9#!Hso<_F9n7QAL=DKf;rea zC1H^1CCR=&O&^3jp>1)Q?GfC4RCjg-8xGnT-5UvEYUgG22l=$88t{MdDy6+>VLhuV zCeapEGmeEB<2s7l%g1W~4xX_B)X7+5*hoeM)ihy=qiAu{SVfYiQ5HjBs$v?G!Kf2i zpAzNOo+zC*%T+BmvBU&x?7rjG=~#KTylS-B2b zeLO~IIY3)@J*=k-8q14(^J1r=c))oj0u6GifB;{TWfQT7A}vVo6wQg^QXztdk;3X? z*Hv{jubI+;j>a8Bm>mpvrlk(c3?qtR#^_U zq8824%2lG3#JU6_0_}Lv5UUy)J$bkME;v|+*WYb-A2Wqrcuo}{OB8o8n3h~jmP5Oc z8X1}xACHtJVSyxNhW*aAIIM*=z%(zdRWxt}kjsK)6G|c!ho#@JnwTzZqZd%4qqL6w z;PL?qQm**+2N6ZQbZZRii4Q?VL1ahVff+9R2RXKBVIe2|?S8~apXg)hJtm+m;)e{t zT$>NjWK;GjP^Ubp47H-!@|U$$?=b_LdhkdxOMocOf)rL}D@w9uSQ(6_MoPOntgDXW z43)|xXhjAAcTAcZFdUG>(Piw>*fI4PBs-u0JNUIS6FZs(Yke&yG7P5^rKVR%{WpRZqaH zi~y=nN$qh{_deyarcZ<~$qzqLxZcqcu7n^t2FbvAK^x-=VKTD_7v4PEF?cG9L8;*l z&n{s>`Ko@T1k7!*$S9BBuGVKzM@vtS$=fb#2VKgUGiw*osjGs-EU&k&in!$_ zFcB?97yZ+}6p^B|i}}oyRlzTw5TtcL${8)GStD<|iyW zYqxY)YY_6)8;!?m?;&OOL8@&hAY=An$EgQACI93vglyj%GI}ODjX#J_jgvC=&)!=* zC*T%bcdAv3<-sn-6ZE1icfTchweXcZmMsY7K9vAvym9N?!a$K4f*wm@!EjVV19ntg zBp?L#3%=#TlkZ2bzun9EI-H*HTs`d;g*)z#o^x!3DTDSP-_YlddHU1em%k-yE4~n4 zJ66ef00xHiMIvVoJUq_~8CDPgq4d+h0KK2f#a5c#E8aED4yD^sA^Jc#}*C9Td_0Ag-@JUnpWo(*Fpf1RFZD zXZ_461-_r$3o9!drVAcglVn>q%A5ycT(V3|;?y<`&58))>qLm?6iZvcN1U?*h2w86 zM*>&_Vx2|%pPd)w_W~EUV%w98;Tl5;Ds1f{HP%aKr1w$gl^Qwjb>?FOo2cc7A&WQsZw^ui!YQQ|5@QL%)o+OQ<|0rOW0Wbo`=(&k zgxUmz=|#-lY1JqEtbbmhfqSVtb#>*R88 zTCs$MbH^WSmnx&(r*caI;8?n#A|$u4e0<#>E@QnfZ(#-PtjufDfv8wE0Rt3`ES98* zc8!q!X_^LUJNVZo&*zu!g>a^29Td^hOqFd!zZ_XKcutj|t5{hl$rpR=#;&<=We`(U zDQlb!Eq7^Gc45&WY+DJdp_5I8qwT5kQNy*(-ly4Jb{PdP44#nRS(Y3x?>)#v*>+!T%#()Pz6oVFbt#Q$yBgjR@ujIv8h(4e$kHtdq1- z&I%ep7BFTR((DqZS?r3{pQeaUn$<1-IzXmlNvIeP&)UdB_yCTrH7R0Dn#lW4o>OK! zwvzp@CmM|}R1=K0o3lU6IaY9Jvki{bYZ{P}n)O2Y$T6*1y$JF7Uk&UZ-j<9Y6Dp;U zoy#({6iG>E2A%gsUrZm{CD;afir7DPk?-zrVv0<}tkvjY7jg%851Z3Z54Qr%$2(s# zlk;p$^7(Zn0Dev*?%O&rDEm4Lt*7&feNT`2#$AQ^8I^JMn zY^N4}^A$80XN-O|z6SEmA=!+$E-3u1Yj>TY@Zv{p^j_Wk`IzydXL_;ndl+qkcEi(* z{eH5gQF;x%hg-xFqE!&@fw|fY<&}Z|pfPv-vnC9B4PcH*P@Ya3HkUrVLJ%t)L8mPO zb66cie;(rY=leo zLM&oft`=$clxUf784SaMaHD{oIAy;oQxi5bmbIi3ae1J&vw=}xfDNFpFD@IhO(6Lz z2tpf(R7$IA+n1)(?422B?_w#j9o5cK9KimJ=Nf6p*^j`~i>Hgw(xmsrDq(b_SnyF{ zO3DTA-)6cpfL}t%=v58?g!3~?Q;NzsAAC3&K&h+U8ooNt4>juatNyiSn(r$?=vDa0 zxn?}TCoCOOw*()@*4Yg_YPajZVHkX;jw(!p>fj4rEw-W1wRS7K#zAGZfxvZDNudRB z=MQ>D{;el`1e~F&VdM7X+&THlbLJvqG%$GF4Nq9(Fp6@Jq>Ai>K?Xl zZrvrC48{q769 zRyCO?Bu|l%IowwlZnxcstGP-}g~7&_tFG)ur6R{-9vSfV2s&{6U0O>HPiUxd zR6&d{OP)q#-v!b&sUn1iwx)d*CRlZFoD$UUK zOVhZ#K;( z87V$u*SQL+X=bw-mb#2PB_gf_r+_YsvNkw?E_f`yrHtUCDO}nD6O~^X1y0Cb!gJn_ z4)jkZfq$#Kr?@r9?L}QvRkVTScft#f?HtL*x8#cQx4uXWcB!{Jt8ouC_J+ZON0+Z} zf_(r))r~|!^GADaQmT=}zDa|QZy9%E)EgbuI1N)E;kzvLx;CCf+RpSYz`J~L-F0Ba zaI!B;2a7!Q#Zsn)q}OeE{`ikEws*Z9#`JTgbuIW=G6({8fAd!H$TedtOo4J*2qxsg zPDBuKS|FNq6|Nh8hsmm>%pLY6^}G#LsYlT}A8GM>#Mc_E&GbF;3kQ)5fR zk67ipEl)GUT_OE^3BdW8))v?a70^y-E5FkKK83baba>9d^_vG0qc!E7<;jE` z1S~nM!T6e-Kxr9POZ!xH`z+!AA{Q;%SCeQ4eDw{VYyd*Eco2@&U1Beu z!Emb;0~0Bcxl$MDsIjh>Ux?GTpnz2O%*Dt8!9jpzULrmHoidMWC|R6y(fX75;NRn; z2L@{-mK~63tKNe<#v|2l#OvDd5Wj4~rW==nA*O$^t748jsM-wgPOHt^vFC}0oHCNE zeu&lBxV$aq4In|QW~I}x&D%;6yE2vn;+^g#yzg-sm*ngwm@87Z0$EyN-1?3iM*N|` z(|)8QCFd2Lk6MD1n2%EY2jF{eZy8dgZU2Fv8Pu0vy8LG8qwz}1FptOSFD?O`m16!# zpVzH!o-mmvbYDB+z@g|6Y(jADoCHGmw56FGhJ_+_l)=EW7wVCtYO`2fFG218`TH`# z-n2kpM?iYIkZO6pyiQ6Kh)`fvL-ofz-ucWCPgjZyo3lpfB|4-PJYamr`2`y(vAoc# ztBKEoN(O6|x$jNVWApH^jfJ+I338#C@sd`aoJfSDQv%3wNroOiH%H|!c9n*XfT~75 zX(GI-e!|g2-4-~vV&xYJHAT8VUrX#Y;21qM(z=vasqD0gcd(f?6sy=RuM|(x~_;EM0r> zceMh7bj$Q3=a%{%U8Jm@h~aJLTC-F8y-Le`CLh-W4SV@Y1LdSOR#?xqW^AF=r=1*m zMU%uZpnR<(e5KB%oqfRqGHi^ho;SYl+aHrXed=b%Ef~x)YrEn6${Z$q`G&tkQ1&O)4giPAg~4uBTATc{?k)=f5S z3@Q#dGzHWL5v#&}yEZSO$b-vdn*4!-oom3V{RXAp?I_%5bnxf>T;wA+RI10rO?Qb` zn=7C?wohCqR=tiJ7)fz9C84zrIg9%VGqa%kdeTXKIowkYMo&FIuQF0x$fJ{BCtT&B zEI!F6J%<$ry;1w91YXBSiB9OX9l1q*DW`HP8i2yU1gHnO)@@_9HzSi{c7{#!A&5)6OW#Iu!6Je7Q%@B%G4MiEw)w| z@JWqi`B*B&rF4A_Q;^@VYFHmstyMHxM`gbD$kuT{k#$~iy_^VF9PAX7kk ze9nERR{IQqsJ^<22z1B(ZpDZKAn_&t`wSZ4K>7lMdLdn+QB=3~U)u7LS2b$RFO5N-dZ}V)8gUbpC4OiBe8-&d?W}A>T3z}Aq~~$eT0`+n&!)h z-r9dbu1r4HICDgxvB_pC8F44VZ1n%!++|%J2!5Fy#M!9RFX?K}ts4EP?QWsSs>EBCSTYyn0(6j3=7Ds<+nAR4-R)&9%8?SbmvYBadve%epzcfsk|V6!{0k zTnMILWKqE0wVLe=qafPIOK&v*D0T!AQE@ci=^O%AiGIP3zje3L-E!ClYvnMIP;v)R zkN9Oe`(ciz;LTYchB?^l>$KF!Cyn5+~?y_%cYnWOu;CNMLJI0hFMbPPf0r z)eIK$8_ie2O;@bfRLjHL?zmci8|UyhY%hn;$GloX8`3t@ZuIH=q!WPAMR9kPy4c3pgg?fHZY_R-Vr~n=Ta2J0@CZ_Z7ebPKU%rEK|)vIvBnr9 z+%4)>A?4|G?N;Y>OuEo+vwuf6R^(U8`&LiL9@IDYyQdzSRn(JK+&{;llG-*@i%pkm zjb=hkj1Jbxh>KKzsj7aOpcH5)UBI`IR?*uH9yi^?8+kI_KBefK zBGEl-7Qk;@zC|SY{4utxym_8f$ELxYd?S4r^ZwB{1&b^{p5_qqy8Rh#E&9PX%I1sq z*p*2=rTiG?GBrj1IJR_aOZbxC)4=zt8NdFZxuj?r6VDu#^_O!T?X(er^3h>Eka^VF zDP5L}11Tl?{g<5<_JHuHvmp6f#D z7?Omc??DQ~LKeRnDyvtH?qUTVRTs*qCkZkXV{g0lJUB_5mH9=%CTEo`>2Y3L4HM4j*|UlGswD5}*uGCtC8 z6jY(NTV$eNeTc#0TG{rxPN^u{8CI7A)5!eWkxopP2(C zKLb~_&EL5v@#S_!;uH1ltVWM*nbn@aJI)$U_-=4h%^}#q{g85Jc#f&XI>%&{Oa8*n z?5XYjRr1qXz)>Bkn%>7p+zw9y0B{Gi?o;}Q3IM=A=LNpje7uHt+}ALYwo&F&*pnRF z6~G$zwZ#E*J5#fA_!_e}(n|pNFAxHmP%@GoGQLneflw-%8#Fu-!z9vyEY&zXL7HiR z#woE(zDP6+Oh&WuY_>=&#{*5>ILt&<{RjxXZH6iP*3Sx#{WNx<+M((~`v#1yeQe6s zp<<);+V$E#0RPi5glp@__N6rieeSVA=h#7x-Oz6a3>K5sa52>Z znM~#`IHhyH$)Y=*!D_k_G$I+tWzvB>(|J6>`!TVE=Rjk|Vd6oS>wpH|{Q~F4ebi<` zwNkUecA%Jc!}W5#;ieOs&M`%duI)0sLibe$fx8qO5I`T`^G2Y-6kB70wfR!B+Cbx#z-B5`h*LO!+ov5*Zk9EDn;T)GV^sa&~2p+dF`EGnJZYR)18wuVX$P+BafpuVM!|ya$E91ZK!{>S`eM5PuclndLYbbyv^M}d}H`g|$dl!Z(L?-$sn z%Zv{^_v5IM9QV_t6Md(&7-!f0I<{Tc!*)pL;~aU8&)rf>hBe&qkiqPY&$2Qrb1W9q%|HpI;;B@bmNpbcY04vIMH$*B=6Pnj zzI@XE*Btfc5s%1bayni27g4X+Znit!^c9fL=zb!Dz+bok0HA=)ysQj&`$jwJVJloM znp$rxH(?eu+iVO^I-CAcB4(B@VAceCQe|mi)>WBY=6{OQ!s9qnOle=rS7j-e7%)i* z;Fwe?*=LanU{+6H7RiG$!+X%^6-28`C8aUJBn(6nWk{4k4jJ-B!O0?Fm+FX}~dufc`u{NOlT$clkbBGYa(XWsnN*1iX zA4={o94}55q&zQ99w1#mN*1DhKU(4^7*0_fs5nkh@=vn7v^ZGvytG81h^iot3biMJfNc9|aflJl2?#mIkj1opvQy^C@8TLXskTqD z(mnxWYa6n;wpW|8ROK6@Q1#e6;DvV|CB}OQEa5)jpm!gm)_n+W={)#VJlZABS=8fs z&!2f8H|xGlvhzL(2|mx-o|uq}TEd7@igrw@Dw9+TJXa~8K`j+-qEbfed7Z-lzQ5rU zxYd^j{AD)0T{78dwpp2J=8&J7gR+UQlW-G^H!c)UBGU<$)~G)kO(NIx7ZeFk8jMgh z8CNM)F4Bxz7auh09M;xAe+)`v|OkbDxur*d^}&U>&^X* zo=7Yv+x|kz1=GoNrvD-Y^8YJDh_ZFs9j}I~xL)wSA^(AEa{&MV=+mFcnEe{~_xIgs zj-s`~wVx#n!F5<<7|F7qFXNA0m}bAoe4uMRji0D)Jx{-|Z9PlgxNg1B-L3e*bH{i+ ziyO&yKTkW+bw5j5*>=Ckdf|ONO_=F^JQM5SD=SS4D;`Gm!6IbSJK!Ft8%d_G?#R`a_s zVXzpj2Y)4M$)wX6ZH6m39?)ns>#c{%SuR+u*XwOYs(C)X-%tMYJHqd{0BC6bXGAs| z*H7!;AP^`d7=(gBkm!VpiRKK3Lt!Zd3h~C2ibWDBgi6WQ9F9k0YPs@phNO~7lxlg3 zNtP^@OJys$3JIpPnoSlfc}gj^Jf2TyZ2GgY2E?LKm}~~~i55(zQ)w;wbMYqBs#O{- z1`EkHT&`DZZo9K_M&z4r(x5$%V`mR`XKn&v^p37VFE$%@M6Va*gWV4eOQx*^bNR zk^eJ&&*$@q-p_w?uO2FI&@U2-LaG_5?yyfPo=Bn*u52-HGMY%L6|L=Y zk4m9js2=uztv^kda~AW(LX8Mjn{}7dPkPsp&B4R`Pj1$c!u-X0<>&cMX(2T+HHa%? zup-#pM#Mx`z&WtsX*&5QGWm5($qWGtXo@R{|7q$l^7Zu9wPbB^V)VOYw2{rw$hTLq z7LKg%cKIs?B~ghVhp_g-XPz89G9#9W z@tntoslZ^zEjztyt0bfy@#;kf@(h0XD;GbLmrD&4m+57#YFFTeBm9O}Y>0anR4P3V z`NSiskou~dy^!DhkE3pxiH^kysx0vG?c);FNf;=xqu}%?2F~j=cA>jbk-BtmU#tSK zqww{Y!waov>yN9FnU%`ohVl}3SzE}dM^0ueF9$&yOZaH(gKGjhW*5_+=eFq4)aUL8 zKwR%yP7KBqdr?v2OK;{mm5UbA^v#mftp|^j=c8TH zId7uSxw{(rNvmTgCdL4X>8tn6Ru}8y|DN^6t9d5}8$Vea3StIE>?XjL?5@ z67Vo%g?z~jhvCOKILJzj#XXH@e;cK&Mrq)MOoQA|luTsla9|sbo##T9nRobXpxvxbsoHcQ~kjK^cYm!`m**);W%kQc1=38Z%8dRU`$Pe5NtCJ#lHvQpsGyjsCvDdj{8!sNQ8lu$; z4lmR&-MrtgC#t_L;ar9IBUSkoYP3*|x>i@e{tFbe7wVL*Nd2oyvR#pT=s6M^8a>jG zki=cS^c|5rH%T~p*uF^9(0~I4o>hfA#^t_&!JTM>dmIICMN1G0yn;@D|Gr4RI|Zd~ zBBd@!c!=;FkwRx_vpYN7kdX~4e1OjXBI_G~D~X=8G+sVeZZQHu>#@^Vr zZQHhWW844i`@L87{`GFv`MUe-IcKWo)=bSgbGnHbHFtT)RED!LAUWzyT1QAi93G-L79tD!z_-P~{+SS|FBsV86O$ zx6xz1X%c`r=s~{0q5OtY`VIF6LF-4gjn%v}v;YuQ97AVf_7;+R z)$eik{i2aJu0W!$eU`nUo9sD&Su2JCLwcBkgIJJ}5%$F^X@4o*Y>I>??ecFTjh*-y z>%Zpk)m*-s{a14oA46-+HxAdj(YqDhPfm|fWF&<&>ef6OWLQ?Pm-e=A` z>XJ76spYy!LWa-kerQ;`SsEu>df_cn8t0m}|H~rN)p(ZaRoOi;>9ILZeLa#&ZOVxF zN%;Izv~@^&o8N#M&!HyztYhPZh0!VA{6Z^LQ_?XbL56B!!RlH>1I5%>Ln?njw{QT3 z#^gSuEI-ZgG%nY?l6gW|+L0w~jU|#Mtw`O)VFgQ-<;L@5y0lSq;Z-HBaiQOarAf2m zT;()R<+gEQ$OXdiIT&>vOMVR?B{LF}9#8`rwZ}vvNVgE$x<%Q-dWSHqKV;PPIizFy z%Fx(}z|u3?ZnAwZ9(_0BixVU0AQUwM#X(|fBqp+-9x?L$$%pjp+kp)Mbhh2bS^@Xq zcYJNpgQeE76U)cnv=6xH5v2AIG@N%B^ai~V->F#7*zI5{~JJQYIXYN##v-Q(AYD+gfT<+ICXnfsdPhlFeB%SsH#) z+FF8Fx-?_|Vc7{kpLSd|HKpX(*L;Be;JJ0yX!A+NlEe4e$?j^=*D4Nxwvs za~_wxdGxaENr}GSMW%8^hecV#BvrGh&7Xw{f@9PBR#bqmLKNrDh*K}aC_q~62WtsKn)sb_ z8ZK|3hzQdJuj{2`<4|tWfMTP5;ez}Wj=5dS(WZeVu+gw0K zbgIo~+#!y#YGt04&MIzPUe8^2_&oAA=Ot%wuIfh%bRmpiZWV^_tB3O&2pN!G`Qnv~ z8#Zd2{)l%kY*D4=EnaC(3%1P`YhRJHY`1bMGvgvq*F**N#fp{a94R3kSy zn;u+tUu=gN{~1%d+0@ps;Gh{ioF1blKyVoCsj)6CT^nzRei>Hb>Bz^Chl!oTdy17a zRFg*4JuR$A_1s(JBdfGK50DW429t49^7Eru450LDU6oPds5PKat9jT?w*d*RS&L}7 zteD_bVLE0eGNQdoT1#-I*#Zm8jzqY#C7G!8^@OjZ^Wk(scC~7roB2uw?9stpI9yv_ zo)29e5IpaA+3`LTv}YX$LtE=A{Hu=w6?N!2yw;A@>8;Pz=ksCV@|i5&a zjBb`?e{6bx&1x`LJp}me9~V8~yS8(_RP?@<)!*6lz?<|SFS_w?x)Ij{p!&B$OxG}X zS1LilzHW{Fj80In<$z`;W<3z%;o2I|(92FxO?rR!lyCpMbpc;lPI_)XM`zb&sN_v- zvJcZ{J8}a9XDcPw5?vHmpXkF4x-{vih`r2%KS3d&7d^fvpP*mu>+S~u2Z0CqW^QC` z>tJhb0|G82BBca^W$5l;1%hSjU~CEURSe3>1_TQP;_KLdy}o_*f&~Hn)cmgzzSeO` zX26b;^-)BwJ-ZIQ4r#_4t%Fnk&1YSbt=B}7ZxT({fF(XfucssU;}g_irs9^8<=CnV z>l!g@1QJ%1E!IR$xQ)nFF>BHeo)R`)=g}==fhpX`z#FaPsay5kgN|=)rK$t0n-E;? zrZ{H-_WrWnDZI!_FB)2x*!FRkwL+K+)A_t7hLxaLz5&cXg3W$J&64BfF|h0G+1HZp z3DEQpXhcxe&*m#@4CquzHw$ap1-oq1o)31chC@32j6NdATN39ka&+TIze=^)rr8*T z^zeRu^C$$A{KSk%OQL z3RB}z8cNM!U4(P4@iy~~6g0HLN;L?do<&&=(m&(Sr>%r8yZS0V?b@dez{yM&4G%Im z)S$+JF-%(i?m5W2O!v^oZ~qfMRM6fHCn|5(3%h5YOudDDaE#CF&QAM>46599e zhQ|~wS|}~ZzFnpvv3I<};{|T_!<16Rur+u%a1<&;Rx3ivKV-04>NYpWyT=1)o7o_+h8cu76kP4T|F+ zuB_~e=6yjiUSt{rEB}}|32iPaVXthgfDBh=%9{qvrw;jq(3 zeF8KFiU6Dd^*53)JBU1p7Kpd6EDyN%G8_?Z3%Q8sUH|X+TnLyNBYaKP4M$OoFY^6P@K|b^&+Ngn*!Q4o|aB=i^r%Q z8JoGT$6&2}i(VdLohp~N@$+lybjz4k_PuK_Io>vxxQ5Yz?T2XZDn5%Md&xhLjgh2E z#o0JWx8j#qXFO%+Httvgq)Q&X6>Mc1%EqM_nZ~6YD*+Zji2(I-3l)nR9;LQaa$Lj3 z6dE9sBkGoI_NIYNb)7BKV{-5~tz$QLp)wG&ZHzQ+X!)2fg>4+I?NYm~Jp(_DZsHNB z3K=zpSBbp$i^E)|FzytE(>h}kC|OiDH+Osq>ny@i#I=`BArq)*-FC>u+g4P^1LVp( ztC@cQOa@Lu6fN#}xd4qPSsFd#9D^OR>Lyn9=GRtam$@?Qm?*6(0zqyPiZ%r=gN6y{ zBsE(@qH@QM12dOJ5NaJcZ)t(SN7S5tXfry@e!w}3J5|o0Oc7%4YwWF3m93@>H@Y#J z@tX0#anOsEBV(%>vI_J$N%woi3oGexb1K<4v8@7U&hZCDH~AED`=X9{I7eX*A~0MY){lTXlOUo(!?EV>7ILx@kKP zs*0TBH|OLj?%*k};5g5j#Cjg*V}NY?q?WLvc}&o;!jDa(%)SvCbJU3$_(dyDKbHbr zb4;4Yey}@4mlt}zVJ*?%Ineq)l#w}m$9f*VXmbylPd$o?EA9cnIqA%&fM=`KG?`qA zI~`fTP^=NB!s-bG@Px2r#2u_Ut+(|0grd7A`bJCX4JDQiZVe~ixG!Ea zab8e%m*~f+H8`BY$X_U)Fh6XiPCjNFY4w-0MWC|oU2~t-{kO|7FUK$05ty6Qb{hOu zcW#dlCFv!cXO-LYxi<~}!}>gzrA|&Y$$KT5z9mkm zsw3Dm)6pr9%E^U+R)wWwG@811$Ah2XW-mBI8Al+T(eU^Eg5zaJfoE2Er)eKnT*%9p z0=9WfJlFKM>_FS(+vDRqCXL^1Gt9DYqv@iC=A3YDyAmdI`*n>5MNuxcZyPQej7ttv zd-b?ns@EsDnaxod=*P(Giv8=u?J>`ut?{p2dR_QDX@hPCRE{j)t@RsXr=U$gqACv; z$X8P{UX#h@99;0S%hFU><)j(6fOoA-u8^c>e7@2cX=&agr7Uu}zeBp}hnvx4sln)Y5 z_Df+$cdSW%1(`vSHNWcT8s|C!ZB5HO34I?oJWe{ZGWAa2?VqF?N1u`8_}$l#oT5VG|o~+#D9d%E5?YH(V5%{f=lqp z@|GJV==1dP`ZIGUq4-auLh;Y&Zx*!pgzOW~kR|aNhpQC&38tU*z8v$bEKVQZa9R zbB`W9CMy;V%D$di3Wo^&U#~~&25YQ~deVc-jd3@;+P57FoTFlxRHmreM9Ph$%I=i- ztaiT0THD|8pNKI+#Y7++VuQa<_rtjOH%X~{um^JvW`&s`m&bH4D6GMcK8&7UCiKz5 z)cTlIYJF%f)!|+^I~ZM8X6G7p7yfT%hLaGU#rynEQ4d!F9gWZpZfAK7TmC8Azf z(=j5MF2%y!4Xq`sr8CteM>T6BSQn+sLgAK4&qpcGfiu>mi`R zNW>yY@Gc`RD}NhEu|qY())H=oRSnJTRW9VSQ~phuUAi5UQ97U|=R933#KNBsw(u=> zM+sXBsDNv?BIevW6H_WLj#vx*c>W9k9f$--(mLJKHtb}?{l&UL9z^yWA zN8b+XH@H*LBe-9X+C-X#s?L|4Ip3psigq+@x@PrwPr!{e@Wwkbvg5DAUI>zG z2||$U2j8n;-$n&xu;RkHiaPUK88LHdU}#6+iSnt7ET+;Jg|A37X7K=5p2a%TFZa=( z4L{<$fcVd@AF6+dy2vR{!W(njj;J8QV-4Eb$t%OQ7@N*0(8uO(@{lOoD9b3nqQa`N zN`Pez7Imv7cqjg?&9r4yr$HX|o#k66Q-f^1cdTF&c1(*>tV|Q$j`RH~d%y~~iaKd) zTdwJ-My7KM&-u*yqH|@>watd9b5&89mU`N*vXhgx#L5orqoB4>n@-IW*0v1V3%)iJ z(2c>F{_B;Ewnmle$WaVh$G%I?HwGrA#FUhjmK=vZ3*P#_xyto4T*Z!Rhq=y_r_eT= z-d&noidrU>_aALdbxfZbDS@Xtt3KYJp09l5BCHKL&n=Nsb#MiKD)Ov{=49AoI@@cF z#iXlh6%E=R#F{he*y6e#U>;+4nZqY$a&zY}C(774&S)CaoK%<{xM%^^6I^RRBQQ5Z zH)3j9;ZwPKjf_P-b2}_Bp%r+y+biG;w~zTJ0<%ANG9((IE^MN2K{oieY0yN!1HJERP%0~sN=X@2lrEi{{hL)y z5Q68p9vB$#BEGSDp4DK>h-cs~5I%JXM_mCvdUbTm(TDFP2q2LD0cQA8UO(7jap0ps zME&!QxKdv*P7F(;^LRIDr^)29#JrH$F`p^sixjeg-keUDil@L${p!rK1ifhQ-M7El z5jOwOf~C#5RItNrPJck1SM@LJUbxZ$s}%OeJrA9aD<%s-9~qF$UYpcq3%C8eYgK<`JPE$nQ;N**NRx`O*QtJs&3(&uD7GgASu_>sCw(ed%QKC7^HK=X05~gwC zqTGFNX)rP-#{dB;}SH+ zGy*ILwm+f~tw`k?G zaK5bmEh-s=ckV;6o^?aR$-nL7^#Yh7Ui%J<{ybb!PlCJA%X!xObn}X8aBRzBTm3fa z=4Bq0=k!Bs!**FWFRN+*41;>&dSZ`b{#G3#Y1u;d^H5KZc_+;LRdzzwzvbBaT$ugj zv3I6#SPbpIVI`H@&U+uwc7NQVFxxhgXdAt;PTQ0L$u*f|m%~iA&vfxCzE6c`!_@}_ zHi|GSCtn1VoN%WIcsZUF5z$rT9*u=&Rpu2h9k+_S5YiCCtwR$EQusi=Wn77#KzX)t z<@gwb)oQX#96b)5;NP!1xa6r1#IZ7)rs=Mg>|c31lBqln>rsE~+^lpjV~-V<%TZrv z2SG-rZ(|Pqwu;yqcrqUB8Zb6vxDmDXMKDF~v*H0CG#N=oZDcSmck?pBcI}nz4>qDT z*%OT8&}lR|t73Q%s-i0@NfLsy4b(c&vcZ~d68Ia;0o0t;^QOhjjhJIWVH(9rYM{g- z8PpA`533gv`LqldKX$=O$un9cSJxb2`g?98eSE()!ob>QKCE^HThlhUf|ND5Wh%og%esju#w9@YPLa zxuDv5Tjf#D;FE)=%PAER3lz)P5emy|n*5{(s>o>CjG>F)QFlo3cNuC0sZT`Yn>`f1 z4$74Q9Gd-KS!PP00d^kh>)yzC_fl7Y_QN$xhTji_U8jiQGX!{0Q4&1yMXmI8bR8cE zBx|@Jmj0`6up}6xYQGR6_DQ^mnPjj?7`FMa`nx>{g68}D`9=r(ky;r@bJYjqx{WWy zhEgQ+Xblnd5lLdhqeWa(*SdwJqTNb<3HVpet)W-JO9A;A@AhLMa<|V-2B<4v)fl^S z2StZ`vv!MAyg5IxsMQ1Nj|@M?Ec7>sy8UP7RFaQkn##$~$mC>*g5S63VLtnYxOUW< zKIjf$DeWK@mW?qlsm5>M(tlxx)h^t1HJkKRqXd<2PKwYgRgdZ~^y8%k8zXzxC!fjN zrdO~BAzQ;r^2aCjh#pF6VBP+Fm^i9d(E3<$uHKBGbN%)vKrBFP6z_{@FxBmX$eotG zkzCICR@@?{0K=>~k$1riSM#Hqd`~e%7OcIK-ssvAg=K5wswODf7!aX1APY1B8>FTO z;*{qpwS}3mV4}}qR)_V-D8`)dK zY$w!_`t!=!&fdE<1-#lv`*gBHn?hgV-b1}Q5lX5#_e@CHoU(x@2AKCJ)nU~Aed#2< z=Lx0tEnD6*?Klg!-qNx4Pqir0`LS3V5W*9Rc=2&^GvIVO6bIpoN!e|Rks-Z}pV-rs9cakO`v z>vtZjrmko&w4fj2A=>qmv!?N+PUcxUox#WUFDn{1AC5tP=pTE`~X>lDv&qGJp^!5IJ;^%!Ro6zfOKkR09 ziJ^@lsZ)|bt}3TC7WBw*S>e$H|@8L_l|dl4>g~3zRW7J z;HRReqF2-B!<&J9g-?f137=d(b*C=Ve&pktV zneEl%DquY)Nt)P!pt<_w%=`Vzk2TUAHnr_c;2`)`jp0a)kImXxnM<S;6`OpkS>c#~H|yNX#wl;3J)NYi^|mo;oz^nG>Ds)_sb zGH2@=P?iE~0f{W5jZ3Ec$3&`Xyp7X-^|g1}luy+y<&;)xaMZ`P0$Rd00>dd6|48fe z_s+a?EX~H)iuSG*NX;TLfe|#TNHHpInp(p9V2_K%ys^>4x68;+>F0y2j`;)*&y0*X zf&?ANsD`HHxHBP7*3(M`&l(;m^;X%K{Z0QW)OQ>zzO1Vj9~L0*c*dQoNot#UV{_V` z^*ZK|gXDe`xdz1W%ctoyjxXJY0Y)b4W95Hup8B_i%KNqc3pXc>3UAW@=2I;`c?#?W z61@rK;l8tFh$6V2hyvP>Kf}n}z9BAXV;4f*BkEu`m;L0A`x}s&h|Mp37E+zci9s09 z$IQjNuF^vSMk4wfT7qyOCqJ7}zh9q302|HVT#X!69Ga+hKZNKzqOyZfk^n&v3Q|qJ zTnKTXh?cl!xB^&zQZFGWQVs=@q<*ZBMM%B^`>!}G{xnR3bCYbSSuyEY8H=zx1!SX` zRKhqEyw%0&j9PKTSZ#|a9C8>zcO{XZ%G2MX63yr?e7$!+kQhLS`-yWR0aAmMJlc_P z4lV+=if4TsfBN0EX5Z=d5-)tPUrvHw-Ll68DSSm0enwv_Rvje`2q}geLrqU3X(0Wn z%P&;bAEEh-LS4n4g^G&a zgj7mW;U{BmHqrkTESH+{!RTMTI59}j9@zjDqK9k^L9{BB764>j0#fpA0ja9qA+HTI zE8b|=0?8ZKT!{V5!EmpwtImb-)=Xcgdmq-k_nW|6Kx)piafNKSjDmlzOs=XwAD*|T zOS*_7)2r z#-_}v42Jhx2f^bf4bPw8pTT!AyK;DF&)n_7s-(H1N|9%=%7)F2f4D1$1Zkr$uLq#G z2~XS$|a&kx^!4!wH%T!Y|~ zp6UMF=z3A@zq0*+ zYj|t(NxEJ0Ax4s{23M&4B}s@XSy$f-I~FollWyUjD2k<`Cu~omGCMa~?mu5XXmL|k z7xcDT9$9bIOS%iRqFoGvt*v9xB<5)#3vfCcjvDT!J@bz^8?C%)t7~KISe9%+cqKr7 zt*vV2dku%Qi*cieEOR9fE_KBSCWH)jY<@$;DH$h^LW%~OJsYx%OtMEMG5H}ojap5L zKuzv&#{&VAqT;mM->wB{g)l9GCE6p#_N%s`uO%vlG%I&4uCXc+s}3~ccR4Es^(zlO z>USY*QluVG>atPQQ!`-NwC|e@e2Dn-jo!K6XPb|ycyw=G!r`}WDV}kpG-PI01 zCb|YbukejO4t#b$pSvbGdx>`qxeMQ*GEuU2DKb2RO#4mURh}KW$#|!3N6nUCgxx}u z;#)3*M|Z(YAK9Yd&6zk@2rUS8oyV^GLI9C`xZJ zvvP>CZaFyR+6-@WZ&^yO;kLrQG6gYSKI^>2;tym!K^;7&WXY%NJ_%2%dN2I3eJdPy z^%iCL*p|Jf`%t)X1u4d?_RSIO2BU=s_b;yO`V-WR4>6H5)(8gO>uIdqV9lq+`|nX? z@da(3IIwZ%H&nahyWz750}F)85LeB_kNO3jgl`Bzq4r)4nC<9ZsW z8Eehs9MQ7^)%HZo`{tF^>C5NBL2tq9!s|CwW>%~eB8nj3U%&-)h9n)8{(0ZImiQ%4%3bD) zD{!NOtmReqybAU)Ya`kO<6dB~N%u!HXVSgTUd9w@6r-FH@O?}_3IV|%^tOB~tTNWLaa?&~fI1f`FMb>7V=s|JL7QMX<{ zQ~%)tTzv=0625vVMKos-f1v8G%13I*K_Pb=9`eYD)+ZEH&qyD)+|4$7>sikqY^Qu4 ze_owLylt|_HZiFOXC>NmHZeON!hYklT9_9&{BWatA*tF}2b-ns-3n(dh;uk{&m^@; zQ0g_D8IJJ4GFgd0bI0=NvT+874tb(GsaZ=WF&4aK@FzV-mXn&-u} z^5w+Td>YWr%+CS}X6Hn`Uts;{oh=Y$ zFtK{_q_*gEnP*8x>OETk$K-8&w89xZV%}A6-20XIK8k>}zH1`6Ah3KDzsTf=#g$A< zfI%ZR*b0g!uy{;NOz=2NOmp1~eck+=PV9E$nC#O$pG=rZ9BekYb&uy7ROTCx=Ekn< zG}=Rq4!`yoE`(Djnw29^^!Sfoo*`-)r1F|IY)bacRuXp2pBMfL>#*wXwG$_|^fk@g|Op#+&$&VRzSHfPa1WCSB zAifl_fKsRg>wl|Z`r-^I6hTA-a{26GD0NZwQE~3WGk|?FP!p7)2!mw#b&o|4nZmD% z-Sl~g$uoB2#dId~kW5(qm^6J6g?b`j40(jfGbpFXr^qQ$IB)_{A_Ss+v3Z@t^7#8^ zKOE{|Ia2*`;Dn+)h($YM@-~O%X&jV-aTbV0ormRl9Oe-?PNH${1*2YwMZse7dWPlU z9FziZ76?S&WAZ+R<@xrD`5c%*I7<1WEMoGo_KQI|QX_C!2t?;%@(zY)bwl2|5DOk@(sxhTnT6C<;KsJ;W097~yVBtcu5QMI9`3rc`i zj*ZOvQi>BTKrM5D)NhWR9J;Ajh22_TZvaC{$&&diS{Af%q~I3GExlSa((Foll`KmV zOjxMNrxW+Hf5g8h&nr3R$;&dcrKH_4v8AOIKovmCmG+P;(?}=>D=g$GHIOUY##{W7 zU_max3RRd8Dly4b%9AfmAzu)Sx1f+UOg4UGk zt0~=EF}SOOY+v@nAR$V&fLIZa^q}TaGeEqeFQ3t_c;Ux9R=YXe?7qI#@zE@nmN{Sq_bL-%!wfIVKwJzB}k2k9s4YqoqV125p=tz>BxP$N%gW6AgK= z%m4kKyzdY2*yiWOiw}l;c9WyUQ}X>s)y8CJV#tv~#D{}EW604$#7Bb)&t(00iSzr| z&*kHp$--G58uD_m|B_@dk0U)^H+ES#{bZ2Wn7&U^B7j0dUdIfVB5kx?mPoe=qI{DY z#|Xy=>K;oVCm(y)h`@dUqPzN^7HXH*wg4ljNk(W>b-%iZUUijiYAU-#O!hJ8bYqms zS|rmHzq;~nb(6h+^omWWX0Fc9W*FnRwIkM16W5wHHCAFeG@yYU8oEBia#%nqd&H=v ze8PQkSY&>_KDp%#GCG5Lcmg|lXpiV35%DPlA|#|eVobwwaDbPU5YKE3Jj|ZmG#uoH zTC}BFb5KQP4dzlaFC9Z=6*81Fn!=Ov?y$!-d*_F9hf`2=-1D>i*0TcNb#5m%adgUy z`w&k`@DQvY0>U-UKFm(AQ6ksW?D{3JA@jcZw^Wf>K>7&JG`{YdWs_xyg z;SMsC;ykA=N;DQcK^pRAdlP1m(g>>_QHCZ>L)3ZFo_FK$8s%WL0MA?3t*}QL=RGFJ zuLqlXyO61)tG1S^PRS4z#_)-~fD6ivQ`WmbS%CE1PZ8J8zmjVEjZ-TEoR11!I!jZX zXuO&00ZcPQR{h?w$YacJQ^D;2;om)ZbVP7N$alk zMAeP6xnyR-4m_0X^T4!omx^bimWn@T4Naq&worVEb0;1T@=rh;k;?Z(uEv$g^QPr< z!<&$Y+1-v*T&aE=T%N!7C8v6kbK21DB=;tg&J)Ly?iBenpO?0bgX8f}i#u5q?eR2| z7P9OJou+1o$@`|f7LiM{TSW)u)eCj*V% zY2<0nC8IQnjZPAR&f*M|<>3lN;k^eZAtJ{HFYwD| zMv5o(pOunpbmCp(%tA|b$iH3Dr)>LDYim`L-wkn#y)?+j2#q;%sYT-tl?177ik|;Fm1J_bK=R4tdaw+H|Hw$I5T51e~HmhcQPuCB81rlVD57+niup zMOmj>ju}*yjzi9^&66Zc&y&s<|D^jiC$5&M@9CXmhGnJWz!xclzSOeMxz!>=we&pb ztkE(Fy`+A?d8uWZaN3UUL;G>#itZ%nYI8gZx6x9-b?$TsxpAD&mElwrcdD>Z_YQx|#De^$0(e&R! zgYg`G;Zo#|{)}Ygj^8L!jVaAndyC_@&m;<9~DE&kdhEeR1@nJNK6?bIu|n=Vmwrv?#K^Iig*0=hnNsY@+I*%JMW4}u8Fw2 zhyWuR#$c`mNdfx#U2de#`dm0xheWw5=4@HNM*`uOsuY?)86c5B*oaT1928H<@VUH? zAN^*iR>dg5FG4Yl{JliJ0=7iOU|}@I!dR>U=~UUEV>DaGSgZ=EE>7CzW>_XjnTi

s+F-S2kYka3i1{!Xh!dA?nCMvU7-c`nAkIz-HN?E5<_IZ^ z6s6wFFu_W?GRVA^Y>K_7WSD9pr5LH6S))^Yocc7!)XLlHO#_QME6{_o=W0=@A!$SK zWAWx9IfbFtP!UMS=pEG6YgGgpO2POGLL9ge9wpyuMo8VHnb$}1>?C`7oL6w-9l*B0 zba4BOb&w5_v^;&N>wtuQgb<_x z%wT5qa57=iAq{efRN3?~Z)^G!e(#M|3oByRJsO6;7iedPTQbB+y%}shJ$f6{4?h0x z!_$xRk*8_EoYv8_dNpRL#^0vqW@({KOlFO;iSWJ3@!haks%Yyw53+Z7oJNeL@iyT2 zSTX#3oyM2Vcg_%zzf@T$7cbhvD5{D@<>NYetsir*5R^y7O%@B6t1+-FIo_zkBe|fSbJW7yFT*g)+8qxOYraZa zv@Pw3;=l3WPZ!%16tJweG;CN6!vU(HeDWPxEi86U`c70-#xk5tI0@=a^IotX6-Jvy zs4cbbcyc;{@*ak~0l=nL(r5DMSO+Y)(w*OnC{*@PMA;i^|FV8}4md34iQ`<*v&S+& zIjBwf@IWEPKPjWR&gl0LIjtP?W-3?ZEWc@(u+6Mnk++_}$b21lxXS!^%TR#xTHa)0 z40BTZe0`fh(4a!UFWPLjs)89eY3CX9sS6(4Zl)h#3*7ohw`a;M^_wcidlGm6Jea#M z&%b??on=(1d0kjOpAPRPo1nvwncC)-zqzT<^X~a>H7tOeawmxZ}si4^w2|0j^ zth5Fo&EOZF3pB-2fn*;&bA^NPWsz%FPsG#wjV2 z#F24^6m`{lh{FO`($@l<|`)DYg)#^#qEd*6;(pUNyX)e3C_7UHjyj(6kOEC;kmGiUj;W0z=Sz+$&*kH zl5?fx;$gxVh2*0sM!)l60?D$TMj*W%`ekXKM;Q20w#m@nj6$+tZ{i%i8HZ&>o<}hF z%&+4Zyl08XRQLB2(zRmaR2^o2kwNYo{Yj6Ai9>X75SGyy8A0W6Cn1w|U=)xM86F9t zHPJ%sll>e0W)zlXMQ)%VEL9mIj>^zNM5^4sA7QM47)SNL$piYhu;lnbDM|weQl^rS z5mbf}B2v}<{IFy#M8}Gdk>iQ_|F$iKrAq(#DRxqn`uD?=6_;&O9dc%!*tzmKJ&b7zTRD4xn5@Y^zwDMe!zV`WPYN5NW!no zkaJ-fiqg0+k48bP%)qg<5(>*k90eir%;ad&I*kP~(mIL$xd@%cMH~&06ZwM|`X3nd zzfhkBgBewuCjJLtFdjzym@t&p*~9)sFekPDB`E)iFlzGZ?7y@oK|h>B<$eid{R6)r z!bB+lqbU6ni2X4jHvZ2h`A5fodFM&K$nXEL?h$in5nrVK5Fwr*<$Oa76Dk(_(kYR0 z{vsXzfl+2*H^oYidMV68Q5Kg^Kv@uz&p=T|WixFr9uK#8Nrh)ARmcOiP*Pq@r?h;5 zng!u6Mb0lZlob?pEX+He&c~82oy`w&0Y*?Hq|EyI1IKGDev3NxCY1t8Mw3pUQx!*1 zC=~fcnfg*oIa8T%r31O(?21aG3I(!8Ia8qnN{`Jbe_8yNR@{;QWO7A6joi?~8AO%Y zk7H0=c1V8CAHw^=v?1VX+!?EGs=ONCMtMFu{`D*N_6{~>{Ml&ijW;62=k-zMmr@); z>EsZaG3s7it1DA+)kadqR=z?oI(*Rtm~s&nk}VhGw+QQyj1tdVq)B}>A-oT@E%5`C zkd8n4^knskNV*(87onW|na7cxf4O?P#*Qfwl}n%V+?u-GR^>3#HLsoN1iB0GnCpC+ zLN6tezNV>Oc=y}A;-)WPh@#^WuY zDt1wp=o+CI-c?p_u^k1GekVI}Cgz%Cjh#CTv2zD2ti8%s2{ta_-cIKQyRP=l8htvw zHb$?!8lT1Eybe~5To2_>K`hGG@MUnjPB!rAL{2%Es86xWcCg&-cx3)fK;$*f{Ak+y zNdHV54$`ejUqzGTR33GY;qP|M#( z2|?nSDE&isph9GH(BlcSWu(oot{8I<+VNLi!2voyp%m0S>dsvwFn_B~LUQX+De%rm z9OY`u-zPzK5UK9Rjr6j5j%#xCKy9SQ@^K@0C7699w(M-)~Qv5&vM8j0bKI0&@d z4qxSH2=cwXaMc_%p8of{3zy2WA1XvmuS~h!H>&i0=(g%!v~oKX5}W}@1bzQJC9`OK zf3W0jcGBfADEM99Ja#=2c#Lk)#~oj9%9^#}9-F+E*2vaV)|1LL``>)1OXp_USz)Ix zl$C3-Js@A^lO7}^h7bf-Y!8%?9TMi500h{)M$=vZXlZ#-Ob??`H3}y6Z;0@i9weh` zNK9&>ukC05)R>nO3ZrUROln~Wn3x_SqiS%>Gkyq|*d7BT`ae)X^ga4g^nOsJ3_aka z$@zt?*q9Ln0b|2@;Fww>5P8FTu$bcn0hmVg0k9%5J;p}#{;;&f0rLNBlb9Y@Mzug# z6~X}L;cekzJr>3z!T{R;1#022t;5;D{|gog0`M5s0=^hMIL0HQFXMlJcsM&8c9G~m z{lAR=?)BAymXY26KSRJ12G|?XN5Bro_F#}=41xEV>ES>|?D_Vw>wSZi+WjYgKw9;K zV%v8IuhV!*p_!wU6mBF`DLwNQ>nU z*0>g~bx4)#C5gAgB5{)IHHn|*hbof)kHi)mNg0AX93D*(g{Vu`Lqk3r07swh<~XZD zKRz9Js?FaY&-3hP-u(6zqjm$7Yu9{z2=XFYi&N$Rm7Af+2k;GX)34UK$C>5P=ugF_-UML2M^x{#5XnqeoSq;`?A>=yniH^h!|6k z)soC;_cTV7K)@Dq!bw3AV;fr07g`B;G(K)xHm;90o)rQzCR7D)7Jl1|d~31xJ5RP| zOZI9c@w{vrc$~PzBpr&SHZ%~doyu?*!7Ga}nZ)TZ1%7fJelnHO+Qx~lfrFy~8zHo&%qCV@4Y&?K};Cb`%W0_tgyWkkh^Xk;H z-PzHMhSJ#(`b3q8DfY4Dv4XQI=A+k&ov0H)mDwETrczuK?<=Z=+D?Lk(tIolh z1Hw&Of76q~(mibjTYjw#tt1U{5AyRAYw~%!+uHH_3{A_^`3xgkZ+&Wwm*D9J#hKOh zt?lmjC-KTZjR+iA??dz5Fm@du2I)xPcWPOi+$GK`Aq+JDD4{Q2ZO0o_m-ZvAxh$Jc z95+VAVJd0+6UJJC97cH$n8FU*S=sU~S+qY|LuFog&9RV=r6X4)&GmA5)g>#raeKKF=T>t3;^%u>+r+cK663s@d#@v)p)sE-7B0blIY2jW(l3 ziop~qxGBB(vRK)9=Q8n`CtxpU3*tG6y~ z&oKw~{B(ddnultIv%-BP=P9OgD`TmBMl8o7hjKm8+^3wR76oA|L8i-5PQ^U2zil64 zu&!!};q3A+Th3tzYxah{aSx$rrhfac ztc9j|*8|7b=<|3!x^t@d3wS>KN?q{}Pp?#7z^aO_#rv+B50$1X*TpUIkWC+km-iMk ze?$pNA@PFxe3>KGtl1lAc^$&hGO001cNj{2e>@+k`d)UP4}bC?#QI)vuXlfq)WctY zY%rQSD>~i`j)IKuZeVio5@#Oa9?fbfu6+~Tx=?mV^{yrE71=nS1ny?Bg6VCmbIUD6z4%@mlc(&8YD) z;j{mbv9|zjb6K`Vx05)=n3K9oeMf z{aI}8*?48Ber134HX_A-RHz7vwF!)!7M7Ysiq}Vqr-7Cx56puTVSyA;fh0co8Ed*P z+(w{KjjW&oMJe4S?e<$5v`&`f5YNChfW{?_%U^USEW4OZJ_RIa%_iR&kH;R5cj6i# zgB~E8?>C+AXXDHKMdZ%APNur?uOtwWC441KFd|j`M>c#<8bwAz64cg(5`HGD3CSKh zMl1&CPHXfJ(De^|?w6+D&ckt1f#WU?&X^Wa01;EJ#3oq%x7l1o!HSrYm6&oSHX-f* z#S8skVW0m`HgFg?A^Sf8fu=ZQraWY(pULv@P+0I$Ce5$;qmjbw$WX*X#jFp0L{fGL zyk*~HvyJ0&i|~a{{*598HvIvzHn7O)vnc5#*AfWtW}E7RC_EsiQ(#e`Y?K%gI!6_? zh)p<{-xf&w*wPsHI)DrvEUy>S$*h;7{wb!Ssk^l3ruL?GxS+x*u)i+3AD!4~L984) zju!Taio~z1F4XW^JsPQF_7DFDoSt_2^!+M4;$-nKGh}0JG?Yydk?=A?9l=D%^H_o- z%2`EITs1NX^n-lFtC7k$g86>=ca-|TF=_HL_?SfZGnUM$8itIBtPLri09qPPWYWYG zbsyMpHR2FYuvATd5RgokO@5S3&OaU>h+miM1c&F-fL~)$jpgTr`kV*lSB>B|X|j#8 z|09)CR2fC0_Xh!$3?qNOeQ^FY7B-aES85p2Eg?oaas*jzDA|Lc{L+AYv@R8t%0vP! znLk4Um7NAeaNh(;B-RdMS8O;)6vP@6(KMY&sIu z_M0tA2oR+Y%w^=~>nX^lfie1S40dsd?qr8$aj5dsP&-+@l#^<+_P2R_64A4X7FAcZ zIRo#$Mr-b#&`#CHzu-5uOYX)^U0-9G`3lCeE?XC3fV{_BFI=@(%h_IPd<^J3*6k9l z8%GPHaA(c>E87!Q3%h@Lb#bbl2+|JXty>`;S|}X(&WOsa-5%o4Xx^~D^p@MPZ=q^qCOSg4b{K7qw6TpKMf zFy9Bkcb}1~(9k6BniPDBZXgQox=&_^Ck~2H%1F#@w-Z?W!@rgSTFak6O<#^bAJ&aOKE#1B(4)D*y_iNoMyoq#8*W8HR_(jvh zlzDCGmlSl#qAsz;dfqOZ)%9Ea_H7EsojioyM?iBA|HsjnU0Qr&@ZSlyt}!cSivx7H zes7Ix_d1q#jsZ#?EwosjepG%6 zVus?=TyKnAG-zvSDZ2_s9y=o8wInLA~MHb zmhY2xTpNvUeRl5UpE~4|*U;S92VTau5g$(kJ6Omw%hmg8BF<2u9uv>PL8Lx8m29Y}h!Ecla(3h8B_{y*zxh`1!1Q^E37p zigy|@n^sdpSr-*DfG)KJ2ysoLp}V6HVh`S*S2DyXjZd{}->l19S6GzrXlyUyIi^tM*Np;w5kT+eqf z$YmUL4B6)HbKcq-eff19?~Ze7V|xDfdG8RG!fGN-&w_FE!ow_s%i1Tzf7+9zmvEV_ zz+1)3c(;YP6Cz1EOZNGRt3%+%eaoMbC0AstEn2B2J6d0C5n0X5}q6 z^oIOMHY*_{DBd<#mv{EtQEi}7LD%f}6Dc+IrO@G?3gdQ~I%)0iug$|*IfK@4zmA;L zbxTZxK%kmDb@pjU&=!L#zDop6c8O^^C=1s#geDF=)z-Wv;L`1P-TG4G4yAOAkTZ-g zqTizavpUnaZb37hzhs7I(^ageLGXTi_Z4$D?;X;Vx!_I33THyN8JyF{wfw95{az&frDYLMPDsKQ;>01@e zBCD6#PwdStTD$sY9?mddAAa(3O=LZBC{T_h?@U8*DEOH1Eriw9vEZW&wk|L-eW1zd zV`&xkEEn!<kLTi3`FY;DC-OuYnx8oV~yT}74RK_RNM%<&}zI%z*N z+(cA)ng&OSZ}?)Hoi;sTR6g=xLBli;$GUd9InEX@RKs}Xe;5X+7O zG&qE5pZ?pd2VHg?qQMZTaVt!VDe_-@6F3s8%;x7i`2OEb*cNpOk6v_qltFsWvk!;?R>Z~xG>d`%W-8e&K_Lmp<4Tc!`zmiU@%_HM|B ztU3Ov9c+}WznHLTPX^I+{8O(ySkFzEp(}QXq2Da-260wU3hucY&aVl|@1T>hWj)2{ z-V9T@1Iup#vcu=gb9JcOSMqmWTVh*Yh`A*@)riU*6RjpR6feX$S(usr@7{2Bsw^;7 zUul@+?=Ez>ww#^HA8Xb=aC8$g5& zAi)MucvmXOex-;qPbm#MqporO zVWIrZG8A^%@-=Oz`|hCo&Pi+6E$10cYZqS2oSUvDKGYCmh>r49k@PeL^{x=<&Z3ir zHth9V&KpCHKRKNTTUZ@Na2j`wQ_Yaf5B|`J zGRb0^r{#%L2WdAm4IvFXK@Lv_Y4?6jW*BDqTr)iR!L^evmuZOX-MaX<@86Cpsrhg< zdLL_CjFPqA)ky9$=heM9Sxl!USSReCdd;yzbla2pFGt_sRgHeLNQ^2}rvnj&gxcu* zSg>1K&^v)uW)8E>0@GAWoWk(l!izAZ2s7ySo58>Pn$$Mpzx!eb>PaN&5rpWu<+sy+ zYf|hsQ5&S`hdD80Mh?NlIix02#_P6_QmN3Py~x_+N154C7ZBbtNR6?A!P~Xta(CjV z+zui7ut=Kl0DpHDX^Hn(%lYfVbyceO>`Kst^v2+Rs%=M$8>@UJ4|XS*Xdem2~H$^m~b$b;RusyM&ekM>OrV!L(ly*Zd%cTQ|wjV!6?7E8zn0Uyqjs#yFuDnWpurM(mV9dPdoi`+b07Xm5K6` ztB~UP@W&Q*NF2%Wg}NVxAB%>ChL^E#nL}B~C#9_B8$nMX0KcuY);)PN2Fo$5&4O%t z&T#vn6x~tY`5KZ$EZuqeD{Rbf8^(R>zD9;=zpp$15`xK^2)(}|;hKlVTm?3wIQSg# zO-A3af>;3f`H1uGz4|Q{rP!zH2PNkx&JSw8xc3%gonv>KElS(qL;U;dGKv^A-xgBt z9&fk~t6GxvyyrCSrwDO16cFJoC9@inJA#XeLGuH#O7&6(9)zbfQ_`wa*)!->1qblR-fOP3tB#V60{eHZGvCxIzx~{h}N58oajXCbS$`E~ehfw7Z z;_Ujy+dW}2Pn}F4nG$#r5pi&FEu$9mE#}j8<863;-z;M^!IIxgA_1WL8X8d=O|gk9 z%PHSuFln7SrBjumT+$EFeUV7pqgpN}yYVG{I)2=TKnKS@ne5ex`gv#YJVo}~L96Is zZQv@oqu#EJLz-->k`79rVL7~i6WXhj+5J$@MT%^3$8uku+>m|pr#ko}vYZ{QiX&`F z()#2*8<=lt95QjqM|k>xz2SuHg$L&Oof#1X7S5wgS)OT-Z;u|4FmJ;wc;9Q~Uj{l?g)j5$)$@?ra-taNL=oTmjZsaRzi8Y1q$?nbkdN(Q zGp&NDP7S8x5XNZ3dwcIQ!@RQ;#Q()&3ctrw{~NFO>Hj1|shzB#v+LXRB zLe~!0j>`!}T|hEB#xaHpZg9_{k`^wkwXhNXy*1V)PGD1fZtswSNtY63mppxF@kjDH zU|zy{u2E_cUb*HYf(uN>Ja;fi$ai#1aT&Fs5x3PH-0j9 zkQs(BbFR`b)^Ig62X>Hrv(f;SniJ0QL=dBdQ8+V~G4dy7Sl&qCFZxAB@K*accJay{ z;Jv}PdV&%DK++QZR1WXXwKb)DVJmHtQ+i%ow1RKM`!eN3d8X<5sr7*lP5cOk zJM{X2dG6yHyER|phudri`ystmR;JG#9QMpvqzThWPxTiI&uIiS!|u_Tkk`o>2hCT) zwN71aM;6l%hXz?Nuxuaty10kQgq}I|$`*qQ>>La;i61sETd<#2-%6NiTz$~Wr{}LL zCTes#rLUrK^JX^{-SY*CAa7~-eU?bO5l9ehj{{jE!wLcWR*BN1w1SsbGv7xO>C={i zlg|2&JWaj^Re#)pO>ANC2#m7`-FXtlj2cTmPd6@QAjK$$kRLKSV&t5vIck7zZ?~fJ zg51>);FtXtxeceai)w5P-@Mfsx=3@fNd>ES$x~z}R&X)wv>ijif2dqZ+UzrHIpCM0 zbK(g;GD5fQgHO1eTFe*xjR#Uu0KQkiqoR-4+*{D_YR>bah#f-%&|cZVW&n>qFNRy$ z<~nZX_=po*ve(Hq;X>PF8SB%T%s!m+E1kv9LdSNx`^ct=pjBfYRZtT$i~F{eT{|8t z1(hM%>OlR?>xVI4Kk_c)KSYE473X)qx(zz`3CgbwZ$A0%Ji{7xos%MU3JUs(&V@ zqU|R}LzA?4QP_ocMgytkIY)9c^zcxUmDkXc^Q6StQuVy%n>s%prSY%=VmyY-jd$G@DU;uqyql}CrAgFq+ek~Jenn#;O=%@-2NOBhf38m z@%h@arKj3`simjN`?|l&YulU5>a6ZbO?TenEWx;C?Nrm&sH4qL=H%logzsy1vVw~2 zUO;mY;sW8MqVN1`qun0r?Mri};u7LMtKmd-gw?`JmB4G*ORC>ts;^wbZR1O$-3bi+ zlnVV6<;_K-uZW?q%n+yaLol^r$R+*krG9R+b4jvOadKaWlg3BWABZZO2-@obiM68I zP}J5Dbmzj=olA)oq8Rr?`Ny%40#fFMw&w>(X_+J}+ItJz?oMW)QO>v>YKkdW1L5*Q zuBI#v&!#Mp>#A69VUnqjj=02UrY6+=|srQ>-XkrfI5W>k{-qEBy>J3U0+Srhqlm?Nl1lKDBr}Rcg{F9})*L z2eI9RZyyn!){%5KkY*f0X}G#ExVqImMA`F<;39z# zz2mSZjmW)9h$g9@Oy*%tih`Ndeq+^lVio+sn(f4@W(sC!3dUv%cES>cj0EEKDnXc} z!kg@WXO;_Qb^&{Vr3-8K50=hX_^JPq1S5ESrr-glU<9l#G^{SR{}COmE<7wz@<`$@ zCPjhFreEPXyRhtjFi-!%vir_F{Ts{bE4(XHFb$ zD0d|ALod_E-pbGTZm>KyIQSf*8Twz(s@_J>bWe0$UpSsP^aX7QlcR1=ZclKG&MMEw=e-Jj3$5DS7u>(Ww=K2n za?Ib&-&tm~&9!UtgiXMOP7H-j$m8S^#&YC1qfRu1?JrBX7!*xBNb3vQ0j7Pq%-)m? zU*dd~0ob+vz_lmYr?>sPSHnWF9ECs9R(cBDQ|uCB4mA0yxo&l}$aQnPteI((+of(A zLlQdu9JT8`mcM1kf2L3TOv#4i%!OoBp-(-QAcsP^lajf0vIojAT@jhgL-p!*wGn6s zbK{JB446tgvOtsk=)Dm)=YPVT=r{rz@?_!4n7FaPesR>()0c!uoc^?O7dp|hwDags z@`w*yksnUJI*9Zk9Q7-V;5gH@eLr3m{-^=1#G3{+xiBdSPB}ru4Hi?X7w{q@Vcz`Hv|-S zLSAy+wVG&tTsR6#=W4!a6r_zMPVbOpj~1bPuEN69R_Yt?_yW?s~4Zi1t-8zk&V|^(4s8I3ufhy+TEYDMu&IIgavn9LzMk zuC~ZI4jQ2I7LCX~CeJqmTnq`YmmULfy%!={MTP`=GIHgS8`2_C9&B3rS9jkS`cEV=@(~X&d5XWQ0LaQSbIu;-l9UX$ z^*?4@oVCpdqhX!(87OAZu&v%?{Sq|=zEOiH{0TS1e`hap)e4kfHTn3JNz~>aAKW3r zScpw_r8lDL2rJ^_l5p|6kNShBY4RbPoGds_5>ft7e3+P;%HDn)aD>zu?VJWkeyHg=(M1n4b%c@)<9#NIf=Rd<$92xO79L-e>ZF)IRN1bma8Y`N;xx!YV{-1@z^y1Q^{G zK)2OkwbguTt3hk4fycZi^VSajg(W0ktAvWLjtZEi_tAe%7u)GL!jsUZ6VavvYnVNOLMgy z`l7)S<)kI0B-Nt9h`-UcXz)lmX{u;2K`DtcmuBrJh!0ZT^CQR!Ufq-6|6_0keoG)h zX*NM(HVq}$U4F(B%cw8PdzGHt?-8E#ASdvM=%7n0wVe@gex)SNT$&0|_0>pFD}uTw zE9jC(ZHMDOs?p4)X#l=Uq0)PCb6{^Vb%k6SMG^I^$p0xQoTnK}z3GcOcMzyGUf`5> zJb5pNUNeV&EwFw$x}NWgttaoI6aJzT{o*A@?GEf?;~6l{{1?y9kIvkW&b0r^)yV!B z95@Ils3`8A74*sn_2NnT=#2SzWh3fuC+1%+`F~+M@=FuJOVfWL#NQS$f~kM-KODFN zUiD&LeZWciADzMY`9H${cK*j2A^&>pi$m$^g1u>B`yTta)K9fdf3v%WPLQMeD zPb7~e`6T8eVe!R+>Xm>2MdKVaE;YzIHDV9>MdJu@{9>kvs0%4T5h!J#?P8m`u`dQX zPblol57?D3*fv!3W>j>q!cVA@1LXjkC-?Y7@4yy${d%ATaGC}2a+xD){Bd8uOU>#i z>%z%UfU+W-dT%lM?S-yqyJqi#xUuD6=f`2!46U|GtcZL&yRf*S)#e4D=9q&(LsHNi)VfNKhhR$4#rMSg{cpZn}zi6ndS}zD=#R#~P{2eH)K+ zaL8(xrH62h)l&bcWOvkeyu&SoO~AJ3K3awhabS`mIm6582wI&-hwAVnr#3OOs-45+ ze@wiN&Ypb6L-4$I*@YK?zEDHh<8CdoI<wduJAa;ZGQIIyfH+K%T%vIW$7!;UcXbP zX>Fk45FnuIIfj-qD{b88n;`4$kXcwf?QilJ2)qc7!3S27Z4*;2qA`e$jyV)R&LL^uUUS@ z>6jBP!>F2-V>R%Rd+pwuugqKvqRo6f*NF^;A<>)ZHwwPHu8-w0m#>tT=&go$@Mofr zSv8NmKIZ#3q7`@joxCodlqQg-jqPJIyyU>M_Rb?rF--7AxB^4o___kXn1Jy`h?VA3 z+%fpdn8VrpqZF4PWYvfPk8gkVIcA(;K>_%01q<2tQp-p8++xl0=pIg!`gHDPlu%R# zl6LgI#gk~4df62}E9{we!m^b}G!1JC*8JfA!JDUAH+lz>eUnsM@S(NZ?fYP;f`7FI zf;WiukC=7)M1KHRBxRVGT`QA6s$4wD{hbA0EUjLtz&7z4lo=15E01KJ!5-CPZ4}N) zjszx9qE9I|LOFM9f85b!ALW)e+kBlk?DHQGER<3Zy_ylO`n)hY0uYwB=nt`)5tKSt zAkA?$Y=}}2zS>45=uZS$j@P;Iic?LptlE%Skk~}9txVtSq_QSvtr4beqg34nFIgxD zo~rGAn@VZ^Ewb-(kyV#t?FNbrQz`j9IZO$`v)M~8)Ca`S0~;3Xau9ucAKAcez1i!%o1 zd=QzS)q@kFq9H~@M+zrL3O9fjhYZZY6j2r)ni|GeM-R-w5n+ZBQT_-_g#)I-0JUI& z&_Yx;(BiVcy^ww?%~ytD%y+ZRi^1KjV;l;ndLaP`#EPL9Zn6;xlo4Vq10}EjkkYIp zx1EQ=dWezp<$NHh`b01R7gO|IlC6srw2nM;9*X19E$7j#;vojfXAHxagGqq=U9vV( z=_(nU-9AnE?*`kI;ZspWl-WwWStUFVp7Yve>Dg#VhY)dx5Zny}&My4j zF8tZw_~xDX$zAvbfADoS5L_KX792v@9YRPNyI>o;cp61fPAlm=GRW?GPD{aA^_CQ8AP z!q^np|D&-e1*0Vre>9TUqE!qyPQ2KT{=%0E_kAK<6Ht7<2w0AX} z^zbNB#3^4{v@bP}yA2CI`lr!h)40W_=in=*op=nIUL+302jrkCrnNXE48*G%LkX~G zvq&8i1&Hxtlew+aO$mPv!{3gchtLECQLzj8-*);U{PDUKF})Qsy4^%}{wpR`zp?Y! zX_ohB$E{k_hWM%r!-?01*rW@in!$#6>JP^bqd%lSOj1vtm;mwS9gS!T^W4MHL(YAL z!8&)_uWjWw6N2%bIWJdFY4fYK?{k7sCy5;?&trxx?Gfy&FL-my{@@smo-Bt6^y zWPDj56+IZkmKxYvvm8ES_8!?utgM*3vZH5iGC&Ql1~R0Zb+Nu4 zQDD+|Q|k(m>RBXy0c_g8wjP$IMT##YOAfTWW|%UNP8r0%QChLggcNm*;_Q4k*znAk z7^%k2bO0&1!u0H3IIb?)Ggbrh{B%3cq>2=VI!Du2j@q;b32_t=clT&~N|1YUkR zY;}ch$+B6=XZp_-&vXvKV~@-`jx~35x;`R?d+eD2;HfH2mTZ@zGQHs?uBms7)A8DP z2dH|Rhuvd|TNp;5$6xufO(5VWk56lcCS`e`$hp8RpqcGh?@}J}G5+;!AoONSroXRC zc|>)YAr--Nn!Nt>jB(81tOT`e;N$cnMBwh^#$)KrVaEa>$eoZu=f}G94;hiuKc0lGvRmq`=bB} zF%9;)>^i+2_)O8?>YUj6{-5bD)0lwGxCgA?$``|7V37moS)ujL?K(nBrw^PUws zf}J4;ikMF?d&V#e;0!p9oP9{_1%0j>QgsizITCR3$IkpkwRhzzG2PK@U-*{pB-q+)y zh93yv8nEd$9zDgPLOW($o4JdFF`4U*`k-bHuNQUSo9oE$fpF=4iq7mtMb%?jl|yrk zilS6^1L&6E`~pl0RwsWc5L5dy!&eG2dzDyw^PVB1gaW{3CHAiSBfc_f2ewzEVFqHX z7?bL{D7(<3tq?uhCek-km1BfkBl)t2OIS@QE(ufD9Tc8qrv&d8maX9^y%}FmV$Dj4 z7Zp@xE2spz;fV6q9h9A9XD?pQx{WJ~{?=lm5HBjO`pSouLc%tq#e^&;g*<2_7jr0B z-2Mm%c+)0%i!o{GwX=rnWTL^QO;ff`i@EWc4En_cUd*_VbPj378bv!CaL(j3SNTzWgnD`6_rj>rJ8jLG^}``;F5RZIU2}Cq~5A zX)HRe4|O-rh`{rI;ma^-7avZVWR|CCs^scjAN&;+Qw+uK#4z6|Qw+wgW3p#0OAP0* zNrER@S|8Pwr3t~waBe>zcwsf{6_rW_{Ux)EKzV$OGD3Zipv<#Lq<`XrWJoTHfKsdi zY_*JVmQt)L8kwRn%Ri9!XE%ut`TPxQ#hsilSp#?pAbl*hGry!OcTyj46PbIp8LPhrDInKUJh;+TL)jAj6cg_$gahn z%0tBPrkuQ&NUoABq)lQ5^N%7yC7VqbSN&-ah5B!0n@Tp1j(ZS=N;dlc7(WfN$Z3Bt z!v@m*s1|$I{|(0jXW23Ic86H*P3nbsK9G(k(QccKY634KR8KYX+9?<=U|E7llIC7X zO2dYV25-Kd_U-=O&0m9cDelOm{YFd&JVRQVRd&{J_GB-vU7ts{)bq6IYqWMR3nrBMb71RoZtx5>jTY!xu$I?k99=tQidQ3tyI9281m@TTqMDJS zd5(qJ1d`lnli?cCJYmO0DUk`aAZMdM@cj7eMC!X+Qi#&F5IKSi7nD_sw^FhzSR9B@ ztt>=BSb<$>seuPo0JnLmV)qL;xGQe0cNfsV)X5P$#0)2hvH(?s3|1{WMX5gw@57p2clzYzX`cL zi&t;uE(hr6^-97fCEyU65oM6D3pf=+Fx1tw-b)q2#&4454oZi|M|a8@|z-w_v;N&ee;;k(?u7)~(%~}N~*sOgnuWgPcnM2&TtFk+oIP6Oo3U2WJBFIrc z;mTkLOE*2^PL;e>a<$%Jc`1(*UbR6O8$mRFnK5PCV2Ep(=m)N;eLyvSF!XYEM^rSq z!(8eVySd#=YLhx`9)IMZCsxun6V1{KEcT9OKb0Z1|8qFfoPII*e-g7#B3hKo1S0XB z_j>bG4-qfv1CD`)OhX6MDSpOLAo7MciYAJaw_5K!>f%a042zbGQjp z?j^XTHlsw%91owbe9q}PMsA<|cg`90f8oRTzRkd3L}2K zO|UUr!n|2{eZGH9IvEClDqfDh_}^1k;X5m4g1nkV>s%raR31*N4HOt$dH&qPNx#rG z^$I3kUcVKL#+J&<@|M0Jo*4S!X+IOz?;}s8-IiEVRB(mgjQ*W#;#@nOPQGdkGn%T&j@1?PjE~p5tL)Um%@+=3$+wlv6y3ET){>7f6VV z_DU|9<&jWF@0%5_9>I)kG-N7x4ZL-@J~ynZhSsP3}gdAHBi2JESr)v1l-`$4Frq zM?ag`Ud>V*n_|zkv8aAc=qTRHwA1Rize#ZD90Ot@KI ze0308J?;1=QgddbH4Y#wKC%d!a=1^M^zSX?e zTT=kYDt5{%@yDL3JT13;1KP*0f87dNk7iiwSg(vyR;lXNE<@SZaHQ4ptnQ#Q@DAqg zFt-Y>`8~KYj<{H@EWU7Ot|yIp_M{cacib#(GrDiSF)k^*dfKNEPlDpWhue+Zr#FKi zyMu0xZ+V&L{#Y<96wh0;bL;x4dI|09#e7LG_0M5-U(0SdjS82*-$y+t5*QP9STEk> z>=&v5VJS`}c3$S0sQe!?U9-yT+^$^77JvJfKXJBkW8NwpO-l1WmPyY%BuJOtUrE#7 z(|$AKyi3R{c&f=ueu`LTG;v?1%0eCs7yVYonnlPMirE{nY369Ahi`px=wYi97s=U^ zZo*$4*3i4OnR#)V*M4_&pI$p8J-M}Anb$C|K^$B*^P84t{p4_k{N}XyaE^TDFr3G= z1>_>F?ggT8Rx@KLVv$te6?r`VgO;?MBV)%59u9iPLxYc&8$VnWSSp~akw#zAl{}+6 zbl|M0P!X*eQhjKptzTD~qoZIbPF0eYtS&orn55iRo$W5GaF*P9`1?w>REndV2gpv91PlZ25vQte_*I3 z#?(oHvmFiMX&lF6nEoBK>j1m~t0dFHfxAe+o3L>xS7Cj+ zA^@bTYBmAvwCoQrDkVn9L!eL_T2aV{8jZ$nWevmwciQtX zsbFC|;9=VW;$b27ooMS@K z$6nL8S)O76Z3APY+ZKfve9)K9cn{iAer^}qJQ2?sr>L&x1)Osf+ZJ1L9NjFJHL=eb z5`G*cf+-1rsQxkKrnB94+-MHfT`kz!7R6l^z%VmlIA0*m>?wI=k`!I&`>P-8l{m0*KM=<>oApWm2-L9bQ{aD$v1Vdr>)zBI4L0i}lXS-10Uyw-VdC>mmQ=9E|2S9iJT#4HX}sI7bS|CQ zADU!SdynSw zvoAXTxIUVxwZJ&xj=5E{9J2|VJ7NN8G80PQ8*!Wz_gAe3JgB9PMGfzX?W!6HNU{J> z(-g&{Z+NyPKl>HM0#FAOgPt>_{Aji*CH+7T-j{c5FW`4giF-x%H;2~^qzA>MH?(`j zI`Td*syDgUG$yGZ5>!e_AHFDM(?AZYf&sL<7V9rM9}KCkt(5f+KOk)feuC&MOP*UU z&tT)A)x(ssz%Y)44B8b;ef!!-mJsVpj0tiAA~UG%hknqU1ca`1mxFz%-X4v5GSLmNFih$Ernj^-Hs^MZ05{)nk0rBW__k#ZOgdhrB|xqW6=v;vd& zk={?254=1-@aYRApj2}MiYJJt_lc}rkl1-baq!38WR|EmI_qneMimq)Y+E?+`r{DR zr9zzYKE6UX)S`gTkMw|`8y7YC3ia2gb^DX3GELq(YQ{P`682hFS)UP4=GVdJp5novDU>-n$eHri%#vFXR~BJu>d4Q+nA-H3nN4dYe4% z9{sEaH|>l)OUb%wxKyQ7Lx^03QWkLmrO$tEhuZA967yd#BAL`T?-oE6_;_#liTZ8FBdK} zVx867!MOAM6R~<*d?xzJpsa$oW4bq}3RF%(u9?+8(YW)TlwG|@BmBeBA};G%tC~S+ zm~WT6Ytz_kOK_f;(stx57<}s8E#(}knpq)~M8V%X+%jKhcb8q*w#jdJKd{z1_c8Wb zitzh|zdNG41?$x!czfmgDh+chHTz88wFPjm*BuN4s=n=$pmXo|Qw5e@lco9@(~tJ+ zQ1_6p>$uZe-$$zW-TGd8x>$RDZ*U=7Y^mtQkne9IEW;r(tR_=`A&8*dO7jpf2-n<- z^59*KK*YqHEBL9nZha5)x{XWISwD{}x#^OjyGda!TH;7**9Ysu9KpLm&`3z2m%OTh z$AhBS>wMwVihR~9dBN@TQ4my2w}$cf+5hs3b!2t`J$UqPCuVV+{A-zUN>0P-6O2+X5yxYA!@t@hW=KFBDn{34039gYr_&t?v>1 z0u9&Q?<4HVzC)&V&JMVQ;U0vpR52p-#&Ho8ZrbRD4ynFk&u*I2{icyKB5?oRcJA+C zSujZ-ffq%&dEmid5UII&<3YO`g=lUSp&HkB&h7JMt!wO@cdh8_C)9b41Z*C97(PfL_NI4&^V`%e_;Ci?Ocfu zN3nbALa!C8qWkDV19^fZ2d7eEQ5Nc8zDQSwXKo=IO-3%fJI*8Fm|FU|PwR@uIxnp@ zHaV&}KhJ{y*Z`3#$?}+qa;NC$f(3?zKo#0q(+BFsxTPDqnn6Uq&QIXbHIfx`80dQ3@t_bjovoT7S*2iKn2lzT7Ac! z>VQ<%tjs0}R(b$oLG+a}Waz?)=grD4(R+v5Q+hQ{aU1tR9KC24)OJ|@Sh8W&`m21m zWXGy)u^gnPbCP$f0(Hq3QN#h)bANIkWy!$0>Q>G~*rLJKrajMiXty*|Ut=q|blaNi zI`JoG1m$a9B(mzY-UO7mU=_YY?bPJKQ6#1Ymn!zmXwv9P4wmQq?ML86s6(^|)hfs8 zTJ)EOvg)$Rm9g8eOK?FPXI4uKZUy7XhA_4>Yi`B1tGA|0yyQamn71u@R!_l2X)B>@*TN?lZN|ek*Tqca@JD|*KF^{ZLP|2UX7^KEZVRw z$p<;g&mLdn3ZMUF2K86>U*{cm@n!#U-~#w*x2w-@^3k?2s&0T|YIjLR*A~~d<)p65 zZIWTpwZ(qyq|LVu04)R^(H|OiFBLxBA9~y$@rNqxvM7AfGIZB6Vst<36)SuqHS{1g zqDL$2WI3KJ@H<1POlNJaTYeZa8tcKZCA+lWu6Rbl}luaQ3+W z^mynu-oQo1;DTQNj^5D7^1ut<;8bh>QR`5j&%oXDAOKbhwxlS$Bu}Pfc(C}H1~dsO zIs}#US{2_Of>v>gHgHM?eic9HfMynpP8LhLc#5x@K}%jmdtMb4k0&9TM+v?KV|V%Ovz$+Mg2#m~Ifi#Fuk(hF-fxOX zd_qtVe+m6HvZDX~lJ$@9gB5$knvyqX8cZNO4Uonvm-tsMJx?wr_-I236OsZG1`HGO zSrb~fEu!cxI)*KZ(=BR)Ez?b zf5HrZMUYifP;#A7H>p$ec2&3kGVKsGV>&YJLqB6>JMDHdW0X1VsXt@OKkeK$WATz0 zM`ucj=}9eQ6s{c4l9>PDCwRs%MB6^=is!SoH6x%HYY6&+lf`c z+y_O}rk=C|Le$*69z2nMcaZzFU47+ou9M{xhZX^uFuKc6o>Z9KpCbXb0hs~(0WSff z0l5LF0aF3a0TEGtfwF-x=2~B&Xz@5%;-_ynpJ^^#_i3F~Y6ko5PHNJ|%mvaPO1p>^ zHf3gH2vJL!yONuwtX#NC7?Pn;hbwy#H0J*#6^-SZ%i+QlrW1HGNiow2cXwGkk9Trga+X-)%`pQjwj+DSjx)*sFO;M7gv#KnFK=K zRtAx!$&>y0)W_WQfmdsTZB}ABGR(W@L4EsZT(h8OL&;YK#RZG_iOgBLvX_A8=1pZ{ z3={;8CG<`;g3HvAiSj)Lc4^ne|1+S%CR?2{Vz9h<_B$Fbrx(@G()>s3%x2C zpZif^+OzQ&<+SvHNu<79Rk1=?m$s{pNF;L)Lw!{@#oON0<3 zFcF$LsD^~CZN-fcqiqyBsq1d7G6yir@?2Kr&y@7qShFoZx=y+VW zgaXt;6~)L(`l_Ma$UhbyJp7`2qr4LIfhO#u%vS+WzWEnB=)A0+3dYm=k^5+jzfmzi z0Ut5b>@S?3dli!oE4JU_QEuAQ+U;yi+N+p&Yg!iO@NA;l z`qEWL7I>zTu|(;rN(xX+LO%}AFo!XBL+r}&XM;aHR(a$#{XYSX407|Eehd2j%tmU< zZelmJo7*kyW_C-vmEGEIW4E>2+3oEPc1OFD-P!J9ceT6O-R&NBPrH}h+wNocHNtNk zCmRm!R~pg&NIeeJ6+7DRue&SEoIaQ3w~)$oWNW>rP_|TK*FNBlC$A!3W{r2%Zp@{q5f0StP;k8H$ ze`y|G3Xe>fG-cY1S##zsShQr>idAdYZP>JB+m2m(_8mBM?m@zpoqgV+ss{P0tnbQv;b$(AEmkz#rB6)22S>*q4h z2!aPA1_A&8V22D@+qP}{_iZ91EFvluA!-=t)r`_Z(wL- zY+`C=ZeeL?c?hw_!9&VI1T^+0KkI&KR(;GZQHhHXWp(= zqgI`I4H`9R)}mFLb{#r(>DHrHzX5}W3>z_O%(w}Yrc9eLYtFm{i(0FgkDfex@#@XH51+n#`|;~fKu}0nL{v;%LQ>VvWn_IHTKXj1rP=Rc=cp0vTfUS&)#g?cAH(B+f5(Bt^d?N=-m2}UFUaZ zUOlG~5EK#?K^=9~Q(prOHPToUO*Io06PM6j3oW(MS{rS((_RN1b<$ZEU3Jr44?XqL zTOWP()87CC4KmmeLk%c025}%Wiw@waR-@KSue|m~?jI*MBAgC{Vq*dclT9(zG}Fy6(=4;i zG1olvEs(U(B8x4tGYZrP zcMBf=3B%)z|LcykGM{jqs#KM$Nlvv5AK0@8AZ>3r2;kZMzt4TPZQHhO+qP}nwr$(C z{S9hkP;Hci{o7|zcz?p--#7n5yJjio(OFpi$LHYp`$H6_ zvIU{4;lCUFQ+u<`{>ARx=@`3R>9=?P?{6}H;T%BZ zcijZUMPj5xdSpdz6hv{9MP<}PeKbXDbVPUb#bAuYcud7?EW~oG#b)fpejLSVT*P(U z#bdn0>v$I*<5N0@F)Cv-A(JyLGczaivnWfmBCE458?z<*ay%DuGmr8*U-Cl>eftuY z*>YNbD{7^!qE)xL*4SEFd+TbwZJ-Ueu{POe+I(ATt8Jrgx4m}QPTG09YWMA>y=rgU z$M$(Bq<65Cq3nPE{mU`bkey^Bc9xCVMK)nq*_7R6Gj^BF*+aHqPuY^aWGnWTt=UJm zVPDyn{bW1#m+d(~cHltSk%MF>4wjucM0Vj&*_Fd&Hx8HGIYRc}NZFI4WG{~P*~a*6 zV|})9KHGSoZGz7>(Px|FvrTq}%t|-Kr<>~2P4nrd`*bsWx|u%RET3++PdCS>o9olf z^XcaMbPIgCg+ARPpKh^Fx5TGgDra+X*{0i41;Y;h5TGHl3- zOv{2eh|{>QnzC%fN=(N>ID|8Jpqg@Q%*ss9!Z?hxc&M84Y{Dwcz#=$;b9khh3T(=% z%*diRit~7^nu=`3YRtr9IED*&qMAx<&g#s};y8|rc&eJpY{44L!V)-vOL(T5Ds0J` z%*v8DiOYEI3|Fuf`yFu=+vGKDm)EgF-oQ?I6T9Rs?3TB&N8Z6+c^CVnM*r=xr*J@? z#zA=ohvZotmgjIpp2tyn0mtM;9G91HLSDv67h*fsV=k7{SM6D!xmn&ZsD@W%4ZPtj zsL#BNsImd`F_OxL%+JU!ENH}5ti^0B#i;t!n5|ix*;$&=^r;Ekunu#u45RB)Q?_MY z=44sM(5%fEQ#NNT$55`IgUlUtlzD^BGGEX~<_V_CoIy*OKWHTj1g&Mkpp7gPw3CH{ z_Oghdp{SqXYmVug2mlxeVAy0>>775JoS%R;B^;Q;DR{5qx`xww$OCsx+_iAm#$5+@ zU3~TUm01InAW0NUDt~OO#tBu8eY&rveqJs_Lncny8stsFm8NojRzKx~N2D*2wz!zHcDI4gSl& zGe7;AiT=`na7aQ8A2vfv^a9WaXP_d^!p+FTt$5UzKJL*CPvU8G$FumzxB3KM;A(u0 zez*YxFdFw_ET;Gt)36#ZVgrugV;rYLf5tEcLzu=Y7|UE1U`F)R#vImW9V})&HpEgk zVNV=+9} zygASFEXk61zNK3xFR$Ck zs<~RKwc4t^I;yj}s#I@*9@V2zX(6l>!gU~W^s#6DnZDO}t=9%^)MjnbR?lm@c4(LO zXul5Xu#V`cj_J6;oMnJ;tZ7Lhu4RotNExc6ToA=dQCjrZR~39o73C^lg(_AxRaXtw zR4sXjMRnES@Az785LNzWl)C@W%b^k+aslLf5%;9@{4|7$nYcNl5YYp~Wwq>)6wXrtrY8|WtORR_WV5yyF zU$V@;wtalv4#afeYX24UwF|zxBKHc4e3!WBoc{N{)CWWY;*o-iDD<4Gdj5^j81%R^ zgh^4zu(sho62D_VfGfBXi9GIzWDsaPK!l&?7r z2t5bGLC8Z3fN_jR4(qb6&pYrZwF%=Y?&kp>ghR|vr7f`@IYGfGLBXxo#9FWw92htP z4zc`(-vC_8bs#rzBgD&eon&reFM^J6D+BR3+6yZxxiJj}z$3S(!xB3FbQy{wm!8!5s890_m= z=OQuW!x&NN@A9KKIppb6a{(~a3;;cf;r!8(u>ccT$8)UbS?`WmGbv)tt0UIDCOUUs z%T*rNajnPo+~9FTqyTU9T=((zh%4`oSn?jFDUJ84k}B~&uj>oEKjO{dUfqv4LZ9kW zPSEH2juZ8R#&M=5Xe~EtlQy|n?bJ>er`_7^;GG`7?TZU!e j84$Uw`M;kINzwDcgB}RiIZp!N987Wm0000100000ycIT$ diff --git a/ch6-dev/SourceSerif4-Regular.ttf.woff2 b/ch6-dev/SourceSerif4-Regular.ttf.woff2 deleted file mode 100644 index 2db73fe2b49e8cfcaaf1d5311a610e730b8ed502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76180 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 diff --git a/ch6-dev/ayu.css b/ch6-dev/ayu.css deleted file mode 100644 index 50d893e2..00000000 --- a/ch6-dev/ayu.css +++ /dev/null @@ -1 +0,0 @@ - body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#14191f;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 #24292f;}.sidebar{scrollbar-color:#5c6773 #24292f;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current,.sidebar a:hover{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#14191f;}.sidebar-elems .location{color:#ff7733;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ffa0a5;}.content span.union,.content a.union{color:#ffa0a5;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#39AFD7;}.content span.primitive,.content a.primitive{color:#ffa0a5;}.content span.traitalias,.content a.traitalias{color:#39AFD7;}.content span.keyword,.content a.keyword{color:#39AFD7;}.content span.externcrate,.content span.mod,.content a.mod{color:#39AFD7;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#ffa0a5;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#39AFD7;}.content span.type,.content a.type,.block a.current.type{color:#39AFD7;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#39AFD7;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}.sidebar a{color:#53b1db;}.sidebar a.current.type{color:#53b1db;}.sidebar a.current.associatedtype{color:#53b1db;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#39AFD7;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#c5c5c5;}.sidebar h2 a,.sidebar h3 a{color:white;}.search-results a{color:#0096cf;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search,.search-input{background-color:#141920;border-color:#424c57;color:#c5c5c5;}.search-input{color:#ffffff;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target{background:rgba(255,236,164,0.06);border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.typedef,.content a.typedef,.block a.current.typedef{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-associatedtype:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}.sidebar a.current.enum{}.sidebar a.current.struct{}.sidebar a.current.foreigntype{}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{}.sidebar a.current.union{}.sidebar a.current.constant .sidebar a.current.static{}.sidebar a.current.primitive{}.sidebar a.current.externcrate .sidebar a.current.mod{}.sidebar a.current.trait{}.sidebar a.current.traitalias{}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{}.sidebar a.current.keyword{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow:inset 0 -1px 0 #5c6773;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(15,20,25,1),rgba(15,20,25,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(15,20,25,1),rgba(15,20,25,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:#898989;} \ No newline at end of file diff --git a/ch6-dev/brush.svg b/ch6-dev/brush.svg deleted file mode 100644 index ea266e85..00000000 --- a/ch6-dev/brush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ch6-dev/dark.css b/ch6-dev/dark.css deleted file mode 100644 index a31f453f..00000000 --- a/ch6-dev/dark.css +++ /dev/null @@ -1 +0,0 @@ -body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#505050;}.rust-logo{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) #5a5a5a;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current,.sidebar a:hover{background:#444;}.source .sidebar{background-color:#565656;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#884719;}a.result-enum:focus{background-color:#194e9f;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#194e9f;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#194e9f;}a.result-associatedtype:focus{background-color:#884719;}a.result-foreigntype:focus{background-color:#194e9f;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#884719;}a.result-primitive:focus{background-color:#194e9f;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#2dbfb8;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#2dbfb8;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#D2991D;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#2dbfb8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#2dbfb8;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#D2991D;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2dbfb8;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#D2991D;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b78cf2;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#D2991D;}.sidebar a{color:#fdbf35;}.sidebar a.current.enum{color:#12ece2;}.sidebar a.current.struct{color:#12ece2;}.sidebar a.current.type{color:#12ece2;}.sidebar a.current.associatedtype{color:#fdbf35;}.sidebar a.current.foreigntype{color:#12ece2;}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{color:#0be900;}.sidebar a.current.union{color:#12ece2;}.sidebar a.current.constant .sidebar a.current.static{color:#fdbf35;}.sidebar a.current.primitive{color:#12ece2;}.sidebar a.current.externcrate .sidebar a.current.mod{color:#fdbf35;}.sidebar a.current.trait{color:#cca7ff;}.sidebar a.current.traitalias{color:#cca7ff;}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{color:#32d479;}.sidebar a.current.keyword{color:#fdbf35;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#D2991D;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#ddd;}.search-results a{color:#ddd;}a.test-arrow{color:#dedede;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search,.search-input{color:#111;background-color:#f0f0f0;border-color:#000;}.search-input{border-color:#e0e0e0;}.search-input:focus{border-color:#008dfd;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background-color:#494a3d;border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow:inset 0 -1px 0 #c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(53,53,53,1),rgba(53,53,53,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(53,53,53,1),rgba(53,53,53,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:#898989;} \ No newline at end of file diff --git a/ch6-dev/down-arrow.svg b/ch6-dev/down-arrow.svg deleted file mode 100644 index 35437e77..00000000 --- a/ch6-dev/down-arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ch6-dev/help.html b/ch6-dev/help.html new file mode 100644 index 00000000..26794106 --- /dev/null +++ b/ch6-dev/help.html @@ -0,0 +1 @@ +Rustdoc help

Rustdoc help

Back
\ No newline at end of file diff --git a/ch6-dev/implementors/core/clone/trait.Clone.js b/ch6-dev/implementors/core/clone/trait.Clone.js index 78f78fe1..bf81b7af 100644 --- a/ch6-dev/implementors/core/clone/trait.Clone.js +++ b/ch6-dev/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Clone for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Clone for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Clone for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Clone for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Clone for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Clone for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Clone for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Clone for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Clone for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Clone for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Clone> Clone for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Clone for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Clone for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Clone for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Clone for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Clone for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Clone for PageTableEntry"],["impl<T> Clone for SimpleRange<T>where\n T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Clone,"],["impl Clone for VirtAddr"],["impl Clone for VirtPageNum"],["impl Clone for PTEFlags"],["impl Clone for MapType"],["impl Clone for OpenFlags"],["impl Clone for PhysPageNum"],["impl Clone for MapPermission"],["impl Clone for TaskStatus"],["impl Clone for PhysAddr"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/cmp/trait.Eq.js b/ch6-dev/implementors/core/cmp/trait.Eq.js index 207410b1..18526b90 100644 --- a/ch6-dev/implementors/core/cmp/trait.Eq.js +++ b/ch6-dev/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Eq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Eq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Eq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Eq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Eq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Eq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Eq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Eq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Eq for PhysAddr"],["impl Eq for VirtPageNum"],["impl Eq for VirtAddr"],["impl Eq for OpenFlags"],["impl Eq for MapPermission"],["impl Eq for PTEFlags"],["impl Eq for PhysPageNum"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/cmp/trait.Ord.js b/ch6-dev/implementors/core/cmp/trait.Ord.js index c4f5e412..3c919e5e 100644 --- a/ch6-dev/implementors/core/cmp/trait.Ord.js +++ b/ch6-dev/implementors/core/cmp/trait.Ord.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Ord for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Ord for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Ord for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Ord for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Ord for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Ord for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Ord for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Ord for PTEFlags"],["impl Ord for MapPermission"],["impl Ord for VirtAddr"],["impl Ord for PhysAddr"],["impl Ord for PhysPageNum"],["impl Ord for OpenFlags"],["impl Ord for VirtPageNum"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/cmp/trait.PartialEq.js b/ch6-dev/implementors/core/cmp/trait.PartialEq.js index 7bf2c8fd..e76fc9b3 100644 --- a/ch6-dev/implementors/core/cmp/trait.PartialEq.js +++ b/ch6-dev/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl PartialEq<CMD> for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl PartialEq<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl PartialEq<PhysAddr> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl PartialEq<VirtAddr> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl PartialEq<PhysPageNum> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl PartialEq<VirtPageNum> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl PartialEq<MapType> for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl PartialEq<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl PartialEq<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl PartialEq<TaskStatus> for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl PartialEq<OpenFlags> for OpenFlags"],["impl PartialEq<PhysAddr> for PhysAddr"],["impl PartialEq<MapType> for MapType"],["impl PartialEq<MapPermission> for MapPermission"],["impl PartialEq<VirtPageNum> for VirtPageNum"],["impl PartialEq<TaskStatus> for TaskStatus"],["impl PartialEq<PhysPageNum> for PhysPageNum"],["impl PartialEq<PTEFlags> for PTEFlags"],["impl PartialEq<VirtAddr> for VirtAddr"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/cmp/trait.PartialOrd.js b/ch6-dev/implementors/core/cmp/trait.PartialOrd.js index fa8662da..e90af104 100644 --- a/ch6-dev/implementors/core/cmp/trait.PartialOrd.js +++ b/ch6-dev/implementors/core/cmp/trait.PartialOrd.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl PartialOrd<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl PartialOrd<PhysAddr> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl PartialOrd<VirtAddr> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl PartialOrd<PhysPageNum> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl PartialOrd<VirtPageNum> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl PartialOrd<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl PartialOrd<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl PartialOrd<PhysAddr> for PhysAddr"],["impl PartialOrd<PTEFlags> for PTEFlags"],["impl PartialOrd<PhysPageNum> for PhysPageNum"],["impl PartialOrd<VirtPageNum> for VirtPageNum"],["impl PartialOrd<MapPermission> for MapPermission"],["impl PartialOrd<OpenFlags> for OpenFlags"],["impl PartialOrd<VirtAddr> for VirtAddr"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/convert/trait.From.js b/ch6-dev/implementors/core/convert/trait.From.js index d2fbb8c0..52135ba7 100644 --- a/ch6-dev/implementors/core/convert/trait.From.js +++ b/ch6-dev/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl From<usize> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl From<usize> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl From<usize> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl From<usize> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl From<PhysAddr> for usize","synthetic":false,"types":[]},{"text":"impl From<PhysPageNum> for usize","synthetic":false,"types":[]},{"text":"impl From<VirtAddr> for usize","synthetic":false,"types":[]},{"text":"impl From<VirtPageNum> for usize","synthetic":false,"types":[]},{"text":"impl From<VirtAddr> for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl From<VirtPageNum> for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl From<PhysAddr> for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl From<PhysPageNum> for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl From<usize> for PhysPageNum"],["impl From<usize> for VirtAddr"],["impl From<PhysAddr> for PhysPageNum"],["impl From<PhysPageNum> for PhysAddr"],["impl From<usize> for PhysAddr"],["impl From<VirtPageNum> for usize"],["impl From<VirtAddr> for VirtPageNum"],["impl From<usize> for VirtPageNum"],["impl From<VirtAddr> for usize"],["impl From<PhysPageNum> for usize"],["impl From<VirtPageNum> for VirtAddr"],["impl From<PhysAddr> for usize"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.Binary.js b/ch6-dev/implementors/core/fmt/trait.Binary.js index 09ec8b2b..c3d5d17b 100644 --- a/ch6-dev/implementors/core/fmt/trait.Binary.js +++ b/ch6-dev/implementors/core/fmt/trait.Binary.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Binary for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Binary for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Binary for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Binary for MapPermission"],["impl Binary for OpenFlags"],["impl Binary for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.Debug.js b/ch6-dev/implementors/core/fmt/trait.Debug.js index 595621c0..822a45d3 100644 --- a/ch6-dev/implementors/core/fmt/trait.Debug.js +++ b/ch6-dev/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Debug for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Debug for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Debug for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Debug for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Debug for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Debug for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Debug for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Debug for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl Debug for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Debug for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Debug for FrameTracker","synthetic":false,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Debug for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Debug for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Debug for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Debug for TrapContext","synthetic":false,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Debug for PhysAddr"],["impl Debug for PTEFlags"],["impl Debug for VirtPageNum"],["impl Debug for MapType"],["impl Debug for MapPermission"],["impl Debug for PhysPageNum"],["impl Debug for OpenFlags"],["impl Debug for TrapContext"],["impl Debug for VirtAddr"],["impl Debug for FrameTracker"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.LowerHex.js b/ch6-dev/implementors/core/fmt/trait.LowerHex.js index f813c697..bf42c2a3 100644 --- a/ch6-dev/implementors/core/fmt/trait.LowerHex.js +++ b/ch6-dev/implementors/core/fmt/trait.LowerHex.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl LowerHex for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl LowerHex for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl LowerHex for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl LowerHex for PTEFlags"],["impl LowerHex for MapPermission"],["impl LowerHex for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.Octal.js b/ch6-dev/implementors/core/fmt/trait.Octal.js index e4fe0cfb..1da85da5 100644 --- a/ch6-dev/implementors/core/fmt/trait.Octal.js +++ b/ch6-dev/implementors/core/fmt/trait.Octal.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Octal for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Octal for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Octal for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Octal for PTEFlags"],["impl Octal for MapPermission"],["impl Octal for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.UpperHex.js b/ch6-dev/implementors/core/fmt/trait.UpperHex.js index c947ae8e..1df82c7b 100644 --- a/ch6-dev/implementors/core/fmt/trait.UpperHex.js +++ b/ch6-dev/implementors/core/fmt/trait.UpperHex.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl UpperHex for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl UpperHex for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl UpperHex for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl UpperHex for PTEFlags"],["impl UpperHex for MapPermission"],["impl UpperHex for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/fmt/trait.Write.js b/ch6-dev/implementors/core/fmt/trait.Write.js index 0d40b97a..d9d7c42d 100644 --- a/ch6-dev/implementors/core/fmt/trait.Write.js +++ b/ch6-dev/implementors/core/fmt/trait.Write.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Write for Stdout","synthetic":false,"types":["os::console::Stdout"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Write for Stdout"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/hash/trait.Hash.js b/ch6-dev/implementors/core/hash/trait.Hash.js index a4d2c82b..3e0d29f7 100644 --- a/ch6-dev/implementors/core/hash/trait.Hash.js +++ b/ch6-dev/implementors/core/hash/trait.Hash.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Hash for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Hash for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Hash for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Hash for MapPermission"],["impl Hash for PTEFlags"],["impl Hash for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/iter/traits/collect/trait.Extend.js b/ch6-dev/implementors/core/iter/traits/collect/trait.Extend.js index a5000152..de71176b 100644 --- a/ch6-dev/implementors/core/iter/traits/collect/trait.Extend.js +++ b/ch6-dev/implementors/core/iter/traits/collect/trait.Extend.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Extend<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Extend<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Extend<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Extend<OpenFlags> for OpenFlags"],["impl Extend<PTEFlags> for PTEFlags"],["impl Extend<MapPermission> for MapPermission"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/iter/traits/collect/trait.FromIterator.js b/ch6-dev/implementors/core/iter/traits/collect/trait.FromIterator.js index 7b852646..0b67c8f8 100644 --- a/ch6-dev/implementors/core/iter/traits/collect/trait.FromIterator.js +++ b/ch6-dev/implementors/core/iter/traits/collect/trait.FromIterator.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl FromIterator<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl FromIterator<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl FromIterator<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl FromIterator<OpenFlags> for OpenFlags"],["impl FromIterator<MapPermission> for MapPermission"],["impl FromIterator<PTEFlags> for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/iter/traits/collect/trait.IntoIterator.js b/ch6-dev/implementors/core/iter/traits/collect/trait.IntoIterator.js index 7a056c59..96c3063e 100644 --- a/ch6-dev/implementors/core/iter/traits/collect/trait.IntoIterator.js +++ b/ch6-dev/implementors/core/iter/traits/collect/trait.IntoIterator.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl<T> IntoIterator for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl IntoIterator for UserBuffer","synthetic":false,"types":["os::mm::page_table::UserBuffer"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl<T> IntoIterator for SimpleRange<T>where\n T: StepByOne + Copy + PartialEq + PartialOrd + Debug,"],["impl IntoIterator for UserBuffer"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/iter/traits/iterator/trait.Iterator.js b/ch6-dev/implementors/core/iter/traits/iterator/trait.Iterator.js index ede026ae..32ca6707 100644 --- a/ch6-dev/implementors/core/iter/traits/iterator/trait.Iterator.js +++ b/ch6-dev/implementors/core/iter/traits/iterator/trait.Iterator.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl<T> Iterator for SimpleRangeIterator<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Iterator for UserBufferIterator","synthetic":false,"types":["os::mm::page_table::UserBufferIterator"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Iterator for UserBufferIterator"],["impl<T> Iterator for SimpleRangeIterator<T>where\n T: StepByOne + Copy + PartialEq + PartialOrd + Debug,"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.Copy.js b/ch6-dev/implementors/core/marker/trait.Copy.js index 9d743550..6fd72ffe 100644 --- a/ch6-dev/implementors/core/marker/trait.Copy.js +++ b/ch6-dev/implementors/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Copy for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Copy for InitError","synthetic":false,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Copy for SDCardCSD","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Copy for SDCardCID","synthetic":false,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Copy for SDCardInfo","synthetic":false,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Copy for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Copy for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl Copy for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl Copy for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Copy for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T: Copy> Copy for SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
","synthetic":false,"types":["os::mm::address::SimpleRange"]},{"text":"impl Copy for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl Copy for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Copy for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Copy for PageTableEntry","synthetic":false,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Copy for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Copy for PageTableEntry"],["impl Copy for PhysAddr"],["impl Copy for MapPermission"],["impl Copy for PTEFlags"],["impl Copy for VirtAddr"],["impl Copy for OpenFlags"],["impl<T> Copy for SimpleRange<T>where\n T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Copy,"],["impl Copy for TaskStatus"],["impl Copy for MapType"],["impl Copy for PhysPageNum"],["impl Copy for VirtPageNum"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.Freeze.js b/ch6-dev/implementors/core/marker/trait.Freeze.js index ed235f80..242bcfb8 100644 --- a/ch6-dev/implementors/core/marker/trait.Freeze.js +++ b/ch6-dev/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Freeze for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Freeze for SDCard<SPI> where
    SPI: Freeze
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Freeze for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Freeze for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Freeze for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Freeze for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Freeze for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Freeze for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl !Freeze for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !Freeze for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Freeze for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Freeze for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !Freeze for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Freeze for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Freeze for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Freeze for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Freeze for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Freeze for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Freeze for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Freeze for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Freeze for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Freeze for SimpleRange<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Freeze for SimpleRangeIterator<T> where
    T: Freeze
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Freeze for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Freeze for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Freeze for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Freeze for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Freeze for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Freeze for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Freeze for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Freeze for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Freeze for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Freeze for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Freeze for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Freeze for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Freeze for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !Freeze for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Freeze for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Freeze for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Freeze for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Freeze for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Freeze for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Freeze for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Freeze for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Freeze for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Freeze for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !Freeze for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Freeze for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Freeze for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Freeze for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Freeze for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Freeze for Stdout",1,["os::console::Stdout"]],["impl !Freeze for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl Freeze for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl Freeze for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl Freeze for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl !Freeze for OSInode",1,["os::fs::inode::OSInode"]],["impl Freeze for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl Freeze for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl Freeze for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl Freeze for Stdin",1,["os::fs::stdio::Stdin"]],["impl Freeze for Stdout",1,["os::fs::stdio::Stdout"]],["impl Freeze for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl Freeze for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl Freeze for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl Freeze for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> Freeze for SimpleRange<T>where\n T: Freeze,",1,["os::mm::address::SimpleRange"]],["impl<T> Freeze for SimpleRangeIterator<T>where\n T: Freeze,",1,["os::mm::address::SimpleRangeIterator"]],["impl Freeze for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl Freeze for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl Freeze for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl Freeze for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl Freeze for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl Freeze for MapArea",1,["os::mm::memory_set::MapArea"]],["impl Freeze for MapType",1,["os::mm::memory_set::MapType"]],["impl Freeze for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl Freeze for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl Freeze for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl Freeze for PageTable",1,["os::mm::page_table::PageTable"]],["impl Freeze for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl Freeze for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl<T> !Freeze for UPSafeCell<T>",1,["os::sync::up::UPSafeCell"]],["impl !Freeze for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl Freeze for TaskContext",1,["os::task::context::TaskContext"]],["impl Freeze for TaskManager",1,["os::task::manager::TaskManager"]],["impl Freeze for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl Freeze for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl Freeze for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl Freeze for PidHandle",1,["os::task::pid::PidHandle"]],["impl Freeze for KernelStack",1,["os::task::pid::KernelStack"]],["impl Freeze for Processor",1,["os::task::processor::Processor"]],["impl Freeze for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl !Freeze for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl Freeze for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl Freeze for TaskStatus",1,["os::task::task::TaskStatus"]],["impl Freeze for INITPROC",1,["os::task::INITPROC"]],["impl Freeze for TrapContext",1,["os::trap::context::TrapContext"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.Send.js b/ch6-dev/implementors/core/marker/trait.Send.js index e62c3752..32dac63a 100644 --- a/ch6-dev/implementors/core/marker/trait.Send.js +++ b/ch6-dev/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Send for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Send for SDCard<SPI> where
    SPI: Send
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Send for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Send for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Send for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Send for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Send for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Send for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Send for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Send for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Send for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Send for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Send for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Send for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Send for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Send for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Send for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Send for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Send for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Send for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Send for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Send for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Send for SimpleRange<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Send for SimpleRangeIterator<T> where
    T: Send
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Send for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Send for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Send for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Send for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Send for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Send for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Send for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Send for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Send for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Send for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Send for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Send for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Send for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Send for UPSafeCell<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Send for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Send for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Send for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Send for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Send for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Send for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Send for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Send for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Send for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Send for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Send for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Send for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Send for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Send for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Send for Stdout",1,["os::console::Stdout"]],["impl Send for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl Send for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl Send for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl Send for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl Send for OSInode",1,["os::fs::inode::OSInode"]],["impl Send for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl Send for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl Send for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl Send for Stdin",1,["os::fs::stdio::Stdin"]],["impl Send for Stdout",1,["os::fs::stdio::Stdout"]],["impl Send for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl Send for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl Send for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl Send for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> Send for SimpleRange<T>where\n T: Send,",1,["os::mm::address::SimpleRange"]],["impl<T> Send for SimpleRangeIterator<T>where\n T: Send,",1,["os::mm::address::SimpleRangeIterator"]],["impl Send for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl Send for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl Send for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl Send for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl Send for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl Send for MapArea",1,["os::mm::memory_set::MapArea"]],["impl Send for MapType",1,["os::mm::memory_set::MapType"]],["impl Send for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl Send for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl Send for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl Send for PageTable",1,["os::mm::page_table::PageTable"]],["impl Send for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl Send for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl<T> Send for UPSafeCell<T>where\n T: Send,",1,["os::sync::up::UPSafeCell"]],["impl Send for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl Send for TaskContext",1,["os::task::context::TaskContext"]],["impl Send for TaskManager",1,["os::task::manager::TaskManager"]],["impl Send for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl Send for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl Send for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl Send for PidHandle",1,["os::task::pid::PidHandle"]],["impl Send for KernelStack",1,["os::task::pid::KernelStack"]],["impl Send for Processor",1,["os::task::processor::Processor"]],["impl Send for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl Send for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl Send for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl Send for TaskStatus",1,["os::task::task::TaskStatus"]],["impl Send for INITPROC",1,["os::task::INITPROC"]],["impl Send for TrapContext",1,["os::trap::context::TrapContext"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.StructuralEq.js b/ch6-dev/implementors/core/marker/trait.StructuralEq.js index 9cccc2f8..77447677 100644 --- a/ch6-dev/implementors/core/marker/trait.StructuralEq.js +++ b/ch6-dev/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl StructuralEq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl StructuralEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl StructuralEq for VirtAddr"],["impl StructuralEq for MapPermission"],["impl StructuralEq for VirtPageNum"],["impl StructuralEq for OpenFlags"],["impl StructuralEq for PhysAddr"],["impl StructuralEq for PhysPageNum"],["impl StructuralEq for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.StructuralPartialEq.js b/ch6-dev/implementors/core/marker/trait.StructuralPartialEq.js index 912918b1..97ba8d2a 100644 --- a/ch6-dev/implementors/core/marker/trait.StructuralPartialEq.js +++ b/ch6-dev/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl StructuralPartialEq for CMD","synthetic":false,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl StructuralPartialEq for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl StructuralPartialEq for PhysAddr","synthetic":false,"types":["os::mm::address::PhysAddr"]},{"text":"impl StructuralPartialEq for VirtAddr","synthetic":false,"types":["os::mm::address::VirtAddr"]},{"text":"impl StructuralPartialEq for PhysPageNum","synthetic":false,"types":["os::mm::address::PhysPageNum"]},{"text":"impl StructuralPartialEq for VirtPageNum","synthetic":false,"types":["os::mm::address::VirtPageNum"]},{"text":"impl StructuralPartialEq for MapType","synthetic":false,"types":["os::mm::memory_set::MapType"]},{"text":"impl StructuralPartialEq for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl StructuralPartialEq for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl StructuralPartialEq for TaskStatus","synthetic":false,"types":["os::task::task::TaskStatus"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl StructuralPartialEq for PhysAddr"],["impl StructuralPartialEq for VirtPageNum"],["impl StructuralPartialEq for PhysPageNum"],["impl StructuralPartialEq for MapPermission"],["impl StructuralPartialEq for VirtAddr"],["impl StructuralPartialEq for OpenFlags"],["impl StructuralPartialEq for PTEFlags"],["impl StructuralPartialEq for TaskStatus"],["impl StructuralPartialEq for MapType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.Sync.js b/ch6-dev/implementors/core/marker/trait.Sync.js index ebc01a36..f9916b7d 100644 --- a/ch6-dev/implementors/core/marker/trait.Sync.js +++ b/ch6-dev/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Sync for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Sync for SDCard<SPI> where
    SPI: Sync
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Sync for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Sync for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Sync for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Sync for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Sync for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Sync for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Sync for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Sync for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Sync for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Sync for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Sync for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Sync for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Sync for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Sync for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Sync for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Sync for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Sync for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Sync for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Sync for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Sync for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Sync for SimpleRange<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Sync for SimpleRangeIterator<T> where
    T: Sync
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Sync for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Sync for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Sync for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Sync for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Sync for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Sync for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Sync for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Sync for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Sync for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Sync for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Sync for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Sync for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Sync for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl Sync for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Sync for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Sync for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Sync for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Sync for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Sync for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Sync for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Sync for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Sync for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Sync for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Sync for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Sync for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Sync for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Sync for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl<T> Sync for UPSafeCell<T>","synthetic":false,"types":["os::sync::up::UPSafeCell"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Sync for Stdout",1,["os::console::Stdout"]],["impl Sync for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl Sync for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl Sync for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl Sync for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl Sync for OSInode",1,["os::fs::inode::OSInode"]],["impl Sync for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl Sync for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl Sync for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl Sync for Stdin",1,["os::fs::stdio::Stdin"]],["impl Sync for Stdout",1,["os::fs::stdio::Stdout"]],["impl Sync for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl Sync for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl Sync for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl Sync for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> Sync for SimpleRange<T>where\n T: Sync,",1,["os::mm::address::SimpleRange"]],["impl<T> Sync for SimpleRangeIterator<T>where\n T: Sync,",1,["os::mm::address::SimpleRangeIterator"]],["impl Sync for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl Sync for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl Sync for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl Sync for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl Sync for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl Sync for MapArea",1,["os::mm::memory_set::MapArea"]],["impl Sync for MapType",1,["os::mm::memory_set::MapType"]],["impl Sync for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl Sync for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl Sync for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl Sync for PageTable",1,["os::mm::page_table::PageTable"]],["impl Sync for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl Sync for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl Sync for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl Sync for TaskContext",1,["os::task::context::TaskContext"]],["impl Sync for TaskManager",1,["os::task::manager::TaskManager"]],["impl Sync for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl Sync for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl Sync for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl Sync for PidHandle",1,["os::task::pid::PidHandle"]],["impl Sync for KernelStack",1,["os::task::pid::KernelStack"]],["impl Sync for Processor",1,["os::task::processor::Processor"]],["impl Sync for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl Sync for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl Sync for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl Sync for TaskStatus",1,["os::task::task::TaskStatus"]],["impl Sync for INITPROC",1,["os::task::INITPROC"]],["impl Sync for TrapContext",1,["os::trap::context::TrapContext"]],["impl<T> Sync for UPSafeCell<T>"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/marker/trait.Unpin.js b/ch6-dev/implementors/core/marker/trait.Unpin.js index ceea48bd..7e4468a0 100644 --- a/ch6-dev/implementors/core/marker/trait.Unpin.js +++ b/ch6-dev/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Unpin for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> Unpin for SDCard<SPI> where
    SPI: Unpin
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl Unpin for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl Unpin for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl Unpin for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl Unpin for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl Unpin for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl Unpin for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Unpin for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl Unpin for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl Unpin for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Unpin for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Unpin for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl Unpin for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl Unpin for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Unpin for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Unpin for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl Unpin for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl Unpin for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl Unpin for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl Unpin for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> Unpin for SimpleRange<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> Unpin for SimpleRangeIterator<T> where
    T: Unpin
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl Unpin for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Unpin for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl Unpin for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Unpin for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Unpin for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl Unpin for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl Unpin for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl Unpin for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Unpin for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl Unpin for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl Unpin for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl Unpin for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl Unpin for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> Unpin for UPSafeCell<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl Unpin for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Unpin for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl Unpin for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Unpin for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl Unpin for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Unpin for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl Unpin for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl Unpin for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl Unpin for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Unpin for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl Unpin for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl Unpin for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl Unpin for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl Unpin for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Unpin for Stdout",1,["os::console::Stdout"]],["impl Unpin for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl Unpin for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl Unpin for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl Unpin for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl Unpin for OSInode",1,["os::fs::inode::OSInode"]],["impl Unpin for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl Unpin for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl Unpin for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl Unpin for Stdin",1,["os::fs::stdio::Stdin"]],["impl Unpin for Stdout",1,["os::fs::stdio::Stdout"]],["impl Unpin for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl Unpin for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl Unpin for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl Unpin for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> Unpin for SimpleRange<T>where\n T: Unpin,",1,["os::mm::address::SimpleRange"]],["impl<T> Unpin for SimpleRangeIterator<T>where\n T: Unpin,",1,["os::mm::address::SimpleRangeIterator"]],["impl Unpin for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl Unpin for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl Unpin for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl Unpin for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl Unpin for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl Unpin for MapArea",1,["os::mm::memory_set::MapArea"]],["impl Unpin for MapType",1,["os::mm::memory_set::MapType"]],["impl Unpin for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl Unpin for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl Unpin for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl Unpin for PageTable",1,["os::mm::page_table::PageTable"]],["impl Unpin for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl Unpin for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl<T> Unpin for UPSafeCell<T>where\n T: Unpin,",1,["os::sync::up::UPSafeCell"]],["impl Unpin for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl Unpin for TaskContext",1,["os::task::context::TaskContext"]],["impl Unpin for TaskManager",1,["os::task::manager::TaskManager"]],["impl Unpin for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl Unpin for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl Unpin for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl Unpin for PidHandle",1,["os::task::pid::PidHandle"]],["impl Unpin for KernelStack",1,["os::task::pid::KernelStack"]],["impl Unpin for Processor",1,["os::task::processor::Processor"]],["impl Unpin for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl Unpin for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl Unpin for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl Unpin for TaskStatus",1,["os::task::task::TaskStatus"]],["impl Unpin for INITPROC",1,["os::task::INITPROC"]],["impl Unpin for TrapContext",1,["os::trap::context::TrapContext"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/arith/trait.Sub.js b/ch6-dev/implementors/core/ops/arith/trait.Sub.js index 6aa5697f..d1b9c85a 100644 --- a/ch6-dev/implementors/core/ops/arith/trait.Sub.js +++ b/ch6-dev/implementors/core/ops/arith/trait.Sub.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Sub<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Sub<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Sub<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Sub<OpenFlags> for OpenFlags"],["impl Sub<MapPermission> for MapPermission"],["impl Sub<PTEFlags> for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/arith/trait.SubAssign.js b/ch6-dev/implementors/core/ops/arith/trait.SubAssign.js index b281d4dd..f629936e 100644 --- a/ch6-dev/implementors/core/ops/arith/trait.SubAssign.js +++ b/ch6-dev/implementors/core/ops/arith/trait.SubAssign.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl SubAssign<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl SubAssign<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl SubAssign<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl SubAssign<MapPermission> for MapPermission"],["impl SubAssign<PTEFlags> for PTEFlags"],["impl SubAssign<OpenFlags> for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitAnd.js b/ch6-dev/implementors/core/ops/bit/trait.BitAnd.js index 6dda9914..8c814d78 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitAnd.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitAnd.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitAnd<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitAnd<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitAnd<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitAnd<MapPermission> for MapPermission"],["impl BitAnd<OpenFlags> for OpenFlags"],["impl BitAnd<PTEFlags> for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitAndAssign.js b/ch6-dev/implementors/core/ops/bit/trait.BitAndAssign.js index 5c07e9a4..11796347 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitAndAssign.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitAndAssign.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitAndAssign<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitAndAssign<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitAndAssign<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitAndAssign<PTEFlags> for PTEFlags"],["impl BitAndAssign<MapPermission> for MapPermission"],["impl BitAndAssign<OpenFlags> for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitOr.js b/ch6-dev/implementors/core/ops/bit/trait.BitOr.js index e98eebf6..ca24c930 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitOr.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitOr.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitOr<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitOr<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitOr<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitOr<MapPermission> for MapPermission"],["impl BitOr<PTEFlags> for PTEFlags"],["impl BitOr<OpenFlags> for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitOrAssign.js b/ch6-dev/implementors/core/ops/bit/trait.BitOrAssign.js index e318953c..ff4e8b34 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitOrAssign.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitOrAssign.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitOrAssign<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitOrAssign<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitOrAssign<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitOrAssign<PTEFlags> for PTEFlags"],["impl BitOrAssign<MapPermission> for MapPermission"],["impl BitOrAssign<OpenFlags> for OpenFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitXor.js b/ch6-dev/implementors/core/ops/bit/trait.BitXor.js index f505e2c2..4dd36885 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitXor.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitXor.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitXor<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitXor<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitXor<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitXor<PTEFlags> for PTEFlags"],["impl BitXor<OpenFlags> for OpenFlags"],["impl BitXor<MapPermission> for MapPermission"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.BitXorAssign.js b/ch6-dev/implementors/core/ops/bit/trait.BitXorAssign.js index f072c399..cf43bb87 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.BitXorAssign.js +++ b/ch6-dev/implementors/core/ops/bit/trait.BitXorAssign.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BitXorAssign<OpenFlags> for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl BitXorAssign<MapPermission> for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl BitXorAssign<PTEFlags> for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BitXorAssign<OpenFlags> for OpenFlags"],["impl BitXorAssign<PTEFlags> for PTEFlags"],["impl BitXorAssign<MapPermission> for MapPermission"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/bit/trait.Not.js b/ch6-dev/implementors/core/ops/bit/trait.Not.js index 7296dfa3..abaf9685 100644 --- a/ch6-dev/implementors/core/ops/bit/trait.Not.js +++ b/ch6-dev/implementors/core/ops/bit/trait.Not.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Not for OpenFlags","synthetic":false,"types":["os::fs::inode::OpenFlags"]},{"text":"impl Not for MapPermission","synthetic":false,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl Not for PTEFlags","synthetic":false,"types":["os::mm::page_table::PTEFlags"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Not for MapPermission"],["impl Not for OpenFlags"],["impl Not for PTEFlags"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/deref/trait.Deref.js b/ch6-dev/implementors/core/ops/deref/trait.Deref.js index 6ae1942f..f88aad55 100644 --- a/ch6-dev/implementors/core/ops/deref/trait.Deref.js +++ b/ch6-dev/implementors/core/ops/deref/trait.Deref.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Deref for PERIPHERALS","synthetic":false,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl Deref for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl Deref for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl Deref for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl Deref for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl Deref for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl Deref for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl Deref for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl Deref for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl Deref for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Deref for QUEUE_FRAMES"],["impl Deref for FRAME_ALLOCATOR"],["impl Deref for INITPROC"],["impl Deref for KERNEL_SPACE"],["impl Deref for ROOT_INODE"],["impl Deref for PID_ALLOCATOR"],["impl Deref for BLOCK_DEVICE"],["impl Deref for TASK_MANAGER"],["impl Deref for PROCESSOR"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/ops/drop/trait.Drop.js b/ch6-dev/implementors/core/ops/drop/trait.Drop.js index 3c6fba4e..f0eb8cff 100644 --- a/ch6-dev/implementors/core/ops/drop/trait.Drop.js +++ b/ch6-dev/implementors/core/ops/drop/trait.Drop.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl Drop for FrameTracker","synthetic":false,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl Drop for PidHandle","synthetic":false,"types":["os::task::pid::PidHandle"]},{"text":"impl Drop for KernelStack","synthetic":false,"types":["os::task::pid::KernelStack"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl Drop for KernelStack"],["impl Drop for FrameTracker"],["impl Drop for PidHandle"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/ch6-dev/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 58e12f35..a851e68b 100644 --- a/ch6-dev/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/ch6-dev/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl RefUnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> RefUnwindSafe for SDCard<SPI> where
    SPI: RefUnwindSafe
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl RefUnwindSafe for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl RefUnwindSafe for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl RefUnwindSafe for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl RefUnwindSafe for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl RefUnwindSafe for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl RefUnwindSafe for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl !RefUnwindSafe for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !RefUnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl RefUnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl RefUnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !RefUnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !RefUnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl RefUnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl RefUnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl RefUnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl RefUnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl RefUnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl RefUnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl RefUnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> RefUnwindSafe for SimpleRange<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> RefUnwindSafe for SimpleRangeIterator<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl RefUnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl RefUnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl RefUnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl RefUnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl RefUnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl RefUnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl RefUnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl RefUnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl RefUnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl RefUnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl RefUnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl RefUnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl RefUnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> !RefUnwindSafe for UPSafeCell<T>","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl RefUnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !RefUnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl RefUnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl RefUnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl RefUnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl RefUnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl RefUnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !RefUnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl RefUnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !RefUnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !RefUnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl RefUnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl RefUnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl RefUnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl RefUnwindSafe for Stdout",1,["os::console::Stdout"]],["impl !RefUnwindSafe for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl RefUnwindSafe for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl RefUnwindSafe for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl RefUnwindSafe for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl !RefUnwindSafe for OSInode",1,["os::fs::inode::OSInode"]],["impl !RefUnwindSafe for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl RefUnwindSafe for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl RefUnwindSafe for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl RefUnwindSafe for Stdin",1,["os::fs::stdio::Stdin"]],["impl RefUnwindSafe for Stdout",1,["os::fs::stdio::Stdout"]],["impl RefUnwindSafe for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl RefUnwindSafe for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl RefUnwindSafe for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl RefUnwindSafe for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> RefUnwindSafe for SimpleRange<T>where\n T: RefUnwindSafe,",1,["os::mm::address::SimpleRange"]],["impl<T> RefUnwindSafe for SimpleRangeIterator<T>where\n T: RefUnwindSafe,",1,["os::mm::address::SimpleRangeIterator"]],["impl RefUnwindSafe for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl RefUnwindSafe for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl RefUnwindSafe for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl RefUnwindSafe for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl RefUnwindSafe for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl RefUnwindSafe for MapArea",1,["os::mm::memory_set::MapArea"]],["impl RefUnwindSafe for MapType",1,["os::mm::memory_set::MapType"]],["impl RefUnwindSafe for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl RefUnwindSafe for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl RefUnwindSafe for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl RefUnwindSafe for PageTable",1,["os::mm::page_table::PageTable"]],["impl RefUnwindSafe for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl RefUnwindSafe for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl<T> !RefUnwindSafe for UPSafeCell<T>",1,["os::sync::up::UPSafeCell"]],["impl RefUnwindSafe for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl RefUnwindSafe for TaskContext",1,["os::task::context::TaskContext"]],["impl !RefUnwindSafe for TaskManager",1,["os::task::manager::TaskManager"]],["impl RefUnwindSafe for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl RefUnwindSafe for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl RefUnwindSafe for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl RefUnwindSafe for PidHandle",1,["os::task::pid::PidHandle"]],["impl RefUnwindSafe for KernelStack",1,["os::task::pid::KernelStack"]],["impl !RefUnwindSafe for Processor",1,["os::task::processor::Processor"]],["impl RefUnwindSafe for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl !RefUnwindSafe for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl !RefUnwindSafe for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl RefUnwindSafe for TaskStatus",1,["os::task::task::TaskStatus"]],["impl RefUnwindSafe for INITPROC",1,["os::task::INITPROC"]],["impl RefUnwindSafe for TrapContext",1,["os::trap::context::TrapContext"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/ch6-dev/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 42506d79..7ac235f0 100644 --- a/ch6-dev/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/ch6-dev/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl UnwindSafe for RISCV64","synthetic":true,"types":["os::board::RISCV64"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl<SPI> UnwindSafe for SDCard<SPI> where
    SPI: UnwindSafe
","synthetic":true,"types":["os::drivers::block::sdcard::SDCard"]},{"text":"impl UnwindSafe for CMD","synthetic":true,"types":["os::drivers::block::sdcard::CMD"]},{"text":"impl UnwindSafe for InitError","synthetic":true,"types":["os::drivers::block::sdcard::InitError"]},{"text":"impl UnwindSafe for SDCardCSD","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCSD"]},{"text":"impl UnwindSafe for SDCardCID","synthetic":true,"types":["os::drivers::block::sdcard::SDCardCID"]},{"text":"impl UnwindSafe for SDCardInfo","synthetic":true,"types":["os::drivers::block::sdcard::SDCardInfo"]},{"text":"impl UnwindSafe for PERIPHERALS","synthetic":true,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl UnwindSafe for SDCardWrapper","synthetic":true,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl !UnwindSafe for VirtIOBlock","synthetic":true,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]},{"text":"impl UnwindSafe for QUEUE_FRAMES","synthetic":true,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl UnwindSafe for BLOCK_DEVICE","synthetic":true,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl !UnwindSafe for OSInode","synthetic":true,"types":["os::fs::inode::OSInode"]},{"text":"impl !UnwindSafe for OSInodeInner","synthetic":true,"types":["os::fs::inode::OSInodeInner"]},{"text":"impl UnwindSafe for ROOT_INODE","synthetic":true,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl UnwindSafe for OpenFlags","synthetic":true,"types":["os::fs::inode::OpenFlags"]},{"text":"impl UnwindSafe for Stdin","synthetic":true,"types":["os::fs::stdio::Stdin"]},{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::fs::stdio::Stdout"]},{"text":"impl UnwindSafe for PhysAddr","synthetic":true,"types":["os::mm::address::PhysAddr"]},{"text":"impl UnwindSafe for VirtAddr","synthetic":true,"types":["os::mm::address::VirtAddr"]},{"text":"impl UnwindSafe for PhysPageNum","synthetic":true,"types":["os::mm::address::PhysPageNum"]},{"text":"impl UnwindSafe for VirtPageNum","synthetic":true,"types":["os::mm::address::VirtPageNum"]},{"text":"impl<T> UnwindSafe for SimpleRange<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRange"]},{"text":"impl<T> UnwindSafe for SimpleRangeIterator<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::mm::address::SimpleRangeIterator"]},{"text":"impl UnwindSafe for FrameTracker","synthetic":true,"types":["os::mm::frame_allocator::FrameTracker"]},{"text":"impl UnwindSafe for StackFrameAllocator","synthetic":true,"types":["os::mm::frame_allocator::StackFrameAllocator"]},{"text":"impl UnwindSafe for FRAME_ALLOCATOR","synthetic":true,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl UnwindSafe for KERNEL_SPACE","synthetic":true,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl UnwindSafe for MemorySet","synthetic":true,"types":["os::mm::memory_set::MemorySet"]},{"text":"impl UnwindSafe for MapArea","synthetic":true,"types":["os::mm::memory_set::MapArea"]},{"text":"impl UnwindSafe for MapType","synthetic":true,"types":["os::mm::memory_set::MapType"]},{"text":"impl UnwindSafe for MapPermission","synthetic":true,"types":["os::mm::memory_set::MapPermission"]},{"text":"impl UnwindSafe for PTEFlags","synthetic":true,"types":["os::mm::page_table::PTEFlags"]},{"text":"impl UnwindSafe for PageTableEntry","synthetic":true,"types":["os::mm::page_table::PageTableEntry"]},{"text":"impl UnwindSafe for PageTable","synthetic":true,"types":["os::mm::page_table::PageTable"]},{"text":"impl !UnwindSafe for UserBuffer","synthetic":true,"types":["os::mm::page_table::UserBuffer"]},{"text":"impl !UnwindSafe for UserBufferIterator","synthetic":true,"types":["os::mm::page_table::UserBufferIterator"]},{"text":"impl<T> UnwindSafe for UPSafeCell<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPSafeCell"]},{"text":"impl UnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl !UnwindSafe for TaskManager","synthetic":true,"types":["os::task::manager::TaskManager"]},{"text":"impl UnwindSafe for TASK_MANAGER","synthetic":true,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl UnwindSafe for PidAllocator","synthetic":true,"types":["os::task::pid::PidAllocator"]},{"text":"impl UnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl UnwindSafe for PidHandle","synthetic":true,"types":["os::task::pid::PidHandle"]},{"text":"impl UnwindSafe for KernelStack","synthetic":true,"types":["os::task::pid::KernelStack"]},{"text":"impl !UnwindSafe for Processor","synthetic":true,"types":["os::task::processor::Processor"]},{"text":"impl UnwindSafe for PROCESSOR","synthetic":true,"types":["os::task::processor::PROCESSOR"]},{"text":"impl !UnwindSafe for TaskControlBlock","synthetic":true,"types":["os::task::task::TaskControlBlock"]},{"text":"impl !UnwindSafe for TaskControlBlockInner","synthetic":true,"types":["os::task::task::TaskControlBlockInner"]},{"text":"impl UnwindSafe for TaskStatus","synthetic":true,"types":["os::task::task::TaskStatus"]},{"text":"impl UnwindSafe for INITPROC","synthetic":true,"types":["os::task::INITPROC"]},{"text":"impl UnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl UnwindSafe for Stdout",1,["os::console::Stdout"]],["impl !UnwindSafe for VirtIOBlock",1,["os::drivers::block::virtio_blk::VirtIOBlock"]],["impl UnwindSafe for QUEUE_FRAMES",1,["os::drivers::block::virtio_blk::QUEUE_FRAMES"]],["impl UnwindSafe for VirtioHal",1,["os::drivers::block::virtio_blk::VirtioHal"]],["impl UnwindSafe for BLOCK_DEVICE",1,["os::drivers::block::BLOCK_DEVICE"]],["impl !UnwindSafe for OSInode",1,["os::fs::inode::OSInode"]],["impl !UnwindSafe for OSInodeInner",1,["os::fs::inode::OSInodeInner"]],["impl UnwindSafe for ROOT_INODE",1,["os::fs::inode::ROOT_INODE"]],["impl UnwindSafe for OpenFlags",1,["os::fs::inode::OpenFlags"]],["impl UnwindSafe for Stdin",1,["os::fs::stdio::Stdin"]],["impl UnwindSafe for Stdout",1,["os::fs::stdio::Stdout"]],["impl UnwindSafe for PhysAddr",1,["os::mm::address::PhysAddr"]],["impl UnwindSafe for VirtAddr",1,["os::mm::address::VirtAddr"]],["impl UnwindSafe for PhysPageNum",1,["os::mm::address::PhysPageNum"]],["impl UnwindSafe for VirtPageNum",1,["os::mm::address::VirtPageNum"]],["impl<T> UnwindSafe for SimpleRange<T>where\n T: UnwindSafe,",1,["os::mm::address::SimpleRange"]],["impl<T> UnwindSafe for SimpleRangeIterator<T>where\n T: UnwindSafe,",1,["os::mm::address::SimpleRangeIterator"]],["impl UnwindSafe for FrameTracker",1,["os::mm::frame_allocator::FrameTracker"]],["impl UnwindSafe for StackFrameAllocator",1,["os::mm::frame_allocator::StackFrameAllocator"]],["impl UnwindSafe for FRAME_ALLOCATOR",1,["os::mm::frame_allocator::FRAME_ALLOCATOR"]],["impl UnwindSafe for KERNEL_SPACE",1,["os::mm::memory_set::KERNEL_SPACE"]],["impl UnwindSafe for MemorySet",1,["os::mm::memory_set::MemorySet"]],["impl UnwindSafe for MapArea",1,["os::mm::memory_set::MapArea"]],["impl UnwindSafe for MapType",1,["os::mm::memory_set::MapType"]],["impl UnwindSafe for MapPermission",1,["os::mm::memory_set::MapPermission"]],["impl UnwindSafe for PTEFlags",1,["os::mm::page_table::PTEFlags"]],["impl UnwindSafe for PageTableEntry",1,["os::mm::page_table::PageTableEntry"]],["impl UnwindSafe for PageTable",1,["os::mm::page_table::PageTable"]],["impl !UnwindSafe for UserBuffer",1,["os::mm::page_table::UserBuffer"]],["impl !UnwindSafe for UserBufferIterator",1,["os::mm::page_table::UserBufferIterator"]],["impl<T> UnwindSafe for UPSafeCell<T>where\n T: UnwindSafe,",1,["os::sync::up::UPSafeCell"]],["impl UnwindSafe for RawExclusiveLock",1,["os::sync::up::RawExclusiveLock"]],["impl UnwindSafe for TaskContext",1,["os::task::context::TaskContext"]],["impl !UnwindSafe for TaskManager",1,["os::task::manager::TaskManager"]],["impl UnwindSafe for TASK_MANAGER",1,["os::task::manager::TASK_MANAGER"]],["impl UnwindSafe for PidAllocator",1,["os::task::pid::PidAllocator"]],["impl UnwindSafe for PID_ALLOCATOR",1,["os::task::pid::PID_ALLOCATOR"]],["impl UnwindSafe for PidHandle",1,["os::task::pid::PidHandle"]],["impl UnwindSafe for KernelStack",1,["os::task::pid::KernelStack"]],["impl !UnwindSafe for Processor",1,["os::task::processor::Processor"]],["impl UnwindSafe for PROCESSOR",1,["os::task::processor::PROCESSOR"]],["impl !UnwindSafe for TaskControlBlock",1,["os::task::task::TaskControlBlock"]],["impl !UnwindSafe for TaskControlBlockInner",1,["os::task::task::TaskControlBlockInner"]],["impl UnwindSafe for TaskStatus",1,["os::task::task::TaskStatus"]],["impl UnwindSafe for INITPROC",1,["os::task::INITPROC"]],["impl UnwindSafe for TrapContext",1,["os::trap::context::TrapContext"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/easy_fs/block_dev/trait.BlockDevice.js b/ch6-dev/implementors/easy_fs/block_dev/trait.BlockDevice.js index 1a85f316..d4446681 100644 --- a/ch6-dev/implementors/easy_fs/block_dev/trait.BlockDevice.js +++ b/ch6-dev/implementors/easy_fs/block_dev/trait.BlockDevice.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl BlockDevice for SDCardWrapper","synthetic":false,"types":["os::drivers::block::sdcard::SDCardWrapper"]},{"text":"impl BlockDevice for VirtIOBlock","synthetic":false,"types":["os::drivers::block::virtio_blk::VirtIOBlock"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl BlockDevice for VirtIOBlock"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/lazy_static/trait.LazyStatic.js b/ch6-dev/implementors/lazy_static/trait.LazyStatic.js index 29c0f64a..46d32a71 100644 --- a/ch6-dev/implementors/lazy_static/trait.LazyStatic.js +++ b/ch6-dev/implementors/lazy_static/trait.LazyStatic.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = [{"text":"impl LazyStatic for PERIPHERALS","synthetic":false,"types":["os::drivers::block::sdcard::PERIPHERALS"]},{"text":"impl LazyStatic for QUEUE_FRAMES","synthetic":false,"types":["os::drivers::block::virtio_blk::QUEUE_FRAMES"]},{"text":"impl LazyStatic for BLOCK_DEVICE","synthetic":false,"types":["os::drivers::block::BLOCK_DEVICE"]},{"text":"impl LazyStatic for ROOT_INODE","synthetic":false,"types":["os::fs::inode::ROOT_INODE"]},{"text":"impl LazyStatic for FRAME_ALLOCATOR","synthetic":false,"types":["os::mm::frame_allocator::FRAME_ALLOCATOR"]},{"text":"impl LazyStatic for KERNEL_SPACE","synthetic":false,"types":["os::mm::memory_set::KERNEL_SPACE"]},{"text":"impl LazyStatic for TASK_MANAGER","synthetic":false,"types":["os::task::manager::TASK_MANAGER"]},{"text":"impl LazyStatic for PID_ALLOCATOR","synthetic":false,"types":["os::task::pid::PID_ALLOCATOR"]},{"text":"impl LazyStatic for PROCESSOR","synthetic":false,"types":["os::task::processor::PROCESSOR"]},{"text":"impl LazyStatic for INITPROC","synthetic":false,"types":["os::task::INITPROC"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[["impl LazyStatic for FRAME_ALLOCATOR"],["impl LazyStatic for QUEUE_FRAMES"],["impl LazyStatic for ROOT_INODE"],["impl LazyStatic for INITPROC"],["impl LazyStatic for PROCESSOR"],["impl LazyStatic for PID_ALLOCATOR"],["impl LazyStatic for KERNEL_SPACE"],["impl LazyStatic for TASK_MANAGER"],["impl LazyStatic for BLOCK_DEVICE"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/lock_api/mutex/trait.RawMutex.js b/ch6-dev/implementors/lock_api/mutex/trait.RawMutex.js new file mode 100644 index 00000000..4e85847f --- /dev/null +++ b/ch6-dev/implementors/lock_api/mutex/trait.RawMutex.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"os":[["impl RawMutex for RawExclusiveLock"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/os/board/trait.QEMUExit.js b/ch6-dev/implementors/os/board/trait.QEMUExit.js deleted file mode 100644 index 34fffcbd..00000000 --- a/ch6-dev/implementors/os/board/trait.QEMUExit.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["os"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/os/fs/trait.File.js b/ch6-dev/implementors/os/fs/trait.File.js index 34fffcbd..f0f0a3ce 100644 --- a/ch6-dev/implementors/os/fs/trait.File.js +++ b/ch6-dev/implementors/os/fs/trait.File.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/os/mm/address/trait.StepByOne.js b/ch6-dev/implementors/os/mm/address/trait.StepByOne.js index 34fffcbd..f0f0a3ce 100644 --- a/ch6-dev/implementors/os/mm/address/trait.StepByOne.js +++ b/ch6-dev/implementors/os/mm/address/trait.StepByOne.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/os/mm/frame_allocator/trait.FrameAllocator.js b/ch6-dev/implementors/os/mm/frame_allocator/trait.FrameAllocator.js index 34fffcbd..f0f0a3ce 100644 --- a/ch6-dev/implementors/os/mm/frame_allocator/trait.FrameAllocator.js +++ b/ch6-dev/implementors/os/mm/frame_allocator/trait.FrameAllocator.js @@ -1,3 +1,3 @@ -(function() {var implementors = {}; -implementors["os"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file +(function() {var implementors = { +"os":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/implementors/virtio_drivers/hal/trait.Hal.js b/ch6-dev/implementors/virtio_drivers/hal/trait.Hal.js new file mode 100644 index 00000000..be4a87c5 --- /dev/null +++ b/ch6-dev/implementors/virtio_drivers/hal/trait.Hal.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"os":[["impl Hal for VirtioHal"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch6-dev/light.css b/ch6-dev/light.css deleted file mode 100644 index 289f10cf..00000000 --- a/ch6-dev/light.css +++ /dev/null @@ -1 +0,0 @@ - body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#DDDDDD;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar,.mobile-topbar,.sidebar-menu-toggle{background-color:#F5F5F5;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.rust-logo{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current,.sidebar a:hover{background-color:#fff;}.source .sidebar{background-color:#f1f1f1;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#FDFFD3 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#e7b1a0;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#e7b1a0;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#e7b1a0;}a.result-associatedtype:focus{background-color:#afc6e4;}a.result-foreigntype:focus{background-color:#e7b1a0;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#afc6e4;}a.result-primitive:focus{background-color:#e7b1a0;}a.result-keyword:focus{background-color:#afc6e4;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#AD378A;}.content span.struct,.content a.struct,.block a.current.struct{color:#AD378A;}.content span.type,.content a.type,.block a.current.type{color:#AD378A;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#3873AD;}.content span.associatedtype,.content a.associatedtype,.block a.current.associatedtype{color:#3873AD;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#AD378A;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#3873AD;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#AD378A;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#3873AD;}.content span.trait,.content a.trait,.block a.current.trait{color:#6E4FC9;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#5137AD;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#AD7C37;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#3873AD;}.sidebar a{color:#356da4;}.sidebar a.current.enum{color:#a63283;}.sidebar a.current.struct{color:#a63283;}.sidebar a.current.type{color:#a63283;}.sidebar a.current.associatedtype{color:#356da4;}.sidebar a.current.foreigntype{color:#356da4;}.sidebar a.current.attr,.sidebar a.current.derive,.sidebar a.current.macro{color:#067901;}.sidebar a.current.union{color:#a63283;}.sidebar a.current.constant .sidebar a.current.static{color:#356da4;}.sidebar a.current.primitive{color:#a63283;}.sidebar a.current.externcrate .sidebar a.current.mod{color:#356da4;}.sidebar a.current.trait{color:#6849c3;}.sidebar a.current.traitalias{color:#4b349e;}.sidebar a.current.fn,.sidebar a.current.method,.sidebar a.current.tymethod{color:#a67736;}.sidebar a.current.keyword{color:#356da4;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#3873AD;}a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,.in-band a{color:#000;}.search-results a{color:initial;}a.test-arrow{color:#f5f5f5;}body.source .example-wrap pre.rust a{background:#eee;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search,.search-input{color:#555;background-color:white;border-color:#e0e0e0;}.search-input:focus{border-color:#66afe9;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.rightside,.out-of-band{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgb(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target{background:#FDFFD3;border-right:3px solid #AD7C37;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#3873AD;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F5F5F5;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F5F5F5;border-right-color:#000;}#sidebar-filler{background-color:#F5F5F5;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow:inset 0 -1px 0 #c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F5F5F5;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F5F5F5;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file diff --git a/ch6-dev/main.js b/ch6-dev/main.js deleted file mode 100644 index 5c0ce8ad..00000000 --- a/ch6-dev/main.js +++ /dev/null @@ -1,8 +0,0 @@ -if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position}}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1}}if(!DOMTokenList.prototype.add){DOMTokenList.prototype.add=function(className){if(className&&!hasClass(this,className)){if(this.className&&this.className.length>0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}function getVar(name){var el=document.getElementById("rustdoc-vars");if(el){return el.attributes["data-"+name].value}else{return null}}function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");window.searchJS=resourcePath("search",".js");window.searchIndexJS=resourcePath("search-index",".js");var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,};var mobileLocationTitle=document.querySelector(".mobile-topbar h2.location");var locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";var MAIN_ID="main-content";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){if(!document.location.href.startsWith("file:///")){return}var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=getVar("themes").split(",");removeClass(themeChoices.parentElement,"hidden");function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState(null,window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!=''){loadSearch()}var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},};function getPageId(){if(window.location.hash){var tmp=window.location.hash.replace(/^#/,"");if(tmp.length>0){return tmp}}return null}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById(MAIN_ID);var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown");handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i${longty}`;div.appendChild(h3);var ul=document.createElement("ul");for(var i=0,len=filtered.length;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i summary:not(.hideme)"),function(el){el.addEventListener("click",function(e){if(e.target.tagName!="SUMMARY"&&e.target.tagName!="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),function(e){e.onclick=function(){this.getElementsByClassName('notable-traits-tooltiptext')[0].classList.toggle("force-tooltip")}});var sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){addClass(sidebar,"shown")}else{removeClass(sidebar,"shown")}})}var buildHelperPopup=function(){var popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",function(ev){if(ev.target===popup){displayHelp(false,ev)}});var book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ - the rustdoc book.";var container=document.createElement("div");var shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["T","Focus the theme picker menu"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(function(x){return"
"+x[0].split(" ").map(function(y,index){return(index&1)===0?""+y+"":" "+y+" "}).join("")+"
"+x[1]+"
"}).join("");var div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";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, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \ - str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

"+x+"

"}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,document.querySelector("main"));buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/ch6-dev/noscript.css b/ch6-dev/noscript.css deleted file mode 100644 index 8ad88640..00000000 --- a/ch6-dev/noscript.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}.sub{display:none;}#theme-picker{display:none;} \ No newline at end of file diff --git a/ch6-dev/os/all.html b/ch6-dev/os/all.html index d0a28228..de6b5995 100644 --- a/ch6-dev/os/all.html +++ b/ch6-dev/os/all.html @@ -1,7 +1 @@ -List of all items in this crate - -

List of all items

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

- \ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Type Aliases

Statics

Constants

\ No newline at end of file diff --git a/ch6-dev/os/board/constant.CLOCK_FREQ.html b/ch6-dev/os/board/constant.CLOCK_FREQ.html index 146b54a9..be383e66 100644 --- a/ch6-dev/os/board/constant.CLOCK_FREQ.html +++ b/ch6-dev/os/board/constant.CLOCK_FREQ.html @@ -1,8 +1 @@ -CLOCK_FREQ in os::board - Rust - -
-

Constant os::board::CLOCK_FREQ

source · []
pub const CLOCK_FREQ: usize = 12500000;
- \ No newline at end of file +CLOCK_FREQ in os::board - Rust

Constant os::board::CLOCK_FREQ

source ·
pub const CLOCK_FREQ: usize = 12500000;
\ No newline at end of file diff --git a/ch6-dev/os/board/constant.EXIT_FAILURE.html b/ch6-dev/os/board/constant.EXIT_FAILURE.html deleted file mode 100644 index 0e1858cb..00000000 --- a/ch6-dev/os/board/constant.EXIT_FAILURE.html +++ /dev/null @@ -1,8 +0,0 @@ -EXIT_FAILURE in os::board - Rust - -
-

Constant os::board::EXIT_FAILURE

source · []
const EXIT_FAILURE: u32 = exit_code_encode(1); // 78_643u32
- \ No newline at end of file diff --git a/ch6-dev/os/board/constant.EXIT_FAILURE_FLAG.html b/ch6-dev/os/board/constant.EXIT_FAILURE_FLAG.html deleted file mode 100644 index bd645434..00000000 --- a/ch6-dev/os/board/constant.EXIT_FAILURE_FLAG.html +++ /dev/null @@ -1,8 +0,0 @@ -EXIT_FAILURE_FLAG in os::board - Rust - -
const EXIT_FAILURE_FLAG: u32 = 0x3333;
- \ No newline at end of file diff --git a/ch6-dev/os/board/constant.EXIT_RESET.html b/ch6-dev/os/board/constant.EXIT_RESET.html deleted file mode 100644 index ee0e4ba6..00000000 --- a/ch6-dev/os/board/constant.EXIT_RESET.html +++ /dev/null @@ -1,8 +0,0 @@ -EXIT_RESET in os::board - Rust - -
-

Constant os::board::EXIT_RESET

source · []
const EXIT_RESET: u32 = 0x7777;
- \ No newline at end of file diff --git a/ch6-dev/os/board/constant.EXIT_SUCCESS.html b/ch6-dev/os/board/constant.EXIT_SUCCESS.html deleted file mode 100644 index 877cd5de..00000000 --- a/ch6-dev/os/board/constant.EXIT_SUCCESS.html +++ /dev/null @@ -1,8 +0,0 @@ -EXIT_SUCCESS in os::board - Rust - -
-

Constant os::board::EXIT_SUCCESS

source · []
const EXIT_SUCCESS: u32 = 0x5555;
- \ No newline at end of file diff --git a/ch6-dev/os/board/constant.MEMORY_END.html b/ch6-dev/os/board/constant.MEMORY_END.html index 53c4ab3a..734576ea 100644 --- a/ch6-dev/os/board/constant.MEMORY_END.html +++ b/ch6-dev/os/board/constant.MEMORY_END.html @@ -1,8 +1 @@ -MEMORY_END in os::board - Rust - -
-

Constant os::board::MEMORY_END

source · []
pub const MEMORY_END: usize = 0x801000000;
- \ No newline at end of file +MEMORY_END in os::board - Rust

Constant os::board::MEMORY_END

source ·
pub const MEMORY_END: usize = 0x88000000;
\ No newline at end of file diff --git a/ch6-dev/os/board/constant.MMIO.html b/ch6-dev/os/board/constant.MMIO.html index 53ea8b9d..471c4133 100644 --- a/ch6-dev/os/board/constant.MMIO.html +++ b/ch6-dev/os/board/constant.MMIO.html @@ -1,8 +1 @@ -MMIO in os::board - Rust - -
-

Constant os::board::MMIO

source · []
pub const MMIO: &[(usize, usize)];
- \ No newline at end of file +MMIO in os::board - Rust

Constant os::board::MMIO

source ·
pub const MMIO: &[(usize, usize)];
\ No newline at end of file diff --git a/ch6-dev/os/board/constant.QEMU_EXIT_HANDLE.html b/ch6-dev/os/board/constant.QEMU_EXIT_HANDLE.html deleted file mode 100644 index 2c093a9f..00000000 --- a/ch6-dev/os/board/constant.QEMU_EXIT_HANDLE.html +++ /dev/null @@ -1,8 +0,0 @@ -QEMU_EXIT_HANDLE in os::board - Rust - -
pub const QEMU_EXIT_HANDLE: RISCV64;
- \ No newline at end of file diff --git a/ch6-dev/os/board/constant.VIRT_TEST.html b/ch6-dev/os/board/constant.VIRT_TEST.html deleted file mode 100644 index 09bf248a..00000000 --- a/ch6-dev/os/board/constant.VIRT_TEST.html +++ /dev/null @@ -1,8 +0,0 @@ -VIRT_TEST in os::board - Rust - -
-

Constant os::board::VIRT_TEST

source · []
const VIRT_TEST: u64 = 0x100000;
- \ No newline at end of file diff --git a/ch6-dev/os/board/fn.exit_code_encode.html b/ch6-dev/os/board/fn.exit_code_encode.html deleted file mode 100644 index 7ea06049..00000000 --- a/ch6-dev/os/board/fn.exit_code_encode.html +++ /dev/null @@ -1,9 +0,0 @@ -exit_code_encode in os::board - Rust - -
const fn exit_code_encode(code: u32) -> u32
Expand description

Encode the exit code using EXIT_FAILURE_FLAG.

-
- \ No newline at end of file diff --git a/ch6-dev/os/board/index.html b/ch6-dev/os/board/index.html index c8e15f21..7ab4821c 100644 --- a/ch6-dev/os/board/index.html +++ b/ch6-dev/os/board/index.html @@ -1,15 +1 @@ -os::board - Rust - -
- \ No newline at end of file +os::board - Rust
\ No newline at end of file diff --git a/ch6-dev/os/board/sidebar-items.js b/ch6-dev/os/board/sidebar-items.js index 054919ae..7ca4409a 100644 --- a/ch6-dev/os/board/sidebar-items.js +++ b/ch6-dev/os/board/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["CLOCK_FREQ",""],["EXIT_FAILURE",""],["EXIT_FAILURE_FLAG",""],["EXIT_RESET",""],["EXIT_SUCCESS",""],["MEMORY_END",""],["MMIO",""],["QEMU_EXIT_HANDLE",""],["VIRT_TEST",""]],"fn":[["exit_code_encode","Encode the exit code using EXIT_FAILURE_FLAG."]],"struct":[["RISCV64","RISCV64 configuration"]],"trait":[["QEMUExit",""]],"type":[["BlockDeviceImpl",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["CLOCK_FREQ","MEMORY_END","MMIO"],"type":["BlockDeviceImpl"]}; \ No newline at end of file diff --git a/ch6-dev/os/board/struct.RISCV64.html b/ch6-dev/os/board/struct.RISCV64.html deleted file mode 100644 index d6a89766..00000000 --- a/ch6-dev/os/board/struct.RISCV64.html +++ /dev/null @@ -1,27 +0,0 @@ -RISCV64 in os::board - Rust - -
-

Struct os::board::RISCV64

source · []
pub struct RISCV64 {
-    addr: u64,
-}
Expand description

RISCV64 configuration

-

Fields

addr: u64

Address of the sifive_test mapped device.

-

Implementations

Create an instance.

-

Trait Implementations

Exit qemu with specified exit code.

-

Exit QEMU using EXIT_SUCCESS, aka 0, if possible. Read more

-

Exit QEMU using EXIT_FAILURE, aka 1.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/board/trait.QEMUExit.html b/ch6-dev/os/board/trait.QEMUExit.html deleted file mode 100644 index 5acf55e8..00000000 --- a/ch6-dev/os/board/trait.QEMUExit.html +++ /dev/null @@ -1,17 +0,0 @@ -QEMUExit in os::board - Rust - -
pub trait QEMUExit {
-    fn exit(&self, code: u32) -> !;
-    fn exit_success(&self) -> !;
-    fn exit_failure(&self) -> !;
-}

Required methods

Exit with specified return code.

-

Note: For X86, code is binary-OR’ed with 0x1 inside QEMU.

-

Exit QEMU using EXIT_SUCCESS, aka 0, if possible.

-

Note: Not possible for X86.

-

Exit QEMU using EXIT_FAILURE, aka 1.

-

Implementors

- \ No newline at end of file diff --git a/ch6-dev/os/board/type.BlockDeviceImpl.html b/ch6-dev/os/board/type.BlockDeviceImpl.html index bad2166f..a9cc0efe 100644 --- a/ch6-dev/os/board/type.BlockDeviceImpl.html +++ b/ch6-dev/os/board/type.BlockDeviceImpl.html @@ -1,8 +1 @@ -BlockDeviceImpl in os::board - Rust - -
-

Type Definition os::board::BlockDeviceImpl

source · []
pub type BlockDeviceImpl = VirtIOBlock;
- \ No newline at end of file +BlockDeviceImpl in os::board - Rust

Type Alias os::board::BlockDeviceImpl

source ·
pub type BlockDeviceImpl = VirtIOBlock;

Aliased Type§

struct BlockDeviceImpl(UPSafeCell<VirtIOBlk<'static, VirtioHal>>);

Fields§

§0: UPSafeCell<VirtIOBlk<'static, VirtioHal>>

Implementations§

source§

impl VirtIOBlock

source

pub fn new() -> Self

Trait Implementations§

source§

impl BlockDevice for VirtIOBlock

source§

fn read_block(&self, block_id: usize, buf: &mut [u8])

Read data form block to buffer
source§

fn write_block(&self, block_id: usize, buf: &[u8])

Write data from buffer to block
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.KERNEL_HEAP_SIZE.html b/ch6-dev/os/config/constant.KERNEL_HEAP_SIZE.html index f493891f..ddd6b3c7 100644 --- a/ch6-dev/os/config/constant.KERNEL_HEAP_SIZE.html +++ b/ch6-dev/os/config/constant.KERNEL_HEAP_SIZE.html @@ -1,8 +1 @@ -KERNEL_HEAP_SIZE in os::config - Rust - -
pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
- \ No newline at end of file +KERNEL_HEAP_SIZE in os::config - Rust

Constant os::config::KERNEL_HEAP_SIZE

source ·
pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.KERNEL_STACK_SIZE.html b/ch6-dev/os/config/constant.KERNEL_STACK_SIZE.html index b58008dd..d05b2491 100644 --- a/ch6-dev/os/config/constant.KERNEL_STACK_SIZE.html +++ b/ch6-dev/os/config/constant.KERNEL_STACK_SIZE.html @@ -1,8 +1 @@ -KERNEL_STACK_SIZE in os::config - Rust - -
pub const KERNEL_STACK_SIZE: usize = 4096 * 2; // 8_192usize
- \ No newline at end of file +KERNEL_STACK_SIZE in os::config - Rust

Constant os::config::KERNEL_STACK_SIZE

source ·
pub const KERNEL_STACK_SIZE: usize = _; // 8_192usize
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.PAGE_SIZE.html b/ch6-dev/os/config/constant.PAGE_SIZE.html index 4600b912..dd2e7860 100644 --- a/ch6-dev/os/config/constant.PAGE_SIZE.html +++ b/ch6-dev/os/config/constant.PAGE_SIZE.html @@ -1,8 +1 @@ -PAGE_SIZE in os::config - Rust - -
-

Constant os::config::PAGE_SIZE

source · []
pub const PAGE_SIZE: usize = 0x1000;
- \ No newline at end of file +PAGE_SIZE in os::config - Rust

Constant os::config::PAGE_SIZE

source ·
pub const PAGE_SIZE: usize = 0x1000;
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.PAGE_SIZE_BITS.html b/ch6-dev/os/config/constant.PAGE_SIZE_BITS.html index d314ac6c..d206b21f 100644 --- a/ch6-dev/os/config/constant.PAGE_SIZE_BITS.html +++ b/ch6-dev/os/config/constant.PAGE_SIZE_BITS.html @@ -1,8 +1 @@ -PAGE_SIZE_BITS in os::config - Rust - -
pub const PAGE_SIZE_BITS: usize = 0xc;
- \ No newline at end of file +PAGE_SIZE_BITS in os::config - Rust

Constant os::config::PAGE_SIZE_BITS

source ·
pub const PAGE_SIZE_BITS: usize = 0xc;
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.TRAMPOLINE.html b/ch6-dev/os/config/constant.TRAMPOLINE.html index 5ecf2f96..410a2af2 100644 --- a/ch6-dev/os/config/constant.TRAMPOLINE.html +++ b/ch6-dev/os/config/constant.TRAMPOLINE.html @@ -1,8 +1 @@ -TRAMPOLINE in os::config - Rust - -
-

Constant os::config::TRAMPOLINE

source · []
pub const TRAMPOLINE: usize = usize::MAX - PAGE_SIZE + 1; // 18_446_744_073_709_547_520usize
- \ No newline at end of file +TRAMPOLINE in os::config - Rust

Constant os::config::TRAMPOLINE

source ·
pub const TRAMPOLINE: usize = _; // 18_446_744_073_709_547_520usize
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.TRAP_CONTEXT.html b/ch6-dev/os/config/constant.TRAP_CONTEXT.html index 7dbacf7b..acb0fcb8 100644 --- a/ch6-dev/os/config/constant.TRAP_CONTEXT.html +++ b/ch6-dev/os/config/constant.TRAP_CONTEXT.html @@ -1,8 +1 @@ -TRAP_CONTEXT in os::config - Rust - -
pub const TRAP_CONTEXT: usize = TRAMPOLINE - PAGE_SIZE; // 18_446_744_073_709_543_424usize
- \ No newline at end of file +TRAP_CONTEXT in os::config - Rust

Constant os::config::TRAP_CONTEXT

source ·
pub const TRAP_CONTEXT: usize = _; // 18_446_744_073_709_543_424usize
\ No newline at end of file diff --git a/ch6-dev/os/config/constant.USER_STACK_SIZE.html b/ch6-dev/os/config/constant.USER_STACK_SIZE.html index e05d0af4..d73afccc 100644 --- a/ch6-dev/os/config/constant.USER_STACK_SIZE.html +++ b/ch6-dev/os/config/constant.USER_STACK_SIZE.html @@ -1,8 +1 @@ -USER_STACK_SIZE in os::config - Rust - -
pub const USER_STACK_SIZE: usize = 4096 * 2; // 8_192usize
- \ No newline at end of file +USER_STACK_SIZE in os::config - Rust

Constant os::config::USER_STACK_SIZE

source ·
pub const USER_STACK_SIZE: usize = _; // 8_192usize
\ No newline at end of file diff --git a/ch6-dev/os/config/index.html b/ch6-dev/os/config/index.html index 8d81b691..bafed177 100644 --- a/ch6-dev/os/config/index.html +++ b/ch6-dev/os/config/index.html @@ -1,11 +1,2 @@ -os::config - Rust - -
-

Module os::config

source · []
Expand description

Constants used in rCore

-

Re-exports

-
pub use crate::board::CLOCK_FREQ;
pub use crate::board::MEMORY_END;
pub use crate::board::MMIO;

Constants

-
- \ No newline at end of file +os::config - Rust

Module os::config

source ·
Expand description

Constants used in rCore

+

Re-exports

Constants

\ No newline at end of file diff --git a/ch6-dev/os/config/sidebar-items.js b/ch6-dev/os/config/sidebar-items.js index 1835a162..cd442118 100644 --- a/ch6-dev/os/config/sidebar-items.js +++ b/ch6-dev/os/config/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["KERNEL_HEAP_SIZE",""],["KERNEL_STACK_SIZE",""],["PAGE_SIZE",""],["PAGE_SIZE_BITS",""],["TRAMPOLINE",""],["TRAP_CONTEXT",""],["USER_STACK_SIZE",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE"]}; \ No newline at end of file diff --git a/ch6-dev/os/console/fn.print.html b/ch6-dev/os/console/fn.print.html index da0a7e32..536de6e6 100644 --- a/ch6-dev/os/console/fn.print.html +++ b/ch6-dev/os/console/fn.print.html @@ -1,8 +1 @@ -print in os::console - Rust - -
-

Function os::console::print

source · []
pub fn print(args: Arguments<'_>)
- \ No newline at end of file +print in os::console - Rust

Function os::console::print

source ·
pub fn print(args: Arguments<'_>)
\ No newline at end of file diff --git a/ch6-dev/os/console/index.html b/ch6-dev/os/console/index.html index d18f0bf2..3ce314c2 100644 --- a/ch6-dev/os/console/index.html +++ b/ch6-dev/os/console/index.html @@ -1,11 +1,2 @@ -os::console - Rust - -
-

Module os::console

source · []
Expand description

SBI console driver, for text output

-

Structs

-
Stdout 🔒

Functions

-
- \ No newline at end of file +os::console - Rust

Module os::console

source ·
Expand description

SBI console driver, for text output

+

Structs

Functions

\ No newline at end of file diff --git a/ch6-dev/os/console/sidebar-items.js b/ch6-dev/os/console/sidebar-items.js index 32906922..d7b318cf 100644 --- a/ch6-dev/os/console/sidebar-items.js +++ b/ch6-dev/os/console/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["print",""]],"struct":[["Stdout",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["print"],"struct":["Stdout"]}; \ No newline at end of file diff --git a/ch6-dev/os/console/struct.Stdout.html b/ch6-dev/os/console/struct.Stdout.html index 34462a88..2d4a4c8a 100644 --- a/ch6-dev/os/console/struct.Stdout.html +++ b/ch6-dev/os/console/struct.Stdout.html @@ -1,23 +1,12 @@ -Stdout in os::console - Rust - -
-

Struct os::console::Stdout

source · []
struct Stdout;

Trait Implementations

Writes a string slice into this writer, returning whether the write -succeeded. Read more

-

Writes a char into this writer, returning whether the write succeeded. Read more

-

Glue for usage of the write! macro with implementors of this trait. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

+Stdout in os::console - Rust

Struct os::console::Stdout

source ·
struct Stdout;

Trait Implementations§

source§

impl Write for Stdout

source§

fn write_str(&mut self, s: &str) -> Result

Writes a string slice into this writer, returning whether the write +succeeded. Read more
1.1.0 · source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/fn.block_device_test.html b/ch6-dev/os/drivers/block/fn.block_device_test.html index 0e374a0e..a7c8eeeb 100644 --- a/ch6-dev/os/drivers/block/fn.block_device_test.html +++ b/ch6-dev/os/drivers/block/fn.block_device_test.html @@ -1,8 +1 @@ -block_device_test in os::drivers::block - Rust - -
pub fn block_device_test()
- \ No newline at end of file +block_device_test in os::drivers::block - Rust
pub fn block_device_test()
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/index.html b/ch6-dev/os/drivers/block/index.html index a231a5d6..e0dfea44 100644 --- a/ch6-dev/os/drivers/block/index.html +++ b/ch6-dev/os/drivers/block/index.html @@ -1,12 +1 @@ -os::drivers::block - Rust - -
- \ No newline at end of file +os::drivers::block - Rust
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_CS.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_CS.html deleted file mode 100644 index 55b18129..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_CS.html +++ /dev/null @@ -1,10 +0,0 @@ -SD_CS in os::drivers::block::sdcard - Rust - -
-

Constant os::drivers::block::sdcard::SD_CS

source · []
const SD_CS: u32 = 3;
Expand description

CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything -in the FPIOA

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html deleted file mode 100644 index 20e23ef7..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_CS_GPIONUM.html +++ /dev/null @@ -1,9 +0,0 @@ -SD_CS_GPIONUM in os::drivers::block::sdcard - Rust - -
const SD_CS_GPIONUM: u8 = 7;
Expand description

GPIOHS GPIO number to use for controlling the SD card CS pin

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html deleted file mode 100644 index 661bff1f..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_READ.html +++ /dev/null @@ -1,9 +0,0 @@ -SD_START_DATA_MULTIPLE_BLOCK_READ in os::drivers::block::sdcard - Rust - -
pub const SD_START_DATA_MULTIPLE_BLOCK_READ: u8 = 0xFE;
Expand description

Data token start byte, Start Multiple Block Read

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html deleted file mode 100644 index 190cac5a..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_MULTIPLE_BLOCK_WRITE.html +++ /dev/null @@ -1,9 +0,0 @@ -SD_START_DATA_MULTIPLE_BLOCK_WRITE in os::drivers::block::sdcard - Rust - -
pub const SD_START_DATA_MULTIPLE_BLOCK_WRITE: u8 = 0xFC;
Expand description

Data token start byte, Start Multiple Block Write

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html deleted file mode 100644 index 8b50884e..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_READ.html +++ /dev/null @@ -1,9 +0,0 @@ -SD_START_DATA_SINGLE_BLOCK_READ in os::drivers::block::sdcard - Rust - -
pub const SD_START_DATA_SINGLE_BLOCK_READ: u8 = 0xFE;
Expand description

Data token start byte, Start Single Block Read

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html b/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html deleted file mode 100644 index 4d70d58b..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SD_START_DATA_SINGLE_BLOCK_WRITE.html +++ /dev/null @@ -1,9 +0,0 @@ -SD_START_DATA_SINGLE_BLOCK_WRITE in os::drivers::block::sdcard - Rust - -
pub const SD_START_DATA_SINGLE_BLOCK_WRITE: u8 = 0xFE;
Expand description

Data token start byte, Start Single Block Write

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/constant.SEC_LEN.html b/ch6-dev/os/drivers/block/sdcard/constant.SEC_LEN.html deleted file mode 100644 index c15a12a2..00000000 --- a/ch6-dev/os/drivers/block/sdcard/constant.SEC_LEN.html +++ /dev/null @@ -1,8 +0,0 @@ -SEC_LEN in os::drivers::block::sdcard - Rust - -
pub const SEC_LEN: usize = 512;
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/enum.CMD.html b/ch6-dev/os/drivers/block/sdcard/enum.CMD.html deleted file mode 100644 index 9b31e561..00000000 --- a/ch6-dev/os/drivers/block/sdcard/enum.CMD.html +++ /dev/null @@ -1,61 +0,0 @@ -CMD in os::drivers::block::sdcard - Rust - -
#[repr(u8)]
-pub enum CMD {
-
Show 15 variants CMD0, - CMD8, - CMD9, - CMD10, - CMD12, - CMD16, - CMD17, - CMD18, - ACMD23, - CMD24, - CMD25, - ACMD41, - CMD55, - CMD58, - CMD59, -
}
Expand description

SD commands

-

Variants

CMD0

Software reset

-

CMD8

Check voltage range (SDC V2)

-

CMD9

Read CSD register

-

CMD10

Read CID register

-

CMD12

Stop to read data

-

CMD16

Change R/W block size

-

CMD17

Read block

-

CMD18

Read multiple blocks

-

ACMD23

Number of blocks to erase (SDC)

-

CMD24

Write a block

-

CMD25

Write multiple blocks

-

ACMD41

Initiate initialization process (SDC)

-

CMD55

Leading command for ACMD*

-

CMD58

Read OCR

-

CMD59

Enable/disable CRC check

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/enum.InitError.html b/ch6-dev/os/drivers/block/sdcard/enum.InitError.html deleted file mode 100644 index 595bda38..00000000 --- a/ch6-dev/os/drivers/block/sdcard/enum.InitError.html +++ /dev/null @@ -1,29 +0,0 @@ -InitError in os::drivers::block::sdcard - Rust - -
pub enum InitError {
-    CMDFailed(CMDu8),
-    CardCapacityStatusNotSet([u8; 4]),
-    CannotGetCardInfo,
-}

Variants

CMDFailed(CMDu8)

CardCapacityStatusNotSet([u8; 4])

CannotGetCardInfo

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/fn.init_sdcard.html b/ch6-dev/os/drivers/block/sdcard/fn.init_sdcard.html deleted file mode 100644 index 01baf5c5..00000000 --- a/ch6-dev/os/drivers/block/sdcard/fn.init_sdcard.html +++ /dev/null @@ -1,8 +0,0 @@ -init_sdcard in os::drivers::block::sdcard - Rust - -
fn init_sdcard() -> SDCard<SPIImpl<SPI0>>
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/fn.io_init.html b/ch6-dev/os/drivers/block/sdcard/fn.io_init.html deleted file mode 100644 index de329858..00000000 --- a/ch6-dev/os/drivers/block/sdcard/fn.io_init.html +++ /dev/null @@ -1,9 +0,0 @@ -io_init in os::drivers::block::sdcard - Rust - -
fn io_init()
Expand description

Connect pins to internal functions

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/index.html b/ch6-dev/os/drivers/block/sdcard/index.html deleted file mode 100644 index ddd32c17..00000000 --- a/ch6-dev/os/drivers/block/sdcard/index.html +++ /dev/null @@ -1,24 +0,0 @@ -os::drivers::block::sdcard - Rust - -

Structs

-

Card Identification Data: CID Register

-

Card Specific Data: CSD Register

-

Card information

-

Enums

-

SD commands

-

Constants

-
SD_CS 🔒

CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything -in the FPIOA

-

GPIOHS GPIO number to use for controlling the SD card CS pin

-

Data token start byte, Start Multiple Block Read

-

Data token start byte, Start Multiple Block Write

-

Data token start byte, Start Single Block Read

-

Data token start byte, Start Single Block Write

-

Functions

-
io_init 🔒

Connect pins to internal functions

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/sidebar-items.js b/ch6-dev/os/drivers/block/sdcard/sidebar-items.js deleted file mode 100644 index e5a624de..00000000 --- a/ch6-dev/os/drivers/block/sdcard/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["SD_CS","CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything in the FPIOA "],["SD_CS_GPIONUM","GPIOHS GPIO number to use for controlling the SD card CS pin "],["SD_START_DATA_MULTIPLE_BLOCK_READ","Data token start byte, Start Multiple Block Read "],["SD_START_DATA_MULTIPLE_BLOCK_WRITE","Data token start byte, Start Multiple Block Write "],["SD_START_DATA_SINGLE_BLOCK_READ","Data token start byte, Start Single Block Read "],["SD_START_DATA_SINGLE_BLOCK_WRITE","Data token start byte, Start Single Block Write "],["SEC_LEN",""]],"enum":[["CMD","SD commands "],["InitError",""]],"fn":[["init_sdcard",""],["io_init","Connect pins to internal functions "]],"struct":[["PERIPHERALS",""],["SDCard",""],["SDCardCID","Card Identification Data: CID Register"],["SDCardCSD","Card Specific Data: CSD Register"],["SDCardInfo","Card information"],["SDCardWrapper",""]]}); \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.PERIPHERALS.html b/ch6-dev/os/drivers/block/sdcard/struct.PERIPHERALS.html deleted file mode 100644 index cce093d9..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.PERIPHERALS.html +++ /dev/null @@ -1,24 +0,0 @@ -PERIPHERALS in os::drivers::block::sdcard - Rust - -
struct PERIPHERALS {
-    __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPSafeCell<Peripherals>>

Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

-

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.SDCard.html b/ch6-dev/os/drivers/block/sdcard/struct.SDCard.html deleted file mode 100644 index a5c7926f..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.SDCard.html +++ /dev/null @@ -1,23 +0,0 @@ -SDCard in os::drivers::block::sdcard - Rust - -
pub struct SDCard<SPI> {
-    spi: SPI,
-    spi_cs: u32,
-    cs_gpionum: u8,
-}

Fields

spi: SPIspi_cs: u32cs_gpionum: u8

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.SDCardCID.html b/ch6-dev/os/drivers/block/sdcard/struct.SDCardCID.html deleted file mode 100644 index c8bb5e6c..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.SDCardCID.html +++ /dev/null @@ -1,37 +0,0 @@ -SDCardCID in os::drivers::block::sdcard - Rust - -
pub struct SDCardCID {
-    pub ManufacturerID: u8,
-    pub OEM_AppliID: u16,
-    pub ProdName1: u32,
-    pub ProdName2: u8,
-    pub ProdRev: u8,
-    pub ProdSN: u32,
-    pub Reserved1: u8,
-    pub ManufactDate: u16,
-    pub CID_CRC: u8,
-    pub Reserved2: u8,
-}
Expand description

Card Identification Data: CID Register

-

Fields

ManufacturerID: u8OEM_AppliID: u16ProdName1: u32ProdName2: u8ProdRev: u8ProdSN: u32Reserved1: u8ManufactDate: u16CID_CRC: u8Reserved2: u8

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.SDCardCSD.html b/ch6-dev/os/drivers/block/sdcard/struct.SDCardCSD.html deleted file mode 100644 index 0989ce3b..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.SDCardCSD.html +++ /dev/null @@ -1,59 +0,0 @@ -SDCardCSD in os::drivers::block::sdcard - Rust - -
pub struct SDCardCSD {
Show 32 fields - pub CSDStruct: u8, - pub SysSpecVersion: u8, - pub Reserved1: u8, - pub TAAC: u8, - pub NSAC: u8, - pub MaxBusClkFrec: u8, - pub CardComdClasses: u16, - pub RdBlockLen: u8, - pub PartBlockRead: u8, - pub WrBlockMisalign: u8, - pub RdBlockMisalign: u8, - pub DSRImpl: u8, - pub Reserved2: u8, - pub DeviceSize: u32, - pub EraseGrSize: u8, - pub EraseGrMul: u8, - pub WrProtectGrSize: u8, - pub WrProtectGrEnable: u8, - pub ManDeflECC: u8, - pub WrSpeedFact: u8, - pub MaxWrBlockLen: u8, - pub WriteBlockPaPartial: u8, - pub Reserved3: u8, - pub ContentProtectAppli: u8, - pub FileFormatGroup: u8, - pub CopyFlag: u8, - pub PermWrProtect: u8, - pub TempWrProtect: u8, - pub FileFormat: u8, - pub ECC: u8, - pub CSD_CRC: u8, - pub Reserved4: u8, -
}
Expand description

Card Specific Data: CSD Register

-

Fields

CSDStruct: u8SysSpecVersion: u8Reserved1: u8TAAC: u8NSAC: u8MaxBusClkFrec: u8CardComdClasses: u16RdBlockLen: u8PartBlockRead: u8WrBlockMisalign: u8RdBlockMisalign: u8DSRImpl: u8Reserved2: u8DeviceSize: u32EraseGrSize: u8EraseGrMul: u8WrProtectGrSize: u8WrProtectGrEnable: u8ManDeflECC: u8WrSpeedFact: u8MaxWrBlockLen: u8WriteBlockPaPartial: u8Reserved3: u8ContentProtectAppli: u8FileFormatGroup: u8CopyFlag: u8PermWrProtect: u8TempWrProtect: u8FileFormat: u8ECC: u8CSD_CRC: u8Reserved4: u8

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.SDCardInfo.html b/ch6-dev/os/drivers/block/sdcard/struct.SDCardInfo.html deleted file mode 100644 index b8df7a02..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.SDCardInfo.html +++ /dev/null @@ -1,31 +0,0 @@ -SDCardInfo in os::drivers::block::sdcard - Rust - -
pub struct SDCardInfo {
-    pub SD_csd: SDCardCSD,
-    pub SD_cid: SDCardCID,
-    pub CardCapacity: u64,
-    pub CardBlockSize: u64,
-}
Expand description

Card information

-

Fields

SD_csd: SDCardCSDSD_cid: SDCardCIDCardCapacity: u64CardBlockSize: u64

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sdcard/struct.SDCardWrapper.html b/ch6-dev/os/drivers/block/sdcard/struct.SDCardWrapper.html deleted file mode 100644 index 280e5152..00000000 --- a/ch6-dev/os/drivers/block/sdcard/struct.SDCardWrapper.html +++ /dev/null @@ -1,21 +0,0 @@ -SDCardWrapper in os::drivers::block::sdcard - Rust - -
pub struct SDCardWrapper(UPSafeCell<SDCard<SPIImpl<SPI0>>>);

Tuple Fields

0: UPSafeCell<SDCard<SPIImpl<SPI0>>>

Implementations

Trait Implementations

Read data form block to buffer

-

Write data from buffer to block

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/sidebar-items.js b/ch6-dev/os/drivers/block/sidebar-items.js index 11ff3e4d..c3481c60 100644 --- a/ch6-dev/os/drivers/block/sidebar-items.js +++ b/ch6-dev/os/drivers/block/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["block_device_test",""]],"mod":[["sdcard",""],["virtio_blk",""]],"struct":[["BLOCK_DEVICE",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["block_device_test"],"mod":["virtio_blk"],"struct":["BLOCK_DEVICE"]}; \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/struct.BLOCK_DEVICE.html b/ch6-dev/os/drivers/block/struct.BLOCK_DEVICE.html index c56b5de3..a60bc1c5 100644 --- a/ch6-dev/os/drivers/block/struct.BLOCK_DEVICE.html +++ b/ch6-dev/os/drivers/block/struct.BLOCK_DEVICE.html @@ -1,23 +1,13 @@ -BLOCK_DEVICE in os::drivers::block - Rust - -
pub struct BLOCK_DEVICE {
+BLOCK_DEVICE in os::drivers::block - Rust

Struct os::drivers::block::BLOCK_DEVICE

source ·
pub struct BLOCK_DEVICE {
     __private_field: (),
-}

Fields

__private_field: ()

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

+}

Fields§

§__private_field: ()

Trait Implementations§

source§

impl Deref for BLOCK_DEVICE

§

type Target = Arc<dyn BlockDevice, Global>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Arc<dyn BlockDevice>

Dereferences the value.
source§

impl LazyStatic for BLOCK_DEVICE

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/constant.VIRTIO0.html b/ch6-dev/os/drivers/block/virtio_blk/constant.VIRTIO0.html index 6cd46f6e..b7f0ca66 100644 --- a/ch6-dev/os/drivers/block/virtio_blk/constant.VIRTIO0.html +++ b/ch6-dev/os/drivers/block/virtio_blk/constant.VIRTIO0.html @@ -1,8 +1 @@ -VIRTIO0 in os::drivers::block::virtio_blk - Rust - -
const VIRTIO0: usize = 0x10001000;
- \ No newline at end of file +VIRTIO0 in os::drivers::block::virtio_blk - Rust

Constant os::drivers::block::virtio_blk::VIRTIO0

source ·
const VIRTIO0: usize = 0x10001000;
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html b/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html deleted file mode 100644 index 304546b4..00000000 --- a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html +++ /dev/null @@ -1,9 +0,0 @@ -virtio_dma_alloc in os::drivers::block::virtio_blk - Rust - -
#[no_mangle]
-pub extern "C" fn virtio_dma_alloc(pages: usize) -> PhysAddr
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html b/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html deleted file mode 100644 index 292c54bc..00000000 --- a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html +++ /dev/null @@ -1,9 +0,0 @@ -virtio_dma_dealloc in os::drivers::block::virtio_blk - Rust - -
#[no_mangle]
-pub extern "C" fn virtio_dma_dealloc(
    pa: PhysAddr,
    pages: usize
) -> i32
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html b/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html deleted file mode 100644 index 7d23a8dd..00000000 --- a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html +++ /dev/null @@ -1,9 +0,0 @@ -virtio_phys_to_virt in os::drivers::block::virtio_blk - Rust - -
#[no_mangle]
-pub extern "C" fn virtio_phys_to_virt(paddr: PhysAddr) -> VirtAddr
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html b/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html deleted file mode 100644 index 199c4b17..00000000 --- a/ch6-dev/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html +++ /dev/null @@ -1,9 +0,0 @@ -virtio_virt_to_phys in os::drivers::block::virtio_blk - Rust - -
#[no_mangle]
-pub extern "C" fn virtio_virt_to_phys(vaddr: VirtAddr) -> PhysAddr
- \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/index.html b/ch6-dev/os/drivers/block/virtio_blk/index.html index 7cde2000..972b84a4 100644 --- a/ch6-dev/os/drivers/block/virtio_blk/index.html +++ b/ch6-dev/os/drivers/block/virtio_blk/index.html @@ -1,11 +1 @@ -os::drivers::block::virtio_blk - Rust - -
- \ No newline at end of file +os::drivers::block::virtio_blk - Rust
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/sidebar-items.js b/ch6-dev/os/drivers/block/virtio_blk/sidebar-items.js index 06229704..eea77e12 100644 --- a/ch6-dev/os/drivers/block/virtio_blk/sidebar-items.js +++ b/ch6-dev/os/drivers/block/virtio_blk/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["VIRTIO0",""]],"fn":[["virtio_dma_alloc",""],["virtio_dma_dealloc",""],["virtio_phys_to_virt",""],["virtio_virt_to_phys",""]],"struct":[["QUEUE_FRAMES",""],["VirtIOBlock",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["VIRTIO0"],"struct":["QUEUE_FRAMES","VirtIOBlock","VirtioHal"]}; \ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html b/ch6-dev/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html index 46bbb728..dbd25a96 100644 --- a/ch6-dev/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html +++ b/ch6-dev/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html @@ -1,24 +1,14 @@ -QUEUE_FRAMES in os::drivers::block::virtio_blk - Rust - -
struct QUEUE_FRAMES {
+QUEUE_FRAMES in os::drivers::block::virtio_blk - Rust
struct QUEUE_FRAMES {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPSafeCell<Vec<FrameTracker>>>

Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

-

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

+}

Fields§

§__private_field: ()

Methods from Deref<Target = UPSafeCell<Vec<FrameTracker>>>§

source

pub fn exclusive_access(&self) -> RefMut<'_, T>

Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

+

Trait Implementations§

source§

impl Deref for QUEUE_FRAMES

§

type Target = UPSafeCell<Vec<FrameTracker, Global>>

The resulting type after dereferencing.
source§

fn deref(&self) -> &UPSafeCell<Vec<FrameTracker>>

Dereferences the value.
source§

impl LazyStatic for QUEUE_FRAMES

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/struct.VirtIOBlock.html b/ch6-dev/os/drivers/block/virtio_blk/struct.VirtIOBlock.html index 50e5a7fc..39682cc0 100644 --- a/ch6-dev/os/drivers/block/virtio_blk/struct.VirtIOBlock.html +++ b/ch6-dev/os/drivers/block/virtio_blk/struct.VirtIOBlock.html @@ -1,21 +1,11 @@ -VirtIOBlock in os::drivers::block::virtio_blk - Rust - -
pub struct VirtIOBlock(UPSafeCell<VirtIOBlk<'static>>);

Tuple Fields

0: UPSafeCell<VirtIOBlk<'static>>

Implementations

Trait Implementations

Read data form block to buffer

-

Write data from buffer to block

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Calls U::from(self).

+VirtIOBlock in os::drivers::block::virtio_blk - Rust
pub struct VirtIOBlock(UPSafeCell<VirtIOBlk<'static, VirtioHal>>);

Tuple Fields§

§0: UPSafeCell<VirtIOBlk<'static, VirtioHal>>

Implementations§

source§

impl VirtIOBlock

source

pub fn new() -> Self

Trait Implementations§

source§

impl BlockDevice for VirtIOBlock

source§

fn read_block(&self, block_id: usize, buf: &mut [u8])

Read data form block to buffer
source§

fn write_block(&self, block_id: usize, buf: &[u8])

Write data from buffer to block

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/ch6-dev/os/drivers/block/virtio_blk/struct.VirtioHal.html b/ch6-dev/os/drivers/block/virtio_blk/struct.VirtioHal.html new file mode 100644 index 00000000..47afd70c --- /dev/null +++ b/ch6-dev/os/drivers/block/virtio_blk/struct.VirtioHal.html @@ -0,0 +1,13 @@ +VirtioHal in os::drivers::block::virtio_blk - Rust
pub struct VirtioHal;

Trait Implementations§

source§

impl Hal for VirtioHal

source§

fn dma_alloc(pages: usize) -> usize

Allocates the given number of contiguous physical pages of DMA memory for virtio use.
source§

fn dma_dealloc(pa: usize, pages: usize) -> i32

Deallocates the given contiguous physical DMA memory pages.
source§

fn phys_to_virt(addr: usize) -> usize

Converts a physical address used for virtio to a virtual address which the program can +access.
source§

fn virt_to_phys(vaddr: usize) -> usize

Converts a virtual address which the program can access to the corresponding physical +address to use for virtio.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/ch6-dev/os/drivers/index.html b/ch6-dev/os/drivers/index.html index 45ff82c3..4712bbe7 100644 --- a/ch6-dev/os/drivers/index.html +++ b/ch6-dev/os/drivers/index.html @@ -1,10 +1 @@ -os::drivers - Rust - -
-

Module os::drivers

source · []

Re-exports

-
pub use block::BLOCK_DEVICE;
pub use block::BLOCK_DEVICE;

Modules

-
- \ No newline at end of file +os::drivers - Rust

Module os::drivers

source ·

Re-exports

Modules

\ No newline at end of file diff --git a/ch6-dev/os/drivers/sidebar-items.js b/ch6-dev/os/drivers/sidebar-items.js index 7c00c7a4..5ecd9a7b 100644 --- a/ch6-dev/os/drivers/sidebar-items.js +++ b/ch6-dev/os/drivers/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"mod":[["block",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"mod":["block"]}; \ No newline at end of file diff --git a/ch6-dev/os/fn.clear_bss.html b/ch6-dev/os/fn.clear_bss.html index 5cf0aa99..4d4daf17 100644 --- a/ch6-dev/os/fn.clear_bss.html +++ b/ch6-dev/os/fn.clear_bss.html @@ -1,9 +1,2 @@ -clear_bss in os - Rust - -
-

Function os::clear_bss

source · []
pub(crate) fn clear_bss()
Expand description

clear BSS segment

-
- \ No newline at end of file +clear_bss in os - Rust

Function os::clear_bss

source ·
pub(crate) fn clear_bss()
Expand description

clear BSS segment

+
\ No newline at end of file diff --git a/ch6-dev/os/fn.rust_main.html b/ch6-dev/os/fn.rust_main.html index cf6f341f..e783e67e 100644 --- a/ch6-dev/os/fn.rust_main.html +++ b/ch6-dev/os/fn.rust_main.html @@ -1,10 +1,3 @@ -rust_main in os - Rust - -
-

Function os::rust_main

source · []
#[no_mangle]
-pub fn rust_main() -> !
Expand description

the rust entry-point of os

-
- \ No newline at end of file +rust_main in os - Rust

Function os::rust_main

source ·
#[no_mangle]
+pub fn rust_main() -> !
Expand description

the rust entry-point of os

+
\ No newline at end of file diff --git a/ch6-dev/os/fs/fn.list_apps.html b/ch6-dev/os/fs/fn.list_apps.html index 6e9347aa..886c5a13 100644 --- a/ch6-dev/os/fs/fn.list_apps.html +++ b/ch6-dev/os/fs/fn.list_apps.html @@ -1,9 +1,2 @@ -list_apps in os::fs - Rust - -
-

Function os::fs::list_apps

source · []
pub fn list_apps()
Expand description

List all files in the filesystems

-
- \ No newline at end of file +list_apps in os::fs - Rust

Function os::fs::list_apps

source ·
pub fn list_apps()
Expand description

List all files in the filesystems

+
\ No newline at end of file diff --git a/ch6-dev/os/fs/fn.open_file.html b/ch6-dev/os/fs/fn.open_file.html index 9a2faded..a77f6b99 100644 --- a/ch6-dev/os/fs/fn.open_file.html +++ b/ch6-dev/os/fs/fn.open_file.html @@ -1,9 +1,2 @@ -open_file in os::fs - Rust - -
-

Function os::fs::open_file

source · []
pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>>
Expand description

Open file with flags

-
- \ No newline at end of file +open_file in os::fs - Rust

Function os::fs::open_file

source ·
pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>>
Expand description

Open file with flags

+
\ No newline at end of file diff --git a/ch6-dev/os/fs/index.html b/ch6-dev/os/fs/index.html index f3ab1858..8b0d45d0 100644 --- a/ch6-dev/os/fs/index.html +++ b/ch6-dev/os/fs/index.html @@ -1,25 +1,5 @@ -os::fs - Rust - -
-

Module os::fs

source · []
Expand description

File system in os

-

Modules

-
inode 🔒

Arc<Inode> -> OSInodeInner: In order to open files concurrently +os::fs - Rust

Module os::fs

source ·
Expand description

File system in os

+

Modules

  • inode 🔒
    Arc<Inode> -> OSInodeInner: In order to open files concurrently we need to wrap Inode into Arc,but Mutex in Inode prevents -file systems from being accessed simultaneously

    -
stdio 🔒

Stdin & Stdout

-

Structs

-

A wrapper around a filesystem inode -to implement File trait atop

-

Open file flags

-

Standard input

-

Standard output

-

Traits

-

File trait

-

Functions

-

List all files in the filesystems

-

Open file with flags

-
- \ No newline at end of file +file systems from being accessed simultaneously
  • stdio 🔒
    Stdin & Stdout
  • Structs

    • A wrapper around a filesystem inode +to implement File trait atop
    • Open file flags
    • Standard input
    • Standard output

    Traits

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/constant.BLOCK_CACHE_SIZE.html b/ch6-dev/os/fs/inode/constant.BLOCK_CACHE_SIZE.html new file mode 100644 index 00000000..2c44f885 --- /dev/null +++ b/ch6-dev/os/fs/inode/constant.BLOCK_CACHE_SIZE.html @@ -0,0 +1 @@ +BLOCK_CACHE_SIZE in os::fs::inode - Rust

    Constant os::fs::inode::BLOCK_CACHE_SIZE

    source ·
    const BLOCK_CACHE_SIZE: usize = 64;
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/fn.list_apps.html b/ch6-dev/os/fs/inode/fn.list_apps.html index 375dd1a5..deeb30e8 100644 --- a/ch6-dev/os/fs/inode/fn.list_apps.html +++ b/ch6-dev/os/fs/inode/fn.list_apps.html @@ -1,9 +1,2 @@ -list_apps in os::fs::inode - Rust - -
    -

    Function os::fs::inode::list_apps

    source · []
    pub fn list_apps()
    Expand description

    List all files in the filesystems

    -
    - \ No newline at end of file +list_apps in os::fs::inode - Rust

    Function os::fs::inode::list_apps

    source ·
    pub fn list_apps()
    Expand description

    List all files in the filesystems

    +
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/fn.open_file.html b/ch6-dev/os/fs/inode/fn.open_file.html index 17696c13..a4ac4f68 100644 --- a/ch6-dev/os/fs/inode/fn.open_file.html +++ b/ch6-dev/os/fs/inode/fn.open_file.html @@ -1,9 +1,2 @@ -open_file in os::fs::inode - Rust - -
    -

    Function os::fs::inode::open_file

    source · []
    pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>>
    Expand description

    Open file with flags

    -
    - \ No newline at end of file +open_file in os::fs::inode - Rust

    Function os::fs::inode::open_file

    source ·
    pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>>
    Expand description

    Open file with flags

    +
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/index.html b/ch6-dev/os/fs/inode/index.html index 0b700acd..3d71b29a 100644 --- a/ch6-dev/os/fs/inode/index.html +++ b/ch6-dev/os/fs/inode/index.html @@ -1,21 +1,7 @@ -os::fs::inode - Rust - -
    -

    Module os::fs::inode

    source · []
    Expand description

    Arc<Inode> -> OSInodeInner: In order to open files concurrently +os::fs::inode - Rust

    Module os::fs::inode

    source ·
    Expand description

    Arc<Inode> -> OSInodeInner: In order to open files concurrently we need to wrap Inode into Arc,but Mutex in Inode prevents file systems from being accessed simultaneously

    UPSafeCell<OSInodeInner> -> OSInode: for static ROOT_INODE,we need to wrap OSInodeInner into UPSafeCell

    -

    Structs

    -

    A wrapper around a filesystem inode -to implement File trait atop

    -

    The OS inode inner in ‘UPSafeCell’

    -

    Open file flags

    -

    Functions

    -

    List all files in the filesystems

    -

    Open file with flags

    -
    - \ No newline at end of file +

    Structs

    Constants

    Functions

    Type Aliases

    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/sidebar-items.js b/ch6-dev/os/fs/inode/sidebar-items.js index d6fbc299..cd97407c 100644 --- a/ch6-dev/os/fs/inode/sidebar-items.js +++ b/ch6-dev/os/fs/inode/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["list_apps","List all files in the filesystems"],["open_file","Open file with flags"]],"struct":[["OSInode","A wrapper around a filesystem inode to implement File trait atop"],["OSInodeInner","The OS inode inner in ‘UPSafeCell’"],["OpenFlags","Open file flags"],["ROOT_INODE",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["BLOCK_CACHE_SIZE"],"fn":["list_apps","open_file"],"struct":["OSInode","OSInodeInner","OpenFlags","ROOT_INODE"],"type":["InodeType"]}; \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/struct.OSInode.html b/ch6-dev/os/fs/inode/struct.OSInode.html index 0cee49da..141fa511 100644 --- a/ch6-dev/os/fs/inode/struct.OSInode.html +++ b/ch6-dev/os/fs/inode/struct.OSInode.html @@ -1,31 +1,23 @@ -OSInode in os::fs::inode - Rust - -
    -

    Struct os::fs::inode::OSInode

    source · []
    pub struct OSInode {
    +OSInode in os::fs::inode - Rust

    Struct os::fs::inode::OSInode

    source ·
    pub struct OSInode {
         readable: bool,
         writable: bool,
         inner: UPSafeCell<OSInodeInner>,
    -}
    Expand description

    A wrapper around a filesystem inode +}

    Expand description

    A wrapper around a filesystem inode to implement File trait atop

    -

    Fields

    readable: boolwritable: boolinner: UPSafeCell<OSInodeInner>

    Implementations

    Construct an OS inode from a inode

    -

    Read all data inside a inode into vector

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Fields§

    §readable: bool§writable: bool§inner: UPSafeCell<OSInodeInner>

    Implementations§

    source§

    impl OSInode

    source

    pub fn new( + readable: bool, + writable: bool, + inode: Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>> +) -> Self

    Construct an OS inode from a inode

    +
    source

    pub fn read_all(&self) -> Vec<u8>

    Read all data inside a inode into vector

    +

    Trait Implementations§

    source§

    impl File for OSInode

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/struct.OSInodeInner.html b/ch6-dev/os/fs/inode/struct.OSInodeInner.html index 6c8d7ce5..dd57446e 100644 --- a/ch6-dev/os/fs/inode/struct.OSInodeInner.html +++ b/ch6-dev/os/fs/inode/struct.OSInodeInner.html @@ -1,23 +1,15 @@ -OSInodeInner in os::fs::inode - Rust - -
    pub struct OSInodeInner {
    +OSInodeInner in os::fs::inode - Rust

    Struct os::fs::inode::OSInodeInner

    source ·
    pub struct OSInodeInner {
         offset: usize,
    -    inode: Arc<Inode>,
    -}
    Expand description

    The OS inode inner in ‘UPSafeCell’

    -

    Fields

    offset: usizeinode: Arc<Inode>

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    + inode: Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>>, +}
    Expand description

    The OS inode inner in ‘UPSafeCell’

    +

    Fields§

    §offset: usize§inode: Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/struct.OpenFlags.html b/ch6-dev/os/fs/inode/struct.OpenFlags.html index 5908a036..046245aa 100644 --- a/ch6-dev/os/fs/inode/struct.OpenFlags.html +++ b/ch6-dev/os/fs/inode/struct.OpenFlags.html @@ -1,25 +1,19 @@ -OpenFlags in os::fs::inode - Rust - -
    -

    Struct os::fs::inode::OpenFlags

    source · []
    pub struct OpenFlags {
    +OpenFlags in os::fs::inode - Rust

    Struct os::fs::inode::OpenFlags

    source ·
    pub struct OpenFlags {
         bits: u32,
    -}
    Expand description

    Open file flags

    -

    Fields

    bits: u32

    Implementations

    Read only

    -

    Write only

    -

    Read & Write

    -

    Allow create

    -

    Clear file and return an empty one

    -

    Returns an empty set of flags.

    -

    Returns the set containing all flags.

    -

    Returns the raw value of the flags currently stored.

    -

    Convert from underlying bit representation, unless that +}

    Expand description

    Open file flags

    +

    Fields§

    §bits: u32

    Implementations§

    source§

    impl OpenFlags

    source

    pub const RDONLY: Self = _

    Read only

    +
    source

    pub const WRONLY: Self = _

    Write only

    +
    source

    pub const RDWR: Self = _

    Read & Write

    +
    source

    pub const CREATE: Self = _

    Allow create

    +
    source

    pub const TRUNC: Self = _

    Clear file and return an empty one

    +
    source

    pub const fn empty() -> Self

    Returns an empty set of flags.

    +
    source

    pub const fn all() -> Self

    Returns the set containing all flags.

    +
    source

    pub const fn bits(&self) -> u32

    Returns the raw value of the flags currently stored.

    +
    source

    pub const fn from_bits(bits: u32) -> Option<Self>

    Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

    -

    Convert from underlying bit representation, dropping any bits +

    source

    pub const fn from_bits_truncate(bits: u32) -> Self

    Convert from underlying bit representation, dropping any bits that do not correspond to flags.

    -

    Convert from underlying bit representation, preserving all +

    source

    pub const unsafe fn from_bits_unchecked(bits: u32) -> Self

    Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

    Safety

    The caller of the bitflags! macro can chose to allow or @@ -27,35 +21,35 @@ disallow extra bits for their bitflags type.

    The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

    -

    Returns true if no flags are currently stored.

    -

    Returns true if all flags are currently set.

    -

    Returns true if there are flags common to both self and other.

    -

    Returns true if all of the flags in other are contained within self.

    -

    Inserts the specified flags in-place.

    -

    Removes the specified flags in-place.

    -

    Toggles the specified flags in-place.

    -

    Inserts or removes the specified flags depending on the passed value.

    -

    Returns the intersection between the flags in self and +

    source

    pub const fn is_empty(&self) -> bool

    Returns true if no flags are currently stored.

    +
    source

    pub const fn is_all(&self) -> bool

    Returns true if all flags are currently set.

    +
    source

    pub const fn intersects(&self, other: Self) -> bool

    Returns true if there are flags common to both self and other.

    +
    source

    pub const fn contains(&self, other: Self) -> bool

    Returns true if all of the flags in other are contained within self.

    +
    source

    pub fn insert(&mut self, other: Self)

    Inserts the specified flags in-place.

    +
    source

    pub fn remove(&mut self, other: Self)

    Removes the specified flags in-place.

    +
    source

    pub fn toggle(&mut self, other: Self)

    Toggles the specified flags in-place.

    +
    source

    pub fn set(&mut self, other: Self, value: bool)

    Inserts or removes the specified flags depending on the passed value.

    +
    source

    pub const fn intersection(self, other: Self) -> Self

    Returns the intersection between the flags in self and other.

    Specifically, the returned set contains only the flags which are present in both self and other.

    This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

    -

    Returns the union of between the flags in self and other.

    +
    source

    pub const fn union(self, other: Self) -> Self

    Returns the union of between the flags in self and other.

    Specifically, the returned set contains all flags which are present in either self or other, including any which are -present in both (see Self::symmetric_difference if that +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.

    -

    Returns the difference between the flags in self and other.

    +
    source

    pub const fn difference(self, other: Self) -> Self

    Returns the difference between the flags in self and other.

    Specifically, the returned set contains all flags present in self, except for the ones present in other.

    It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

    This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

    -

    Returns the symmetric difference between the flags +

    source

    pub const fn symmetric_difference(self, other: Self) -> Self

    Returns the symmetric difference between the flags in self and other.

    Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -63,69 +57,42 @@ 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.

    -

    Returns the complement of this set of flags.

    +
    source

    pub const fn complement(self) -> Self

    Returns the complement of this set of flags.

    Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

    Alternatively, it can be thought of as the set difference -between Self::all() and self (e.g. Self::all() - self)

    +between Self::all() and self (e.g. Self::all() - self)

    This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

    -

    Do not check validity for simplicity +

    source§

    impl OpenFlags

    source

    pub fn read_write(&self) -> (bool, bool)

    Do not check validity for simplicity Return (readable, writable)

    -

    Trait Implementations

    Formats the value using the given formatter.

    -

    Returns the intersection between the two sets of flags.

    -

    The resulting type after applying the & operator.

    -

    Disables all flags disabled in the set.

    -

    Returns the union of the two sets of flags.

    -

    The resulting type after applying the | operator.

    -

    Adds the set of flags.

    -

    Returns the left flags, but with all the right flags toggled.

    -

    The resulting type after applying the ^ operator.

    -

    Toggles the set of flags.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Extends a collection with the contents of an iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Extends a collection with exactly one element.

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Reserves capacity in a collection for the given number of additional elements. Read more

    -

    Creates a value from an iterator. Read more

    -

    Feeds this value into the given Hasher. Read more

    -

    Feeds a slice of this type into the given Hasher. Read more

    -

    Formats the value using the given formatter.

    -

    Returns the complement of this set of flags.

    -

    The resulting type after applying the ! operator.

    -

    Formats the value using the given formatter.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Returns the set difference of the two sets of flags.

    -

    The resulting type after applying the - operator.

    -

    Disables all flags enabled in the set.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Binary for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<OpenFlags> for OpenFlags

    source§

    fn bitand(self, other: Self) -> Self

    Returns the intersection between the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the & operator.
    source§

    impl BitAndAssign<OpenFlags> for OpenFlags

    source§

    fn bitand_assign(&mut self, other: Self)

    Disables all flags disabled in the set.

    +
    source§

    impl BitOr<OpenFlags> for OpenFlags

    source§

    fn bitor(self, other: OpenFlags) -> Self

    Returns the union of the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the | operator.
    source§

    impl BitOrAssign<OpenFlags> for OpenFlags

    source§

    fn bitor_assign(&mut self, other: Self)

    Adds the set of flags.

    +
    source§

    impl BitXor<OpenFlags> for OpenFlags

    source§

    fn bitxor(self, other: Self) -> Self

    Returns the left flags, but with all the right flags toggled.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the ^ operator.
    source§

    impl BitXorAssign<OpenFlags> for OpenFlags

    source§

    fn bitxor_assign(&mut self, other: Self)

    Toggles the set of flags.

    +
    source§

    impl Clone for OpenFlags

    source§

    fn clone(&self) -> OpenFlags

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Extend<OpenFlags> for OpenFlags

    source§

    fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    source§

    impl FromIterator<OpenFlags> for OpenFlags

    source§

    fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Hash for OpenFlags

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Not for OpenFlags

    source§

    fn not(self) -> Self

    Returns the complement of this set of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the ! operator.
    source§

    impl Octal for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for OpenFlags

    source§

    fn cmp(&self, other: &OpenFlags) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<OpenFlags> for OpenFlags

    source§

    fn eq(&self, other: &OpenFlags) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<OpenFlags> for OpenFlags

    source§

    fn partial_cmp(&self, other: &OpenFlags) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Sub<OpenFlags> for OpenFlags

    source§

    fn sub(self, other: Self) -> Self

    Returns the set difference of the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the - operator.
    source§

    impl SubAssign<OpenFlags> for OpenFlags

    source§

    fn sub_assign(&mut self, other: Self)

    Disables all flags enabled in the set.

    +
    source§

    impl UpperHex for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for OpenFlags

    source§

    impl Eq for OpenFlags

    source§

    impl StructuralEq for OpenFlags

    source§

    impl StructuralPartialEq for OpenFlags

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/struct.ROOT_INODE.html b/ch6-dev/os/fs/inode/struct.ROOT_INODE.html index f2d25cac..9471dc11 100644 --- a/ch6-dev/os/fs/inode/struct.ROOT_INODE.html +++ b/ch6-dev/os/fs/inode/struct.ROOT_INODE.html @@ -1,23 +1,15 @@ -ROOT_INODE in os::fs::inode - Rust - -
    -

    Struct os::fs::inode::ROOT_INODE

    source · []
    pub struct ROOT_INODE {
    +ROOT_INODE in os::fs::inode - Rust

    Struct os::fs::inode::ROOT_INODE

    source ·
    pub struct ROOT_INODE {
         __private_field: (),
    -}

    Fields

    __private_field: ()

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §__private_field: ()

    Trait Implementations§

    source§

    impl Deref for ROOT_INODE

    §

    type Target = Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>, Global>

    The resulting type after dereferencing.
    source§

    fn deref( + &self +) -> &Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>>

    Dereferences the value.
    source§

    impl LazyStatic for ROOT_INODE

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/inode/type.InodeType.html b/ch6-dev/os/fs/inode/type.InodeType.html new file mode 100644 index 00000000..cf1d482d --- /dev/null +++ b/ch6-dev/os/fs/inode/type.InodeType.html @@ -0,0 +1,5 @@ +InodeType in os::fs::inode - Rust

    Type Alias os::fs::inode::InodeType

    source ·
    type InodeType = Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>;

    Aliased Type§

    struct InodeType {
    +    block_id: usize,
    +    block_offset: usize,
    +    fs: Arc<Mutex<RawExclusiveLock, EasyFileSystem<64, RawExclusiveLock, RawExclusiveLock>>, Global>,
    +}

    Fields§

    §block_id: usize§block_offset: usize§fs: Arc<Mutex<RawExclusiveLock, EasyFileSystem<64, RawExclusiveLock, RawExclusiveLock>>, Global>
    \ No newline at end of file diff --git a/ch6-dev/os/fs/sidebar-items.js b/ch6-dev/os/fs/sidebar-items.js index ddc620a7..111cf21a 100644 --- a/ch6-dev/os/fs/sidebar-items.js +++ b/ch6-dev/os/fs/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["list_apps","List all files in the filesystems"],["open_file","Open file with flags"]],"mod":[["inode","`Arc` -> `OSInodeInner`: In order to open files concurrently we need to wrap `Inode` into `Arc`,but `Mutex` in `Inode` prevents file systems from being accessed simultaneously"],["stdio","Stdin & Stdout"]],"struct":[["OSInode","A wrapper around a filesystem inode to implement File trait atop"],["OpenFlags","Open file flags"],["Stdin","Standard input"],["Stdout","Standard output"]],"trait":[["File","File trait"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["list_apps","open_file"],"mod":["inode","stdio"],"struct":["OSInode","OpenFlags","Stdin","Stdout"],"trait":["File"]}; \ No newline at end of file diff --git a/ch6-dev/os/fs/stdio/index.html b/ch6-dev/os/fs/stdio/index.html index 07bc9e70..7f81f1c6 100644 --- a/ch6-dev/os/fs/stdio/index.html +++ b/ch6-dev/os/fs/stdio/index.html @@ -1,12 +1,2 @@ -os::fs::stdio - Rust - -
    -

    Module os::fs::stdio

    source · []
    Expand description

    Stdin & Stdout

    -

    Structs

    -

    Standard input

    -

    Standard output

    -
    - \ No newline at end of file +os::fs::stdio - Rust

    Module os::fs::stdio

    source ·
    Expand description

    Stdin & Stdout

    +

    Structs

    \ No newline at end of file diff --git a/ch6-dev/os/fs/stdio/sidebar-items.js b/ch6-dev/os/fs/stdio/sidebar-items.js index 666252a2..d61fa3a2 100644 --- a/ch6-dev/os/fs/stdio/sidebar-items.js +++ b/ch6-dev/os/fs/stdio/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["Stdin","Standard input"],["Stdout","Standard output"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["Stdin","Stdout"]}; \ No newline at end of file diff --git a/ch6-dev/os/fs/stdio/struct.Stdin.html b/ch6-dev/os/fs/stdio/struct.Stdin.html index ad37a241..ba0a3e85 100644 --- a/ch6-dev/os/fs/stdio/struct.Stdin.html +++ b/ch6-dev/os/fs/stdio/struct.Stdin.html @@ -1,24 +1,12 @@ -Stdin in os::fs::stdio - Rust - -
    -

    Struct os::fs::stdio::Stdin

    source · []
    pub struct Stdin;
    Expand description

    Standard input

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +Stdin in os::fs::stdio - Rust

    Struct os::fs::stdio::Stdin

    source ·
    pub struct Stdin;
    Expand description

    Standard input

    +

    Trait Implementations§

    source§

    impl File for Stdin

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, user_buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, _user_buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Stdin

    §

    impl Send for Stdin

    §

    impl Sync for Stdin

    §

    impl Unpin for Stdin

    §

    impl UnwindSafe for Stdin

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/stdio/struct.Stdout.html b/ch6-dev/os/fs/stdio/struct.Stdout.html index 4d614467..99f7be7b 100644 --- a/ch6-dev/os/fs/stdio/struct.Stdout.html +++ b/ch6-dev/os/fs/stdio/struct.Stdout.html @@ -1,24 +1,12 @@ -Stdout in os::fs::stdio - Rust - -
    -

    Struct os::fs::stdio::Stdout

    source · []
    pub struct Stdout;
    Expand description

    Standard output

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +Stdout in os::fs::stdio - Rust

    Struct os::fs::stdio::Stdout

    source ·
    pub struct Stdout;
    Expand description

    Standard output

    +

    Trait Implementations§

    source§

    impl File for Stdout

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, _user_buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, user_buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/struct.OSInode.html b/ch6-dev/os/fs/struct.OSInode.html index 883257bb..81e88c17 100644 --- a/ch6-dev/os/fs/struct.OSInode.html +++ b/ch6-dev/os/fs/struct.OSInode.html @@ -1,31 +1,23 @@ -OSInode in os::fs - Rust - -
    -

    Struct os::fs::OSInode

    source · []
    pub struct OSInode {
    +OSInode in os::fs - Rust

    Struct os::fs::OSInode

    source ·
    pub struct OSInode {
         readable: bool,
         writable: bool,
         inner: UPSafeCell<OSInodeInner>,
    -}
    Expand description

    A wrapper around a filesystem inode +}

    Expand description

    A wrapper around a filesystem inode to implement File trait atop

    -

    Fields

    readable: boolwritable: boolinner: UPSafeCell<OSInodeInner>

    Implementations

    Construct an OS inode from a inode

    -

    Read all data inside a inode into vector

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Fields§

    §readable: bool§writable: bool§inner: UPSafeCell<OSInodeInner>

    Implementations§

    source§

    impl OSInode

    source

    pub fn new( + readable: bool, + writable: bool, + inode: Arc<Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>> +) -> Self

    Construct an OS inode from a inode

    +
    source

    pub fn read_all(&self) -> Vec<u8>

    Read all data inside a inode into vector

    +

    Trait Implementations§

    source§

    impl File for OSInode

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/struct.OpenFlags.html b/ch6-dev/os/fs/struct.OpenFlags.html index 891f1e21..0bb282c8 100644 --- a/ch6-dev/os/fs/struct.OpenFlags.html +++ b/ch6-dev/os/fs/struct.OpenFlags.html @@ -1,25 +1,19 @@ -OpenFlags in os::fs - Rust - -
    -

    Struct os::fs::OpenFlags

    source · []
    pub struct OpenFlags {
    +OpenFlags in os::fs - Rust

    Struct os::fs::OpenFlags

    source ·
    pub struct OpenFlags {
         bits: u32,
    -}
    Expand description

    Open file flags

    -

    Fields

    bits: u32

    Implementations

    Read only

    -

    Write only

    -

    Read & Write

    -

    Allow create

    -

    Clear file and return an empty one

    -

    Returns an empty set of flags.

    -

    Returns the set containing all flags.

    -

    Returns the raw value of the flags currently stored.

    -

    Convert from underlying bit representation, unless that +}

    Expand description

    Open file flags

    +

    Fields§

    §bits: u32

    Implementations§

    source§

    impl OpenFlags

    source

    pub const RDONLY: Self = _

    Read only

    +
    source

    pub const WRONLY: Self = _

    Write only

    +
    source

    pub const RDWR: Self = _

    Read & Write

    +
    source

    pub const CREATE: Self = _

    Allow create

    +
    source

    pub const TRUNC: Self = _

    Clear file and return an empty one

    +
    source

    pub const fn empty() -> Self

    Returns an empty set of flags.

    +
    source

    pub const fn all() -> Self

    Returns the set containing all flags.

    +
    source

    pub const fn bits(&self) -> u32

    Returns the raw value of the flags currently stored.

    +
    source

    pub const fn from_bits(bits: u32) -> Option<Self>

    Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

    -

    Convert from underlying bit representation, dropping any bits +

    source

    pub const fn from_bits_truncate(bits: u32) -> Self

    Convert from underlying bit representation, dropping any bits that do not correspond to flags.

    -

    Convert from underlying bit representation, preserving all +

    source

    pub const unsafe fn from_bits_unchecked(bits: u32) -> Self

    Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

    Safety

    The caller of the bitflags! macro can chose to allow or @@ -27,35 +21,35 @@ disallow extra bits for their bitflags type.

    The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

    -

    Returns true if no flags are currently stored.

    -

    Returns true if all flags are currently set.

    -

    Returns true if there are flags common to both self and other.

    -

    Returns true if all of the flags in other are contained within self.

    -

    Inserts the specified flags in-place.

    -

    Removes the specified flags in-place.

    -

    Toggles the specified flags in-place.

    -

    Inserts or removes the specified flags depending on the passed value.

    -

    Returns the intersection between the flags in self and +

    source

    pub const fn is_empty(&self) -> bool

    Returns true if no flags are currently stored.

    +
    source

    pub const fn is_all(&self) -> bool

    Returns true if all flags are currently set.

    +
    source

    pub const fn intersects(&self, other: Self) -> bool

    Returns true if there are flags common to both self and other.

    +
    source

    pub const fn contains(&self, other: Self) -> bool

    Returns true if all of the flags in other are contained within self.

    +
    source

    pub fn insert(&mut self, other: Self)

    Inserts the specified flags in-place.

    +
    source

    pub fn remove(&mut self, other: Self)

    Removes the specified flags in-place.

    +
    source

    pub fn toggle(&mut self, other: Self)

    Toggles the specified flags in-place.

    +
    source

    pub fn set(&mut self, other: Self, value: bool)

    Inserts or removes the specified flags depending on the passed value.

    +
    source

    pub const fn intersection(self, other: Self) -> Self

    Returns the intersection between the flags in self and other.

    Specifically, the returned set contains only the flags which are present in both self and other.

    This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

    -

    Returns the union of between the flags in self and other.

    +
    source

    pub const fn union(self, other: Self) -> Self

    Returns the union of between the flags in self and other.

    Specifically, the returned set contains all flags which are present in either self or other, including any which are -present in both (see Self::symmetric_difference if that +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.

    -

    Returns the difference between the flags in self and other.

    +
    source

    pub const fn difference(self, other: Self) -> Self

    Returns the difference between the flags in self and other.

    Specifically, the returned set contains all flags present in self, except for the ones present in other.

    It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

    This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

    -

    Returns the symmetric difference between the flags +

    source

    pub const fn symmetric_difference(self, other: Self) -> Self

    Returns the symmetric difference between the flags in self and other.

    Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -63,69 +57,42 @@ 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.

    -

    Returns the complement of this set of flags.

    +
    source

    pub const fn complement(self) -> Self

    Returns the complement of this set of flags.

    Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

    Alternatively, it can be thought of as the set difference -between Self::all() and self (e.g. Self::all() - self)

    +between Self::all() and self (e.g. Self::all() - self)

    This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

    -

    Do not check validity for simplicity +

    source§

    impl OpenFlags

    source

    pub fn read_write(&self) -> (bool, bool)

    Do not check validity for simplicity Return (readable, writable)

    -

    Trait Implementations

    Formats the value using the given formatter.

    -

    Returns the intersection between the two sets of flags.

    -

    The resulting type after applying the & operator.

    -

    Disables all flags disabled in the set.

    -

    Returns the union of the two sets of flags.

    -

    The resulting type after applying the | operator.

    -

    Adds the set of flags.

    -

    Returns the left flags, but with all the right flags toggled.

    -

    The resulting type after applying the ^ operator.

    -

    Toggles the set of flags.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Extends a collection with the contents of an iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Extends a collection with exactly one element.

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Reserves capacity in a collection for the given number of additional elements. Read more

    -

    Creates a value from an iterator. Read more

    -

    Feeds this value into the given Hasher. Read more

    -

    Feeds a slice of this type into the given Hasher. Read more

    -

    Formats the value using the given formatter.

    -

    Returns the complement of this set of flags.

    -

    The resulting type after applying the ! operator.

    -

    Formats the value using the given formatter.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Returns the set difference of the two sets of flags.

    -

    The resulting type after applying the - operator.

    -

    Disables all flags enabled in the set.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Binary for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<OpenFlags> for OpenFlags

    source§

    fn bitand(self, other: Self) -> Self

    Returns the intersection between the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the & operator.
    source§

    impl BitAndAssign<OpenFlags> for OpenFlags

    source§

    fn bitand_assign(&mut self, other: Self)

    Disables all flags disabled in the set.

    +
    source§

    impl BitOr<OpenFlags> for OpenFlags

    source§

    fn bitor(self, other: OpenFlags) -> Self

    Returns the union of the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the | operator.
    source§

    impl BitOrAssign<OpenFlags> for OpenFlags

    source§

    fn bitor_assign(&mut self, other: Self)

    Adds the set of flags.

    +
    source§

    impl BitXor<OpenFlags> for OpenFlags

    source§

    fn bitxor(self, other: Self) -> Self

    Returns the left flags, but with all the right flags toggled.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the ^ operator.
    source§

    impl BitXorAssign<OpenFlags> for OpenFlags

    source§

    fn bitxor_assign(&mut self, other: Self)

    Toggles the set of flags.

    +
    source§

    impl Clone for OpenFlags

    source§

    fn clone(&self) -> OpenFlags

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Extend<OpenFlags> for OpenFlags

    source§

    fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    source§

    impl FromIterator<OpenFlags> for OpenFlags

    source§

    fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Hash for OpenFlags

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Not for OpenFlags

    source§

    fn not(self) -> Self

    Returns the complement of this set of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the ! operator.
    source§

    impl Octal for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for OpenFlags

    source§

    fn cmp(&self, other: &OpenFlags) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<OpenFlags> for OpenFlags

    source§

    fn eq(&self, other: &OpenFlags) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<OpenFlags> for OpenFlags

    source§

    fn partial_cmp(&self, other: &OpenFlags) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Sub<OpenFlags> for OpenFlags

    source§

    fn sub(self, other: Self) -> Self

    Returns the set difference of the two sets of flags.

    +
    §

    type Output = OpenFlags

    The resulting type after applying the - operator.
    source§

    impl SubAssign<OpenFlags> for OpenFlags

    source§

    fn sub_assign(&mut self, other: Self)

    Disables all flags enabled in the set.

    +
    source§

    impl UpperHex for OpenFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for OpenFlags

    source§

    impl Eq for OpenFlags

    source§

    impl StructuralEq for OpenFlags

    source§

    impl StructuralPartialEq for OpenFlags

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/struct.Stdin.html b/ch6-dev/os/fs/struct.Stdin.html index c8b22bf9..6356c7d5 100644 --- a/ch6-dev/os/fs/struct.Stdin.html +++ b/ch6-dev/os/fs/struct.Stdin.html @@ -1,24 +1,12 @@ -Stdin in os::fs - Rust - -
    -

    Struct os::fs::Stdin

    source · []
    pub struct Stdin;
    Expand description

    Standard input

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +Stdin in os::fs - Rust

    Struct os::fs::Stdin

    source ·
    pub struct Stdin;
    Expand description

    Standard input

    +

    Trait Implementations§

    source§

    impl File for Stdin

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, user_buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, _user_buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Stdin

    §

    impl Send for Stdin

    §

    impl Sync for Stdin

    §

    impl Unpin for Stdin

    §

    impl UnwindSafe for Stdin

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/struct.Stdout.html b/ch6-dev/os/fs/struct.Stdout.html index 834ebe41..b3c2cb37 100644 --- a/ch6-dev/os/fs/struct.Stdout.html +++ b/ch6-dev/os/fs/struct.Stdout.html @@ -1,24 +1,12 @@ -Stdout in os::fs - Rust - -
    -

    Struct os::fs::Stdout

    source · []
    pub struct Stdout;
    Expand description

    Standard output

    -

    Trait Implementations

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +Stdout in os::fs - Rust

    Struct os::fs::Stdout

    source ·
    pub struct Stdout;
    Expand description

    Standard output

    +

    Trait Implementations§

    source§

    impl File for Stdout

    source§

    fn readable(&self) -> bool

    If readable
    source§

    fn writable(&self) -> bool

    If writable
    source§

    fn read(&self, _user_buf: UserBuffer) -> usize

    Read file to UserBuffer
    source§

    fn write(&self, user_buf: UserBuffer) -> usize

    Write UserBuffer to file

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/fs/trait.File.html b/ch6-dev/os/fs/trait.File.html index db79d78f..e6ebe38f 100644 --- a/ch6-dev/os/fs/trait.File.html +++ b/ch6-dev/os/fs/trait.File.html @@ -1,18 +1,12 @@ -File in os::fs - Rust - -
    -

    Trait os::fs::File

    source · []
    pub trait File: Send + Sync {
    -    fn readable(&self) -> bool;
    -    fn writable(&self) -> bool;
    -    fn read(&self, buf: UserBuffer) -> usize;
    -    fn write(&self, buf: UserBuffer) -> usize;
    -}
    Expand description

    File trait

    -

    Required methods

    If readable

    -

    If writable

    -

    Read file to UserBuffer

    -

    Write UserBuffer to file

    -

    Implementors

    - \ No newline at end of file +File in os::fs - Rust

    Trait os::fs::File

    source ·
    pub trait File: Send + Sync {
    +    // Required methods
    +    fn readable(&self) -> bool;
    +    fn writable(&self) -> bool;
    +    fn read(&self, buf: UserBuffer) -> usize;
    +    fn write(&self, buf: UserBuffer) -> usize;
    +}
    Expand description

    File trait

    +

    Required Methods§

    source

    fn readable(&self) -> bool

    If readable

    +
    source

    fn writable(&self) -> bool

    If writable

    +
    source

    fn read(&self, buf: UserBuffer) -> usize

    Read file to UserBuffer

    +
    source

    fn write(&self, buf: UserBuffer) -> usize

    Write UserBuffer to file

    +

    Implementors§

    \ No newline at end of file diff --git a/ch6-dev/os/index.html b/ch6-dev/os/index.html index 1bb3423c..e16eec99 100644 --- a/ch6-dev/os/index.html +++ b/ch6-dev/os/index.html @@ -1,43 +1,18 @@ -os - Rust - -
    -

    Crate os

    source · []
    Expand description

    The main module and entrypoint

    +os - Rust

    Crate os

    source ·
    Expand description

    The main module and entrypoint

    Various facilities of the kernels are implemented as submodules. The most important ones are:

      -
    • trap: Handles all cases of switching from userspace to the kernel
    • -
    • task: Task management
    • -
    • syscall: System call handling and implementation
    • -
    • mm: Address map using SV39
    • -
    • sync: Wrap a static data structure inside it so that we are able to access it without any unsafe.
    • -
    • fs: Separate user from file system with some structures
    • +
    • trap: Handles all cases of switching from userspace to the kernel
    • +
    • task: Task management
    • +
    • syscall: System call handling and implementation
    • +
    • mm: Address map using SV39
    • +
    • sync: Wrap a static data structure inside it so that we are able to access it without any unsafe.
    • +
    • fs: Separate user from file system with some structures

    The operating system also starts in this module. Kernel code starts -executing from entry.asm, after which rust_main() is called to +executing from entry.asm, after which rust_main() is called to initialize various pieces of functionality. (See its source code for details.)

    -

    We then call task::run_tasks() and for the first time go to +

    We then call task::run_tasks() and for the first time go to userspace.

    -

    Modules

    -
    board 🔒
    config 🔒

    Constants used in rCore

    -
    console 🔒

    SBI console driver, for text output

    -
    drivers 🔒

    File system in os

    -

    The panic handler

    -

    Memory management implementation

    -

    SBI call wrappers

    -

    Synchronization and interior mutability primitives

    -

    Implementation of syscalls

    -

    Task management implementation

    -

    RISC-V timer-related functionality

    -

    Trap handling functionality

    -

    Macros

    -

    print string macro

    -

    println string macro

    -

    Functions

    -
    clear_bss 🔒

    clear BSS segment

    -

    the rust entry-point of os

    -
    - \ No newline at end of file +

    Modules

    • board 🔒
    • config 🔒
      Constants used in rCore
    • console 🔒
      SBI console driver, for text output
    • drivers 🔒
    • File system in os
    • The panic handler
    • Memory management implementation
    • SBI call wrappers
    • Synchronization and interior mutability primitives
    • Implementation of syscalls
    • Task management implementation
    • RISC-V timer-related functionality
    • Trap handling functionality

    Macros

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/lang_items/fn.panic.html b/ch6-dev/os/lang_items/fn.panic.html index 9bac00ce..1479ac8f 100644 --- a/ch6-dev/os/lang_items/fn.panic.html +++ b/ch6-dev/os/lang_items/fn.panic.html @@ -1,8 +1 @@ -panic in os::lang_items - Rust - -
    -

    Function os::lang_items::panic

    source · []
    fn panic(info: &PanicInfo<'_>) -> !
    - \ No newline at end of file +panic in os::lang_items - Rust

    Function os::lang_items::panic

    source ·
    fn panic(info: &PanicInfo<'_>) -> !
    \ No newline at end of file diff --git a/ch6-dev/os/lang_items/index.html b/ch6-dev/os/lang_items/index.html index b137cf66..b82ab874 100644 --- a/ch6-dev/os/lang_items/index.html +++ b/ch6-dev/os/lang_items/index.html @@ -1,10 +1,2 @@ -os::lang_items - Rust - -
    -

    Module os::lang_items

    source · []
    Expand description

    The panic handler

    -

    Functions

    -
    panic 🔒
    - \ No newline at end of file +os::lang_items - Rust

    Module os::lang_items

    source ·
    Expand description

    The panic handler

    +

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/lang_items/sidebar-items.js b/ch6-dev/os/lang_items/sidebar-items.js index 8ea0dd88..6330d593 100644 --- a/ch6-dev/os/lang_items/sidebar-items.js +++ b/ch6-dev/os/lang_items/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["panic",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["panic"]}; \ No newline at end of file diff --git a/ch6-dev/os/macro.print.html b/ch6-dev/os/macro.print.html index 388f897a..be9fdef8 100644 --- a/ch6-dev/os/macro.print.html +++ b/ch6-dev/os/macro.print.html @@ -1,12 +1,4 @@ -print in os - Rust - -
    -

    Macro os::print

    source · []
    macro_rules! print {
    -    ($fmt: literal $(, $($arg: tt)+)?) => { ... };
    -}
    -
    Expand description

    print string macro

    -
    - \ No newline at end of file +print in os - Rust

    Macro os::print

    source ·
    macro_rules! print {
    +    ($fmt: literal $(, $($arg: tt)+)?) => { ... };
    +}
    Expand description

    print string macro

    +
    \ No newline at end of file diff --git a/ch6-dev/os/macro.println.html b/ch6-dev/os/macro.println.html index 7073f76a..2117ac86 100644 --- a/ch6-dev/os/macro.println.html +++ b/ch6-dev/os/macro.println.html @@ -1,12 +1,4 @@ -println in os - Rust - -
    -

    Macro os::println

    source · []
    macro_rules! println {
    -    ($fmt: literal $(, $($arg: tt)+)?) => { ... };
    -}
    -
    Expand description

    println string macro

    -
    - \ No newline at end of file +println in os - Rust

    Macro os::println

    source ·
    macro_rules! println {
    +    ($fmt: literal $(, $($arg: tt)+)?) => { ... };
    +}
    Expand description

    println string macro

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/constant.PA_WIDTH_SV39.html b/ch6-dev/os/mm/address/constant.PA_WIDTH_SV39.html index 9d084a30..a0b2542b 100644 --- a/ch6-dev/os/mm/address/constant.PA_WIDTH_SV39.html +++ b/ch6-dev/os/mm/address/constant.PA_WIDTH_SV39.html @@ -1,8 +1 @@ -PA_WIDTH_SV39 in os::mm::address - Rust - -
    const PA_WIDTH_SV39: usize = 56;
    - \ No newline at end of file +PA_WIDTH_SV39 in os::mm::address - Rust

    Constant os::mm::address::PA_WIDTH_SV39

    source ·
    const PA_WIDTH_SV39: usize = 56;
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/constant.PPN_WIDTH_SV39.html b/ch6-dev/os/mm/address/constant.PPN_WIDTH_SV39.html index 684a71e7..23c5ffdd 100644 --- a/ch6-dev/os/mm/address/constant.PPN_WIDTH_SV39.html +++ b/ch6-dev/os/mm/address/constant.PPN_WIDTH_SV39.html @@ -1,8 +1 @@ -PPN_WIDTH_SV39 in os::mm::address - Rust - -
    const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS; // 44usize
    - \ No newline at end of file +PPN_WIDTH_SV39 in os::mm::address - Rust

    Constant os::mm::address::PPN_WIDTH_SV39

    source ·
    const PPN_WIDTH_SV39: usize = _; // 44usize
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/constant.VA_WIDTH_SV39.html b/ch6-dev/os/mm/address/constant.VA_WIDTH_SV39.html index ef15067b..f2a5525e 100644 --- a/ch6-dev/os/mm/address/constant.VA_WIDTH_SV39.html +++ b/ch6-dev/os/mm/address/constant.VA_WIDTH_SV39.html @@ -1,8 +1 @@ -VA_WIDTH_SV39 in os::mm::address - Rust - -
    const VA_WIDTH_SV39: usize = 39;
    - \ No newline at end of file +VA_WIDTH_SV39 in os::mm::address - Rust

    Constant os::mm::address::VA_WIDTH_SV39

    source ·
    const VA_WIDTH_SV39: usize = 39;
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/constant.VPN_WIDTH_SV39.html b/ch6-dev/os/mm/address/constant.VPN_WIDTH_SV39.html index 55d91999..b8b1ba49 100644 --- a/ch6-dev/os/mm/address/constant.VPN_WIDTH_SV39.html +++ b/ch6-dev/os/mm/address/constant.VPN_WIDTH_SV39.html @@ -1,8 +1 @@ -VPN_WIDTH_SV39 in os::mm::address - Rust - -
    const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS; // 27usize
    - \ No newline at end of file +VPN_WIDTH_SV39 in os::mm::address - Rust

    Constant os::mm::address::VPN_WIDTH_SV39

    source ·
    const VPN_WIDTH_SV39: usize = _; // 27usize
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/index.html b/ch6-dev/os/mm/address/index.html index 78164824..3c364d27 100644 --- a/ch6-dev/os/mm/address/index.html +++ b/ch6-dev/os/mm/address/index.html @@ -1,21 +1,2 @@ -os::mm::address - Rust - -
    -

    Module os::mm::address

    source · []
    Expand description

    Implementation of physical and virtual address and page number.

    -

    Structs

    -

    Definitions

    -

    phiscal page number

    -

    a simple range structure for type T

    -

    iterator for the simple range structure

    -

    virtual address

    -

    virtual page number

    -

    Constants

    -

    Traits

    -

    Add value by one

    -

    Type Definitions

    -

    a simple range structure for virtual page number

    -
    - \ No newline at end of file +os::mm::address - Rust

    Module os::mm::address

    source ·
    Expand description

    Implementation of physical and virtual address and page number.

    +

    Structs

    Constants

    Traits

    Type Aliases

    • a simple range structure for virtual page number
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/sidebar-items.js b/ch6-dev/os/mm/address/sidebar-items.js index 3720794f..60e19a5a 100644 --- a/ch6-dev/os/mm/address/sidebar-items.js +++ b/ch6-dev/os/mm/address/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["PA_WIDTH_SV39",""],["PPN_WIDTH_SV39",""],["VA_WIDTH_SV39",""],["VPN_WIDTH_SV39",""]],"struct":[["PhysAddr","Definitions"],["PhysPageNum","phiscal page number"],["SimpleRange","a simple range structure for type T"],["SimpleRangeIterator","iterator for the simple range structure"],["VirtAddr","virtual address"],["VirtPageNum","virtual page number"]],"trait":[["StepByOne","Add value by one"]],"type":[["VPNRange","a simple range structure for virtual page number"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["PA_WIDTH_SV39","PPN_WIDTH_SV39","VA_WIDTH_SV39","VPN_WIDTH_SV39"],"struct":["PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","VirtAddr","VirtPageNum"],"trait":["StepByOne"],"type":["VPNRange"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.PhysAddr.html b/ch6-dev/os/mm/address/struct.PhysAddr.html index a7e8fc3c..5016b26d 100644 --- a/ch6-dev/os/mm/address/struct.PhysAddr.html +++ b/ch6-dev/os/mm/address/struct.PhysAddr.html @@ -1,53 +1,29 @@ -PhysAddr in os::mm::address - Rust - -
    -

    Struct os::mm::address::PhysAddr

    source · []
    #[repr(C)]
    pub struct PhysAddr(pub usize);
    Expand description

    Definitions

    -

    Tuple Fields

    0: usize

    Implementations

    PhysAddr->PhysPageNum

    -

    PhysAddr->PhysPageNum

    -

    Get page offset

    -

    Check page aligned

    -

    Get reference to PhysAddr value

    -

    Get mutable reference to PhysAddr value

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum} +PhysAddr in os::mm::address - Rust

    Struct os::mm::address::PhysAddr

    source ·
    #[repr(C)]
    pub struct PhysAddr(pub usize);
    Expand description

    Definitions

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl PhysAddr

    source

    pub fn floor(&self) -> PhysPageNum

    PhysAddr->PhysPageNum

    +
    source

    pub fn ceil(&self) -> PhysPageNum

    PhysAddr->PhysPageNum

    +
    source

    pub fn page_offset(&self) -> usize

    Get page offset

    +
    source

    pub fn aligned(&self) -> bool

    Check page aligned

    +
    source§

    impl PhysAddr

    source

    pub fn get_ref<T>(&self) -> &'static T

    Get reference to PhysAddr value

    +
    source

    pub fn get_mut<T>(&self) -> &'static mut T

    Get mutable reference to PhysAddr value

    +

    Trait Implementations§

    source§

    impl Clone for PhysAddr

    source§

    fn clone(&self) -> PhysAddr

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysAddr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<PhysAddr> for PhysPageNum

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysAddr> for usize

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for PhysAddr

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for PhysAddr

    T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum} T -> usize: T.0 usize -> T: usize.into()

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for PhysAddr

    source§

    fn cmp(&self, other: &PhysAddr) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysAddr> for PhysAddr

    source§

    fn eq(&self, other: &PhysAddr) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysAddr> for PhysAddr

    source§

    fn partial_cmp(&self, other: &PhysAddr) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Copy for PhysAddr

    source§

    impl Eq for PhysAddr

    source§

    impl StructuralEq for PhysAddr

    source§

    impl StructuralPartialEq for PhysAddr

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.PhysPageNum.html b/ch6-dev/os/mm/address/struct.PhysPageNum.html index 6f55cc83..a71244e0 100644 --- a/ch6-dev/os/mm/address/struct.PhysPageNum.html +++ b/ch6-dev/os/mm/address/struct.PhysPageNum.html @@ -1,48 +1,23 @@ -PhysPageNum in os::mm::address - Rust - -
    #[repr(C)]
    pub struct PhysPageNum(pub usize);
    Expand description

    phiscal page number

    -

    Tuple Fields

    0: usize

    Implementations

    Get PageTableEntry on PhysPageNum

    -

    Get u8 array on PhysPageNum

    -

    Get Get mutable reference to PhysAddr value on PhysPageNum

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Add value by one

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +PhysPageNum in os::mm::address - Rust

    Struct os::mm::address::PhysPageNum

    source ·
    #[repr(C)]
    pub struct PhysPageNum(pub usize);
    Expand description

    phiscal page number

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl PhysPageNum

    source

    pub fn get_pte_array(&self) -> &'static mut [PageTableEntry]

    Get PageTableEntry on PhysPageNum

    +
    source

    pub fn get_bytes_array(&self) -> &'static mut [u8]

    Get u8 array on PhysPageNum

    +
    source

    pub fn get_mut<T>(&self) -> &'static mut T

    Get Get mutable reference to PhysAddr value on PhysPageNum

    +

    Trait Implementations§

    source§

    impl Clone for PhysPageNum

    source§

    fn clone(&self) -> PhysPageNum

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysPageNum

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<PhysAddr> for PhysPageNum

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for PhysAddr

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for usize

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for PhysPageNum

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for PhysPageNum

    source§

    fn cmp(&self, other: &PhysPageNum) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysPageNum> for PhysPageNum

    source§

    fn eq(&self, other: &PhysPageNum) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysPageNum> for PhysPageNum

    source§

    fn partial_cmp(&self, other: &PhysPageNum) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl StepByOne for PhysPageNum

    source§

    fn step(&mut self)

    Add value by one
    source§

    impl Copy for PhysPageNum

    source§

    impl Eq for PhysPageNum

    source§

    impl StructuralEq for PhysPageNum

    source§

    impl StructuralPartialEq for PhysPageNum

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.SimpleRange.html b/ch6-dev/os/mm/address/struct.SimpleRange.html index 39937ed9..cf06e451 100644 --- a/ch6-dev/os/mm/address/struct.SimpleRange.html +++ b/ch6-dev/os/mm/address/struct.SimpleRange.html @@ -1,31 +1,26 @@ -SimpleRange in os::mm::address - Rust - -
    pub struct SimpleRange<T> where
        T: StepByOne + Copy + PartialEq + PartialOrd + Debug
    { +SimpleRange in os::mm::address - Rust

    Struct os::mm::address::SimpleRange

    source ·
    pub struct SimpleRange<T>where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,{
         l: T,
         r: T,
    -}
    Expand description

    a simple range structure for type T

    -

    Fields

    l: Tr: T

    Implementations

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    a simple range structure for type T

    +

    Fields§

    §l: T§r: T

    Implementations§

    source§

    impl<T> SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    source

    pub fn new(start: T, end: T) -> Self

    source

    pub fn get_start(&self) -> T

    source

    pub fn get_end(&self) -> T

    Trait Implementations§

    source§

    impl<T> Clone for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Clone,

    source§

    fn clone(&self) -> SimpleRange<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T> IntoIterator for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    §

    type Item = T

    The type of the elements being iterated over.
    §

    type IntoIter = SimpleRangeIterator<T>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<T> Copy for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Copy,

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for SimpleRange<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for SimpleRange<T>where + T: Send,

    §

    impl<T> Sync for SimpleRange<T>where + T: Sync,

    §

    impl<T> Unpin for SimpleRange<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for SimpleRange<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.SimpleRangeIterator.html b/ch6-dev/os/mm/address/struct.SimpleRangeIterator.html index 83edf3dc..bede2469 100644 --- a/ch6-dev/os/mm/address/struct.SimpleRangeIterator.html +++ b/ch6-dev/os/mm/address/struct.SimpleRangeIterator.html @@ -1,138 +1,201 @@ -SimpleRangeIterator in os::mm::address - Rust - -
    pub struct SimpleRangeIterator<T> where
        T: StepByOne + Copy + PartialEq + PartialOrd + Debug
    { +SimpleRangeIterator in os::mm::address - Rust
    pub struct SimpleRangeIterator<T>where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,{
         current: T,
         end: T,
    -}
    Expand description

    iterator for the simple range structure

    -

    Fields

    current: Tend: T

    Implementations

    Trait Implementations

    The type of the elements being iterated over.

    -

    Advances the iterator and returns the next value. Read more

    -

    Returns the bounds on the remaining length of the iterator. Read more

    -

    Consumes the iterator, counting the number of iterations and returning it. Read more

    -

    Consumes the iterator, returning the last element. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_advance_by)

    Advances the iterator by n elements. Read more

    -

    Returns the nth element of the iterator. Read more

    -

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

    -

    Takes two iterators and creates a new iterator over both in sequence. Read more

    -

    ‘Zips up’ two iterators into a single iterator of pairs. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

    -

    Takes a closure and creates an iterator which calls that closure on each -element. Read more

    -

    Calls a closure on each element of an iterator. Read more

    -

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

    -

    Creates an iterator that both filters and maps. Read more

    -

    Creates an iterator which gives the current iteration count as well as -the next value. Read more

    -

    Creates an iterator which can use the peek and peek_mut methods +}

    Expand description

    iterator for the simple range structure

    +

    Fields§

    §current: T§end: T

    Implementations§

    source§

    impl<T> SimpleRangeIterator<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    source

    pub fn new(l: T, r: T) -> Self

    Trait Implementations§

    source§

    impl<T> Iterator for SimpleRangeIterator<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    §

    type Item = T

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( + &mut self +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    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

    -

    Creates an iterator that skips elements based on a predicate. Read more

    -

    Creates an iterator that yields elements based on a predicate. Read more

    -

    Creates an iterator that both yields elements based on a predicate and maps. Read more

    -

    Creates an iterator that skips the first n elements. Read more

    -

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

    -

    An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

    -

    Creates an iterator that works like map, but flattens nested structure. Read more

    -

    Creates an iterator that flattens nested structure. Read more

    -

    Creates an iterator which ends after the first None. Read more

    -

    Does something with each element of an iterator, passing the value on. Read more

    -

    Borrows an iterator, rather than consuming it. Read more

    -

    Transforms an iterator into a collection. Read more

    -
    🔬 This is a nightly-only experimental API. (iterator_try_collect)

    Fallibly transforms an iterator into a collection, short circuiting if -a failure is encountered. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_collect_into)

    Collects all the items from an iterator into a collection. Read more

    -

    Consumes an iterator, creating two collections from it. 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

    -

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

    -

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

    -

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more

    -

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. 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

    -

    Tests if every element of the iterator matches a predicate. Read more

    -

    Tests if any element of the iterator matches a predicate. Read more

    -

    Searches for an element of an iterator that satisfies a predicate. Read more

    -

    Applies function to the elements of iterator and returns -the first non-none result. Read more

    -
    🔬 This is a nightly-only experimental API. (try_find)

    Applies function to the elements of iterator and returns -the first true result or the first error. Read more

    -

    Searches for an element in an iterator, returning its index. Read more

    -

    Searches for an element in an iterator from the right, returning its -index. Read more

    -

    Returns the maximum element of an iterator. Read more

    -

    Returns the minimum element of an iterator. Read more

    -

    Returns the element that gives the maximum value from the -specified function. Read more

    -

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

    -

    Returns the element that gives the minimum value from the -specified function. Read more

    -

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

    -

    Reverses an iterator’s direction. Read more

    -

    Converts an iterator of pairs into a pair of containers. Read more

    -

    Creates an iterator which copies all of its elements. Read more

    -

    Creates an iterator which clones all of its elements. Read more

    -

    Repeats an iterator endlessly. Read more

    -

    Sums the elements of an iterator. Read more

    -

    Iterates over the entire iterator, multiplying all the elements Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Determines if the elements of this Iterator are equal to those of -another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

    -

    Determines if the elements of this Iterator are unequal to those of -another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given comparator function. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬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
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬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
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for SimpleRangeIterator<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for SimpleRangeIterator<T>where + T: Send,

    §

    impl<T> Sync for SimpleRangeIterator<T>where + T: Sync,

    §

    impl<T> Unpin for SimpleRangeIterator<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for SimpleRangeIterator<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.VirtAddr.html b/ch6-dev/os/mm/address/struct.VirtAddr.html index d9c15b48..cbc09e0b 100644 --- a/ch6-dev/os/mm/address/struct.VirtAddr.html +++ b/ch6-dev/os/mm/address/struct.VirtAddr.html @@ -1,49 +1,25 @@ -VirtAddr in os::mm::address - Rust - -
    -

    Struct os::mm::address::VirtAddr

    source · []
    #[repr(C)]
    pub struct VirtAddr(pub usize);
    Expand description

    virtual address

    -

    Tuple Fields

    0: usize

    Implementations

    VirtAddr->VirtPageNum

    -

    VirtAddr->VirtPageNum

    -

    Get page offset

    -

    Check page aligned

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Debugging

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +VirtAddr in os::mm::address - Rust

    Struct os::mm::address::VirtAddr

    source ·
    #[repr(C)]
    pub struct VirtAddr(pub usize);
    Expand description

    virtual address

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl VirtAddr

    source

    pub fn floor(&self) -> VirtPageNum

    VirtAddr->VirtPageNum

    +
    source

    pub fn ceil(&self) -> VirtPageNum

    VirtAddr->VirtPageNum

    +
    source

    pub fn page_offset(&self) -> usize

    Get page offset

    +
    source

    pub fn aligned(&self) -> bool

    Check page aligned

    +

    Trait Implementations§

    source§

    impl Clone for VirtAddr

    source§

    fn clone(&self) -> VirtAddr

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtAddr

    Debugging

    +
    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<VirtAddr> for VirtPageNum

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtAddr> for usize

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for VirtAddr

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for VirtAddr

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for VirtAddr

    source§

    fn cmp(&self, other: &VirtAddr) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtAddr> for VirtAddr

    source§

    fn eq(&self, other: &VirtAddr) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtAddr> for VirtAddr

    source§

    fn partial_cmp(&self, other: &VirtAddr) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Copy for VirtAddr

    source§

    impl Eq for VirtAddr

    source§

    impl StructuralEq for VirtAddr

    source§

    impl StructuralPartialEq for VirtAddr

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/struct.VirtPageNum.html b/ch6-dev/os/mm/address/struct.VirtPageNum.html index f8ad0695..128ba758 100644 --- a/ch6-dev/os/mm/address/struct.VirtPageNum.html +++ b/ch6-dev/os/mm/address/struct.VirtPageNum.html @@ -1,46 +1,21 @@ -VirtPageNum in os::mm::address - Rust - -
    #[repr(C)]
    pub struct VirtPageNum(pub usize);
    Expand description

    virtual page number

    -

    Tuple Fields

    0: usize

    Implementations

    Return VPN 3 level index

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Add value by one

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +VirtPageNum in os::mm::address - Rust

    Struct os::mm::address::VirtPageNum

    source ·
    #[repr(C)]
    pub struct VirtPageNum(pub usize);
    Expand description

    virtual page number

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl VirtPageNum

    source

    pub fn indexes(&self) -> [usize; 3]

    Return VPN 3 level index

    +

    Trait Implementations§

    source§

    impl Clone for VirtPageNum

    source§

    fn clone(&self) -> VirtPageNum

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtPageNum

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<VirtAddr> for VirtPageNum

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for VirtAddr

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for usize

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for VirtPageNum

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for VirtPageNum

    source§

    fn cmp(&self, other: &VirtPageNum) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtPageNum> for VirtPageNum

    source§

    fn eq(&self, other: &VirtPageNum) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtPageNum> for VirtPageNum

    source§

    fn partial_cmp(&self, other: &VirtPageNum) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl StepByOne for VirtPageNum

    source§

    fn step(&mut self)

    Add value by one
    source§

    impl Copy for VirtPageNum

    source§

    impl Eq for VirtPageNum

    source§

    impl StructuralEq for VirtPageNum

    source§

    impl StructuralPartialEq for VirtPageNum

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/trait.StepByOne.html b/ch6-dev/os/mm/address/trait.StepByOne.html index ab9a6788..d85e63b6 100644 --- a/ch6-dev/os/mm/address/trait.StepByOne.html +++ b/ch6-dev/os/mm/address/trait.StepByOne.html @@ -1,12 +1,6 @@ -StepByOne in os::mm::address - Rust - -
    pub trait StepByOne {
    -    fn step(&mut self);
    -}
    Expand description

    Add value by one

    -

    Required methods

    Add value by one

    -

    Implementors

    - \ No newline at end of file +StepByOne in os::mm::address - Rust

    Trait os::mm::address::StepByOne

    source ·
    pub trait StepByOne {
    +    // Required method
    +    fn step(&mut self);
    +}
    Expand description

    Add value by one

    +

    Required Methods§

    source

    fn step(&mut self)

    Add value by one

    +

    Implementors§

    \ No newline at end of file diff --git a/ch6-dev/os/mm/address/type.VPNRange.html b/ch6-dev/os/mm/address/type.VPNRange.html index 661bd7b0..d8996228 100644 --- a/ch6-dev/os/mm/address/type.VPNRange.html +++ b/ch6-dev/os/mm/address/type.VPNRange.html @@ -1,9 +1,9 @@ -VPNRange in os::mm::address - Rust - -
    -

    Type Definition os::mm::address::VPNRange

    source · []
    pub type VPNRange = SimpleRange<VirtPageNum>;
    Expand description

    a simple range structure for virtual page number

    -
    - \ No newline at end of file +VPNRange in os::mm::address - Rust

    Type Alias os::mm::address::VPNRange

    source ·
    pub type VPNRange = SimpleRange<VirtPageNum>;
    Expand description

    a simple range structure for virtual page number

    +

    Aliased Type§

    struct VPNRange {
    +    l: VirtPageNum,
    +    r: VirtPageNum,
    +}

    Fields§

    §l: VirtPageNum§r: VirtPageNum

    Implementations§

    source§

    impl<T> SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    source

    pub fn new(start: T, end: T) -> Self

    source

    pub fn get_start(&self) -> T

    source

    pub fn get_end(&self) -> T

    Trait Implementations§

    source§

    impl<T> Clone for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Clone,

    source§

    fn clone(&self) -> SimpleRange<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T> IntoIterator for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug,

    §

    type Item = T

    The type of the elements being iterated over.
    §

    type IntoIter = SimpleRangeIterator<T>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<T> Copy for SimpleRange<T>where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug + Copy,

    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.frame_alloc.html b/ch6-dev/os/mm/fn.frame_alloc.html index 73a1c8f7..c85dde37 100644 --- a/ch6-dev/os/mm/fn.frame_alloc.html +++ b/ch6-dev/os/mm/fn.frame_alloc.html @@ -1,9 +1,2 @@ -frame_alloc in os::mm - Rust - -
    -

    Function os::mm::frame_alloc

    source · []
    pub fn frame_alloc() -> Option<FrameTracker>
    Expand description

    allocate a frame

    -
    - \ No newline at end of file +frame_alloc in os::mm - Rust

    Function os::mm::frame_alloc

    source ·
    pub fn frame_alloc() -> Option<FrameTracker>
    Expand description

    allocate a frame

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.frame_dealloc.html b/ch6-dev/os/mm/fn.frame_dealloc.html index a5db3dbc..22197ad9 100644 --- a/ch6-dev/os/mm/fn.frame_dealloc.html +++ b/ch6-dev/os/mm/fn.frame_dealloc.html @@ -1,9 +1,2 @@ -frame_dealloc in os::mm - Rust - -
    -

    Function os::mm::frame_dealloc

    source · []
    pub fn frame_dealloc(ppn: PhysPageNum)
    Expand description

    deallocate a frame

    -
    - \ No newline at end of file +frame_dealloc in os::mm - Rust

    Function os::mm::frame_dealloc

    source ·
    pub fn frame_dealloc(ppn: PhysPageNum)
    Expand description

    deallocate a frame

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.init.html b/ch6-dev/os/mm/fn.init.html index d6ed0e74..d4ffa8e4 100644 --- a/ch6-dev/os/mm/fn.init.html +++ b/ch6-dev/os/mm/fn.init.html @@ -1,9 +1,2 @@ -init in os::mm - Rust - -
    -

    Function os::mm::init

    source · []
    pub fn init()
    Expand description

    initiate heap allocator, frame allocator and kernel space

    -
    - \ No newline at end of file +init in os::mm - Rust

    Function os::mm::init

    source ·
    pub fn init()
    Expand description

    initiate heap allocator, frame allocator and kernel space

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.kernel_token.html b/ch6-dev/os/mm/fn.kernel_token.html index adb24c81..1331fde9 100644 --- a/ch6-dev/os/mm/fn.kernel_token.html +++ b/ch6-dev/os/mm/fn.kernel_token.html @@ -1,9 +1,2 @@ -kernel_token in os::mm - Rust - -
    -

    Function os::mm::kernel_token

    source · []
    pub fn kernel_token() -> usize
    Expand description

    Get kernelspace root ppn

    -
    - \ No newline at end of file +kernel_token in os::mm - Rust

    Function os::mm::kernel_token

    source ·
    pub fn kernel_token() -> usize
    Expand description

    Get kernelspace root ppn

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.remap_test.html b/ch6-dev/os/mm/fn.remap_test.html index 65749d20..d702d5f3 100644 --- a/ch6-dev/os/mm/fn.remap_test.html +++ b/ch6-dev/os/mm/fn.remap_test.html @@ -1,9 +1,2 @@ -remap_test in os::mm - Rust - -
    -

    Function os::mm::remap_test

    source · []
    pub fn remap_test()
    Expand description

    Check PageTable running correctly

    -
    - \ No newline at end of file +remap_test in os::mm - Rust

    Function os::mm::remap_test

    source ·
    pub fn remap_test()
    Expand description

    Check PageTable running correctly

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.translated_byte_buffer.html b/ch6-dev/os/mm/fn.translated_byte_buffer.html index e7793a88..68bca0f3 100644 --- a/ch6-dev/os/mm/fn.translated_byte_buffer.html +++ b/ch6-dev/os/mm/fn.translated_byte_buffer.html @@ -1,9 +1,6 @@ -translated_byte_buffer in os::mm - Rust - -
    pub fn translated_byte_buffer(
        token: usize,
        ptr: *const u8,
        len: usize
    ) -> Vec<&'static mut [u8]>
    Expand description

    Translate a pointer to a mutable u8 Vec through page table

    -
    - \ No newline at end of file +translated_byte_buffer in os::mm - Rust

    Function os::mm::translated_byte_buffer

    source ·
    pub fn translated_byte_buffer(
    +    token: usize,
    +    ptr: *const u8,
    +    len: usize
    +) -> Vec<&'static mut [u8]>
    Expand description

    Translate a pointer to a mutable u8 Vec through page table

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.translated_ref.html b/ch6-dev/os/mm/fn.translated_ref.html index 8af3221b..a916d993 100644 --- a/ch6-dev/os/mm/fn.translated_ref.html +++ b/ch6-dev/os/mm/fn.translated_ref.html @@ -1,9 +1,2 @@ -translated_ref in os::mm - Rust - -
    -

    Function os::mm::translated_ref

    source · []
    pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
    Expand description

    Translate a generic through page table and return a reference

    -
    - \ No newline at end of file +translated_ref in os::mm - Rust

    Function os::mm::translated_ref

    source ·
    pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
    Expand description

    Translate a generic through page table and return a reference

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.translated_refmut.html b/ch6-dev/os/mm/fn.translated_refmut.html index d0da9b3f..48b872b2 100644 --- a/ch6-dev/os/mm/fn.translated_refmut.html +++ b/ch6-dev/os/mm/fn.translated_refmut.html @@ -1,9 +1,2 @@ -translated_refmut in os::mm - Rust - -
    pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
    Expand description

    Translate a generic through page table and return a mutable reference

    -
    - \ No newline at end of file +translated_refmut in os::mm - Rust

    Function os::mm::translated_refmut

    source ·
    pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
    Expand description

    Translate a generic through page table and return a mutable reference

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/fn.translated_str.html b/ch6-dev/os/mm/fn.translated_str.html index 30720e8a..dcfc7f13 100644 --- a/ch6-dev/os/mm/fn.translated_str.html +++ b/ch6-dev/os/mm/fn.translated_str.html @@ -1,9 +1,2 @@ -translated_str in os::mm - Rust - -
    -

    Function os::mm::translated_str

    source · []
    pub fn translated_str(token: usize, ptr: *const u8) -> String
    Expand description

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    -
    - \ No newline at end of file +translated_str in os::mm - Rust

    Function os::mm::translated_str

    source ·
    pub fn translated_str(token: usize, ptr: *const u8) -> String
    Expand description

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/fn.frame_alloc.html b/ch6-dev/os/mm/frame_allocator/fn.frame_alloc.html index b8a61125..b611ff59 100644 --- a/ch6-dev/os/mm/frame_allocator/fn.frame_alloc.html +++ b/ch6-dev/os/mm/frame_allocator/fn.frame_alloc.html @@ -1,9 +1,2 @@ -frame_alloc in os::mm::frame_allocator - Rust - -
    pub fn frame_alloc() -> Option<FrameTracker>
    Expand description

    allocate a frame

    -
    - \ No newline at end of file +frame_alloc in os::mm::frame_allocator - Rust

    Function os::mm::frame_allocator::frame_alloc

    source ·
    pub fn frame_alloc() -> Option<FrameTracker>
    Expand description

    allocate a frame

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/fn.frame_allocator_test.html b/ch6-dev/os/mm/frame_allocator/fn.frame_allocator_test.html index 5ebf4e9a..e4ebf6de 100644 --- a/ch6-dev/os/mm/frame_allocator/fn.frame_allocator_test.html +++ b/ch6-dev/os/mm/frame_allocator/fn.frame_allocator_test.html @@ -1,9 +1,2 @@ -frame_allocator_test in os::mm::frame_allocator - Rust - -
    pub fn frame_allocator_test()
    Expand description

    a simple test for frame allocator

    -
    - \ No newline at end of file +frame_allocator_test in os::mm::frame_allocator - Rust
    pub fn frame_allocator_test()
    Expand description

    a simple test for frame allocator

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/fn.frame_dealloc.html b/ch6-dev/os/mm/frame_allocator/fn.frame_dealloc.html index 4389f7d2..1adef62b 100644 --- a/ch6-dev/os/mm/frame_allocator/fn.frame_dealloc.html +++ b/ch6-dev/os/mm/frame_allocator/fn.frame_dealloc.html @@ -1,9 +1,2 @@ -frame_dealloc in os::mm::frame_allocator - Rust - -
    pub fn frame_dealloc(ppn: PhysPageNum)
    Expand description

    deallocate a frame

    -
    - \ No newline at end of file +frame_dealloc in os::mm::frame_allocator - Rust
    pub fn frame_dealloc(ppn: PhysPageNum)
    Expand description

    deallocate a frame

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/fn.init_frame_allocator.html b/ch6-dev/os/mm/frame_allocator/fn.init_frame_allocator.html index b853fd2a..bb1fde60 100644 --- a/ch6-dev/os/mm/frame_allocator/fn.init_frame_allocator.html +++ b/ch6-dev/os/mm/frame_allocator/fn.init_frame_allocator.html @@ -1,9 +1,2 @@ -init_frame_allocator in os::mm::frame_allocator - Rust - -
    pub fn init_frame_allocator()
    Expand description

    initiate the frame allocator using ekernel and MEMORY_END

    -
    - \ No newline at end of file +init_frame_allocator in os::mm::frame_allocator - Rust
    pub fn init_frame_allocator()
    Expand description

    initiate the frame allocator using ekernel and MEMORY_END

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/index.html b/ch6-dev/os/mm/frame_allocator/index.html index 617a2ab4..8079d692 100644 --- a/ch6-dev/os/mm/frame_allocator/index.html +++ b/ch6-dev/os/mm/frame_allocator/index.html @@ -1,21 +1,3 @@ -os::mm::frame_allocator - Rust - -
    Expand description

    Implementation of FrameAllocator which +os::mm::frame_allocator - Rust

    Module os::mm::frame_allocator

    source ·
    Expand description

    Implementation of FrameAllocator which controls all the frames in the operating system.

    -

    Structs

    -

    frame allocator instance through lazy_static!

    -

    manage a frame which has the same lifecycle as the tracker

    -

    an implementation for frame allocator

    -

    Traits

    -

    Functions

    -

    allocate a frame

    -

    a simple test for frame allocator

    -

    deallocate a frame

    -

    initiate the frame allocator using ekernel and MEMORY_END

    -

    Type Definitions

    -
    - \ No newline at end of file +

    Structs

    Traits

    Functions

    Type Aliases

    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/sidebar-items.js b/ch6-dev/os/mm/frame_allocator/sidebar-items.js index 91a50bd8..be15c50b 100644 --- a/ch6-dev/os/mm/frame_allocator/sidebar-items.js +++ b/ch6-dev/os/mm/frame_allocator/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["frame_alloc","allocate a frame"],["frame_allocator_test","a simple test for frame allocator"],["frame_dealloc","deallocate a frame"],["init_frame_allocator","initiate the frame allocator using `ekernel` and `MEMORY_END`"]],"struct":[["FRAME_ALLOCATOR","frame allocator instance through lazy_static!"],["FrameTracker","manage a frame which has the same lifecycle as the tracker"],["StackFrameAllocator","an implementation for frame allocator"]],"trait":[["FrameAllocator",""]],"type":[["FrameAllocatorImpl",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["frame_alloc","frame_allocator_test","frame_dealloc","init_frame_allocator"],"struct":["FRAME_ALLOCATOR","FrameTracker","StackFrameAllocator"],"trait":["FrameAllocator"],"type":["FrameAllocatorImpl"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html b/ch6-dev/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html index 7c0d41f9..6ed6db7e 100644 --- a/ch6-dev/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html +++ b/ch6-dev/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html @@ -1,25 +1,15 @@ -FRAME_ALLOCATOR in os::mm::frame_allocator - Rust - -
    pub struct FRAME_ALLOCATOR {
    +FRAME_ALLOCATOR in os::mm::frame_allocator - Rust
    pub struct FRAME_ALLOCATOR {
         __private_field: (),
    -}
    Expand description

    frame allocator instance through lazy_static!

    -

    Fields

    __private_field: ()

    Methods from Deref<Target = UPSafeCell<StackFrameAllocator>>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    frame allocator instance through lazy_static!

    +

    Fields§

    §__private_field: ()

    Methods from Deref<Target = UPSafeCell<StackFrameAllocator>>§

    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl Deref for FRAME_ALLOCATOR

    §

    type Target = UPSafeCell<StackFrameAllocator>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &UPSafeCell<StackFrameAllocator>

    Dereferences the value.
    source§

    impl LazyStatic for FRAME_ALLOCATOR

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/struct.FrameTracker.html b/ch6-dev/os/mm/frame_allocator/struct.FrameTracker.html index 6805929a..bfbc576a 100644 --- a/ch6-dev/os/mm/frame_allocator/struct.FrameTracker.html +++ b/ch6-dev/os/mm/frame_allocator/struct.FrameTracker.html @@ -1,25 +1,15 @@ -FrameTracker in os::mm::frame_allocator - Rust - -
    pub struct FrameTracker {
    +FrameTracker in os::mm::frame_allocator - Rust
    pub struct FrameTracker {
         pub ppn: PhysPageNum,
    -}
    Expand description

    manage a frame which has the same lifecycle as the tracker

    -

    Fields

    ppn: PhysPageNum

    Implementations

    Create an empty FrameTracker

    -

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    manage a frame which has the same lifecycle as the tracker

    +

    Fields§

    §ppn: PhysPageNum

    Implementations§

    source§

    impl FrameTracker

    source

    pub fn new(ppn: PhysPageNum) -> Self

    Create an empty FrameTracker

    +

    Trait Implementations§

    source§

    impl Debug for FrameTracker

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Drop for FrameTracker

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/struct.StackFrameAllocator.html b/ch6-dev/os/mm/frame_allocator/struct.StackFrameAllocator.html index 7d776232..935b87bd 100644 --- a/ch6-dev/os/mm/frame_allocator/struct.StackFrameAllocator.html +++ b/ch6-dev/os/mm/frame_allocator/struct.StackFrameAllocator.html @@ -1,24 +1,16 @@ -StackFrameAllocator in os::mm::frame_allocator - Rust - -
    pub struct StackFrameAllocator {
    +StackFrameAllocator in os::mm::frame_allocator - Rust
    pub struct StackFrameAllocator {
         current: usize,
         end: usize,
         recycled: Vec<usize>,
    -}
    Expand description

    an implementation for frame allocator

    -

    Fields

    current: usizeend: usizerecycled: Vec<usize>

    Implementations

    Trait Implementations

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    an implementation for frame allocator

    +

    Fields§

    §current: usize§end: usize§recycled: Vec<usize>

    Implementations§

    Trait Implementations§

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/trait.FrameAllocator.html b/ch6-dev/os/mm/frame_allocator/trait.FrameAllocator.html index 72c2c9fb..28041a23 100644 --- a/ch6-dev/os/mm/frame_allocator/trait.FrameAllocator.html +++ b/ch6-dev/os/mm/frame_allocator/trait.FrameAllocator.html @@ -1,12 +1,6 @@ -FrameAllocator in os::mm::frame_allocator - Rust - -
    trait FrameAllocator {
    -    fn new() -> Self;
    -    fn alloc(&mut self) -> Option<PhysPageNum>;
    -    fn dealloc(&mut self, ppn: PhysPageNum);
    -}

    Required methods

    Implementors

    - \ No newline at end of file +FrameAllocator in os::mm::frame_allocator - Rust
    trait FrameAllocator {
    +    // Required methods
    +    fn new() -> Self;
    +    fn alloc(&mut self) -> Option<PhysPageNum>;
    +    fn dealloc(&mut self, ppn: PhysPageNum);
    +}

    Required Methods§

    source

    fn new() -> Self

    source

    fn alloc(&mut self) -> Option<PhysPageNum>

    source

    fn dealloc(&mut self, ppn: PhysPageNum)

    Implementors§

    \ No newline at end of file diff --git a/ch6-dev/os/mm/frame_allocator/type.FrameAllocatorImpl.html b/ch6-dev/os/mm/frame_allocator/type.FrameAllocatorImpl.html index 8e266eda..235bf775 100644 --- a/ch6-dev/os/mm/frame_allocator/type.FrameAllocatorImpl.html +++ b/ch6-dev/os/mm/frame_allocator/type.FrameAllocatorImpl.html @@ -1,8 +1,5 @@ -FrameAllocatorImpl in os::mm::frame_allocator - Rust - -
    type FrameAllocatorImpl = StackFrameAllocator;
    - \ No newline at end of file +FrameAllocatorImpl in os::mm::frame_allocator - Rust
    type FrameAllocatorImpl = StackFrameAllocator;

    Aliased Type§

    struct FrameAllocatorImpl {
    +    current: usize,
    +    end: usize,
    +    recycled: Vec<usize, Global>,
    +}

    Fields§

    §current: usize§end: usize§recycled: Vec<usize, Global>

    Implementations§

    Trait Implementations§

    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/fn.handle_alloc_error.html b/ch6-dev/os/mm/heap_allocator/fn.handle_alloc_error.html index 601c4266..6bb35dfb 100644 --- a/ch6-dev/os/mm/heap_allocator/fn.handle_alloc_error.html +++ b/ch6-dev/os/mm/heap_allocator/fn.handle_alloc_error.html @@ -1,9 +1,2 @@ -handle_alloc_error in os::mm::heap_allocator - Rust - -
    pub fn handle_alloc_error(layout: Layout) -> !
    Expand description

    panic when heap allocation error occurs

    -
    - \ No newline at end of file +handle_alloc_error in os::mm::heap_allocator - Rust
    pub fn handle_alloc_error(layout: Layout) -> !
    Expand description

    panic when heap allocation error occurs

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/fn.heap_test.html b/ch6-dev/os/mm/heap_allocator/fn.heap_test.html index ce7ad454..5de05955 100644 --- a/ch6-dev/os/mm/heap_allocator/fn.heap_test.html +++ b/ch6-dev/os/mm/heap_allocator/fn.heap_test.html @@ -1,8 +1 @@ -heap_test in os::mm::heap_allocator - Rust - -
    pub fn heap_test()
    - \ No newline at end of file +heap_test in os::mm::heap_allocator - Rust

    Function os::mm::heap_allocator::heap_test

    source ·
    pub fn heap_test()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/fn.init_heap.html b/ch6-dev/os/mm/heap_allocator/fn.init_heap.html index 21e3ec41..03da3c6e 100644 --- a/ch6-dev/os/mm/heap_allocator/fn.init_heap.html +++ b/ch6-dev/os/mm/heap_allocator/fn.init_heap.html @@ -1,9 +1,2 @@ -init_heap in os::mm::heap_allocator - Rust - -
    pub fn init_heap()
    Expand description

    initiate heap allocator

    -
    - \ No newline at end of file +init_heap in os::mm::heap_allocator - Rust

    Function os::mm::heap_allocator::init_heap

    source ·
    pub fn init_heap()
    Expand description

    initiate heap allocator

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/index.html b/ch6-dev/os/mm/heap_allocator/index.html index 43eafb33..e99493c8 100644 --- a/ch6-dev/os/mm/heap_allocator/index.html +++ b/ch6-dev/os/mm/heap_allocator/index.html @@ -1,15 +1,2 @@ -os::mm::heap_allocator - Rust - -
    Expand description

    The global allocator

    -

    Statics

    -

    heap allocator instance

    -
    HEAP_SPACE 🔒

    heap space ([u8; KERNEL_HEAP_SIZE])

    -

    Functions

    -

    panic when heap allocation error occurs

    -

    initiate heap allocator

    -
    - \ No newline at end of file +os::mm::heap_allocator - Rust

    Module os::mm::heap_allocator

    source ·
    Expand description

    The global allocator

    +

    Statics

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/sidebar-items.js b/ch6-dev/os/mm/heap_allocator/sidebar-items.js index a400d729..d5956da4 100644 --- a/ch6-dev/os/mm/heap_allocator/sidebar-items.js +++ b/ch6-dev/os/mm/heap_allocator/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["handle_alloc_error","panic when heap allocation error occurs"],["heap_test",""],["init_heap","initiate heap allocator"]],"static":[["HEAP_ALLOCATOR","heap allocator instance"],["HEAP_SPACE","heap space ([u8; KERNEL_HEAP_SIZE])"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["handle_alloc_error","heap_test","init_heap"],"static":["HEAP_ALLOCATOR","HEAP_SPACE"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html b/ch6-dev/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html index 4703f7e9..3761e118 100644 --- a/ch6-dev/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html +++ b/ch6-dev/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html @@ -1,9 +1,2 @@ -HEAP_ALLOCATOR in os::mm::heap_allocator - Rust - -
    static HEAP_ALLOCATOR: LockedHeap
    Expand description

    heap allocator instance

    -
    - \ No newline at end of file +HEAP_ALLOCATOR in os::mm::heap_allocator - Rust
    static HEAP_ALLOCATOR: LockedHeap
    Expand description

    heap allocator instance

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/heap_allocator/static.HEAP_SPACE.html b/ch6-dev/os/mm/heap_allocator/static.HEAP_SPACE.html index 208ea6c3..1d6274fc 100644 --- a/ch6-dev/os/mm/heap_allocator/static.HEAP_SPACE.html +++ b/ch6-dev/os/mm/heap_allocator/static.HEAP_SPACE.html @@ -1,9 +1,2 @@ -HEAP_SPACE in os::mm::heap_allocator - Rust - -
    static mut HEAP_SPACE: [u8; 2097152]
    Expand description

    heap space ([u8; KERNEL_HEAP_SIZE])

    -
    - \ No newline at end of file +HEAP_SPACE in os::mm::heap_allocator - Rust
    static mut HEAP_SPACE: [u8; 2097152]
    Expand description

    heap space ([u8; KERNEL_HEAP_SIZE])

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/index.html b/ch6-dev/os/mm/index.html index 2a979111..6a41b891 100644 --- a/ch6-dev/os/mm/index.html +++ b/ch6-dev/os/mm/index.html @@ -1,45 +1,7 @@ -os::mm - Rust - -
    -

    Module os::mm

    source · []
    Expand description

    Memory management implementation

    +os::mm - Rust

    Module os::mm

    source ·
    Expand description

    Memory management implementation

    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.

    -

    Modules

    -
    address 🔒

    Implementation of physical and virtual address and page number.

    -

    Implementation of FrameAllocator which -controls all the frames in the operating system.

    -

    The global allocator

    -
    memory_set 🔒

    Implementation of MapArea and MemorySet.

    -
    page_table 🔒

    Implementation of PageTableEntry and PageTable.

    -

    Structs

    -

    manage a frame which has the same lifecycle as the tracker

    -

    a memory set instance through lazy_static! managing kernel space

    -

    map permission corresponding to that in pte: R W X U

    -

    memory set structure, controls virtual-memory space

    -

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    -

    page table entry structure

    -

    Definitions

    -

    phiscal page number

    -

    Array of u8 slice that user communicate with os

    -

    Iterator of UserBuffer

    -

    virtual address

    -

    virtual page number

    -

    Traits

    -

    Add value by one

    -

    Functions

    -

    allocate a frame

    -

    deallocate a frame

    -

    initiate heap allocator, frame allocator and kernel space

    -

    Get kernelspace root ppn

    -

    Check PageTable running correctly

    -

    Translate a pointer to a mutable u8 Vec through page table

    -

    Translate a generic through page table and return a reference

    -

    Translate a generic through page table and return a mutable reference

    -

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    -
    - \ No newline at end of file +

    Re-exports

    • pub use memory_set::KERNEL_SPACE;
    • pub use memory_set::KERNEL_SPACE;

    Modules

    Structs

    Traits

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/enum.MapType.html b/ch6-dev/os/mm/memory_set/enum.MapType.html index a1aac0d3..ead33624 100644 --- a/ch6-dev/os/mm/memory_set/enum.MapType.html +++ b/ch6-dev/os/mm/memory_set/enum.MapType.html @@ -1,32 +1,18 @@ -MapType in os::mm::memory_set - Rust - -
    pub enum MapType {
    +MapType in os::mm::memory_set - Rust

    Enum os::mm::memory_set::MapType

    source ·
    pub enum MapType {
         Identical,
         Framed,
    -}
    Expand description

    map type for memory set: identical or framed

    -

    Variants

    Identical

    Framed

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    map type for memory set: identical or framed

    +

    Variants§

    §

    Identical

    §

    Framed

    Trait Implementations§

    source§

    impl Clone for MapType

    source§

    fn clone(&self) -> MapType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MapType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<MapType> for MapType

    source§

    fn eq(&self, other: &MapType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Copy for MapType

    source§

    impl StructuralPartialEq for MapType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.ebss.html b/ch6-dev/os/mm/memory_set/fn.ebss.html index 3eb32d69..2b13c3d5 100644 --- a/ch6-dev/os/mm/memory_set/fn.ebss.html +++ b/ch6-dev/os/mm/memory_set/fn.ebss.html @@ -1,8 +1 @@ -ebss in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::ebss

    source · []
    unsafe extern "C" fn ebss()
    - \ No newline at end of file +ebss in os::mm::memory_set - Rust

    Function os::mm::memory_set::ebss

    source ·
    unsafe extern "C" fn ebss()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.edata.html b/ch6-dev/os/mm/memory_set/fn.edata.html index b4fb932e..6692613e 100644 --- a/ch6-dev/os/mm/memory_set/fn.edata.html +++ b/ch6-dev/os/mm/memory_set/fn.edata.html @@ -1,8 +1 @@ -edata in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::edata

    source · []
    unsafe extern "C" fn edata()
    - \ No newline at end of file +edata in os::mm::memory_set - Rust

    Function os::mm::memory_set::edata

    source ·
    unsafe extern "C" fn edata()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.ekernel.html b/ch6-dev/os/mm/memory_set/fn.ekernel.html index aeba8924..776a8212 100644 --- a/ch6-dev/os/mm/memory_set/fn.ekernel.html +++ b/ch6-dev/os/mm/memory_set/fn.ekernel.html @@ -1,8 +1 @@ -ekernel in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::ekernel

    source · []
    unsafe extern "C" fn ekernel()
    - \ No newline at end of file +ekernel in os::mm::memory_set - Rust

    Function os::mm::memory_set::ekernel

    source ·
    unsafe extern "C" fn ekernel()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.erodata.html b/ch6-dev/os/mm/memory_set/fn.erodata.html index 4519e0dd..59b2a302 100644 --- a/ch6-dev/os/mm/memory_set/fn.erodata.html +++ b/ch6-dev/os/mm/memory_set/fn.erodata.html @@ -1,8 +1 @@ -erodata in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::erodata

    source · []
    unsafe extern "C" fn erodata()
    - \ No newline at end of file +erodata in os::mm::memory_set - Rust

    Function os::mm::memory_set::erodata

    source ·
    unsafe extern "C" fn erodata()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.etext.html b/ch6-dev/os/mm/memory_set/fn.etext.html index c9a582bc..ea098077 100644 --- a/ch6-dev/os/mm/memory_set/fn.etext.html +++ b/ch6-dev/os/mm/memory_set/fn.etext.html @@ -1,8 +1 @@ -etext in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::etext

    source · []
    unsafe extern "C" fn etext()
    - \ No newline at end of file +etext in os::mm::memory_set - Rust

    Function os::mm::memory_set::etext

    source ·
    unsafe extern "C" fn etext()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.kernel_token.html b/ch6-dev/os/mm/memory_set/fn.kernel_token.html index 8786146a..36bb223f 100644 --- a/ch6-dev/os/mm/memory_set/fn.kernel_token.html +++ b/ch6-dev/os/mm/memory_set/fn.kernel_token.html @@ -1,9 +1,2 @@ -kernel_token in os::mm::memory_set - Rust - -
    pub fn kernel_token() -> usize
    Expand description

    Get kernelspace root ppn

    -
    - \ No newline at end of file +kernel_token in os::mm::memory_set - Rust

    Function os::mm::memory_set::kernel_token

    source ·
    pub fn kernel_token() -> usize
    Expand description

    Get kernelspace root ppn

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.remap_test.html b/ch6-dev/os/mm/memory_set/fn.remap_test.html index 725c8191..a9a10b2c 100644 --- a/ch6-dev/os/mm/memory_set/fn.remap_test.html +++ b/ch6-dev/os/mm/memory_set/fn.remap_test.html @@ -1,9 +1,2 @@ -remap_test in os::mm::memory_set - Rust - -
    pub fn remap_test()
    Expand description

    Check PageTable running correctly

    -
    - \ No newline at end of file +remap_test in os::mm::memory_set - Rust

    Function os::mm::memory_set::remap_test

    source ·
    pub fn remap_test()
    Expand description

    Check PageTable running correctly

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.sbss_with_stack.html b/ch6-dev/os/mm/memory_set/fn.sbss_with_stack.html index 08d429d8..aa9603cd 100644 --- a/ch6-dev/os/mm/memory_set/fn.sbss_with_stack.html +++ b/ch6-dev/os/mm/memory_set/fn.sbss_with_stack.html @@ -1,8 +1 @@ -sbss_with_stack in os::mm::memory_set - Rust - -
    unsafe extern "C" fn sbss_with_stack()
    - \ No newline at end of file +sbss_with_stack in os::mm::memory_set - Rust

    Function os::mm::memory_set::sbss_with_stack

    source ·
    unsafe extern "C" fn sbss_with_stack()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.sdata.html b/ch6-dev/os/mm/memory_set/fn.sdata.html index a8cd42d7..f57910fc 100644 --- a/ch6-dev/os/mm/memory_set/fn.sdata.html +++ b/ch6-dev/os/mm/memory_set/fn.sdata.html @@ -1,8 +1 @@ -sdata in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::sdata

    source · []
    unsafe extern "C" fn sdata()
    - \ No newline at end of file +sdata in os::mm::memory_set - Rust

    Function os::mm::memory_set::sdata

    source ·
    unsafe extern "C" fn sdata()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.srodata.html b/ch6-dev/os/mm/memory_set/fn.srodata.html index 1dee6349..04b75488 100644 --- a/ch6-dev/os/mm/memory_set/fn.srodata.html +++ b/ch6-dev/os/mm/memory_set/fn.srodata.html @@ -1,8 +1 @@ -srodata in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::srodata

    source · []
    unsafe extern "C" fn srodata()
    - \ No newline at end of file +srodata in os::mm::memory_set - Rust

    Function os::mm::memory_set::srodata

    source ·
    unsafe extern "C" fn srodata()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.stext.html b/ch6-dev/os/mm/memory_set/fn.stext.html index cecb13ad..7d72ec3a 100644 --- a/ch6-dev/os/mm/memory_set/fn.stext.html +++ b/ch6-dev/os/mm/memory_set/fn.stext.html @@ -1,8 +1 @@ -stext in os::mm::memory_set - Rust - -
    -

    Function os::mm::memory_set::stext

    source · []
    unsafe extern "C" fn stext()
    - \ No newline at end of file +stext in os::mm::memory_set - Rust

    Function os::mm::memory_set::stext

    source ·
    unsafe extern "C" fn stext()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/fn.strampoline.html b/ch6-dev/os/mm/memory_set/fn.strampoline.html index b967e3d1..fb5dd69d 100644 --- a/ch6-dev/os/mm/memory_set/fn.strampoline.html +++ b/ch6-dev/os/mm/memory_set/fn.strampoline.html @@ -1,8 +1 @@ -strampoline in os::mm::memory_set - Rust - -
    unsafe extern "C" fn strampoline()
    - \ No newline at end of file +strampoline in os::mm::memory_set - Rust

    Function os::mm::memory_set::strampoline

    source ·
    unsafe extern "C" fn strampoline()
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/index.html b/ch6-dev/os/mm/memory_set/index.html index 07149455..3e878055 100644 --- a/ch6-dev/os/mm/memory_set/index.html +++ b/ch6-dev/os/mm/memory_set/index.html @@ -1,19 +1,2 @@ -os::mm::memory_set - Rust - -
    -

    Module os::mm::memory_set

    source · []
    Expand description

    Implementation of MapArea and MemorySet.

    -

    Structs

    -

    a memory set instance through lazy_static! managing kernel space

    -

    map area structure, controls a contiguous piece of virtual memory

    -

    map permission corresponding to that in pte: R W X U

    -

    memory set structure, controls virtual-memory space

    -

    Enums

    -

    map type for memory set: identical or framed

    -

    Functions

    -
    ebss 🔒
    edata 🔒
    ekernel 🔒
    erodata 🔒
    etext 🔒

    Get kernelspace root ppn

    -

    Check PageTable running correctly

    -
    sdata 🔒
    srodata 🔒
    stext 🔒
    - \ No newline at end of file +os::mm::memory_set - Rust

    Module os::mm::memory_set

    source ·
    Expand description

    Implementation of MapArea and MemorySet.

    +

    Structs

    • a memory set instance through lazy_static! managing kernel space
    • map area structure, controls a contiguous piece of virtual memory
    • map permission corresponding to that in pte: R W X U
    • memory set structure, controls virtual-memory space

    Enums

    • map type for memory set: identical or framed

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/sidebar-items.js b/ch6-dev/os/mm/memory_set/sidebar-items.js index df595325..1135b439 100644 --- a/ch6-dev/os/mm/memory_set/sidebar-items.js +++ b/ch6-dev/os/mm/memory_set/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["MapType","map type for memory set: identical or framed"]],"fn":[["ebss",""],["edata",""],["ekernel",""],["erodata",""],["etext",""],["kernel_token","Get kernelspace root ppn"],["remap_test","Check PageTable running correctly"],["sbss_with_stack",""],["sdata",""],["srodata",""],["stext",""],["strampoline",""]],"struct":[["KERNEL_SPACE","a memory set instance through lazy_static! managing kernel space"],["MapArea","map area structure, controls a contiguous piece of virtual memory"],["MapPermission","map permission corresponding to that in pte: `R W X U`"],["MemorySet","memory set structure, controls virtual-memory space"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["MapType"],"fn":["ebss","edata","ekernel","erodata","etext","kernel_token","remap_test","sbss_with_stack","sdata","srodata","stext","strampoline"],"struct":["KERNEL_SPACE","MapArea","MapPermission","MemorySet"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/struct.KERNEL_SPACE.html b/ch6-dev/os/mm/memory_set/struct.KERNEL_SPACE.html index 42381bc8..df99208f 100644 --- a/ch6-dev/os/mm/memory_set/struct.KERNEL_SPACE.html +++ b/ch6-dev/os/mm/memory_set/struct.KERNEL_SPACE.html @@ -1,24 +1,14 @@ -KERNEL_SPACE in os::mm::memory_set - Rust - -
    pub struct KERNEL_SPACE {
    +KERNEL_SPACE in os::mm::memory_set - Rust

    Struct os::mm::memory_set::KERNEL_SPACE

    source ·
    pub struct KERNEL_SPACE {
         __private_field: (),
    -}
    Expand description

    a memory set instance through lazy_static! managing kernel space

    -

    Fields

    __private_field: ()

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    a memory set instance through lazy_static! managing kernel space

    +

    Fields§

    §__private_field: ()

    Trait Implementations§

    source§

    impl Deref for KERNEL_SPACE

    §

    type Target = Arc<UPSafeCell<MemorySet>, Global>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Arc<UPSafeCell<MemorySet>>

    Dereferences the value.
    source§

    impl LazyStatic for KERNEL_SPACE

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/struct.MapArea.html b/ch6-dev/os/mm/memory_set/struct.MapArea.html index 30f6a47e..4b7d2d93 100644 --- a/ch6-dev/os/mm/memory_set/struct.MapArea.html +++ b/ch6-dev/os/mm/memory_set/struct.MapArea.html @@ -1,27 +1,24 @@ -MapArea in os::mm::memory_set - Rust - -
    pub struct MapArea {
    +MapArea in os::mm::memory_set - Rust

    Struct os::mm::memory_set::MapArea

    source ·
    pub struct MapArea {
         vpn_range: SimpleRange<VirtPageNum>,
         data_frames: BTreeMap<VirtPageNum, FrameTracker>,
         map_type: MapType,
         map_perm: MapPermission,
    -}
    Expand description

    map area structure, controls a contiguous piece of virtual memory

    -

    Fields

    vpn_range: SimpleRange<VirtPageNum>data_frames: BTreeMap<VirtPageNum, FrameTracker>map_type: MapTypemap_perm: MapPermission

    Implementations

    data: start-aligned but maybe with shorter length +}

    Expand description

    map area structure, controls a contiguous piece of virtual memory

    +

    Fields§

    §vpn_range: SimpleRange<VirtPageNum>§data_frames: BTreeMap<VirtPageNum, FrameTracker>§map_type: MapType§map_perm: MapPermission

    Implementations§

    source§

    impl MapArea

    source

    pub fn new( + start_va: VirtAddr, + end_va: VirtAddr, + map_type: MapType, + map_perm: MapPermission +) -> Self

    source

    pub fn from_another(another: &MapArea) -> Self

    source

    pub fn map_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum)

    source

    pub fn unmap_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum)

    source

    pub fn map(&mut self, page_table: &mut PageTable)

    source

    pub fn unmap(&mut self, page_table: &mut PageTable)

    source

    pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8])

    data: start-aligned but maybe with shorter length assume that all frames were cleared before

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/struct.MapPermission.html b/ch6-dev/os/mm/memory_set/struct.MapPermission.html index b04f2284..c5456c45 100644 --- a/ch6-dev/os/mm/memory_set/struct.MapPermission.html +++ b/ch6-dev/os/mm/memory_set/struct.MapPermission.html @@ -1,24 +1,18 @@ -MapPermission in os::mm::memory_set - Rust - -
    pub struct MapPermission {
    +MapPermission in os::mm::memory_set - Rust

    Struct os::mm::memory_set::MapPermission

    source ·
    pub struct MapPermission {
         bits: u8,
    -}
    Expand description

    map permission corresponding to that in pte: R W X U

    -

    Fields

    bits: u8

    Implementations

    Readable

    -

    Writable

    -

    Excutable

    -

    Accessible in U mode

    -

    Returns an empty set of flags.

    -

    Returns the set containing all flags.

    -

    Returns the raw value of the flags currently stored.

    -

    Convert from underlying bit representation, unless that +}

    Expand description

    map permission corresponding to that in pte: R W X U

    +

    Fields§

    §bits: u8

    Implementations§

    source§

    impl MapPermission

    source

    pub const R: Self = _

    Readable

    +
    source

    pub const W: Self = _

    Writable

    +
    source

    pub const X: Self = _

    Excutable

    +
    source

    pub const U: Self = _

    Accessible in U mode

    +
    source

    pub const fn empty() -> Self

    Returns an empty set of flags.

    +
    source

    pub const fn all() -> Self

    Returns the set containing all flags.

    +
    source

    pub const fn bits(&self) -> u8

    Returns the raw value of the flags currently stored.

    +
    source

    pub const fn from_bits(bits: u8) -> Option<Self>

    Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

    -

    Convert from underlying bit representation, dropping any bits +

    source

    pub const fn from_bits_truncate(bits: u8) -> Self

    Convert from underlying bit representation, dropping any bits that do not correspond to flags.

    -

    Convert from underlying bit representation, preserving all +

    source

    pub const unsafe fn from_bits_unchecked(bits: u8) -> Self

    Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

    Safety

    The caller of the bitflags! macro can chose to allow or @@ -26,35 +20,35 @@ disallow extra bits for their bitflags type.

    The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

    -

    Returns true if no flags are currently stored.

    -

    Returns true if all flags are currently set.

    -

    Returns true if there are flags common to both self and other.

    -

    Returns true if all of the flags in other are contained within self.

    -

    Inserts the specified flags in-place.

    -

    Removes the specified flags in-place.

    -

    Toggles the specified flags in-place.

    -

    Inserts or removes the specified flags depending on the passed value.

    -

    Returns the intersection between the flags in self and +

    source

    pub const fn is_empty(&self) -> bool

    Returns true if no flags are currently stored.

    +
    source

    pub const fn is_all(&self) -> bool

    Returns true if all flags are currently set.

    +
    source

    pub const fn intersects(&self, other: Self) -> bool

    Returns true if there are flags common to both self and other.

    +
    source

    pub const fn contains(&self, other: Self) -> bool

    Returns true if all of the flags in other are contained within self.

    +
    source

    pub fn insert(&mut self, other: Self)

    Inserts the specified flags in-place.

    +
    source

    pub fn remove(&mut self, other: Self)

    Removes the specified flags in-place.

    +
    source

    pub fn toggle(&mut self, other: Self)

    Toggles the specified flags in-place.

    +
    source

    pub fn set(&mut self, other: Self, value: bool)

    Inserts or removes the specified flags depending on the passed value.

    +
    source

    pub const fn intersection(self, other: Self) -> Self

    Returns the intersection between the flags in self and other.

    Specifically, the returned set contains only the flags which are present in both self and other.

    This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

    -

    Returns the union of between the flags in self and other.

    +
    source

    pub const fn union(self, other: Self) -> Self

    Returns the union of between the flags in self and other.

    Specifically, the returned set contains all flags which are present in either self or other, including any which are -present in both (see Self::symmetric_difference if that +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.

    -

    Returns the difference between the flags in self and other.

    +
    source

    pub const fn difference(self, other: Self) -> Self

    Returns the difference between the flags in self and other.

    Specifically, the returned set contains all flags present in self, except for the ones present in other.

    It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

    This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

    -

    Returns the symmetric difference between the flags +

    source

    pub const fn symmetric_difference(self, other: Self) -> Self

    Returns the symmetric difference between the flags in self and other.

    Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -62,67 +56,40 @@ 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.

    -

    Returns the complement of this set of flags.

    +
    source

    pub const fn complement(self) -> Self

    Returns the complement of this set of flags.

    Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

    Alternatively, it can be thought of as the set difference -between Self::all() and self (e.g. Self::all() - self)

    +between Self::all() and self (e.g. Self::all() - self)

    This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

    -

    Trait Implementations

    Formats the value using the given formatter.

    -

    Returns the intersection between the two sets of flags.

    -

    The resulting type after applying the & operator.

    -

    Disables all flags disabled in the set.

    -

    Returns the union of the two sets of flags.

    -

    The resulting type after applying the | operator.

    -

    Adds the set of flags.

    -

    Returns the left flags, but with all the right flags toggled.

    -

    The resulting type after applying the ^ operator.

    -

    Toggles the set of flags.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Extends a collection with the contents of an iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Extends a collection with exactly one element.

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Reserves capacity in a collection for the given number of additional elements. Read more

    -

    Creates a value from an iterator. Read more

    -

    Feeds this value into the given Hasher. Read more

    -

    Feeds a slice of this type into the given Hasher. Read more

    -

    Formats the value using the given formatter.

    -

    Returns the complement of this set of flags.

    -

    The resulting type after applying the ! operator.

    -

    Formats the value using the given formatter.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Returns the set difference of the two sets of flags.

    -

    The resulting type after applying the - operator.

    -

    Disables all flags enabled in the set.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Binary for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<MapPermission> for MapPermission

    source§

    fn bitand(self, other: Self) -> Self

    Returns the intersection between the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the & operator.
    source§

    impl BitAndAssign<MapPermission> for MapPermission

    source§

    fn bitand_assign(&mut self, other: Self)

    Disables all flags disabled in the set.

    +
    source§

    impl BitOr<MapPermission> for MapPermission

    source§

    fn bitor(self, other: MapPermission) -> Self

    Returns the union of the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the | operator.
    source§

    impl BitOrAssign<MapPermission> for MapPermission

    source§

    fn bitor_assign(&mut self, other: Self)

    Adds the set of flags.

    +
    source§

    impl BitXor<MapPermission> for MapPermission

    source§

    fn bitxor(self, other: Self) -> Self

    Returns the left flags, but with all the right flags toggled.

    +
    §

    type Output = MapPermission

    The resulting type after applying the ^ operator.
    source§

    impl BitXorAssign<MapPermission> for MapPermission

    source§

    fn bitxor_assign(&mut self, other: Self)

    Toggles the set of flags.

    +
    source§

    impl Clone for MapPermission

    source§

    fn clone(&self) -> MapPermission

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Extend<MapPermission> for MapPermission

    source§

    fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    source§

    impl FromIterator<MapPermission> for MapPermission

    source§

    fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Hash for MapPermission

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Not for MapPermission

    source§

    fn not(self) -> Self

    Returns the complement of this set of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the ! operator.
    source§

    impl Octal for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for MapPermission

    source§

    fn cmp(&self, other: &MapPermission) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<MapPermission> for MapPermission

    source§

    fn eq(&self, other: &MapPermission) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<MapPermission> for MapPermission

    source§

    fn partial_cmp(&self, other: &MapPermission) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Sub<MapPermission> for MapPermission

    source§

    fn sub(self, other: Self) -> Self

    Returns the set difference of the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the - operator.
    source§

    impl SubAssign<MapPermission> for MapPermission

    source§

    fn sub_assign(&mut self, other: Self)

    Disables all flags enabled in the set.

    +
    source§

    impl UpperHex for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for MapPermission

    source§

    impl Eq for MapPermission

    source§

    impl StructuralEq for MapPermission

    source§

    impl StructuralPartialEq for MapPermission

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/memory_set/struct.MemorySet.html b/ch6-dev/os/mm/memory_set/struct.MemorySet.html index 31400927..0acd1810 100644 --- a/ch6-dev/os/mm/memory_set/struct.MemorySet.html +++ b/ch6-dev/os/mm/memory_set/struct.MemorySet.html @@ -1,35 +1,32 @@ -MemorySet in os::mm::memory_set - Rust - -
    pub struct MemorySet {
    +MemorySet in os::mm::memory_set - Rust

    Struct os::mm::memory_set::MemorySet

    source ·
    pub struct MemorySet {
         page_table: PageTable,
         areas: Vec<MapArea>,
    -}
    Expand description

    memory set structure, controls virtual-memory space

    -

    Fields

    page_table: PageTableareas: Vec<MapArea>

    Implementations

    Create an empty MemorySet

    -

    Get pagetable root_ppn

    -

    Assume that no conflicts.

    -

    Remove MapArea that starts with start_vpn

    -

    Mention that trampoline is not collected by areas.

    -

    Without kernel stacks.

    -

    Include sections in elf and trampoline and TrapContext and user stack, +}

    Expand description

    memory set structure, controls virtual-memory space

    +

    Fields§

    §page_table: PageTable§areas: Vec<MapArea>

    Implementations§

    source§

    impl MemorySet

    source

    pub fn new_bare() -> Self

    Create an empty MemorySet

    +
    source

    pub fn token(&self) -> usize

    Get pagetable root_ppn

    +
    source

    pub fn insert_framed_area( + &mut self, + start_va: VirtAddr, + end_va: VirtAddr, + permission: MapPermission +)

    Assume that no conflicts.

    +
    source

    pub fn remove_area_with_start_vpn(&mut self, start_vpn: VirtPageNum)

    Remove MapArea that starts with start_vpn

    +
    source

    fn push(&mut self, map_area: MapArea, data: Option<&[u8]>)

    source

    fn map_trampoline(&mut self)

    Mention that trampoline is not collected by areas.

    +
    source

    pub fn new_kernel() -> Self

    Without kernel stacks.

    +
    source

    pub fn from_elf(elf_data: &[u8]) -> (Self, usize, usize)

    Include sections in elf and trampoline and TrapContext and user stack, also returns user_sp and entry point.

    -

    Clone a same MemorySet

    -

    Refresh TLB with sfence.vma

    -

    Translate throuth pagetable

    -

    Remove all MapArea

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source

    pub fn from_existed_user(user_space: &MemorySet) -> MemorySet

    Clone a same MemorySet

    +
    source

    pub fn activate(&self)

    Refresh TLB with sfence.vma

    +
    source

    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry>

    Translate throuth pagetable

    +
    source

    pub fn recycle_data_pages(&mut self)

    Remove all MapArea

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/fn.translated_byte_buffer.html b/ch6-dev/os/mm/page_table/fn.translated_byte_buffer.html index 81d23fd4..ecdb88c5 100644 --- a/ch6-dev/os/mm/page_table/fn.translated_byte_buffer.html +++ b/ch6-dev/os/mm/page_table/fn.translated_byte_buffer.html @@ -1,9 +1,6 @@ -translated_byte_buffer in os::mm::page_table - Rust - -
    pub fn translated_byte_buffer(
        token: usize,
        ptr: *const u8,
        len: usize
    ) -> Vec<&'static mut [u8]>
    Expand description

    Translate a pointer to a mutable u8 Vec through page table

    -
    - \ No newline at end of file +translated_byte_buffer in os::mm::page_table - Rust
    pub fn translated_byte_buffer(
    +    token: usize,
    +    ptr: *const u8,
    +    len: usize
    +) -> Vec<&'static mut [u8]>
    Expand description

    Translate a pointer to a mutable u8 Vec through page table

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/fn.translated_ref.html b/ch6-dev/os/mm/page_table/fn.translated_ref.html index 6f39eb11..e47591e3 100644 --- a/ch6-dev/os/mm/page_table/fn.translated_ref.html +++ b/ch6-dev/os/mm/page_table/fn.translated_ref.html @@ -1,9 +1,2 @@ -translated_ref in os::mm::page_table - Rust - -
    pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
    Expand description

    Translate a generic through page table and return a reference

    -
    - \ No newline at end of file +translated_ref in os::mm::page_table - Rust

    Function os::mm::page_table::translated_ref

    source ·
    pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
    Expand description

    Translate a generic through page table and return a reference

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/fn.translated_refmut.html b/ch6-dev/os/mm/page_table/fn.translated_refmut.html index 61f08833..3ccc440f 100644 --- a/ch6-dev/os/mm/page_table/fn.translated_refmut.html +++ b/ch6-dev/os/mm/page_table/fn.translated_refmut.html @@ -1,9 +1,2 @@ -translated_refmut in os::mm::page_table - Rust - -
    pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
    Expand description

    Translate a generic through page table and return a mutable reference

    -
    - \ No newline at end of file +translated_refmut in os::mm::page_table - Rust
    pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
    Expand description

    Translate a generic through page table and return a mutable reference

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/fn.translated_str.html b/ch6-dev/os/mm/page_table/fn.translated_str.html index de71305f..66e1332d 100644 --- a/ch6-dev/os/mm/page_table/fn.translated_str.html +++ b/ch6-dev/os/mm/page_table/fn.translated_str.html @@ -1,9 +1,2 @@ -translated_str in os::mm::page_table - Rust - -
    pub fn translated_str(token: usize, ptr: *const u8) -> String
    Expand description

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    -
    - \ No newline at end of file +translated_str in os::mm::page_table - Rust

    Function os::mm::page_table::translated_str

    source ·
    pub fn translated_str(token: usize, ptr: *const u8) -> String
    Expand description

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    +
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/index.html b/ch6-dev/os/mm/page_table/index.html index 3f2012a4..6448fe19 100644 --- a/ch6-dev/os/mm/page_table/index.html +++ b/ch6-dev/os/mm/page_table/index.html @@ -1,19 +1,2 @@ -os::mm::page_table - Rust - -
    -

    Module os::mm::page_table

    source · []
    Expand description

    Implementation of PageTableEntry and PageTable.

    -

    Structs

    -

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    -

    page table entry structure

    -

    Array of u8 slice that user communicate with os

    -

    Iterator of UserBuffer

    -

    Functions

    -

    Translate a pointer to a mutable u8 Vec through page table

    -

    Translate a generic through page table and return a reference

    -

    Translate a generic through page table and return a mutable reference

    -

    Translate a pointer to a mutable u8 Vec end with \0 through page table to a String

    -
    - \ No newline at end of file +os::mm::page_table - Rust

    Module os::mm::page_table

    source ·
    Expand description

    Implementation of PageTableEntry and PageTable.

    +

    Structs

    Functions

    • Translate a pointer to a mutable u8 Vec through page table
    • Translate a generic through page table and return a reference
    • Translate a generic through page table and return a mutable reference
    • Translate a pointer to a mutable u8 Vec end with \0 through page table to a String
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/sidebar-items.js b/ch6-dev/os/mm/page_table/sidebar-items.js index 2a99da52..fa3e7d68 100644 --- a/ch6-dev/os/mm/page_table/sidebar-items.js +++ b/ch6-dev/os/mm/page_table/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["translated_byte_buffer","Translate a pointer to a mutable u8 Vec through page table"],["translated_ref","Translate a generic through page table and return a reference"],["translated_refmut","Translate a generic through page table and return a mutable reference"],["translated_str","Translate a pointer to a mutable u8 Vec end with `\\0` through page table to a `String`"]],"struct":[["PTEFlags",""],["PageTable","Record root ppn and has the same lifetime as 1 and 2 level `PageTableEntry`"],["PageTableEntry","page table entry structure"],["UserBuffer","Array of u8 slice that user communicate with os"],["UserBufferIterator","Iterator of `UserBuffer`"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["translated_byte_buffer","translated_ref","translated_refmut","translated_str"],"struct":["PTEFlags","PageTable","PageTableEntry","UserBuffer","UserBufferIterator"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/struct.PTEFlags.html b/ch6-dev/os/mm/page_table/struct.PTEFlags.html index 06eff429..adc69682 100644 --- a/ch6-dev/os/mm/page_table/struct.PTEFlags.html +++ b/ch6-dev/os/mm/page_table/struct.PTEFlags.html @@ -1,19 +1,13 @@ -PTEFlags in os::mm::page_table - Rust - -
    pub struct PTEFlags {
    +PTEFlags in os::mm::page_table - Rust

    Struct os::mm::page_table::PTEFlags

    source ·
    pub struct PTEFlags {
         bits: u8,
    -}

    Fields

    bits: u8

    Implementations

    Returns an empty set of flags.

    -

    Returns the set containing all flags.

    -

    Returns the raw value of the flags currently stored.

    -

    Convert from underlying bit representation, unless that +}

    Fields§

    §bits: u8

    Implementations§

    source§

    impl PTEFlags

    source

    pub const V: Self = _

    source

    pub const R: Self = _

    source

    pub const W: Self = _

    source

    pub const X: Self = _

    source

    pub const U: Self = _

    source

    pub const G: Self = _

    source

    pub const A: Self = _

    source

    pub const D: Self = _

    source

    pub const fn empty() -> Self

    Returns an empty set of flags.

    +
    source

    pub const fn all() -> Self

    Returns the set containing all flags.

    +
    source

    pub const fn bits(&self) -> u8

    Returns the raw value of the flags currently stored.

    +
    source

    pub const fn from_bits(bits: u8) -> Option<Self>

    Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

    -

    Convert from underlying bit representation, dropping any bits +

    source

    pub const fn from_bits_truncate(bits: u8) -> Self

    Convert from underlying bit representation, dropping any bits that do not correspond to flags.

    -

    Convert from underlying bit representation, preserving all +

    source

    pub const unsafe fn from_bits_unchecked(bits: u8) -> Self

    Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

    Safety

    The caller of the bitflags! macro can chose to allow or @@ -21,35 +15,35 @@ disallow extra bits for their bitflags type.

    The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

    -

    Returns true if no flags are currently stored.

    -

    Returns true if all flags are currently set.

    -

    Returns true if there are flags common to both self and other.

    -

    Returns true if all of the flags in other are contained within self.

    -

    Inserts the specified flags in-place.

    -

    Removes the specified flags in-place.

    -

    Toggles the specified flags in-place.

    -

    Inserts or removes the specified flags depending on the passed value.

    -

    Returns the intersection between the flags in self and +

    source

    pub const fn is_empty(&self) -> bool

    Returns true if no flags are currently stored.

    +
    source

    pub const fn is_all(&self) -> bool

    Returns true if all flags are currently set.

    +
    source

    pub const fn intersects(&self, other: Self) -> bool

    Returns true if there are flags common to both self and other.

    +
    source

    pub const fn contains(&self, other: Self) -> bool

    Returns true if all of the flags in other are contained within self.

    +
    source

    pub fn insert(&mut self, other: Self)

    Inserts the specified flags in-place.

    +
    source

    pub fn remove(&mut self, other: Self)

    Removes the specified flags in-place.

    +
    source

    pub fn toggle(&mut self, other: Self)

    Toggles the specified flags in-place.

    +
    source

    pub fn set(&mut self, other: Self, value: bool)

    Inserts or removes the specified flags depending on the passed value.

    +
    source

    pub const fn intersection(self, other: Self) -> Self

    Returns the intersection between the flags in self and other.

    Specifically, the returned set contains only the flags which are present in both self and other.

    This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

    -

    Returns the union of between the flags in self and other.

    +
    source

    pub const fn union(self, other: Self) -> Self

    Returns the union of between the flags in self and other.

    Specifically, the returned set contains all flags which are present in either self or other, including any which are -present in both (see Self::symmetric_difference if that +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.

    -

    Returns the difference between the flags in self and other.

    +
    source

    pub const fn difference(self, other: Self) -> Self

    Returns the difference between the flags in self and other.

    Specifically, the returned set contains all flags present in self, except for the ones present in other.

    It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

    This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

    -

    Returns the symmetric difference between the flags +

    source

    pub const fn symmetric_difference(self, other: Self) -> Self

    Returns the symmetric difference between the flags in self and other.

    Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -57,67 +51,40 @@ 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.

    -

    Returns the complement of this set of flags.

    +
    source

    pub const fn complement(self) -> Self

    Returns the complement of this set of flags.

    Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

    Alternatively, it can be thought of as the set difference -between Self::all() and self (e.g. Self::all() - self)

    +between Self::all() and self (e.g. Self::all() - self)

    This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

    -

    Trait Implementations

    Formats the value using the given formatter.

    -

    Returns the intersection between the two sets of flags.

    -

    The resulting type after applying the & operator.

    -

    Disables all flags disabled in the set.

    -

    Returns the union of the two sets of flags.

    -

    The resulting type after applying the | operator.

    -

    Adds the set of flags.

    -

    Returns the left flags, but with all the right flags toggled.

    -

    The resulting type after applying the ^ operator.

    -

    Toggles the set of flags.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Extends a collection with the contents of an iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Extends a collection with exactly one element.

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Reserves capacity in a collection for the given number of additional elements. Read more

    -

    Creates a value from an iterator. Read more

    -

    Feeds this value into the given Hasher. Read more

    -

    Feeds a slice of this type into the given Hasher. Read more

    -

    Formats the value using the given formatter.

    -

    Returns the complement of this set of flags.

    -

    The resulting type after applying the ! operator.

    -

    Formats the value using the given formatter.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Returns the set difference of the two sets of flags.

    -

    The resulting type after applying the - operator.

    -

    Disables all flags enabled in the set.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Binary for PTEFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<PTEFlags> for PTEFlags

    source§

    fn bitand(self, other: Self) -> Self

    Returns the intersection between the two sets of flags.

    +
    §

    type Output = PTEFlags

    The resulting type after applying the & operator.
    source§

    impl BitAndAssign<PTEFlags> for PTEFlags

    source§

    fn bitand_assign(&mut self, other: Self)

    Disables all flags disabled in the set.

    +
    source§

    impl BitOr<PTEFlags> for PTEFlags

    source§

    fn bitor(self, other: PTEFlags) -> Self

    Returns the union of the two sets of flags.

    +
    §

    type Output = PTEFlags

    The resulting type after applying the | operator.
    source§

    impl BitOrAssign<PTEFlags> for PTEFlags

    source§

    fn bitor_assign(&mut self, other: Self)

    Adds the set of flags.

    +
    source§

    impl BitXor<PTEFlags> for PTEFlags

    source§

    fn bitxor(self, other: Self) -> Self

    Returns the left flags, but with all the right flags toggled.

    +
    §

    type Output = PTEFlags

    The resulting type after applying the ^ operator.
    source§

    impl BitXorAssign<PTEFlags> for PTEFlags

    source§

    fn bitxor_assign(&mut self, other: Self)

    Toggles the set of flags.

    +
    source§

    impl Clone for PTEFlags

    source§

    fn clone(&self) -> PTEFlags

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PTEFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Extend<PTEFlags> for PTEFlags

    source§

    fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    source§

    impl FromIterator<PTEFlags> for PTEFlags

    source§

    fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Hash for PTEFlags

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for PTEFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Not for PTEFlags

    source§

    fn not(self) -> Self

    Returns the complement of this set of flags.

    +
    §

    type Output = PTEFlags

    The resulting type after applying the ! operator.
    source§

    impl Octal for PTEFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for PTEFlags

    source§

    fn cmp(&self, other: &PTEFlags) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PTEFlags> for PTEFlags

    source§

    fn eq(&self, other: &PTEFlags) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PTEFlags> for PTEFlags

    source§

    fn partial_cmp(&self, other: &PTEFlags) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Sub<PTEFlags> for PTEFlags

    source§

    fn sub(self, other: Self) -> Self

    Returns the set difference of the two sets of flags.

    +
    §

    type Output = PTEFlags

    The resulting type after applying the - operator.
    source§

    impl SubAssign<PTEFlags> for PTEFlags

    source§

    fn sub_assign(&mut self, other: Self)

    Disables all flags enabled in the set.

    +
    source§

    impl UpperHex for PTEFlags

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for PTEFlags

    source§

    impl Eq for PTEFlags

    source§

    impl StructuralEq for PTEFlags

    source§

    impl StructuralPartialEq for PTEFlags

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/struct.PageTable.html b/ch6-dev/os/mm/page_table/struct.PageTable.html index ef2cffe6..ac58ab20 100644 --- a/ch6-dev/os/mm/page_table/struct.PageTable.html +++ b/ch6-dev/os/mm/page_table/struct.PageTable.html @@ -1,33 +1,25 @@ -PageTable in os::mm::page_table - Rust - -
    pub struct PageTable {
    +PageTable in os::mm::page_table - Rust

    Struct os::mm::page_table::PageTable

    source ·
    pub struct PageTable {
         root_ppn: PhysPageNum,
         frames: Vec<FrameTracker>,
    -}
    Expand description

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    -

    Fields

    root_ppn: PhysPageNumframes: Vec<FrameTracker>

    Implementations

    Assume that it won’t oom when creating/mapping.

    -

    Create an empty PageTable

    -

    Temporarily used to get arguments from user space.

    -

    Find phsical address by virtual address, create a frame if not exist

    -

    Find phsical address by virtual address

    -

    Create a mapping form vpn to ppn

    -

    Delete a mapping form vpn

    -

    Translate VirtPageNum to PageTableEntry

    -

    Translate VirtAddr to PhysAddr

    -

    Get root ppn

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    +

    Fields§

    §root_ppn: PhysPageNum§frames: Vec<FrameTracker>

    Implementations§

    source§

    impl PageTable

    Assume that it won’t oom when creating/mapping.

    +
    source

    pub fn new() -> Self

    Create an empty PageTable

    +
    source

    pub fn from_token(satp: usize) -> Self

    Temporarily used to get arguments from user space.

    +
    source

    fn find_pte_create(&mut self, vpn: VirtPageNum) -> Option<&mut PageTableEntry>

    Find phsical address by virtual address, create a frame if not exist

    +
    source

    fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry>

    Find phsical address by virtual address

    +
    source

    pub fn map(&mut self, vpn: VirtPageNum, ppn: PhysPageNum, flags: PTEFlags)

    Create a mapping form vpn to ppn

    +
    source

    pub fn unmap(&mut self, vpn: VirtPageNum)

    Delete a mapping form vpn

    +
    source

    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry>

    Translate VirtPageNum to PageTableEntry

    +
    source

    pub fn translate_va(&self, va: VirtAddr) -> Option<PhysAddr>

    Translate VirtAddr to PhysAddr

    +
    source

    pub fn token(&self) -> usize

    Get root ppn

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/struct.PageTableEntry.html b/ch6-dev/os/mm/page_table/struct.PageTableEntry.html index 6169b126..dae19078 100644 --- a/ch6-dev/os/mm/page_table/struct.PageTableEntry.html +++ b/ch6-dev/os/mm/page_table/struct.PageTableEntry.html @@ -1,36 +1,24 @@ -PageTableEntry in os::mm::page_table - Rust - -
    #[repr(C)]
    pub struct PageTableEntry { +PageTableEntry in os::mm::page_table - Rust
    #[repr(C)]
    pub struct PageTableEntry { pub bits: usize, -}
    Expand description

    page table entry structure

    -

    Fields

    bits: usize

    PTE

    -

    Implementations

    Create a PTE from ppn

    -

    Return an empty PTE

    -

    Return 44bit ppn

    -

    Return 10bit flag

    -

    Check PTE valid

    -

    Check PTE readable

    -

    Check PTE writable

    -

    Check PTE executable

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    page table entry structure

    +

    Fields§

    §bits: usize

    PTE

    +

    Implementations§

    source§

    impl PageTableEntry

    source

    pub fn new(ppn: PhysPageNum, flags: PTEFlags) -> Self

    Create a PTE from ppn

    +
    source

    pub fn empty() -> Self

    Return an empty PTE

    +
    source

    pub fn ppn(&self) -> PhysPageNum

    Return 44bit ppn

    +
    source

    pub fn flags(&self) -> PTEFlags

    Return 10bit flag

    +
    source

    pub fn is_valid(&self) -> bool

    Check PTE valid

    +
    source

    pub fn readable(&self) -> bool

    Check PTE readable

    +
    source

    pub fn writable(&self) -> bool

    Check PTE writable

    +
    source

    pub fn executable(&self) -> bool

    Check PTE executable

    +

    Trait Implementations§

    source§

    impl Clone for PageTableEntry

    source§

    fn clone(&self) -> PageTableEntry

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Copy for PageTableEntry

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/struct.UserBuffer.html b/ch6-dev/os/mm/page_table/struct.UserBuffer.html index 0931a9b8..eff51f89 100644 --- a/ch6-dev/os/mm/page_table/struct.UserBuffer.html +++ b/ch6-dev/os/mm/page_table/struct.UserBuffer.html @@ -1,28 +1,17 @@ -UserBuffer in os::mm::page_table - Rust - -
    pub struct UserBuffer {
    -    pub buffers: Vec<&'static mut [u8]>,
    -}
    Expand description

    Array of u8 slice that user communicate with os

    -

    Fields

    buffers: Vec<&'static mut [u8]>

    U8 vec

    -

    Implementations

    Create a UserBuffer by parameter

    -

    Length of UserBuffer

    -

    Trait Implementations

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +UserBuffer in os::mm::page_table - Rust

    Struct os::mm::page_table::UserBuffer

    source ·
    pub struct UserBuffer {
    +    pub buffers: Vec<&'static mut [u8]>,
    +}
    Expand description

    Array of u8 slice that user communicate with os

    +

    Fields§

    §buffers: Vec<&'static mut [u8]>

    U8 vec

    +

    Implementations§

    source§

    impl UserBuffer

    source

    pub fn new(buffers: Vec<&'static mut [u8]>) -> Self

    Create a UserBuffer by parameter

    +
    source

    pub fn len(&self) -> usize

    Length of UserBuffer

    +

    Trait Implementations§

    source§

    impl IntoIterator for UserBuffer

    §

    type Item = *mut u8

    The type of the elements being iterated over.
    §

    type IntoIter = UserBufferIterator

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/page_table/struct.UserBufferIterator.html b/ch6-dev/os/mm/page_table/struct.UserBufferIterator.html index 3518db5e..3435d370 100644 --- a/ch6-dev/os/mm/page_table/struct.UserBufferIterator.html +++ b/ch6-dev/os/mm/page_table/struct.UserBufferIterator.html @@ -1,139 +1,207 @@ -UserBufferIterator in os::mm::page_table - Rust - -
    pub struct UserBufferIterator {
    -    buffers: Vec<&'static mut [u8]>,
    +UserBufferIterator in os::mm::page_table - Rust
    pub struct UserBufferIterator {
    +    buffers: Vec<&'static mut [u8]>,
         current_buffer: usize,
         current_idx: usize,
    -}
    Expand description

    Iterator of UserBuffer

    -

    Fields

    buffers: Vec<&'static mut [u8]>current_buffer: usizecurrent_idx: usize

    Trait Implementations

    The type of the elements being iterated over.

    -

    Advances the iterator and returns the next value. Read more

    -

    Returns the bounds on the remaining length of the iterator. Read more

    -

    Consumes the iterator, counting the number of iterations and returning it. Read more

    -

    Consumes the iterator, returning the last element. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_advance_by)

    Advances the iterator by n elements. Read more

    -

    Returns the nth element of the iterator. Read more

    -

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

    -

    Takes two iterators and creates a new iterator over both in sequence. Read more

    -

    ‘Zips up’ two iterators into a single iterator of pairs. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

    -

    Takes a closure and creates an iterator which calls that closure on each -element. Read more

    -

    Calls a closure on each element of an iterator. Read more

    -

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

    -

    Creates an iterator that both filters and maps. Read more

    -

    Creates an iterator which gives the current iteration count as well as -the next value. Read more

    -

    Creates an iterator which can use the peek and peek_mut methods +}

    Expand description

    Iterator of UserBuffer

    +

    Fields§

    §buffers: Vec<&'static mut [u8]>§current_buffer: usize§current_idx: usize

    Trait Implementations§

    source§

    impl Iterator for UserBufferIterator

    §

    type Item = *mut u8

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( + &mut self +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where + Self: Sized, + Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    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

    -

    Creates an iterator that skips elements based on a predicate. Read more

    -

    Creates an iterator that yields elements based on a predicate. Read more

    -

    Creates an iterator that both yields elements based on a predicate and maps. Read more

    -

    Creates an iterator that skips the first n elements. Read more

    -

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

    -

    An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

    -

    Creates an iterator that works like map, but flattens nested structure. Read more

    -

    Creates an iterator that flattens nested structure. Read more

    -

    Creates an iterator which ends after the first None. Read more

    -

    Does something with each element of an iterator, passing the value on. Read more

    -

    Borrows an iterator, rather than consuming it. Read more

    -

    Transforms an iterator into a collection. Read more

    -
    🔬 This is a nightly-only experimental API. (iterator_try_collect)

    Fallibly transforms an iterator into a collection, short circuiting if -a failure is encountered. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_collect_into)

    Collects all the items from an iterator into a collection. Read more

    -

    Consumes an iterator, creating two collections from it. 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

    -

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

    -

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

    -

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more

    -

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. 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

    -

    Tests if every element of the iterator matches a predicate. Read more

    -

    Tests if any element of the iterator matches a predicate. Read more

    -

    Searches for an element of an iterator that satisfies a predicate. Read more

    -

    Applies function to the elements of iterator and returns -the first non-none result. Read more

    -
    🔬 This is a nightly-only experimental API. (try_find)

    Applies function to the elements of iterator and returns -the first true result or the first error. Read more

    -

    Searches for an element in an iterator, returning its index. Read more

    -

    Searches for an element in an iterator from the right, returning its -index. Read more

    -

    Returns the maximum element of an iterator. Read more

    -

    Returns the minimum element of an iterator. Read more

    -

    Returns the element that gives the maximum value from the -specified function. Read more

    -

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

    -

    Returns the element that gives the minimum value from the -specified function. Read more

    -

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

    -

    Reverses an iterator’s direction. Read more

    -

    Converts an iterator of pairs into a pair of containers. Read more

    -

    Creates an iterator which copies all of its elements. Read more

    -

    Creates an iterator which clones all of its elements. Read more

    -

    Repeats an iterator endlessly. Read more

    -

    Sums the elements of an iterator. Read more

    -

    Iterates over the entire iterator, multiplying all the elements Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Determines if the elements of this Iterator are equal to those of -another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

    -

    Determines if the elements of this Iterator are unequal to those of -another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given comparator function. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬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
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬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
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

    Lexicographically compares the elements of this Iterator with those +of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/sidebar-items.js b/ch6-dev/os/mm/sidebar-items.js index 78a50caa..0d2091b9 100644 --- a/ch6-dev/os/mm/sidebar-items.js +++ b/ch6-dev/os/mm/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["frame_alloc","allocate a frame"],["frame_dealloc","deallocate a frame"],["init","initiate heap allocator, frame allocator and kernel space"],["kernel_token","Get kernelspace root ppn"],["remap_test","Check PageTable running correctly"],["translated_byte_buffer","Translate a pointer to a mutable u8 Vec through page table"],["translated_ref","Translate a generic through page table and return a reference"],["translated_refmut","Translate a generic through page table and return a mutable reference"],["translated_str","Translate a pointer to a mutable u8 Vec end with `\\0` through page table to a `String`"]],"mod":[["address","Implementation of physical and virtual address and page number."],["frame_allocator","Implementation of [`FrameAllocator`] which controls all the frames in the operating system."],["heap_allocator","The global allocator"],["memory_set","Implementation of [`MapArea`] and [`MemorySet`]."],["page_table","Implementation of [`PageTableEntry`] and [`PageTable`]."]],"struct":[["FrameTracker","manage a frame which has the same lifecycle as the tracker"],["KERNEL_SPACE","a memory set instance through lazy_static! managing kernel space"],["MapPermission","map permission corresponding to that in pte: `R W X U`"],["MemorySet","memory set structure, controls virtual-memory space"],["PageTable","Record root ppn and has the same lifetime as 1 and 2 level `PageTableEntry`"],["PageTableEntry","page table entry structure"],["PhysAddr","Definitions"],["PhysPageNum","phiscal page number"],["UserBuffer","Array of u8 slice that user communicate with os"],["UserBufferIterator","Iterator of `UserBuffer`"],["VirtAddr","virtual address"],["VirtPageNum","virtual page number"]],"trait":[["StepByOne","Add value by one"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["frame_alloc","frame_dealloc","init","kernel_token","remap_test","translated_byte_buffer","translated_ref","translated_refmut","translated_str"],"mod":["address","frame_allocator","heap_allocator","memory_set","page_table"],"struct":["FrameTracker","KERNEL_SPACE","MapPermission","MemorySet","PageTable","PageTableEntry","PhysAddr","PhysPageNum","UserBuffer","UserBufferIterator","VirtAddr","VirtPageNum"],"trait":["StepByOne"]}; \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.FrameTracker.html b/ch6-dev/os/mm/struct.FrameTracker.html index cb4f6398..14b40bfc 100644 --- a/ch6-dev/os/mm/struct.FrameTracker.html +++ b/ch6-dev/os/mm/struct.FrameTracker.html @@ -1,25 +1,15 @@ -FrameTracker in os::mm - Rust - -
    -

    Struct os::mm::FrameTracker

    source · []
    pub struct FrameTracker {
    +FrameTracker in os::mm - Rust

    Struct os::mm::FrameTracker

    source ·
    pub struct FrameTracker {
         pub ppn: PhysPageNum,
    -}
    Expand description

    manage a frame which has the same lifecycle as the tracker

    -

    Fields

    ppn: PhysPageNum

    Implementations

    Create an empty FrameTracker

    -

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    manage a frame which has the same lifecycle as the tracker

    +

    Fields§

    §ppn: PhysPageNum

    Implementations§

    source§

    impl FrameTracker

    source

    pub fn new(ppn: PhysPageNum) -> Self

    Create an empty FrameTracker

    +

    Trait Implementations§

    source§

    impl Debug for FrameTracker

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Drop for FrameTracker

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.KERNEL_SPACE.html b/ch6-dev/os/mm/struct.KERNEL_SPACE.html index a9a9ae4f..a3cc6b59 100644 --- a/ch6-dev/os/mm/struct.KERNEL_SPACE.html +++ b/ch6-dev/os/mm/struct.KERNEL_SPACE.html @@ -1,24 +1,14 @@ -KERNEL_SPACE in os::mm - Rust - -
    -

    Struct os::mm::KERNEL_SPACE

    source · []
    pub struct KERNEL_SPACE {
    +KERNEL_SPACE in os::mm - Rust

    Struct os::mm::KERNEL_SPACE

    source ·
    pub struct KERNEL_SPACE {
         __private_field: (),
    -}
    Expand description

    a memory set instance through lazy_static! managing kernel space

    -

    Fields

    __private_field: ()

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    a memory set instance through lazy_static! managing kernel space

    +

    Fields§

    §__private_field: ()

    Trait Implementations§

    source§

    impl Deref for KERNEL_SPACE

    §

    type Target = Arc<UPSafeCell<MemorySet>, Global>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Arc<UPSafeCell<MemorySet>>

    Dereferences the value.
    source§

    impl LazyStatic for KERNEL_SPACE

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.MapPermission.html b/ch6-dev/os/mm/struct.MapPermission.html index b8f99029..14037eae 100644 --- a/ch6-dev/os/mm/struct.MapPermission.html +++ b/ch6-dev/os/mm/struct.MapPermission.html @@ -1,24 +1,18 @@ -MapPermission in os::mm - Rust - -
    pub struct MapPermission {
    +MapPermission in os::mm - Rust

    Struct os::mm::MapPermission

    source ·
    pub struct MapPermission {
         bits: u8,
    -}
    Expand description

    map permission corresponding to that in pte: R W X U

    -

    Fields

    bits: u8

    Implementations

    Readable

    -

    Writable

    -

    Excutable

    -

    Accessible in U mode

    -

    Returns an empty set of flags.

    -

    Returns the set containing all flags.

    -

    Returns the raw value of the flags currently stored.

    -

    Convert from underlying bit representation, unless that +}

    Expand description

    map permission corresponding to that in pte: R W X U

    +

    Fields§

    §bits: u8

    Implementations§

    source§

    impl MapPermission

    source

    pub const R: Self = _

    Readable

    +
    source

    pub const W: Self = _

    Writable

    +
    source

    pub const X: Self = _

    Excutable

    +
    source

    pub const U: Self = _

    Accessible in U mode

    +
    source

    pub const fn empty() -> Self

    Returns an empty set of flags.

    +
    source

    pub const fn all() -> Self

    Returns the set containing all flags.

    +
    source

    pub const fn bits(&self) -> u8

    Returns the raw value of the flags currently stored.

    +
    source

    pub const fn from_bits(bits: u8) -> Option<Self>

    Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

    -

    Convert from underlying bit representation, dropping any bits +

    source

    pub const fn from_bits_truncate(bits: u8) -> Self

    Convert from underlying bit representation, dropping any bits that do not correspond to flags.

    -

    Convert from underlying bit representation, preserving all +

    source

    pub const unsafe fn from_bits_unchecked(bits: u8) -> Self

    Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

    Safety

    The caller of the bitflags! macro can chose to allow or @@ -26,35 +20,35 @@ disallow extra bits for their bitflags type.

    The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

    -

    Returns true if no flags are currently stored.

    -

    Returns true if all flags are currently set.

    -

    Returns true if there are flags common to both self and other.

    -

    Returns true if all of the flags in other are contained within self.

    -

    Inserts the specified flags in-place.

    -

    Removes the specified flags in-place.

    -

    Toggles the specified flags in-place.

    -

    Inserts or removes the specified flags depending on the passed value.

    -

    Returns the intersection between the flags in self and +

    source

    pub const fn is_empty(&self) -> bool

    Returns true if no flags are currently stored.

    +
    source

    pub const fn is_all(&self) -> bool

    Returns true if all flags are currently set.

    +
    source

    pub const fn intersects(&self, other: Self) -> bool

    Returns true if there are flags common to both self and other.

    +
    source

    pub const fn contains(&self, other: Self) -> bool

    Returns true if all of the flags in other are contained within self.

    +
    source

    pub fn insert(&mut self, other: Self)

    Inserts the specified flags in-place.

    +
    source

    pub fn remove(&mut self, other: Self)

    Removes the specified flags in-place.

    +
    source

    pub fn toggle(&mut self, other: Self)

    Toggles the specified flags in-place.

    +
    source

    pub fn set(&mut self, other: Self, value: bool)

    Inserts or removes the specified flags depending on the passed value.

    +
    source

    pub const fn intersection(self, other: Self) -> Self

    Returns the intersection between the flags in self and other.

    Specifically, the returned set contains only the flags which are present in both self and other.

    This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

    -

    Returns the union of between the flags in self and other.

    +
    source

    pub const fn union(self, other: Self) -> Self

    Returns the union of between the flags in self and other.

    Specifically, the returned set contains all flags which are present in either self or other, including any which are -present in both (see Self::symmetric_difference if that +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.

    -

    Returns the difference between the flags in self and other.

    +
    source

    pub const fn difference(self, other: Self) -> Self

    Returns the difference between the flags in self and other.

    Specifically, the returned set contains all flags present in self, except for the ones present in other.

    It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

    This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

    -

    Returns the symmetric difference between the flags +

    source

    pub const fn symmetric_difference(self, other: Self) -> Self

    Returns the symmetric difference between the flags in self and other.

    Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -62,67 +56,40 @@ 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.

    -

    Returns the complement of this set of flags.

    +
    source

    pub const fn complement(self) -> Self

    Returns the complement of this set of flags.

    Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

    Alternatively, it can be thought of as the set difference -between Self::all() and self (e.g. Self::all() - self)

    +between Self::all() and self (e.g. Self::all() - self)

    This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

    -

    Trait Implementations

    Formats the value using the given formatter.

    -

    Returns the intersection between the two sets of flags.

    -

    The resulting type after applying the & operator.

    -

    Disables all flags disabled in the set.

    -

    Returns the union of the two sets of flags.

    -

    The resulting type after applying the | operator.

    -

    Adds the set of flags.

    -

    Returns the left flags, but with all the right flags toggled.

    -

    The resulting type after applying the ^ operator.

    -

    Toggles the set of flags.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Extends a collection with the contents of an iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Extends a collection with exactly one element.

    -
    🔬 This is a nightly-only experimental API. (extend_one)

    Reserves capacity in a collection for the given number of additional elements. Read more

    -

    Creates a value from an iterator. Read more

    -

    Feeds this value into the given Hasher. Read more

    -

    Feeds a slice of this type into the given Hasher. Read more

    -

    Formats the value using the given formatter.

    -

    Returns the complement of this set of flags.

    -

    The resulting type after applying the ! operator.

    -

    Formats the value using the given formatter.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Returns the set difference of the two sets of flags.

    -

    The resulting type after applying the - operator.

    -

    Disables all flags enabled in the set.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Binary for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<MapPermission> for MapPermission

    source§

    fn bitand(self, other: Self) -> Self

    Returns the intersection between the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the & operator.
    source§

    impl BitAndAssign<MapPermission> for MapPermission

    source§

    fn bitand_assign(&mut self, other: Self)

    Disables all flags disabled in the set.

    +
    source§

    impl BitOr<MapPermission> for MapPermission

    source§

    fn bitor(self, other: MapPermission) -> Self

    Returns the union of the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the | operator.
    source§

    impl BitOrAssign<MapPermission> for MapPermission

    source§

    fn bitor_assign(&mut self, other: Self)

    Adds the set of flags.

    +
    source§

    impl BitXor<MapPermission> for MapPermission

    source§

    fn bitxor(self, other: Self) -> Self

    Returns the left flags, but with all the right flags toggled.

    +
    §

    type Output = MapPermission

    The resulting type after applying the ^ operator.
    source§

    impl BitXorAssign<MapPermission> for MapPermission

    source§

    fn bitxor_assign(&mut self, other: Self)

    Toggles the set of flags.

    +
    source§

    impl Clone for MapPermission

    source§

    fn clone(&self) -> MapPermission

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Extend<MapPermission> for MapPermission

    source§

    fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    source§

    impl FromIterator<MapPermission> for MapPermission

    source§

    fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Hash for MapPermission

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl LowerHex for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Not for MapPermission

    source§

    fn not(self) -> Self

    Returns the complement of this set of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the ! operator.
    source§

    impl Octal for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for MapPermission

    source§

    fn cmp(&self, other: &MapPermission) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<MapPermission> for MapPermission

    source§

    fn eq(&self, other: &MapPermission) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<MapPermission> for MapPermission

    source§

    fn partial_cmp(&self, other: &MapPermission) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Sub<MapPermission> for MapPermission

    source§

    fn sub(self, other: Self) -> Self

    Returns the set difference of the two sets of flags.

    +
    §

    type Output = MapPermission

    The resulting type after applying the - operator.
    source§

    impl SubAssign<MapPermission> for MapPermission

    source§

    fn sub_assign(&mut self, other: Self)

    Disables all flags enabled in the set.

    +
    source§

    impl UpperHex for MapPermission

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for MapPermission

    source§

    impl Eq for MapPermission

    source§

    impl StructuralEq for MapPermission

    source§

    impl StructuralPartialEq for MapPermission

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.MemorySet.html b/ch6-dev/os/mm/struct.MemorySet.html index ad77dd6c..ada9e9c8 100644 --- a/ch6-dev/os/mm/struct.MemorySet.html +++ b/ch6-dev/os/mm/struct.MemorySet.html @@ -1,35 +1,32 @@ -MemorySet in os::mm - Rust - -
    -

    Struct os::mm::MemorySet

    source · []
    pub struct MemorySet {
    +MemorySet in os::mm - Rust

    Struct os::mm::MemorySet

    source ·
    pub struct MemorySet {
         page_table: PageTable,
         areas: Vec<MapArea>,
    -}
    Expand description

    memory set structure, controls virtual-memory space

    -

    Fields

    page_table: PageTableareas: Vec<MapArea>

    Implementations

    Create an empty MemorySet

    -

    Get pagetable root_ppn

    -

    Assume that no conflicts.

    -

    Remove MapArea that starts with start_vpn

    -

    Mention that trampoline is not collected by areas.

    -

    Without kernel stacks.

    -

    Include sections in elf and trampoline and TrapContext and user stack, +}

    Expand description

    memory set structure, controls virtual-memory space

    +

    Fields§

    §page_table: PageTable§areas: Vec<MapArea>

    Implementations§

    source§

    impl MemorySet

    source

    pub fn new_bare() -> Self

    Create an empty MemorySet

    +
    source

    pub fn token(&self) -> usize

    Get pagetable root_ppn

    +
    source

    pub fn insert_framed_area( + &mut self, + start_va: VirtAddr, + end_va: VirtAddr, + permission: MapPermission +)

    Assume that no conflicts.

    +
    source

    pub fn remove_area_with_start_vpn(&mut self, start_vpn: VirtPageNum)

    Remove MapArea that starts with start_vpn

    +
    source

    fn push(&mut self, map_area: MapArea, data: Option<&[u8]>)

    source

    fn map_trampoline(&mut self)

    Mention that trampoline is not collected by areas.

    +
    source

    pub fn new_kernel() -> Self

    Without kernel stacks.

    +
    source

    pub fn from_elf(elf_data: &[u8]) -> (Self, usize, usize)

    Include sections in elf and trampoline and TrapContext and user stack, also returns user_sp and entry point.

    -

    Clone a same MemorySet

    -

    Refresh TLB with sfence.vma

    -

    Translate throuth pagetable

    -

    Remove all MapArea

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source

    pub fn from_existed_user(user_space: &MemorySet) -> MemorySet

    Clone a same MemorySet

    +
    source

    pub fn activate(&self)

    Refresh TLB with sfence.vma

    +
    source

    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry>

    Translate throuth pagetable

    +
    source

    pub fn recycle_data_pages(&mut self)

    Remove all MapArea

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.PageTable.html b/ch6-dev/os/mm/struct.PageTable.html index 2e8218a8..c83f17d1 100644 --- a/ch6-dev/os/mm/struct.PageTable.html +++ b/ch6-dev/os/mm/struct.PageTable.html @@ -1,33 +1,25 @@ -PageTable in os::mm - Rust - -
    -

    Struct os::mm::PageTable

    source · []
    pub struct PageTable {
    +PageTable in os::mm - Rust

    Struct os::mm::PageTable

    source ·
    pub struct PageTable {
         root_ppn: PhysPageNum,
         frames: Vec<FrameTracker>,
    -}
    Expand description

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    -

    Fields

    root_ppn: PhysPageNumframes: Vec<FrameTracker>

    Implementations

    Assume that it won’t oom when creating/mapping.

    -

    Create an empty PageTable

    -

    Temporarily used to get arguments from user space.

    -

    Find phsical address by virtual address, create a frame if not exist

    -

    Find phsical address by virtual address

    -

    Create a mapping form vpn to ppn

    -

    Delete a mapping form vpn

    -

    Translate VirtPageNum to PageTableEntry

    -

    Translate VirtAddr to PhysAddr

    -

    Get root ppn

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Record root ppn and has the same lifetime as 1 and 2 level PageTableEntry

    +

    Fields§

    §root_ppn: PhysPageNum§frames: Vec<FrameTracker>

    Implementations§

    source§

    impl PageTable

    Assume that it won’t oom when creating/mapping.

    +
    source

    pub fn new() -> Self

    Create an empty PageTable

    +
    source

    pub fn from_token(satp: usize) -> Self

    Temporarily used to get arguments from user space.

    +
    source

    fn find_pte_create(&mut self, vpn: VirtPageNum) -> Option<&mut PageTableEntry>

    Find phsical address by virtual address, create a frame if not exist

    +
    source

    fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry>

    Find phsical address by virtual address

    +
    source

    pub fn map(&mut self, vpn: VirtPageNum, ppn: PhysPageNum, flags: PTEFlags)

    Create a mapping form vpn to ppn

    +
    source

    pub fn unmap(&mut self, vpn: VirtPageNum)

    Delete a mapping form vpn

    +
    source

    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry>

    Translate VirtPageNum to PageTableEntry

    +
    source

    pub fn translate_va(&self, va: VirtAddr) -> Option<PhysAddr>

    Translate VirtAddr to PhysAddr

    +
    source

    pub fn token(&self) -> usize

    Get root ppn

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.PageTableEntry.html b/ch6-dev/os/mm/struct.PageTableEntry.html index ee0e2baf..57700eac 100644 --- a/ch6-dev/os/mm/struct.PageTableEntry.html +++ b/ch6-dev/os/mm/struct.PageTableEntry.html @@ -1,36 +1,24 @@ -PageTableEntry in os::mm - Rust - -
    #[repr(C)]
    pub struct PageTableEntry { +PageTableEntry in os::mm - Rust

    Struct os::mm::PageTableEntry

    source ·
    #[repr(C)]
    pub struct PageTableEntry { pub bits: usize, -}
    Expand description

    page table entry structure

    -

    Fields

    bits: usize

    PTE

    -

    Implementations

    Create a PTE from ppn

    -

    Return an empty PTE

    -

    Return 44bit ppn

    -

    Return 10bit flag

    -

    Check PTE valid

    -

    Check PTE readable

    -

    Check PTE writable

    -

    Check PTE executable

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    page table entry structure

    +

    Fields§

    §bits: usize

    PTE

    +

    Implementations§

    source§

    impl PageTableEntry

    source

    pub fn new(ppn: PhysPageNum, flags: PTEFlags) -> Self

    Create a PTE from ppn

    +
    source

    pub fn empty() -> Self

    Return an empty PTE

    +
    source

    pub fn ppn(&self) -> PhysPageNum

    Return 44bit ppn

    +
    source

    pub fn flags(&self) -> PTEFlags

    Return 10bit flag

    +
    source

    pub fn is_valid(&self) -> bool

    Check PTE valid

    +
    source

    pub fn readable(&self) -> bool

    Check PTE readable

    +
    source

    pub fn writable(&self) -> bool

    Check PTE writable

    +
    source

    pub fn executable(&self) -> bool

    Check PTE executable

    +

    Trait Implementations§

    source§

    impl Clone for PageTableEntry

    source§

    fn clone(&self) -> PageTableEntry

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Copy for PageTableEntry

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.PhysAddr.html b/ch6-dev/os/mm/struct.PhysAddr.html index 02e775d9..44973bda 100644 --- a/ch6-dev/os/mm/struct.PhysAddr.html +++ b/ch6-dev/os/mm/struct.PhysAddr.html @@ -1,53 +1,29 @@ -PhysAddr in os::mm - Rust - -
    -

    Struct os::mm::PhysAddr

    source · []
    #[repr(C)]
    pub struct PhysAddr(pub usize);
    Expand description

    Definitions

    -

    Tuple Fields

    0: usize

    Implementations

    PhysAddr->PhysPageNum

    -

    PhysAddr->PhysPageNum

    -

    Get page offset

    -

    Check page aligned

    -

    Get reference to PhysAddr value

    -

    Get mutable reference to PhysAddr value

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum} +PhysAddr in os::mm - Rust

    Struct os::mm::PhysAddr

    source ·
    #[repr(C)]
    pub struct PhysAddr(pub usize);
    Expand description

    Definitions

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl PhysAddr

    source

    pub fn floor(&self) -> PhysPageNum

    PhysAddr->PhysPageNum

    +
    source

    pub fn ceil(&self) -> PhysPageNum

    PhysAddr->PhysPageNum

    +
    source

    pub fn page_offset(&self) -> usize

    Get page offset

    +
    source

    pub fn aligned(&self) -> bool

    Check page aligned

    +
    source§

    impl PhysAddr

    source

    pub fn get_ref<T>(&self) -> &'static T

    Get reference to PhysAddr value

    +
    source

    pub fn get_mut<T>(&self) -> &'static mut T

    Get mutable reference to PhysAddr value

    +

    Trait Implementations§

    source§

    impl Clone for PhysAddr

    source§

    fn clone(&self) -> PhysAddr

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysAddr

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<PhysAddr> for PhysPageNum

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysAddr> for usize

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for PhysAddr

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for PhysAddr

    T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum} T -> usize: T.0 usize -> T: usize.into()

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for PhysAddr

    source§

    fn cmp(&self, other: &PhysAddr) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysAddr> for PhysAddr

    source§

    fn eq(&self, other: &PhysAddr) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysAddr> for PhysAddr

    source§

    fn partial_cmp(&self, other: &PhysAddr) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Copy for PhysAddr

    source§

    impl Eq for PhysAddr

    source§

    impl StructuralEq for PhysAddr

    source§

    impl StructuralPartialEq for PhysAddr

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.PhysPageNum.html b/ch6-dev/os/mm/struct.PhysPageNum.html index 349af250..93e060f7 100644 --- a/ch6-dev/os/mm/struct.PhysPageNum.html +++ b/ch6-dev/os/mm/struct.PhysPageNum.html @@ -1,48 +1,23 @@ -PhysPageNum in os::mm - Rust - -
    -

    Struct os::mm::PhysPageNum

    source · []
    #[repr(C)]
    pub struct PhysPageNum(pub usize);
    Expand description

    phiscal page number

    -

    Tuple Fields

    0: usize

    Implementations

    Get PageTableEntry on PhysPageNum

    -

    Get u8 array on PhysPageNum

    -

    Get Get mutable reference to PhysAddr value on PhysPageNum

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Add value by one

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +PhysPageNum in os::mm - Rust

    Struct os::mm::PhysPageNum

    source ·
    #[repr(C)]
    pub struct PhysPageNum(pub usize);
    Expand description

    phiscal page number

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl PhysPageNum

    source

    pub fn get_pte_array(&self) -> &'static mut [PageTableEntry]

    Get PageTableEntry on PhysPageNum

    +
    source

    pub fn get_bytes_array(&self) -> &'static mut [u8]

    Get u8 array on PhysPageNum

    +
    source

    pub fn get_mut<T>(&self) -> &'static mut T

    Get Get mutable reference to PhysAddr value on PhysPageNum

    +

    Trait Implementations§

    source§

    impl Clone for PhysPageNum

    source§

    fn clone(&self) -> PhysPageNum

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysPageNum

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<PhysAddr> for PhysPageNum

    source§

    fn from(v: PhysAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for PhysAddr

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<PhysPageNum> for usize

    source§

    fn from(v: PhysPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for PhysPageNum

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for PhysPageNum

    source§

    fn cmp(&self, other: &PhysPageNum) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysPageNum> for PhysPageNum

    source§

    fn eq(&self, other: &PhysPageNum) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysPageNum> for PhysPageNum

    source§

    fn partial_cmp(&self, other: &PhysPageNum) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl StepByOne for PhysPageNum

    source§

    fn step(&mut self)

    Add value by one
    source§

    impl Copy for PhysPageNum

    source§

    impl Eq for PhysPageNum

    source§

    impl StructuralEq for PhysPageNum

    source§

    impl StructuralPartialEq for PhysPageNum

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.UserBuffer.html b/ch6-dev/os/mm/struct.UserBuffer.html index fe808cc6..c1ae3ee1 100644 --- a/ch6-dev/os/mm/struct.UserBuffer.html +++ b/ch6-dev/os/mm/struct.UserBuffer.html @@ -1,28 +1,17 @@ -UserBuffer in os::mm - Rust - -
    -

    Struct os::mm::UserBuffer

    source · []
    pub struct UserBuffer {
    -    pub buffers: Vec<&'static mut [u8]>,
    -}
    Expand description

    Array of u8 slice that user communicate with os

    -

    Fields

    buffers: Vec<&'static mut [u8]>

    U8 vec

    -

    Implementations

    Create a UserBuffer by parameter

    -

    Length of UserBuffer

    -

    Trait Implementations

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +UserBuffer in os::mm - Rust

    Struct os::mm::UserBuffer

    source ·
    pub struct UserBuffer {
    +    pub buffers: Vec<&'static mut [u8]>,
    +}
    Expand description

    Array of u8 slice that user communicate with os

    +

    Fields§

    §buffers: Vec<&'static mut [u8]>

    U8 vec

    +

    Implementations§

    source§

    impl UserBuffer

    source

    pub fn new(buffers: Vec<&'static mut [u8]>) -> Self

    Create a UserBuffer by parameter

    +
    source

    pub fn len(&self) -> usize

    Length of UserBuffer

    +

    Trait Implementations§

    source§

    impl IntoIterator for UserBuffer

    §

    type Item = *mut u8

    The type of the elements being iterated over.
    §

    type IntoIter = UserBufferIterator

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.UserBufferIterator.html b/ch6-dev/os/mm/struct.UserBufferIterator.html index df2d8701..f3f66639 100644 --- a/ch6-dev/os/mm/struct.UserBufferIterator.html +++ b/ch6-dev/os/mm/struct.UserBufferIterator.html @@ -1,139 +1,207 @@ -UserBufferIterator in os::mm - Rust - -
    pub struct UserBufferIterator {
    -    buffers: Vec<&'static mut [u8]>,
    +UserBufferIterator in os::mm - Rust

    Struct os::mm::UserBufferIterator

    source ·
    pub struct UserBufferIterator {
    +    buffers: Vec<&'static mut [u8]>,
         current_buffer: usize,
         current_idx: usize,
    -}
    Expand description

    Iterator of UserBuffer

    -

    Fields

    buffers: Vec<&'static mut [u8]>current_buffer: usizecurrent_idx: usize

    Trait Implementations

    The type of the elements being iterated over.

    -

    Advances the iterator and returns the next value. Read more

    -

    Returns the bounds on the remaining length of the iterator. Read more

    -

    Consumes the iterator, counting the number of iterations and returning it. Read more

    -

    Consumes the iterator, returning the last element. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_advance_by)

    Advances the iterator by n elements. Read more

    -

    Returns the nth element of the iterator. Read more

    -

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

    -

    Takes two iterators and creates a new iterator over both in sequence. Read more

    -

    ‘Zips up’ two iterators into a single iterator of pairs. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_intersperse)

    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

    -

    Takes a closure and creates an iterator which calls that closure on each -element. Read more

    -

    Calls a closure on each element of an iterator. Read more

    -

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

    -

    Creates an iterator that both filters and maps. Read more

    -

    Creates an iterator which gives the current iteration count as well as -the next value. Read more

    -

    Creates an iterator which can use the peek and peek_mut methods +}

    Expand description

    Iterator of UserBuffer

    +

    Fields§

    §buffers: Vec<&'static mut [u8]>§current_buffer: usize§current_idx: usize

    Trait Implementations§

    source§

    impl Iterator for UserBufferIterator

    §

    type Item = *mut u8

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( + &mut self +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where + Self: Sized, + Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    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

    -

    Creates an iterator that skips elements based on a predicate. Read more

    -

    Creates an iterator that yields elements based on a predicate. Read more

    -

    Creates an iterator that both yields elements based on a predicate and maps. Read more

    -

    Creates an iterator that skips the first n elements. Read more

    -

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

    -

    An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

    -

    Creates an iterator that works like map, but flattens nested structure. Read more

    -

    Creates an iterator that flattens nested structure. Read more

    -

    Creates an iterator which ends after the first None. Read more

    -

    Does something with each element of an iterator, passing the value on. Read more

    -

    Borrows an iterator, rather than consuming it. Read more

    -

    Transforms an iterator into a collection. Read more

    -
    🔬 This is a nightly-only experimental API. (iterator_try_collect)

    Fallibly transforms an iterator into a collection, short circuiting if -a failure is encountered. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_collect_into)

    Collects all the items from an iterator into a collection. Read more

    -

    Consumes an iterator, creating two collections from it. 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

    -

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

    -

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

    -

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more

    -

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. 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

    -

    Tests if every element of the iterator matches a predicate. Read more

    -

    Tests if any element of the iterator matches a predicate. Read more

    -

    Searches for an element of an iterator that satisfies a predicate. Read more

    -

    Applies function to the elements of iterator and returns -the first non-none result. Read more

    -
    🔬 This is a nightly-only experimental API. (try_find)

    Applies function to the elements of iterator and returns -the first true result or the first error. Read more

    -

    Searches for an element in an iterator, returning its index. Read more

    -

    Searches for an element in an iterator from the right, returning its -index. Read more

    -

    Returns the maximum element of an iterator. Read more

    -

    Returns the minimum element of an iterator. Read more

    -

    Returns the element that gives the maximum value from the -specified function. Read more

    -

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

    -

    Returns the element that gives the minimum value from the -specified function. Read more

    -

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

    -

    Reverses an iterator’s direction. Read more

    -

    Converts an iterator of pairs into a pair of containers. Read more

    -

    Creates an iterator which copies all of its elements. Read more

    -

    Creates an iterator which clones all of its elements. Read more

    -

    Repeats an iterator endlessly. Read more

    -

    Sums the elements of an iterator. Read more

    -

    Iterates over the entire iterator, multiplying all the elements Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Lexicographically compares the elements of this Iterator with those -of another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

    -

    Determines if the elements of this Iterator are equal to those of -another. Read more

    -
    🔬 This is a nightly-only experimental API. (iter_order_by)

    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

    -

    Determines if the elements of this Iterator are unequal to those of -another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

    -

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given comparator function. Read more

    -
    🔬 This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬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
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬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
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( + &mut self, + f: F +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

    Lexicographically compares the elements of this Iterator with those +of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type of the elements being iterated over.

    -

    Which kind of iterator are we turning this into?

    -

    Creates an iterator from a value. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.VirtAddr.html b/ch6-dev/os/mm/struct.VirtAddr.html index 2fdb50a3..40102ec8 100644 --- a/ch6-dev/os/mm/struct.VirtAddr.html +++ b/ch6-dev/os/mm/struct.VirtAddr.html @@ -1,49 +1,25 @@ -VirtAddr in os::mm - Rust - -
    -

    Struct os::mm::VirtAddr

    source · []
    #[repr(C)]
    pub struct VirtAddr(pub usize);
    Expand description

    virtual address

    -

    Tuple Fields

    0: usize

    Implementations

    VirtAddr->VirtPageNum

    -

    VirtAddr->VirtPageNum

    -

    Get page offset

    -

    Check page aligned

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Debugging

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +VirtAddr in os::mm - Rust

    Struct os::mm::VirtAddr

    source ·
    #[repr(C)]
    pub struct VirtAddr(pub usize);
    Expand description

    virtual address

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl VirtAddr

    source

    pub fn floor(&self) -> VirtPageNum

    VirtAddr->VirtPageNum

    +
    source

    pub fn ceil(&self) -> VirtPageNum

    VirtAddr->VirtPageNum

    +
    source

    pub fn page_offset(&self) -> usize

    Get page offset

    +
    source

    pub fn aligned(&self) -> bool

    Check page aligned

    +

    Trait Implementations§

    source§

    impl Clone for VirtAddr

    source§

    fn clone(&self) -> VirtAddr

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtAddr

    Debugging

    +
    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<VirtAddr> for VirtPageNum

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtAddr> for usize

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for VirtAddr

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for VirtAddr

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for VirtAddr

    source§

    fn cmp(&self, other: &VirtAddr) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtAddr> for VirtAddr

    source§

    fn eq(&self, other: &VirtAddr) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtAddr> for VirtAddr

    source§

    fn partial_cmp(&self, other: &VirtAddr) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Copy for VirtAddr

    source§

    impl Eq for VirtAddr

    source§

    impl StructuralEq for VirtAddr

    source§

    impl StructuralPartialEq for VirtAddr

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/struct.VirtPageNum.html b/ch6-dev/os/mm/struct.VirtPageNum.html index d0e797e5..a8639153 100644 --- a/ch6-dev/os/mm/struct.VirtPageNum.html +++ b/ch6-dev/os/mm/struct.VirtPageNum.html @@ -1,46 +1,21 @@ -VirtPageNum in os::mm - Rust - -
    -

    Struct os::mm::VirtPageNum

    source · []
    #[repr(C)]
    pub struct VirtPageNum(pub usize);
    Expand description

    virtual page number

    -

    Tuple Fields

    0: usize

    Implementations

    Return VPN 3 level index

    -

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    Converts to this type from the input type.

    -

    This method returns an Ordering between self and other. Read more

    -

    Compares and returns the maximum of two values. Read more

    -

    Compares and returns the minimum of two values. Read more

    -

    Restrict a value to a certain interval. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    This method returns an ordering between self and other values if one exists. Read more

    -

    This method tests less than (for self and other) and is used by the < operator. Read more

    -

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

    -

    This method tests greater than (for self and other) and is used by the > operator. Read more

    -

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    -

    Add value by one

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +VirtPageNum in os::mm - Rust

    Struct os::mm::VirtPageNum

    source ·
    #[repr(C)]
    pub struct VirtPageNum(pub usize);
    Expand description

    virtual page number

    +

    Tuple Fields§

    §0: usize

    Implementations§

    source§

    impl VirtPageNum

    source

    pub fn indexes(&self) -> [usize; 3]

    Return VPN 3 level index

    +

    Trait Implementations§

    source§

    impl Clone for VirtPageNum

    source§

    fn clone(&self) -> VirtPageNum

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtPageNum

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<VirtAddr> for VirtPageNum

    source§

    fn from(v: VirtAddr) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for VirtAddr

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<VirtPageNum> for usize

    source§

    fn from(v: VirtPageNum) -> Self

    Converts to this type from the input type.
    source§

    impl From<usize> for VirtPageNum

    source§

    fn from(v: usize) -> Self

    Converts to this type from the input type.
    source§

    impl Ord for VirtPageNum

    source§

    fn cmp(&self, other: &VirtPageNum) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtPageNum> for VirtPageNum

    source§

    fn eq(&self, other: &VirtPageNum) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtPageNum> for VirtPageNum

    source§

    fn partial_cmp(&self, other: &VirtPageNum) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl StepByOne for VirtPageNum

    source§

    fn step(&mut self)

    Add value by one
    source§

    impl Copy for VirtPageNum

    source§

    impl Eq for VirtPageNum

    source§

    impl StructuralEq for VirtPageNum

    source§

    impl StructuralPartialEq for VirtPageNum

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/mm/trait.StepByOne.html b/ch6-dev/os/mm/trait.StepByOne.html index 8acb1597..b86a0317 100644 --- a/ch6-dev/os/mm/trait.StepByOne.html +++ b/ch6-dev/os/mm/trait.StepByOne.html @@ -1,12 +1,6 @@ -StepByOne in os::mm - Rust - -
    -

    Trait os::mm::StepByOne

    source · []
    pub trait StepByOne {
    -    fn step(&mut self);
    -}
    Expand description

    Add value by one

    -

    Required methods

    Add value by one

    -

    Implementors

    - \ No newline at end of file +StepByOne in os::mm - Rust

    Trait os::mm::StepByOne

    source ·
    pub trait StepByOne {
    +    // Required method
    +    fn step(&mut self);
    +}
    Expand description

    Add value by one

    +

    Required Methods§

    source

    fn step(&mut self)

    Add value by one

    +

    Implementors§

    \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_CLEAR_IPI.html b/ch6-dev/os/sbi/constant.SBI_CLEAR_IPI.html deleted file mode 100644 index be14110f..00000000 --- a/ch6-dev/os/sbi/constant.SBI_CLEAR_IPI.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_CLEAR_IPI in os::sbi - Rust - -
    -

    Constant os::sbi::SBI_CLEAR_IPI

    source · []
    const SBI_CLEAR_IPI: usize = 3;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_CONSOLE_GETCHAR.html b/ch6-dev/os/sbi/constant.SBI_CONSOLE_GETCHAR.html deleted file mode 100644 index abc48e6e..00000000 --- a/ch6-dev/os/sbi/constant.SBI_CONSOLE_GETCHAR.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_CONSOLE_GETCHAR in os::sbi - Rust - -
    const SBI_CONSOLE_GETCHAR: usize = 2;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html b/ch6-dev/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html deleted file mode 100644 index e1bb6f31..00000000 --- a/ch6-dev/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_CONSOLE_PUTCHAR in os::sbi - Rust - -
    const SBI_CONSOLE_PUTCHAR: usize = 1;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_REMOTE_FENCE_I.html b/ch6-dev/os/sbi/constant.SBI_REMOTE_FENCE_I.html deleted file mode 100644 index 34b2f2c5..00000000 --- a/ch6-dev/os/sbi/constant.SBI_REMOTE_FENCE_I.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_REMOTE_FENCE_I in os::sbi - Rust - -
    const SBI_REMOTE_FENCE_I: usize = 5;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html b/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html deleted file mode 100644 index 49295e76..00000000 --- a/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_REMOTE_SFENCE_VMA in os::sbi - Rust - -
    const SBI_REMOTE_SFENCE_VMA: usize = 6;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html b/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html deleted file mode 100644 index 23f4fa82..00000000 --- a/ch6-dev/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_REMOTE_SFENCE_VMA_ASID in os::sbi - Rust - -
    const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_SEND_IPI.html b/ch6-dev/os/sbi/constant.SBI_SEND_IPI.html deleted file mode 100644 index e58b3592..00000000 --- a/ch6-dev/os/sbi/constant.SBI_SEND_IPI.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_SEND_IPI in os::sbi - Rust - -
    -

    Constant os::sbi::SBI_SEND_IPI

    source · []
    const SBI_SEND_IPI: usize = 4;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_SET_TIMER.html b/ch6-dev/os/sbi/constant.SBI_SET_TIMER.html deleted file mode 100644 index fd0ae79d..00000000 --- a/ch6-dev/os/sbi/constant.SBI_SET_TIMER.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_SET_TIMER in os::sbi - Rust - -
    -

    Constant os::sbi::SBI_SET_TIMER

    source · []
    const SBI_SET_TIMER: usize = 0;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/constant.SBI_SHUTDOWN.html b/ch6-dev/os/sbi/constant.SBI_SHUTDOWN.html deleted file mode 100644 index b1e93dc4..00000000 --- a/ch6-dev/os/sbi/constant.SBI_SHUTDOWN.html +++ /dev/null @@ -1,8 +0,0 @@ -SBI_SHUTDOWN in os::sbi - Rust - -
    -

    Constant os::sbi::SBI_SHUTDOWN

    source · []
    const SBI_SHUTDOWN: usize = 8;
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/fn.console_getchar.html b/ch6-dev/os/sbi/fn.console_getchar.html index e7e4500e..f480a50a 100644 --- a/ch6-dev/os/sbi/fn.console_getchar.html +++ b/ch6-dev/os/sbi/fn.console_getchar.html @@ -1,9 +1,2 @@ -console_getchar in os::sbi - Rust - -
    pub fn console_getchar() -> usize
    Expand description

    use sbi call to getchar from console (qemu uart handler)

    -
    - \ No newline at end of file +console_getchar in os::sbi - Rust

    Function os::sbi::console_getchar

    source ·
    pub fn console_getchar() -> usize
    Expand description

    use sbi call to getchar from console (qemu uart handler)

    +
    \ No newline at end of file diff --git a/ch6-dev/os/sbi/fn.console_putchar.html b/ch6-dev/os/sbi/fn.console_putchar.html index f4858061..e56c8eb0 100644 --- a/ch6-dev/os/sbi/fn.console_putchar.html +++ b/ch6-dev/os/sbi/fn.console_putchar.html @@ -1,9 +1,2 @@ -console_putchar in os::sbi - Rust - -
    pub fn console_putchar(c: usize)
    Expand description

    use sbi call to putchar in console (qemu uart handler)

    -
    - \ No newline at end of file +console_putchar in os::sbi - Rust

    Function os::sbi::console_putchar

    source ·
    pub fn console_putchar(c: usize)
    Expand description

    use sbi call to putchar in console (qemu uart handler)

    +
    \ No newline at end of file diff --git a/ch6-dev/os/sbi/fn.sbi_call.html b/ch6-dev/os/sbi/fn.sbi_call.html deleted file mode 100644 index 04f84c5b..00000000 --- a/ch6-dev/os/sbi/fn.sbi_call.html +++ /dev/null @@ -1,9 +0,0 @@ -sbi_call in os::sbi - Rust - -
    -

    Function os::sbi::sbi_call

    source · []
    fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize
    Expand description

    general sbi call

    -
    - \ No newline at end of file diff --git a/ch6-dev/os/sbi/fn.set_timer.html b/ch6-dev/os/sbi/fn.set_timer.html index 4e4ca12e..84acf5eb 100644 --- a/ch6-dev/os/sbi/fn.set_timer.html +++ b/ch6-dev/os/sbi/fn.set_timer.html @@ -1,9 +1,2 @@ -set_timer in os::sbi - Rust - -
    -

    Function os::sbi::set_timer

    source · []
    pub fn set_timer(timer: usize)
    Expand description

    use sbi call to set timer

    -
    - \ No newline at end of file +set_timer in os::sbi - Rust

    Function os::sbi::set_timer

    source ·
    pub fn set_timer(timer: usize)
    Expand description

    use sbi call to set timer

    +
    \ No newline at end of file diff --git a/ch6-dev/os/sbi/fn.shutdown.html b/ch6-dev/os/sbi/fn.shutdown.html index 8aaf3c4f..8c2a956b 100644 --- a/ch6-dev/os/sbi/fn.shutdown.html +++ b/ch6-dev/os/sbi/fn.shutdown.html @@ -1,9 +1,2 @@ -shutdown in os::sbi - Rust - -
    -

    Function os::sbi::shutdown

    source · []
    pub fn shutdown() -> !
    Expand description

    use sbi call to shutdown the kernel

    -
    - \ No newline at end of file +shutdown in os::sbi - Rust

    Function os::sbi::shutdown

    source ·
    pub fn shutdown(failure: bool) -> !
    Expand description

    use sbi call to shutdown the kernel

    +
    \ No newline at end of file diff --git a/ch6-dev/os/sbi/index.html b/ch6-dev/os/sbi/index.html index 362721f1..90c24f2b 100644 --- a/ch6-dev/os/sbi/index.html +++ b/ch6-dev/os/sbi/index.html @@ -1,16 +1,2 @@ -os::sbi - Rust - -
    -

    Module os::sbi

    source · []
    Expand description

    SBI call wrappers

    -

    Constants

    -

    Functions

    -

    use sbi call to getchar from console (qemu uart handler)

    -

    use sbi call to putchar in console (qemu uart handler)

    -
    sbi_call 🔒

    general sbi call

    -

    use sbi call to set timer

    -

    use sbi call to shutdown the kernel

    -
    - \ No newline at end of file +os::sbi - Rust

    Module os::sbi

    source ·
    Expand description

    SBI call wrappers

    +

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/sbi/sidebar-items.js b/ch6-dev/os/sbi/sidebar-items.js index df8a1503..48cbb3c3 100644 --- a/ch6-dev/os/sbi/sidebar-items.js +++ b/ch6-dev/os/sbi/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["SBI_CLEAR_IPI",""],["SBI_CONSOLE_GETCHAR",""],["SBI_CONSOLE_PUTCHAR",""],["SBI_REMOTE_FENCE_I",""],["SBI_REMOTE_SFENCE_VMA",""],["SBI_REMOTE_SFENCE_VMA_ASID",""],["SBI_SEND_IPI",""],["SBI_SET_TIMER",""],["SBI_SHUTDOWN",""]],"fn":[["console_getchar","use sbi call to getchar from console (qemu uart handler)"],["console_putchar","use sbi call to putchar in console (qemu uart handler)"],["sbi_call","general sbi call"],["set_timer","use sbi call to set timer"],["shutdown","use sbi call to shutdown the kernel"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["console_getchar","console_putchar","set_timer","shutdown"]}; \ No newline at end of file diff --git a/ch6-dev/os/sidebar-items.js b/ch6-dev/os/sidebar-items.js index cd282bdc..5e2a1923 100644 --- a/ch6-dev/os/sidebar-items.js +++ b/ch6-dev/os/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["clear_bss","clear BSS segment"],["rust_main","the rust entry-point of os"]],"macro":[["print","print string macro"],["println","println string macro"]],"mod":[["board",""],["config","Constants used in rCore"],["console","SBI console driver, for text output"],["drivers",""],["fs","File system in os"],["lang_items","The panic handler"],["mm","Memory management implementation"],["sbi","SBI call wrappers"],["sync","Synchronization and interior mutability primitives"],["syscall","Implementation of syscalls"],["task","Task management implementation"],["timer","RISC-V timer-related functionality"],["trap","Trap handling functionality"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["clear_bss","rust_main"],"macro":["print","println"],"mod":["board","config","console","drivers","fs","lang_items","mm","sbi","sync","syscall","task","timer","trap"]}; \ No newline at end of file diff --git a/ch6-dev/os/sync/index.html b/ch6-dev/os/sync/index.html index 6119d98c..04f2b1a5 100644 --- a/ch6-dev/os/sync/index.html +++ b/ch6-dev/os/sync/index.html @@ -1,14 +1,3 @@ -os::sync - Rust - -
    -

    Module os::sync

    source · []
    Expand description

    Synchronization and interior mutability primitives

    -

    Modules

    -
    up 🔒

    Uniprocessor interior mutability primitives

    -

    Structs

    -

    Wrap a static data structure inside it so that we are -able to access it without any unsafe.

    -
    - \ No newline at end of file +os::sync - Rust

    Module os::sync

    source ·
    Expand description

    Synchronization and interior mutability primitives

    +

    Modules

    • up 🔒
      Uniprocessor interior mutability primitives

    Structs

    • The sync primitive used by easy-fs.
    • 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/ch6-dev/os/sync/sidebar-items.js b/ch6-dev/os/sync/sidebar-items.js index a310b54a..b1b930bd 100644 --- a/ch6-dev/os/sync/sidebar-items.js +++ b/ch6-dev/os/sync/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"mod":[["up","Uniprocessor interior mutability primitives"]],"struct":[["UPSafeCell","Wrap a static data structure inside it so that we are able to access it without any `unsafe`."]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"mod":["up"],"struct":["RawExclusiveLock","UPSafeCell"]}; \ No newline at end of file diff --git a/ch6-dev/os/sync/struct.RawExclusiveLock.html b/ch6-dev/os/sync/struct.RawExclusiveLock.html new file mode 100644 index 00000000..78d2525c --- /dev/null +++ b/ch6-dev/os/sync/struct.RawExclusiveLock.html @@ -0,0 +1,14 @@ +RawExclusiveLock in os::sync - Rust

    Struct os::sync::RawExclusiveLock

    source ·
    pub struct RawExclusiveLock(AtomicBool);
    Expand description

    The sync primitive used by easy-fs.

    +

    Tuple Fields§

    §0: AtomicBool

    Trait Implementations§

    source§

    impl RawMutex for RawExclusiveLock

    source§

    const INIT: Self = _

    Initial value for an unlocked mutex.
    §

    type GuardMarker = GuardNoSend

    Marker type which determines whether a lock guard should be Send. Use +one of the GuardSend or GuardNoSend helper types here.
    source§

    fn lock(&self)

    Acquires this mutex, blocking the current thread until it is able to do so.
    source§

    fn try_lock(&self) -> bool

    Attempts to acquire this mutex without blocking. Returns true +if the lock was successfully acquired and false otherwise.
    source§

    unsafe fn unlock(&self)

    Unlocks this mutex. Read more
    §

    fn is_locked(&self) -> bool

    Checks whether the mutex is currently locked.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/sync/struct.UPSafeCell.html b/ch6-dev/os/sync/struct.UPSafeCell.html index 9163b002..50a98c65 100644 --- a/ch6-dev/os/sync/struct.UPSafeCell.html +++ b/ch6-dev/os/sync/struct.UPSafeCell.html @@ -1,30 +1,25 @@ -UPSafeCell in os::sync - Rust - -
    -

    Struct os::sync::UPSafeCell

    source · []
    pub struct UPSafeCell<T> {
    +UPSafeCell in os::sync - Rust

    Struct os::sync::UPSafeCell

    source ·
    pub struct UPSafeCell<T> {
         inner: RefCell<T>,
    -}
    Expand description

    Wrap a static data structure inside it so that we are +}

    Expand description

    Wrap a static data structure inside it so that we are able to access it without any unsafe.

    We should only use it in uniprocessor.

    In order to get mutable reference of inner data, call exclusive_access.

    -

    Fields

    inner: RefCell<T>

    inner data

    -

    Implementations

    User is responsible to guarantee that inner struct is only used in +

    Fields§

    §inner: RefCell<T>

    inner data

    +

    Implementations§

    source§

    impl<T> UPSafeCell<T>

    source

    pub unsafe fn new(value: T) -> Self

    User is responsible to guarantee that inner struct is only used in uniprocessor.

    -

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl<T> Sync for UPSafeCell<T>

    Auto Trait Implementations§

    §

    impl<T> !RefUnwindSafe for UPSafeCell<T>

    §

    impl<T> Send for UPSafeCell<T>where + T: Send,

    §

    impl<T> Unpin for UPSafeCell<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for UPSafeCell<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/sync/up/index.html b/ch6-dev/os/sync/up/index.html index db7fed21..6975728c 100644 --- a/ch6-dev/os/sync/up/index.html +++ b/ch6-dev/os/sync/up/index.html @@ -1,12 +1,3 @@ -os::sync::up - Rust - -
    -

    Module os::sync::up

    source · []
    Expand description

    Uniprocessor interior mutability primitives

    -

    Structs

    -

    Wrap a static data structure inside it so that we are -able to access it without any unsafe.

    -
    - \ No newline at end of file +os::sync::up - Rust

    Module os::sync::up

    source ·
    Expand description

    Uniprocessor interior mutability primitives

    +

    Structs

    • The sync primitive used by easy-fs.
    • 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/ch6-dev/os/sync/up/sidebar-items.js b/ch6-dev/os/sync/up/sidebar-items.js index d34252dd..0cd2b62e 100644 --- a/ch6-dev/os/sync/up/sidebar-items.js +++ b/ch6-dev/os/sync/up/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["UPSafeCell","Wrap a static data structure inside it so that we are able to access it without any `unsafe`."]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["RawExclusiveLock","UPSafeCell"]}; \ No newline at end of file diff --git a/ch6-dev/os/sync/up/struct.RawExclusiveLock.html b/ch6-dev/os/sync/up/struct.RawExclusiveLock.html new file mode 100644 index 00000000..7e4e8e62 --- /dev/null +++ b/ch6-dev/os/sync/up/struct.RawExclusiveLock.html @@ -0,0 +1,14 @@ +RawExclusiveLock in os::sync::up - Rust

    Struct os::sync::up::RawExclusiveLock

    source ·
    pub struct RawExclusiveLock(AtomicBool);
    Expand description

    The sync primitive used by easy-fs.

    +

    Tuple Fields§

    §0: AtomicBool

    Trait Implementations§

    source§

    impl RawMutex for RawExclusiveLock

    source§

    const INIT: Self = _

    Initial value for an unlocked mutex.
    §

    type GuardMarker = GuardNoSend

    Marker type which determines whether a lock guard should be Send. Use +one of the GuardSend or GuardNoSend helper types here.
    source§

    fn lock(&self)

    Acquires this mutex, blocking the current thread until it is able to do so.
    source§

    fn try_lock(&self) -> bool

    Attempts to acquire this mutex without blocking. Returns true +if the lock was successfully acquired and false otherwise.
    source§

    unsafe fn unlock(&self)

    Unlocks this mutex. Read more
    §

    fn is_locked(&self) -> bool

    Checks whether the mutex is currently locked.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/sync/up/struct.UPSafeCell.html b/ch6-dev/os/sync/up/struct.UPSafeCell.html index 52784de0..88aa70b7 100644 --- a/ch6-dev/os/sync/up/struct.UPSafeCell.html +++ b/ch6-dev/os/sync/up/struct.UPSafeCell.html @@ -1,30 +1,25 @@ -UPSafeCell in os::sync::up - Rust - -
    -

    Struct os::sync::up::UPSafeCell

    source · []
    pub struct UPSafeCell<T> {
    +UPSafeCell in os::sync::up - Rust

    Struct os::sync::up::UPSafeCell

    source ·
    pub struct UPSafeCell<T> {
         inner: RefCell<T>,
    -}
    Expand description

    Wrap a static data structure inside it so that we are +}

    Expand description

    Wrap a static data structure inside it so that we are able to access it without any unsafe.

    We should only use it in uniprocessor.

    In order to get mutable reference of inner data, call exclusive_access.

    -

    Fields

    inner: RefCell<T>

    inner data

    -

    Implementations

    User is responsible to guarantee that inner struct is only used in +

    Fields§

    §inner: RefCell<T>

    inner data

    +

    Implementations§

    source§

    impl<T> UPSafeCell<T>

    source

    pub unsafe fn new(value: T) -> Self

    User is responsible to guarantee that inner struct is only used in uniprocessor.

    -

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +
    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl<T> Sync for UPSafeCell<T>

    Auto Trait Implementations§

    §

    impl<T> !RefUnwindSafe for UPSafeCell<T>

    §

    impl<T> Send for UPSafeCell<T>where + T: Send,

    §

    impl<T> Unpin for UPSafeCell<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for UPSafeCell<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_CLOSE.html b/ch6-dev/os/syscall/constant.SYSCALL_CLOSE.html index 74ba595a..06ba9551 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_CLOSE.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_CLOSE.html @@ -1,8 +1 @@ -SYSCALL_CLOSE in os::syscall - Rust - -
    const SYSCALL_CLOSE: usize = 57;
    - \ No newline at end of file +SYSCALL_CLOSE in os::syscall - Rust

    Constant os::syscall::SYSCALL_CLOSE

    source ·
    const SYSCALL_CLOSE: usize = 57;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_EXEC.html b/ch6-dev/os/syscall/constant.SYSCALL_EXEC.html index 9f41ab69..f357b5ec 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_EXEC.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_EXEC.html @@ -1,8 +1 @@ -SYSCALL_EXEC in os::syscall - Rust - -
    const SYSCALL_EXEC: usize = 221;
    - \ No newline at end of file +SYSCALL_EXEC in os::syscall - Rust

    Constant os::syscall::SYSCALL_EXEC

    source ·
    const SYSCALL_EXEC: usize = 221;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_EXIT.html b/ch6-dev/os/syscall/constant.SYSCALL_EXIT.html index e71ea061..341d1775 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_EXIT.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_EXIT.html @@ -1,8 +1 @@ -SYSCALL_EXIT in os::syscall - Rust - -
    const SYSCALL_EXIT: usize = 93;
    - \ No newline at end of file +SYSCALL_EXIT in os::syscall - Rust

    Constant os::syscall::SYSCALL_EXIT

    source ·
    const SYSCALL_EXIT: usize = 93;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_FORK.html b/ch6-dev/os/syscall/constant.SYSCALL_FORK.html index 0e0fe560..a2ef2bb6 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_FORK.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_FORK.html @@ -1,8 +1 @@ -SYSCALL_FORK in os::syscall - Rust - -
    const SYSCALL_FORK: usize = 220;
    - \ No newline at end of file +SYSCALL_FORK in os::syscall - Rust

    Constant os::syscall::SYSCALL_FORK

    source ·
    const SYSCALL_FORK: usize = 220;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_GETPID.html b/ch6-dev/os/syscall/constant.SYSCALL_GETPID.html index 3e6a5efd..350d9668 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_GETPID.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_GETPID.html @@ -1,8 +1 @@ -SYSCALL_GETPID in os::syscall - Rust - -
    const SYSCALL_GETPID: usize = 172;
    - \ No newline at end of file +SYSCALL_GETPID in os::syscall - Rust

    Constant os::syscall::SYSCALL_GETPID

    source ·
    const SYSCALL_GETPID: usize = 172;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_GET_TIME.html b/ch6-dev/os/syscall/constant.SYSCALL_GET_TIME.html index 5233863e..6ca211be 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_GET_TIME.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_GET_TIME.html @@ -1,8 +1 @@ -SYSCALL_GET_TIME in os::syscall - Rust - -
    const SYSCALL_GET_TIME: usize = 169;
    - \ No newline at end of file +SYSCALL_GET_TIME in os::syscall - Rust

    Constant os::syscall::SYSCALL_GET_TIME

    source ·
    const SYSCALL_GET_TIME: usize = 169;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_OPEN.html b/ch6-dev/os/syscall/constant.SYSCALL_OPEN.html index 88047045..187d2adc 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_OPEN.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_OPEN.html @@ -1,8 +1 @@ -SYSCALL_OPEN in os::syscall - Rust - -
    const SYSCALL_OPEN: usize = 56;
    - \ No newline at end of file +SYSCALL_OPEN in os::syscall - Rust

    Constant os::syscall::SYSCALL_OPEN

    source ·
    const SYSCALL_OPEN: usize = 56;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_READ.html b/ch6-dev/os/syscall/constant.SYSCALL_READ.html index 9493ccdc..2c828555 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_READ.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_READ.html @@ -1,8 +1 @@ -SYSCALL_READ in os::syscall - Rust - -
    const SYSCALL_READ: usize = 63;
    - \ No newline at end of file +SYSCALL_READ in os::syscall - Rust

    Constant os::syscall::SYSCALL_READ

    source ·
    const SYSCALL_READ: usize = 63;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_WAITPID.html b/ch6-dev/os/syscall/constant.SYSCALL_WAITPID.html index 86f7ac1e..4ca4c9be 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_WAITPID.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_WAITPID.html @@ -1,8 +1 @@ -SYSCALL_WAITPID in os::syscall - Rust - -
    const SYSCALL_WAITPID: usize = 260;
    - \ No newline at end of file +SYSCALL_WAITPID in os::syscall - Rust

    Constant os::syscall::SYSCALL_WAITPID

    source ·
    const SYSCALL_WAITPID: usize = 260;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_WRITE.html b/ch6-dev/os/syscall/constant.SYSCALL_WRITE.html index 5f8ef985..7d1f7b0b 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_WRITE.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_WRITE.html @@ -1,8 +1 @@ -SYSCALL_WRITE in os::syscall - Rust - -
    const SYSCALL_WRITE: usize = 64;
    - \ No newline at end of file +SYSCALL_WRITE in os::syscall - Rust

    Constant os::syscall::SYSCALL_WRITE

    source ·
    const SYSCALL_WRITE: usize = 64;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/constant.SYSCALL_YIELD.html b/ch6-dev/os/syscall/constant.SYSCALL_YIELD.html index 4bf4a980..88321e30 100644 --- a/ch6-dev/os/syscall/constant.SYSCALL_YIELD.html +++ b/ch6-dev/os/syscall/constant.SYSCALL_YIELD.html @@ -1,8 +1 @@ -SYSCALL_YIELD in os::syscall - Rust - -
    const SYSCALL_YIELD: usize = 124;
    - \ No newline at end of file +SYSCALL_YIELD in os::syscall - Rust

    Constant os::syscall::SYSCALL_YIELD

    source ·
    const SYSCALL_YIELD: usize = 124;
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fn.syscall.html b/ch6-dev/os/syscall/fn.syscall.html index d0eae4bd..e9c74d3c 100644 --- a/ch6-dev/os/syscall/fn.syscall.html +++ b/ch6-dev/os/syscall/fn.syscall.html @@ -1,9 +1,2 @@ -syscall in os::syscall - Rust - -
    -

    Function os::syscall::syscall

    source · []
    pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize
    Expand description

    handle syscall exception with syscall_id and other arguments

    -
    - \ No newline at end of file +syscall in os::syscall - Rust

    Function os::syscall::syscall

    source ·
    pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize
    Expand description

    handle syscall exception with syscall_id and other arguments

    +
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/fn.sys_close.html b/ch6-dev/os/syscall/fs/fn.sys_close.html index 3e3471a6..e61e0d1b 100644 --- a/ch6-dev/os/syscall/fs/fn.sys_close.html +++ b/ch6-dev/os/syscall/fs/fn.sys_close.html @@ -1,8 +1 @@ -sys_close in os::syscall::fs - Rust - -
    -

    Function os::syscall::fs::sys_close

    source · []
    pub fn sys_close(fd: usize) -> isize
    - \ No newline at end of file +sys_close in os::syscall::fs - Rust

    Function os::syscall::fs::sys_close

    source ·
    pub fn sys_close(fd: usize) -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/fn.sys_open.html b/ch6-dev/os/syscall/fs/fn.sys_open.html index 34f41857..65b7fa1b 100644 --- a/ch6-dev/os/syscall/fs/fn.sys_open.html +++ b/ch6-dev/os/syscall/fs/fn.sys_open.html @@ -1,8 +1 @@ -sys_open in os::syscall::fs - Rust - -
    -

    Function os::syscall::fs::sys_open

    source · []
    pub fn sys_open(path: *const u8, flags: u32) -> isize
    - \ No newline at end of file +sys_open in os::syscall::fs - Rust

    Function os::syscall::fs::sys_open

    source ·
    pub fn sys_open(path: *const u8, flags: u32) -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/fn.sys_read.html b/ch6-dev/os/syscall/fs/fn.sys_read.html index 17ff86fd..14af4b94 100644 --- a/ch6-dev/os/syscall/fs/fn.sys_read.html +++ b/ch6-dev/os/syscall/fs/fn.sys_read.html @@ -1,8 +1 @@ -sys_read in os::syscall::fs - Rust - -
    -

    Function os::syscall::fs::sys_read

    source · []
    pub fn sys_read(fd: usize, buf: *const u8, len: usize) -> isize
    - \ No newline at end of file +sys_read in os::syscall::fs - Rust

    Function os::syscall::fs::sys_read

    source ·
    pub fn sys_read(fd: usize, buf: *const u8, len: usize) -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/fn.sys_write.html b/ch6-dev/os/syscall/fs/fn.sys_write.html index 961b7436..ba8b01bd 100644 --- a/ch6-dev/os/syscall/fs/fn.sys_write.html +++ b/ch6-dev/os/syscall/fs/fn.sys_write.html @@ -1,8 +1 @@ -sys_write in os::syscall::fs - Rust - -
    -

    Function os::syscall::fs::sys_write

    source · []
    pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize
    - \ No newline at end of file +sys_write in os::syscall::fs - Rust

    Function os::syscall::fs::sys_write

    source ·
    pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/index.html b/ch6-dev/os/syscall/fs/index.html index 70ce2c2e..0ce5cf99 100644 --- a/ch6-dev/os/syscall/fs/index.html +++ b/ch6-dev/os/syscall/fs/index.html @@ -1,10 +1,2 @@ -os::syscall::fs - Rust - -
    -

    Module os::syscall::fs

    source · []
    Expand description

    File and filesystem-related syscalls

    -

    Functions

    -
    - \ No newline at end of file +os::syscall::fs - Rust

    Module os::syscall::fs

    source ·
    Expand description

    File and filesystem-related syscalls

    +

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/syscall/fs/sidebar-items.js b/ch6-dev/os/syscall/fs/sidebar-items.js index e104a6f0..73bb9b45 100644 --- a/ch6-dev/os/syscall/fs/sidebar-items.js +++ b/ch6-dev/os/syscall/fs/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["sys_close",""],["sys_open",""],["sys_read",""],["sys_write",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["sys_close","sys_open","sys_read","sys_write"]}; \ No newline at end of file diff --git a/ch6-dev/os/syscall/index.html b/ch6-dev/os/syscall/index.html index 9abd44a5..2325f71a 100644 --- a/ch6-dev/os/syscall/index.html +++ b/ch6-dev/os/syscall/index.html @@ -1,22 +1,10 @@ -os::syscall - Rust - -
    -

    Module os::syscall

    source · []
    Expand description

    Implementation of syscalls

    -

    The single entry point to all system calls, syscall(), is called +os::syscall - Rust

    Module os::syscall

    source ·
    Expand description

    Implementation of syscalls

    +

    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 U-mode’ exception, which is handled as one of the cases in -crate::trap::trap_handler.

    +crate::trap::trap_handler.

    For clarity, each single syscall is implemented as its own function, named sys_ then the name of the syscall. You can find functions like this in submodules, and you should also implement syscalls this way.

    -

    Modules

    -
    fs 🔒

    File and filesystem-related syscalls

    -
    process 🔒

    Constants

    -

    Functions

    -

    handle syscall exception with syscall_id and other arguments

    -
    - \ No newline at end of file +

    Modules

    • fs 🔒
      File and filesystem-related syscalls
    • process 🔒

    Constants

    Functions

    • handle syscall exception with syscall_id and other arguments
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_exec.html b/ch6-dev/os/syscall/process/fn.sys_exec.html index 78d91f39..829078c0 100644 --- a/ch6-dev/os/syscall/process/fn.sys_exec.html +++ b/ch6-dev/os/syscall/process/fn.sys_exec.html @@ -1,8 +1 @@ -sys_exec in os::syscall::process - Rust - -
    pub fn sys_exec(path: *const u8) -> isize
    - \ No newline at end of file +sys_exec in os::syscall::process - Rust

    Function os::syscall::process::sys_exec

    source ·
    pub fn sys_exec(path: *const u8) -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_exit.html b/ch6-dev/os/syscall/process/fn.sys_exit.html index 4455a982..6d684faf 100644 --- a/ch6-dev/os/syscall/process/fn.sys_exit.html +++ b/ch6-dev/os/syscall/process/fn.sys_exit.html @@ -1,8 +1 @@ -sys_exit in os::syscall::process - Rust - -
    pub fn sys_exit(exit_code: i32) -> !
    - \ No newline at end of file +sys_exit in os::syscall::process - Rust

    Function os::syscall::process::sys_exit

    source ·
    pub fn sys_exit(exit_code: i32) -> !
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_fork.html b/ch6-dev/os/syscall/process/fn.sys_fork.html index 32ff7296..e56df4b8 100644 --- a/ch6-dev/os/syscall/process/fn.sys_fork.html +++ b/ch6-dev/os/syscall/process/fn.sys_fork.html @@ -1,8 +1 @@ -sys_fork in os::syscall::process - Rust - -
    pub fn sys_fork() -> isize
    - \ No newline at end of file +sys_fork in os::syscall::process - Rust

    Function os::syscall::process::sys_fork

    source ·
    pub fn sys_fork() -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_get_time.html b/ch6-dev/os/syscall/process/fn.sys_get_time.html index 67e92816..5d5f7a7e 100644 --- a/ch6-dev/os/syscall/process/fn.sys_get_time.html +++ b/ch6-dev/os/syscall/process/fn.sys_get_time.html @@ -1,8 +1 @@ -sys_get_time in os::syscall::process - Rust - -
    pub fn sys_get_time() -> isize
    - \ No newline at end of file +sys_get_time in os::syscall::process - Rust

    Function os::syscall::process::sys_get_time

    source ·
    pub fn sys_get_time() -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_getpid.html b/ch6-dev/os/syscall/process/fn.sys_getpid.html index 0f919c59..e11ffb87 100644 --- a/ch6-dev/os/syscall/process/fn.sys_getpid.html +++ b/ch6-dev/os/syscall/process/fn.sys_getpid.html @@ -1,8 +1 @@ -sys_getpid in os::syscall::process - Rust - -
    pub fn sys_getpid() -> isize
    - \ No newline at end of file +sys_getpid in os::syscall::process - Rust

    Function os::syscall::process::sys_getpid

    source ·
    pub fn sys_getpid() -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_waitpid.html b/ch6-dev/os/syscall/process/fn.sys_waitpid.html index a24959fe..edb9ca37 100644 --- a/ch6-dev/os/syscall/process/fn.sys_waitpid.html +++ b/ch6-dev/os/syscall/process/fn.sys_waitpid.html @@ -1,10 +1,3 @@ -sys_waitpid in os::syscall::process - Rust - -
    pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize
    Expand description

    If there is not a child process whose pid is same as given, return -1. +sys_waitpid in os::syscall::process - Rust

    Function os::syscall::process::sys_waitpid

    source ·
    pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize
    Expand description

    If there is not a child process whose pid is same as given, return -1. Else if there is a child process but it is still running, return -2.

    -
    - \ No newline at end of file +
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/fn.sys_yield.html b/ch6-dev/os/syscall/process/fn.sys_yield.html index 25478be0..9394cfd2 100644 --- a/ch6-dev/os/syscall/process/fn.sys_yield.html +++ b/ch6-dev/os/syscall/process/fn.sys_yield.html @@ -1,8 +1 @@ -sys_yield in os::syscall::process - Rust - -
    pub fn sys_yield() -> isize
    - \ No newline at end of file +sys_yield in os::syscall::process - Rust

    Function os::syscall::process::sys_yield

    source ·
    pub fn sys_yield() -> isize
    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/index.html b/ch6-dev/os/syscall/process/index.html index 1ea53cd8..25102bc6 100644 --- a/ch6-dev/os/syscall/process/index.html +++ b/ch6-dev/os/syscall/process/index.html @@ -1,11 +1,2 @@ -os::syscall::process - Rust - -
    -

    Module os::syscall::process

    source · []

    Functions

    -

    If there is not a child process whose pid is same as given, return -1. -Else if there is a child process but it is still running, return -2.

    -
    - \ No newline at end of file +os::syscall::process - Rust

    Module os::syscall::process

    source ·

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/syscall/process/sidebar-items.js b/ch6-dev/os/syscall/process/sidebar-items.js index 5d43519f..c7cff172 100644 --- a/ch6-dev/os/syscall/process/sidebar-items.js +++ b/ch6-dev/os/syscall/process/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["sys_exec",""],["sys_exit",""],["sys_fork",""],["sys_get_time",""],["sys_getpid",""],["sys_waitpid","If there is not a child process whose pid is same as given, return -1. Else if there is a child process but it is still running, return -2."],["sys_yield",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_waitpid","sys_yield"]}; \ No newline at end of file diff --git a/ch6-dev/os/syscall/sidebar-items.js b/ch6-dev/os/syscall/sidebar-items.js index c9722296..202b0227 100644 --- a/ch6-dev/os/syscall/sidebar-items.js +++ b/ch6-dev/os/syscall/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["SYSCALL_CLOSE",""],["SYSCALL_EXEC",""],["SYSCALL_EXIT",""],["SYSCALL_FORK",""],["SYSCALL_GETPID",""],["SYSCALL_GET_TIME",""],["SYSCALL_OPEN",""],["SYSCALL_READ",""],["SYSCALL_WAITPID",""],["SYSCALL_WRITE",""],["SYSCALL_YIELD",""]],"fn":[["syscall","handle syscall exception with `syscall_id` and other arguments"]],"mod":[["fs","File and filesystem-related syscalls"],["process",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["SYSCALL_CLOSE","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GET_TIME","SYSCALL_OPEN","SYSCALL_READ","SYSCALL_WAITPID","SYSCALL_WRITE","SYSCALL_YIELD"],"fn":["syscall"],"mod":["fs","process"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/constant.IDLE_PID.html b/ch6-dev/os/task/constant.IDLE_PID.html index ee6cbfd5..35b9e6d5 100644 --- a/ch6-dev/os/task/constant.IDLE_PID.html +++ b/ch6-dev/os/task/constant.IDLE_PID.html @@ -1,9 +1,2 @@ -IDLE_PID in os::task - Rust - -
    -

    Constant os::task::IDLE_PID

    source · []
    pub const IDLE_PID: usize = 0;
    Expand description

    pid of usertests app in make run TEST=1

    -
    - \ No newline at end of file +IDLE_PID in os::task - Rust

    Constant os::task::IDLE_PID

    source ·
    pub const IDLE_PID: usize = 0;
    Expand description

    pid of usertests app in make run TEST=1

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/context/index.html b/ch6-dev/os/task/context/index.html index 209177cd..0fed0d17 100644 --- a/ch6-dev/os/task/context/index.html +++ b/ch6-dev/os/task/context/index.html @@ -1,11 +1,2 @@ -os::task::context - Rust - -
    -

    Module os::task::context

    source · []
    Expand description

    Implementation of TaskContext

    -

    Structs

    -

    task context structure containing some registers

    -
    - \ No newline at end of file +os::task::context - Rust

    Module os::task::context

    source ·
    Expand description

    Implementation of TaskContext

    +

    Structs

    • task context structure containing some registers
    \ No newline at end of file diff --git a/ch6-dev/os/task/context/sidebar-items.js b/ch6-dev/os/task/context/sidebar-items.js index c68c1891..f64436cc 100644 --- a/ch6-dev/os/task/context/sidebar-items.js +++ b/ch6-dev/os/task/context/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["TaskContext","task context structure containing some registers"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["TaskContext"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/context/struct.TaskContext.html b/ch6-dev/os/task/context/struct.TaskContext.html index f596bb56..49ceaaf9 100644 --- a/ch6-dev/os/task/context/struct.TaskContext.html +++ b/ch6-dev/os/task/context/struct.TaskContext.html @@ -1,29 +1,21 @@ -TaskContext in os::task::context - Rust - -
    #[repr(C)]
    pub struct TaskContext { +TaskContext in os::task::context - Rust

    Struct os::task::context::TaskContext

    source ·
    #[repr(C)]
    pub struct TaskContext { ra: usize, sp: usize, - s: [usize; 12], -}
    Expand description

    task context structure containing some registers

    -

    Fields

    ra: usize

    return address ( e.g. __restore ) of __switch ASM function

    -
    sp: usize

    kernel stack pointer of app

    -
    s: [usize; 12]

    s0-11 register, callee saved

    -

    Implementations

    init task context

    -

    set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    + s: [usize; 12], +}
    Expand description

    task context structure containing some registers

    +

    Fields§

    §ra: usize

    return address ( e.g. __restore ) of __switch ASM function

    +
    §sp: usize

    kernel stack pointer of app

    +
    §s: [usize; 12]

    s0-11 register, callee saved

    +

    Implementations§

    source§

    impl TaskContext

    source

    pub fn zero_init() -> Self

    init task context

    +
    source

    pub fn goto_trap_return(kstack_ptr: usize) -> Self

    set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.add_initproc.html b/ch6-dev/os/task/fn.add_initproc.html index b6f7029d..1eb272dd 100644 --- a/ch6-dev/os/task/fn.add_initproc.html +++ b/ch6-dev/os/task/fn.add_initproc.html @@ -1,9 +1,2 @@ -add_initproc in os::task - Rust - -
    -

    Function os::task::add_initproc

    source · []
    pub fn add_initproc()
    Expand description

    Add init process to the manager

    -
    - \ No newline at end of file +add_initproc in os::task - Rust

    Function os::task::add_initproc

    source ·
    pub fn add_initproc()
    Expand description

    Add init process to the manager

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.add_task.html b/ch6-dev/os/task/fn.add_task.html index f9e1b627..c88b999b 100644 --- a/ch6-dev/os/task/fn.add_task.html +++ b/ch6-dev/os/task/fn.add_task.html @@ -1,9 +1,2 @@ -add_task in os::task - Rust - -
    -

    Function os::task::add_task

    source · []
    pub fn add_task(task: Arc<TaskControlBlock>)
    Expand description

    Interface offered to add task

    -
    - \ No newline at end of file +add_task in os::task - Rust

    Function os::task::add_task

    source ·
    pub fn add_task(task: Arc<TaskControlBlock>)
    Expand description

    Interface offered to add task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.current_task.html b/ch6-dev/os/task/fn.current_task.html index 08c15734..8306af47 100644 --- a/ch6-dev/os/task/fn.current_task.html +++ b/ch6-dev/os/task/fn.current_task.html @@ -1,9 +1,2 @@ -current_task in os::task - Rust - -
    -

    Function os::task::current_task

    source · []
    pub fn current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Get running task

    -
    - \ No newline at end of file +current_task in os::task - Rust

    Function os::task::current_task

    source ·
    pub fn current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Get running task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.current_trap_cx.html b/ch6-dev/os/task/fn.current_trap_cx.html index 3a49b090..293cd33c 100644 --- a/ch6-dev/os/task/fn.current_trap_cx.html +++ b/ch6-dev/os/task/fn.current_trap_cx.html @@ -1,9 +1,2 @@ -current_trap_cx in os::task - Rust - -
    pub fn current_trap_cx() -> &'static mut TrapContext
    Expand description

    Get the mutable reference to trap context of current task

    -
    - \ No newline at end of file +current_trap_cx in os::task - Rust

    Function os::task::current_trap_cx

    source ·
    pub fn current_trap_cx() -> &'static mut TrapContext
    Expand description

    Get the mutable reference to trap context of current task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.current_user_token.html b/ch6-dev/os/task/fn.current_user_token.html index 18e6e449..66e6c27a 100644 --- a/ch6-dev/os/task/fn.current_user_token.html +++ b/ch6-dev/os/task/fn.current_user_token.html @@ -1,9 +1,2 @@ -current_user_token in os::task - Rust - -
    pub fn current_user_token() -> usize
    Expand description

    Get token of the address space of current task

    -
    - \ No newline at end of file +current_user_token in os::task - Rust

    Function os::task::current_user_token

    source ·
    pub fn current_user_token() -> usize
    Expand description

    Get token of the address space of current task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.exit_current_and_run_next.html b/ch6-dev/os/task/fn.exit_current_and_run_next.html index b429ae77..88f0dc87 100644 --- a/ch6-dev/os/task/fn.exit_current_and_run_next.html +++ b/ch6-dev/os/task/fn.exit_current_and_run_next.html @@ -1,9 +1,2 @@ -exit_current_and_run_next in os::task - Rust - -
    pub fn exit_current_and_run_next(exit_code: i32)
    Expand description

    Exit the current ‘Running’ task and run the next task in task list.

    -
    - \ No newline at end of file +exit_current_and_run_next in os::task - Rust
    pub fn exit_current_and_run_next(exit_code: i32)
    Expand description

    Exit the current ‘Running’ task and run the next task in task list.

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.fetch_task.html b/ch6-dev/os/task/fn.fetch_task.html index 6e62c16f..2d27aa7c 100644 --- a/ch6-dev/os/task/fn.fetch_task.html +++ b/ch6-dev/os/task/fn.fetch_task.html @@ -1,9 +1,2 @@ -fetch_task in os::task - Rust - -
    -

    Function os::task::fetch_task

    source · []
    pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Interface offered to pop the first task

    -
    - \ No newline at end of file +fetch_task in os::task - Rust

    Function os::task::fetch_task

    source ·
    pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Interface offered to pop the first task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.pid_alloc.html b/ch6-dev/os/task/fn.pid_alloc.html index 435d7577..4cf1a968 100644 --- a/ch6-dev/os/task/fn.pid_alloc.html +++ b/ch6-dev/os/task/fn.pid_alloc.html @@ -1,9 +1,2 @@ -pid_alloc in os::task - Rust - -
    -

    Function os::task::pid_alloc

    source · []
    pub fn pid_alloc() -> PidHandle
    Expand description

    Allocate a pid from PID_ALLOCATOR

    -
    - \ No newline at end of file +pid_alloc in os::task - Rust

    Function os::task::pid_alloc

    source ·
    pub fn pid_alloc() -> PidHandle
    Expand description

    Allocate a pid from PID_ALLOCATOR

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.run_tasks.html b/ch6-dev/os/task/fn.run_tasks.html index 0f2a2d6c..fde15911 100644 --- a/ch6-dev/os/task/fn.run_tasks.html +++ b/ch6-dev/os/task/fn.run_tasks.html @@ -1,10 +1,3 @@ -run_tasks in os::task - Rust - -
    -

    Function os::task::run_tasks

    source · []
    pub fn run_tasks()
    Expand description

    The main part of process execution and scheduling +run_tasks in os::task - Rust

    Function os::task::run_tasks

    source ·
    pub fn run_tasks()
    Expand description

    The main part of process execution and scheduling Loop fetch_task to get the process that needs to run, and switch the process through __switch

    -
    - \ No newline at end of file +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.schedule.html b/ch6-dev/os/task/fn.schedule.html index 6f39f65b..142ea291 100644 --- a/ch6-dev/os/task/fn.schedule.html +++ b/ch6-dev/os/task/fn.schedule.html @@ -1,9 +1,2 @@ -schedule in os::task - Rust - -
    -

    Function os::task::schedule

    source · []
    pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
    Expand description

    Return to idle control flow for new scheduling

    -
    - \ No newline at end of file +schedule in os::task - Rust

    Function os::task::schedule

    source ·
    pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
    Expand description

    Return to idle control flow for new scheduling

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.suspend_current_and_run_next.html b/ch6-dev/os/task/fn.suspend_current_and_run_next.html index 2f0dd6d0..492144f0 100644 --- a/ch6-dev/os/task/fn.suspend_current_and_run_next.html +++ b/ch6-dev/os/task/fn.suspend_current_and_run_next.html @@ -1,9 +1,2 @@ -suspend_current_and_run_next in os::task - Rust - -
    pub fn suspend_current_and_run_next()
    Expand description

    Suspend the current ‘Running’ task and run the next task in task list.

    -
    - \ No newline at end of file +suspend_current_and_run_next in os::task - Rust
    pub fn suspend_current_and_run_next()
    Expand description

    Suspend the current ‘Running’ task and run the next task in task list.

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/fn.take_current_task.html b/ch6-dev/os/task/fn.take_current_task.html index 0219d701..c8466f8a 100644 --- a/ch6-dev/os/task/fn.take_current_task.html +++ b/ch6-dev/os/task/fn.take_current_task.html @@ -1,9 +1,2 @@ -take_current_task in os::task - Rust - -
    pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Take the current task,leaving a None in its place

    -
    - \ No newline at end of file +take_current_task in os::task - Rust

    Function os::task::take_current_task

    source ·
    pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Take the current task,leaving a None in its place

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/index.html b/ch6-dev/os/task/index.html index 6d277ff3..c3882030 100644 --- a/ch6-dev/os/task/index.html +++ b/ch6-dev/os/task/index.html @@ -1,50 +1,13 @@ -os::task - Rust - -
    -

    Module os::task

    source · []
    Expand description

    Task management implementation

    +os::task - Rust

    Module os::task

    source ·
    Expand description

    Task management implementation

    Everything about task management, like starting and switching tasks is implemented here.

    -

    A single global instance of TaskManager called TASK_MANAGER controls +

    A single global instance of TaskManager called TASK_MANAGER controls all the tasks in the whole operating system.

    -

    A single global instance of Processor called PROCESSOR monitors running +

    A single global instance of Processor called PROCESSOR monitors running task(s) for each core.

    -

    A single global instance of PidAllocator called PID_ALLOCATOR allocates +

    A single global instance of PidAllocator called PID_ALLOCATOR allocates pid for user apps.

    Be careful when you see __switch ASM function in switch.S. Control flow around this function might not be what you expect.

    -

    Modules

    -
    context 🔒

    Implementation of TaskContext

    -
    manager 🔒

    Implementation of TaskManager

    -
    pid 🔒

    Implementation of PidAllocator

    -
    processor 🔒

    Implementation of Processor and Intersection of control flow

    -
    switch 🔒

    Wrap switch.S as a function

    -
    task 🔒

    Implementation of TaskControlBlock

    -

    Structs

    -

    Globle process that init user shell

    -

    Kernelstack for app

    -

    Pid Allocator struct

    -

    Bind pid lifetime to PidHandle

    -

    Processor management structure

    -

    task context structure containing some registers

    -

    A array of TaskControlBlock that is thread-safe

    -

    Constants

    -

    pid of usertests app in make run TEST=1

    -

    Functions

    -

    Add init process to the manager

    -

    Interface offered to add task

    -

    Get running task

    -

    Get the mutable reference to trap context of current task

    -

    Get token of the address space of current task

    -

    Exit the current ‘Running’ task and run the next task in task list.

    -

    Interface offered to pop the first task

    -

    Allocate a pid from PID_ALLOCATOR

    -

    The main part of process execution and scheduling -Loop fetch_task to get the process that needs to run, and switch the process through __switch

    -

    Return to idle control flow for new scheduling

    -

    Suspend the current ‘Running’ task and run the next task in task list.

    -

    Take the current task,leaving a None in its place

    -
    - \ No newline at end of file +

    Modules

    Structs

    Constants

    • pid of usertests app in make run TEST=1

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/task/manager/fn.add_task.html b/ch6-dev/os/task/manager/fn.add_task.html index cf550e9a..f101e4fc 100644 --- a/ch6-dev/os/task/manager/fn.add_task.html +++ b/ch6-dev/os/task/manager/fn.add_task.html @@ -1,9 +1,2 @@ -add_task in os::task::manager - Rust - -
    -

    Function os::task::manager::add_task

    source · []
    pub fn add_task(task: Arc<TaskControlBlock>)
    Expand description

    Interface offered to add task

    -
    - \ No newline at end of file +add_task in os::task::manager - Rust

    Function os::task::manager::add_task

    source ·
    pub fn add_task(task: Arc<TaskControlBlock>)
    Expand description

    Interface offered to add task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/manager/fn.fetch_task.html b/ch6-dev/os/task/manager/fn.fetch_task.html index ae80d78b..080b520b 100644 --- a/ch6-dev/os/task/manager/fn.fetch_task.html +++ b/ch6-dev/os/task/manager/fn.fetch_task.html @@ -1,9 +1,2 @@ -fetch_task in os::task::manager - Rust - -
    pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Interface offered to pop the first task

    -
    - \ No newline at end of file +fetch_task in os::task::manager - Rust

    Function os::task::manager::fetch_task

    source ·
    pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Interface offered to pop the first task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/manager/index.html b/ch6-dev/os/task/manager/index.html index ef4a8063..e3cf325f 100644 --- a/ch6-dev/os/task/manager/index.html +++ b/ch6-dev/os/task/manager/index.html @@ -1,14 +1,2 @@ -os::task::manager - Rust - -
    -

    Module os::task::manager

    source · []
    Expand description

    Implementation of TaskManager

    -

    Structs

    -

    A array of TaskControlBlock that is thread-safe

    -

    Functions

    -

    Interface offered to add task

    -

    Interface offered to pop the first task

    -
    - \ No newline at end of file +os::task::manager - Rust

    Module os::task::manager

    source ·
    Expand description

    Implementation of TaskManager

    +

    Structs

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/task/manager/sidebar-items.js b/ch6-dev/os/task/manager/sidebar-items.js index 66fe2851..4f27ad34 100644 --- a/ch6-dev/os/task/manager/sidebar-items.js +++ b/ch6-dev/os/task/manager/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["add_task","Interface offered to add task"],["fetch_task","Interface offered to pop the first task"]],"struct":[["TASK_MANAGER",""],["TaskManager","A array of `TaskControlBlock` that is thread-safe"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["add_task","fetch_task"],"struct":["TASK_MANAGER","TaskManager"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/manager/struct.TASK_MANAGER.html b/ch6-dev/os/task/manager/struct.TASK_MANAGER.html index f6b2ea71..4d15e8d2 100644 --- a/ch6-dev/os/task/manager/struct.TASK_MANAGER.html +++ b/ch6-dev/os/task/manager/struct.TASK_MANAGER.html @@ -1,24 +1,14 @@ -TASK_MANAGER in os::task::manager - Rust - -
    pub struct TASK_MANAGER {
    +TASK_MANAGER in os::task::manager - Rust

    Struct os::task::manager::TASK_MANAGER

    source ·
    pub struct TASK_MANAGER {
         __private_field: (),
    -}

    Fields

    __private_field: ()

    Methods from Deref<Target = UPSafeCell<TaskManager>>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §__private_field: ()

    Methods from Deref<Target = UPSafeCell<TaskManager>>§

    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl Deref for TASK_MANAGER

    §

    type Target = UPSafeCell<TaskManager>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &UPSafeCell<TaskManager>

    Dereferences the value.
    source§

    impl LazyStatic for TASK_MANAGER

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/manager/struct.TaskManager.html b/ch6-dev/os/task/manager/struct.TaskManager.html index be9d8d65..e8518360 100644 --- a/ch6-dev/os/task/manager/struct.TaskManager.html +++ b/ch6-dev/os/task/manager/struct.TaskManager.html @@ -1,26 +1,18 @@ -TaskManager in os::task::manager - Rust - -
    pub struct TaskManager {
    +TaskManager in os::task::manager - Rust

    Struct os::task::manager::TaskManager

    source ·
    pub struct TaskManager {
         ready_queue: VecDeque<Arc<TaskControlBlock>>,
    -}
    Expand description

    A array of TaskControlBlock that is thread-safe

    -

    Fields

    ready_queue: VecDeque<Arc<TaskControlBlock>>

    Implementations

    A simple FIFO scheduler.

    -

    Creat an empty TaskManager

    -

    Add a task to TaskManager

    -

    Remove the first task and return it,or None if TaskManager is empty

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    A array of TaskControlBlock that is thread-safe

    +

    Fields§

    §ready_queue: VecDeque<Arc<TaskControlBlock>>

    Implementations§

    source§

    impl TaskManager

    A simple FIFO scheduler.

    +
    source

    pub fn new() -> Self

    Creat an empty TaskManager

    +
    source

    pub fn add(&mut self, task: Arc<TaskControlBlock>)

    Add a task to TaskManager

    +
    source

    pub fn fetch(&mut self) -> Option<Arc<TaskControlBlock>>

    Remove the first task and return it,or None if TaskManager is empty

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/fn.kernel_stack_position.html b/ch6-dev/os/task/pid/fn.kernel_stack_position.html index 1d753eb5..05f462a2 100644 --- a/ch6-dev/os/task/pid/fn.kernel_stack_position.html +++ b/ch6-dev/os/task/pid/fn.kernel_stack_position.html @@ -1,9 +1,2 @@ -kernel_stack_position in os::task::pid - Rust - -
    pub fn kernel_stack_position(app_id: usize) -> (usize, usize)
    Expand description

    Return (bottom, top) of a kernel stack in kernel space.

    -
    - \ No newline at end of file +kernel_stack_position in os::task::pid - Rust

    Function os::task::pid::kernel_stack_position

    source ·
    pub fn kernel_stack_position(app_id: usize) -> (usize, usize)
    Expand description

    Return (bottom, top) of a kernel stack in kernel space.

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/fn.pid_alloc.html b/ch6-dev/os/task/pid/fn.pid_alloc.html index 609c8046..8599352c 100644 --- a/ch6-dev/os/task/pid/fn.pid_alloc.html +++ b/ch6-dev/os/task/pid/fn.pid_alloc.html @@ -1,9 +1,2 @@ -pid_alloc in os::task::pid - Rust - -
    -

    Function os::task::pid::pid_alloc

    source · []
    pub fn pid_alloc() -> PidHandle
    Expand description

    Allocate a pid from PID_ALLOCATOR

    -
    - \ No newline at end of file +pid_alloc in os::task::pid - Rust

    Function os::task::pid::pid_alloc

    source ·
    pub fn pid_alloc() -> PidHandle
    Expand description

    Allocate a pid from PID_ALLOCATOR

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/index.html b/ch6-dev/os/task/pid/index.html index 282c53d2..80be16d4 100644 --- a/ch6-dev/os/task/pid/index.html +++ b/ch6-dev/os/task/pid/index.html @@ -1,16 +1,2 @@ -os::task::pid - Rust - -
    -

    Module os::task::pid

    source · []
    Expand description

    Implementation of PidAllocator

    -

    Structs

    -

    Kernelstack for app

    -

    Pid Allocator struct

    -

    Bind pid lifetime to PidHandle

    -

    Functions

    -

    Return (bottom, top) of a kernel stack in kernel space.

    -

    Allocate a pid from PID_ALLOCATOR

    -
    - \ No newline at end of file +os::task::pid - Rust

    Module os::task::pid

    source ·
    Expand description

    Implementation of PidAllocator

    +

    Structs

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/sidebar-items.js b/ch6-dev/os/task/pid/sidebar-items.js index 4a77f7f7..8392d298 100644 --- a/ch6-dev/os/task/pid/sidebar-items.js +++ b/ch6-dev/os/task/pid/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["kernel_stack_position","Return (bottom, top) of a kernel stack in kernel space."],["pid_alloc","Allocate a pid from PID_ALLOCATOR"]],"struct":[["KernelStack","Kernelstack for app"],["PID_ALLOCATOR",""],["PidAllocator","Pid Allocator struct"],["PidHandle","Bind pid lifetime to `PidHandle`"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["kernel_stack_position","pid_alloc"],"struct":["KernelStack","PID_ALLOCATOR","PidAllocator","PidHandle"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/pid/struct.KernelStack.html b/ch6-dev/os/task/pid/struct.KernelStack.html index 5c77859a..afa40ac9 100644 --- a/ch6-dev/os/task/pid/struct.KernelStack.html +++ b/ch6-dev/os/task/pid/struct.KernelStack.html @@ -1,26 +1,18 @@ -KernelStack in os::task::pid - Rust - -
    pub struct KernelStack {
    +KernelStack in os::task::pid - Rust

    Struct os::task::pid::KernelStack

    source ·
    pub struct KernelStack {
         pid: usize,
    -}
    Expand description

    Kernelstack for app

    -

    Fields

    pid: usize

    Implementations

    Create a kernelstack from pid

    -

    Push a value on top of kernelstack

    -

    Get the value on the top of kernelstack

    -

    Trait Implementations

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Kernelstack for app

    +

    Fields§

    §pid: usize

    Implementations§

    source§

    impl KernelStack

    source

    pub fn new(pid_handle: &PidHandle) -> Self

    Create a kernelstack from pid

    +
    source

    pub fn push_on_top<T>(&self, value: T) -> *mut Twhere + T: Sized,

    Push a value on top of kernelstack

    +
    source

    pub fn get_top(&self) -> usize

    Get the value on the top of kernelstack

    +

    Trait Implementations§

    source§

    impl Drop for KernelStack

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/struct.PID_ALLOCATOR.html b/ch6-dev/os/task/pid/struct.PID_ALLOCATOR.html index 450533db..1d230b19 100644 --- a/ch6-dev/os/task/pid/struct.PID_ALLOCATOR.html +++ b/ch6-dev/os/task/pid/struct.PID_ALLOCATOR.html @@ -1,24 +1,14 @@ -PID_ALLOCATOR in os::task::pid - Rust - -
    pub struct PID_ALLOCATOR {
    +PID_ALLOCATOR in os::task::pid - Rust

    Struct os::task::pid::PID_ALLOCATOR

    source ·
    pub struct PID_ALLOCATOR {
         __private_field: (),
    -}

    Fields

    __private_field: ()

    Methods from Deref<Target = UPSafeCell<PidAllocator>>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §__private_field: ()

    Methods from Deref<Target = UPSafeCell<PidAllocator>>§

    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl Deref for PID_ALLOCATOR

    §

    type Target = UPSafeCell<PidAllocator>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &UPSafeCell<PidAllocator>

    Dereferences the value.
    source§

    impl LazyStatic for PID_ALLOCATOR

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/struct.PidAllocator.html b/ch6-dev/os/task/pid/struct.PidAllocator.html index 60033447..1b4855a4 100644 --- a/ch6-dev/os/task/pid/struct.PidAllocator.html +++ b/ch6-dev/os/task/pid/struct.PidAllocator.html @@ -1,26 +1,18 @@ -PidAllocator in os::task::pid - Rust - -
    pub struct PidAllocator {
    +PidAllocator in os::task::pid - Rust

    Struct os::task::pid::PidAllocator

    source ·
    pub struct PidAllocator {
         current: usize,
         recycled: Vec<usize>,
    -}
    Expand description

    Pid Allocator struct

    -

    Fields

    current: usizerecycled: Vec<usize>

    Implementations

    Create an empty PidAllocator

    -

    Allocate a pid

    -

    Recycle a pid

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Pid Allocator struct

    +

    Fields§

    §current: usize§recycled: Vec<usize>

    Implementations§

    source§

    impl PidAllocator

    source

    pub fn new() -> Self

    Create an empty PidAllocator

    +
    source

    pub fn alloc(&mut self) -> PidHandle

    Allocate a pid

    +
    source

    pub fn dealloc(&mut self, pid: usize)

    Recycle a pid

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/pid/struct.PidHandle.html b/ch6-dev/os/task/pid/struct.PidHandle.html index 2440db00..2f41be36 100644 --- a/ch6-dev/os/task/pid/struct.PidHandle.html +++ b/ch6-dev/os/task/pid/struct.PidHandle.html @@ -1,21 +1,12 @@ -PidHandle in os::task::pid - Rust - -
    -

    Struct os::task::pid::PidHandle

    source · []
    pub struct PidHandle(pub usize);
    Expand description

    Bind pid lifetime to PidHandle

    -

    Tuple Fields

    0: usize

    Trait Implementations

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +PidHandle in os::task::pid - Rust

    Struct os::task::pid::PidHandle

    source ·
    pub struct PidHandle(pub usize);
    Expand description

    Bind pid lifetime to PidHandle

    +

    Tuple Fields§

    §0: usize

    Trait Implementations§

    source§

    impl Drop for PidHandle

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.current_task.html b/ch6-dev/os/task/processor/fn.current_task.html index 0735123c..b89ecbb4 100644 --- a/ch6-dev/os/task/processor/fn.current_task.html +++ b/ch6-dev/os/task/processor/fn.current_task.html @@ -1,9 +1,2 @@ -current_task in os::task::processor - Rust - -
    pub fn current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Get running task

    -
    - \ No newline at end of file +current_task in os::task::processor - Rust

    Function os::task::processor::current_task

    source ·
    pub fn current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Get running task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.current_trap_cx.html b/ch6-dev/os/task/processor/fn.current_trap_cx.html index 5cafec54..2c0ef498 100644 --- a/ch6-dev/os/task/processor/fn.current_trap_cx.html +++ b/ch6-dev/os/task/processor/fn.current_trap_cx.html @@ -1,9 +1,2 @@ -current_trap_cx in os::task::processor - Rust - -
    pub fn current_trap_cx() -> &'static mut TrapContext
    Expand description

    Get the mutable reference to trap context of current task

    -
    - \ No newline at end of file +current_trap_cx in os::task::processor - Rust

    Function os::task::processor::current_trap_cx

    source ·
    pub fn current_trap_cx() -> &'static mut TrapContext
    Expand description

    Get the mutable reference to trap context of current task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.current_user_token.html b/ch6-dev/os/task/processor/fn.current_user_token.html index 1223abb4..61122ac5 100644 --- a/ch6-dev/os/task/processor/fn.current_user_token.html +++ b/ch6-dev/os/task/processor/fn.current_user_token.html @@ -1,9 +1,2 @@ -current_user_token in os::task::processor - Rust - -
    pub fn current_user_token() -> usize
    Expand description

    Get token of the address space of current task

    -
    - \ No newline at end of file +current_user_token in os::task::processor - Rust
    pub fn current_user_token() -> usize
    Expand description

    Get token of the address space of current task

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.run_tasks.html b/ch6-dev/os/task/processor/fn.run_tasks.html index 2016e34f..d8a6d6cc 100644 --- a/ch6-dev/os/task/processor/fn.run_tasks.html +++ b/ch6-dev/os/task/processor/fn.run_tasks.html @@ -1,10 +1,3 @@ -run_tasks in os::task::processor - Rust - -
    pub fn run_tasks()
    Expand description

    The main part of process execution and scheduling +run_tasks in os::task::processor - Rust

    Function os::task::processor::run_tasks

    source ·
    pub fn run_tasks()
    Expand description

    The main part of process execution and scheduling Loop fetch_task to get the process that needs to run, and switch the process through __switch

    -
    - \ No newline at end of file +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.schedule.html b/ch6-dev/os/task/processor/fn.schedule.html index 00df90ea..02470d31 100644 --- a/ch6-dev/os/task/processor/fn.schedule.html +++ b/ch6-dev/os/task/processor/fn.schedule.html @@ -1,9 +1,2 @@ -schedule in os::task::processor - Rust - -
    pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
    Expand description

    Return to idle control flow for new scheduling

    -
    - \ No newline at end of file +schedule in os::task::processor - Rust

    Function os::task::processor::schedule

    source ·
    pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
    Expand description

    Return to idle control flow for new scheduling

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/fn.take_current_task.html b/ch6-dev/os/task/processor/fn.take_current_task.html index 5041f930..8545c8cf 100644 --- a/ch6-dev/os/task/processor/fn.take_current_task.html +++ b/ch6-dev/os/task/processor/fn.take_current_task.html @@ -1,9 +1,2 @@ -take_current_task in os::task::processor - Rust - -
    pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Take the current task,leaving a None in its place

    -
    - \ No newline at end of file +take_current_task in os::task::processor - Rust
    pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
    Expand description

    Take the current task,leaving a None in its place

    +
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/index.html b/ch6-dev/os/task/processor/index.html index e3a83114..ed6018f8 100644 --- a/ch6-dev/os/task/processor/index.html +++ b/ch6-dev/os/task/processor/index.html @@ -1,19 +1,3 @@ -os::task::processor - Rust - -
    -

    Module os::task::processor

    source · []
    Expand description

    Implementation of Processor and Intersection of control flow

    -

    Structs

    -

    Processor management structure

    -

    Functions

    -

    Get running task

    -

    Get the mutable reference to trap context of current task

    -

    Get token of the address space of current task

    -

    The main part of process execution and scheduling -Loop fetch_task to get the process that needs to run, and switch the process through __switch

    -

    Return to idle control flow for new scheduling

    -

    Take the current task,leaving a None in its place

    -
    - \ No newline at end of file +os::task::processor - Rust

    Module os::task::processor

    source ·
    Expand description

    Implementation of Processor and Intersection of control flow

    +

    Structs

    Functions

    • Get running task
    • Get the mutable reference to trap context of current task
    • Get token of the address space of current task
    • The main part of process execution and scheduling +Loop fetch_task to get the process that needs to run, and switch the process through __switch
    • Return to idle control flow for new scheduling
    • Take the current task,leaving a None in its place
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/sidebar-items.js b/ch6-dev/os/task/processor/sidebar-items.js index 1ffd68de..567a9a18 100644 --- a/ch6-dev/os/task/processor/sidebar-items.js +++ b/ch6-dev/os/task/processor/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["current_task","Get running task"],["current_trap_cx","Get the mutable reference to trap context of current task"],["current_user_token","Get token of the address space of current task"],["run_tasks","The main part of process execution and scheduling Loop `fetch_task` to get the process that needs to run, and switch the process through `__switch`"],["schedule","Return to idle control flow for new scheduling"],["take_current_task","Take the current task,leaving a None in its place"]],"struct":[["PROCESSOR",""],["Processor","Processor management structure"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["current_task","current_trap_cx","current_user_token","run_tasks","schedule","take_current_task"],"struct":["PROCESSOR","Processor"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/processor/struct.PROCESSOR.html b/ch6-dev/os/task/processor/struct.PROCESSOR.html index bd114840..00bdc4df 100644 --- a/ch6-dev/os/task/processor/struct.PROCESSOR.html +++ b/ch6-dev/os/task/processor/struct.PROCESSOR.html @@ -1,24 +1,14 @@ -PROCESSOR in os::task::processor - Rust - -
    pub struct PROCESSOR {
    +PROCESSOR in os::task::processor - Rust

    Struct os::task::processor::PROCESSOR

    source ·
    pub struct PROCESSOR {
         __private_field: (),
    -}

    Fields

    __private_field: ()

    Methods from Deref<Target = UPSafeCell<Processor>>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    -

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §__private_field: ()

    Methods from Deref<Target = UPSafeCell<Processor>>§

    source

    pub fn exclusive_access(&self) -> RefMut<'_, T>

    Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.

    +

    Trait Implementations§

    source§

    impl Deref for PROCESSOR

    §

    type Target = UPSafeCell<Processor>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &UPSafeCell<Processor>

    Dereferences the value.
    source§

    impl LazyStatic for PROCESSOR

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/processor/struct.Processor.html b/ch6-dev/os/task/processor/struct.Processor.html index 7b7da15f..fd743a7d 100644 --- a/ch6-dev/os/task/processor/struct.Processor.html +++ b/ch6-dev/os/task/processor/struct.Processor.html @@ -1,29 +1,21 @@ -Processor in os::task::processor - Rust - -
    pub struct Processor {
    +Processor in os::task::processor - Rust

    Struct os::task::processor::Processor

    source ·
    pub struct Processor {
         current: Option<Arc<TaskControlBlock>>,
         idle_task_cx: TaskContext,
    -}
    Expand description

    Processor management structure

    -

    Fields

    current: Option<Arc<TaskControlBlock>>

    The task currently executing on the current processor

    -
    idle_task_cx: TaskContext

    The basic control flow of each core, helping to select and switch process

    -

    Implementations

    Create an empty Processor

    -

    Get mutable reference to idle_task_cx

    -

    Get current task in moving semanteme

    -

    Get current task in cloning semanteme

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Processor management structure

    +

    Fields§

    §current: Option<Arc<TaskControlBlock>>

    The task currently executing on the current processor

    +
    §idle_task_cx: TaskContext

    The basic control flow of each core, helping to select and switch process

    +

    Implementations§

    source§

    impl Processor

    source

    pub fn new() -> Self

    Create an empty Processor

    +
    source

    fn get_idle_task_cx_ptr(&mut self) -> *mut TaskContext

    Get mutable reference to idle_task_cx

    +
    source

    pub fn take_current(&mut self) -> Option<Arc<TaskControlBlock>>

    Get current task in moving semanteme

    +
    source

    pub fn current(&self) -> Option<Arc<TaskControlBlock>>

    Get current task in cloning semanteme

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/sidebar-items.js b/ch6-dev/os/task/sidebar-items.js index 7eb28cf4..d5317e17 100644 --- a/ch6-dev/os/task/sidebar-items.js +++ b/ch6-dev/os/task/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["IDLE_PID","pid of usertests app in make run TEST=1"]],"fn":[["add_initproc","Add init process to the manager"],["add_task","Interface offered to add task"],["current_task","Get running task"],["current_trap_cx","Get the mutable reference to trap context of current task"],["current_user_token","Get token of the address space of current task"],["exit_current_and_run_next","Exit the current ‘Running’ task and run the next task in task list."],["fetch_task","Interface offered to pop the first task"],["pid_alloc","Allocate a pid from PID_ALLOCATOR"],["run_tasks","The main part of process execution and scheduling Loop `fetch_task` to get the process that needs to run, and switch the process through `__switch`"],["schedule","Return to idle control flow for new scheduling"],["suspend_current_and_run_next","Suspend the current ‘Running’ task and run the next task in task list."],["take_current_task","Take the current task,leaving a None in its place"]],"mod":[["context","Implementation of [`TaskContext`]"],["manager","Implementation of [`TaskManager`]"],["pid","Implementation of [`PidAllocator`]"],["processor","Implementation of [`Processor`] and Intersection of control flow"],["switch","Wrap `switch.S` as a function"],["task","Implementation of [`TaskControlBlock`]"]],"struct":[["INITPROC","Globle process that init user shell"],["KernelStack","Kernelstack for app"],["PidAllocator","Pid Allocator struct"],["PidHandle","Bind pid lifetime to `PidHandle`"],["Processor","Processor management structure"],["TaskContext","task context structure containing some registers"],["TaskManager","A array of `TaskControlBlock` that is thread-safe"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["IDLE_PID"],"fn":["add_initproc","add_task","current_task","current_trap_cx","current_user_token","exit_current_and_run_next","fetch_task","pid_alloc","run_tasks","schedule","suspend_current_and_run_next","take_current_task"],"mod":["context","manager","pid","processor","switch","task"],"struct":["INITPROC","KernelStack","PidAllocator","PidHandle","Processor","TaskContext","TaskManager"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/struct.INITPROC.html b/ch6-dev/os/task/struct.INITPROC.html index 40b72825..a82ca21d 100644 --- a/ch6-dev/os/task/struct.INITPROC.html +++ b/ch6-dev/os/task/struct.INITPROC.html @@ -1,24 +1,14 @@ -INITPROC in os::task - Rust - -
    -

    Struct os::task::INITPROC

    source · []
    pub struct INITPROC {
    +INITPROC in os::task - Rust

    Struct os::task::INITPROC

    source ·
    pub struct INITPROC {
         __private_field: (),
    -}
    Expand description

    Globle process that init user shell

    -

    Fields

    __private_field: ()

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Globle process that init user shell

    +

    Fields§

    §__private_field: ()

    Trait Implementations§

    source§

    impl Deref for INITPROC

    §

    type Target = Arc<TaskControlBlock, Global>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Arc<TaskControlBlock>

    Dereferences the value.
    source§

    impl LazyStatic for INITPROC

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.KernelStack.html b/ch6-dev/os/task/struct.KernelStack.html index 1354995f..3d4f1c11 100644 --- a/ch6-dev/os/task/struct.KernelStack.html +++ b/ch6-dev/os/task/struct.KernelStack.html @@ -1,26 +1,18 @@ -KernelStack in os::task - Rust - -
    pub struct KernelStack {
    +KernelStack in os::task - Rust

    Struct os::task::KernelStack

    source ·
    pub struct KernelStack {
         pid: usize,
    -}
    Expand description

    Kernelstack for app

    -

    Fields

    pid: usize

    Implementations

    Create a kernelstack from pid

    -

    Push a value on top of kernelstack

    -

    Get the value on the top of kernelstack

    -

    Trait Implementations

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Kernelstack for app

    +

    Fields§

    §pid: usize

    Implementations§

    source§

    impl KernelStack

    source

    pub fn new(pid_handle: &PidHandle) -> Self

    Create a kernelstack from pid

    +
    source

    pub fn push_on_top<T>(&self, value: T) -> *mut Twhere + T: Sized,

    Push a value on top of kernelstack

    +
    source

    pub fn get_top(&self) -> usize

    Get the value on the top of kernelstack

    +

    Trait Implementations§

    source§

    impl Drop for KernelStack

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.PidAllocator.html b/ch6-dev/os/task/struct.PidAllocator.html index 98512e49..e00c1cc6 100644 --- a/ch6-dev/os/task/struct.PidAllocator.html +++ b/ch6-dev/os/task/struct.PidAllocator.html @@ -1,26 +1,18 @@ -PidAllocator in os::task - Rust - -
    pub struct PidAllocator {
    +PidAllocator in os::task - Rust

    Struct os::task::PidAllocator

    source ·
    pub struct PidAllocator {
         current: usize,
         recycled: Vec<usize>,
    -}
    Expand description

    Pid Allocator struct

    -

    Fields

    current: usizerecycled: Vec<usize>

    Implementations

    Create an empty PidAllocator

    -

    Allocate a pid

    -

    Recycle a pid

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Pid Allocator struct

    +

    Fields§

    §current: usize§recycled: Vec<usize>

    Implementations§

    source§

    impl PidAllocator

    source

    pub fn new() -> Self

    Create an empty PidAllocator

    +
    source

    pub fn alloc(&mut self) -> PidHandle

    Allocate a pid

    +
    source

    pub fn dealloc(&mut self, pid: usize)

    Recycle a pid

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.PidHandle.html b/ch6-dev/os/task/struct.PidHandle.html index 1433284b..cc55ffe7 100644 --- a/ch6-dev/os/task/struct.PidHandle.html +++ b/ch6-dev/os/task/struct.PidHandle.html @@ -1,21 +1,12 @@ -PidHandle in os::task - Rust - -
    -

    Struct os::task::PidHandle

    source · []
    pub struct PidHandle(pub usize);
    Expand description

    Bind pid lifetime to PidHandle

    -

    Tuple Fields

    0: usize

    Trait Implementations

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +PidHandle in os::task - Rust

    Struct os::task::PidHandle

    source ·
    pub struct PidHandle(pub usize);
    Expand description

    Bind pid lifetime to PidHandle

    +

    Tuple Fields§

    §0: usize

    Trait Implementations§

    source§

    impl Drop for PidHandle

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.Processor.html b/ch6-dev/os/task/struct.Processor.html index 9abb91cb..b982e912 100644 --- a/ch6-dev/os/task/struct.Processor.html +++ b/ch6-dev/os/task/struct.Processor.html @@ -1,29 +1,21 @@ -Processor in os::task - Rust - -
    -

    Struct os::task::Processor

    source · []
    pub struct Processor {
    +Processor in os::task - Rust

    Struct os::task::Processor

    source ·
    pub struct Processor {
         current: Option<Arc<TaskControlBlock>>,
         idle_task_cx: TaskContext,
    -}
    Expand description

    Processor management structure

    -

    Fields

    current: Option<Arc<TaskControlBlock>>

    The task currently executing on the current processor

    -
    idle_task_cx: TaskContext

    The basic control flow of each core, helping to select and switch process

    -

    Implementations

    Create an empty Processor

    -

    Get mutable reference to idle_task_cx

    -

    Get current task in moving semanteme

    -

    Get current task in cloning semanteme

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    Processor management structure

    +

    Fields§

    §current: Option<Arc<TaskControlBlock>>

    The task currently executing on the current processor

    +
    §idle_task_cx: TaskContext

    The basic control flow of each core, helping to select and switch process

    +

    Implementations§

    source§

    impl Processor

    source

    pub fn new() -> Self

    Create an empty Processor

    +
    source

    fn get_idle_task_cx_ptr(&mut self) -> *mut TaskContext

    Get mutable reference to idle_task_cx

    +
    source

    pub fn take_current(&mut self) -> Option<Arc<TaskControlBlock>>

    Get current task in moving semanteme

    +
    source

    pub fn current(&self) -> Option<Arc<TaskControlBlock>>

    Get current task in cloning semanteme

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.TaskContext.html b/ch6-dev/os/task/struct.TaskContext.html index ae64a01c..67729232 100644 --- a/ch6-dev/os/task/struct.TaskContext.html +++ b/ch6-dev/os/task/struct.TaskContext.html @@ -1,29 +1,21 @@ -TaskContext in os::task - Rust - -
    #[repr(C)]
    pub struct TaskContext { +TaskContext in os::task - Rust

    Struct os::task::TaskContext

    source ·
    #[repr(C)]
    pub struct TaskContext { ra: usize, sp: usize, - s: [usize; 12], -}
    Expand description

    task context structure containing some registers

    -

    Fields

    ra: usize

    return address ( e.g. __restore ) of __switch ASM function

    -
    sp: usize

    kernel stack pointer of app

    -
    s: [usize; 12]

    s0-11 register, callee saved

    -

    Implementations

    init task context

    -

    set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    + s: [usize; 12], +}
    Expand description

    task context structure containing some registers

    +

    Fields§

    §ra: usize

    return address ( e.g. __restore ) of __switch ASM function

    +
    §sp: usize

    kernel stack pointer of app

    +
    §s: [usize; 12]

    s0-11 register, callee saved

    +

    Implementations§

    source§

    impl TaskContext

    source

    pub fn zero_init() -> Self

    init task context

    +
    source

    pub fn goto_trap_return(kstack_ptr: usize) -> Self

    set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/struct.TaskManager.html b/ch6-dev/os/task/struct.TaskManager.html index 1628852a..a904b98f 100644 --- a/ch6-dev/os/task/struct.TaskManager.html +++ b/ch6-dev/os/task/struct.TaskManager.html @@ -1,26 +1,18 @@ -TaskManager in os::task - Rust - -
    pub struct TaskManager {
    +TaskManager in os::task - Rust

    Struct os::task::TaskManager

    source ·
    pub struct TaskManager {
         ready_queue: VecDeque<Arc<TaskControlBlock>>,
    -}
    Expand description

    A array of TaskControlBlock that is thread-safe

    -

    Fields

    ready_queue: VecDeque<Arc<TaskControlBlock>>

    Implementations

    A simple FIFO scheduler.

    -

    Creat an empty TaskManager

    -

    Add a task to TaskManager

    -

    Remove the first task and return it,or None if TaskManager is empty

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    A array of TaskControlBlock that is thread-safe

    +

    Fields§

    §ready_queue: VecDeque<Arc<TaskControlBlock>>

    Implementations§

    source§

    impl TaskManager

    A simple FIFO scheduler.

    +
    source

    pub fn new() -> Self

    Creat an empty TaskManager

    +
    source

    pub fn add(&mut self, task: Arc<TaskControlBlock>)

    Add a task to TaskManager

    +
    source

    pub fn fetch(&mut self) -> Option<Arc<TaskControlBlock>>

    Remove the first task and return it,or None if TaskManager is empty

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/switch/fn.__switch.html b/ch6-dev/os/task/switch/fn.__switch.html index b609d6fc..fe2ca3b4 100644 --- a/ch6-dev/os/task/switch/fn.__switch.html +++ b/ch6-dev/os/task/switch/fn.__switch.html @@ -1,8 +1,4 @@ -__switch in os::task::switch - Rust - -
    -

    Function os::task::switch::__switch

    source · []
    pub unsafe extern "C" fn __switch(
        current_task_cx_ptr: *mut TaskContext,
        next_task_cx_ptr: *const TaskContext
    )
    - \ No newline at end of file +__switch in os::task::switch - Rust

    Function os::task::switch::__switch

    source ·
    pub unsafe extern "C" fn __switch(
    +    current_task_cx_ptr: *mut TaskContext,
    +    next_task_cx_ptr: *const TaskContext
    +)
    \ No newline at end of file diff --git a/ch6-dev/os/task/switch/index.html b/ch6-dev/os/task/switch/index.html index 2a16118b..a5a5f151 100644 --- a/ch6-dev/os/task/switch/index.html +++ b/ch6-dev/os/task/switch/index.html @@ -1,10 +1,2 @@ -os::task::switch - Rust - -
    -

    Module os::task::switch

    source · []
    Expand description

    Wrap switch.S as a function

    -

    Functions

    -
    - \ No newline at end of file +os::task::switch - Rust

    Module os::task::switch

    source ·
    Expand description

    Wrap switch.S as a function

    +

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/task/switch/sidebar-items.js b/ch6-dev/os/task/switch/sidebar-items.js index 59e64029..8dea751a 100644 --- a/ch6-dev/os/task/switch/sidebar-items.js +++ b/ch6-dev/os/task/switch/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["__switch",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["__switch"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/task/enum.TaskStatus.html b/ch6-dev/os/task/task/enum.TaskStatus.html index 2a7240bc..a7c18555 100644 --- a/ch6-dev/os/task/task/enum.TaskStatus.html +++ b/ch6-dev/os/task/task/enum.TaskStatus.html @@ -1,31 +1,18 @@ -TaskStatus in os::task::task - Rust - -
    pub enum TaskStatus {
    +TaskStatus in os::task::task - Rust

    Enum os::task::task::TaskStatus

    source ·
    pub enum TaskStatus {
         Ready,
         Running,
         Zombie,
    -}

    Variants

    Ready

    Running

    Zombie

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    This method tests for self and other values to be equal, and is used -by ==. Read more

    -

    This method tests for !=.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Variants§

    §

    Ready

    §

    Running

    §

    Zombie

    Trait Implementations§

    source§

    impl Clone for TaskStatus

    source§

    fn clone(&self) -> TaskStatus

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl PartialEq<TaskStatus> for TaskStatus

    source§

    fn eq(&self, other: &TaskStatus) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Copy for TaskStatus

    source§

    impl StructuralPartialEq for TaskStatus

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The resulting type after obtaining ownership.

    -

    Creates owned data from borrowed data, usually by cloning. Read more

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    Uses borrowed data to replace owned data, usually by cloning. Read more

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/task/index.html b/ch6-dev/os/task/task/index.html index b988ddaa..40201be8 100644 --- a/ch6-dev/os/task/task/index.html +++ b/ch6-dev/os/task/task/index.html @@ -1,11 +1,2 @@ -os::task::task - Rust - -
    - \ No newline at end of file +os::task::task - Rust
    \ No newline at end of file diff --git a/ch6-dev/os/task/task/sidebar-items.js b/ch6-dev/os/task/task/sidebar-items.js index dd3e5786..e3e27912 100644 --- a/ch6-dev/os/task/task/sidebar-items.js +++ b/ch6-dev/os/task/task/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["TaskStatus",""]],"struct":[["TaskControlBlock",""],["TaskControlBlockInner",""]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["TaskStatus"],"struct":["TaskControlBlock","TaskControlBlockInner"]}; \ No newline at end of file diff --git a/ch6-dev/os/task/task/struct.TaskControlBlock.html b/ch6-dev/os/task/task/struct.TaskControlBlock.html index 193bfa3d..e8aa73d7 100644 --- a/ch6-dev/os/task/task/struct.TaskControlBlock.html +++ b/ch6-dev/os/task/task/struct.TaskControlBlock.html @@ -1,23 +1,15 @@ -TaskControlBlock in os::task::task - Rust - -
    pub struct TaskControlBlock {
    +TaskControlBlock in os::task::task - Rust

    Struct os::task::task::TaskControlBlock

    source ·
    pub struct TaskControlBlock {
         pub pid: PidHandle,
         pub kernel_stack: KernelStack,
         inner: UPSafeCell<TaskControlBlockInner>,
    -}

    Fields

    pid: PidHandlekernel_stack: KernelStackinner: UPSafeCell<TaskControlBlockInner>

    Implementations

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §pid: PidHandle§kernel_stack: KernelStack§inner: UPSafeCell<TaskControlBlockInner>

    Implementations§

    source§

    impl TaskControlBlock

    source

    pub fn inner_exclusive_access(&self) -> RefMut<'_, TaskControlBlockInner>

    source

    pub fn new(elf_data: &[u8]) -> Self

    source

    pub fn exec(&self, elf_data: &[u8])

    source

    pub fn fork(self: &Arc<TaskControlBlock>) -> Arc<TaskControlBlock>

    source

    pub fn getpid(&self) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/task/task/struct.TaskControlBlockInner.html b/ch6-dev/os/task/task/struct.TaskControlBlockInner.html index 136a5601..6efa4c17 100644 --- a/ch6-dev/os/task/task/struct.TaskControlBlockInner.html +++ b/ch6-dev/os/task/task/struct.TaskControlBlockInner.html @@ -1,10 +1,4 @@ -TaskControlBlockInner in os::task::task - Rust - -
    pub struct TaskControlBlockInner {
    +TaskControlBlockInner in os::task::task - Rust
    pub struct TaskControlBlockInner {
         pub trap_cx_ppn: PhysPageNum,
         pub base_size: usize,
         pub task_cx: TaskContext,
    @@ -14,16 +8,14 @@
         pub children: Vec<Arc<TaskControlBlock>>,
         pub exit_code: i32,
         pub fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>,
    -}

    Fields

    trap_cx_ppn: PhysPageNumbase_size: usizetask_cx: TaskContexttask_status: TaskStatusmemory_set: MemorySetparent: Option<Weak<TaskControlBlock>>children: Vec<Arc<TaskControlBlock>>exit_code: i32fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>

    Implementations

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}

    Fields§

    §trap_cx_ppn: PhysPageNum§base_size: usize§task_cx: TaskContext§task_status: TaskStatus§memory_set: MemorySet§parent: Option<Weak<TaskControlBlock>>§children: Vec<Arc<TaskControlBlock>>§exit_code: i32§fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>

    Implementations§

    source§

    impl TaskControlBlockInner

    source

    pub fn get_trap_cx(&self) -> &'static mut TrapContext

    source

    pub fn get_user_token(&self) -> usize

    source

    fn get_status(&self) -> TaskStatus

    source

    pub fn is_zombie(&self) -> bool

    source

    pub fn alloc_fd(&mut self) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/timer/constant.MSEC_PER_SEC.html b/ch6-dev/os/timer/constant.MSEC_PER_SEC.html index 5cf83142..38b28724 100644 --- a/ch6-dev/os/timer/constant.MSEC_PER_SEC.html +++ b/ch6-dev/os/timer/constant.MSEC_PER_SEC.html @@ -1,8 +1 @@ -MSEC_PER_SEC in os::timer - Rust - -
    -

    Constant os::timer::MSEC_PER_SEC

    source · []
    const MSEC_PER_SEC: usize = 1000;
    - \ No newline at end of file +MSEC_PER_SEC in os::timer - Rust

    Constant os::timer::MSEC_PER_SEC

    source ·
    const MSEC_PER_SEC: usize = 1000;
    \ No newline at end of file diff --git a/ch6-dev/os/timer/constant.TICKS_PER_SEC.html b/ch6-dev/os/timer/constant.TICKS_PER_SEC.html index f75f843f..13cd686d 100644 --- a/ch6-dev/os/timer/constant.TICKS_PER_SEC.html +++ b/ch6-dev/os/timer/constant.TICKS_PER_SEC.html @@ -1,8 +1 @@ -TICKS_PER_SEC in os::timer - Rust - -
    const TICKS_PER_SEC: usize = 100;
    - \ No newline at end of file +TICKS_PER_SEC in os::timer - Rust

    Constant os::timer::TICKS_PER_SEC

    source ·
    const TICKS_PER_SEC: usize = 100;
    \ No newline at end of file diff --git a/ch6-dev/os/timer/fn.get_time.html b/ch6-dev/os/timer/fn.get_time.html index dba4c631..824ae03f 100644 --- a/ch6-dev/os/timer/fn.get_time.html +++ b/ch6-dev/os/timer/fn.get_time.html @@ -1,9 +1,2 @@ -get_time in os::timer - Rust - -
    -

    Function os::timer::get_time

    source · []
    pub fn get_time() -> usize
    Expand description

    get current time

    -
    - \ No newline at end of file +get_time in os::timer - Rust

    Function os::timer::get_time

    source ·
    pub fn get_time() -> usize
    Expand description

    get current time

    +
    \ No newline at end of file diff --git a/ch6-dev/os/timer/fn.get_time_ms.html b/ch6-dev/os/timer/fn.get_time_ms.html index 7982032f..e6805486 100644 --- a/ch6-dev/os/timer/fn.get_time_ms.html +++ b/ch6-dev/os/timer/fn.get_time_ms.html @@ -1,9 +1,2 @@ -get_time_ms in os::timer - Rust - -
    -

    Function os::timer::get_time_ms

    source · []
    pub fn get_time_ms() -> usize
    Expand description

    get current time in microseconds

    -
    - \ No newline at end of file +get_time_ms in os::timer - Rust

    Function os::timer::get_time_ms

    source ·
    pub fn get_time_ms() -> usize
    Expand description

    get current time in microseconds

    +
    \ No newline at end of file diff --git a/ch6-dev/os/timer/fn.set_next_trigger.html b/ch6-dev/os/timer/fn.set_next_trigger.html index 7e62bbd2..ae5c305c 100644 --- a/ch6-dev/os/timer/fn.set_next_trigger.html +++ b/ch6-dev/os/timer/fn.set_next_trigger.html @@ -1,9 +1,2 @@ -set_next_trigger in os::timer - Rust - -
    pub fn set_next_trigger()
    Expand description

    set the next timer interrupt

    -
    - \ No newline at end of file +set_next_trigger in os::timer - Rust

    Function os::timer::set_next_trigger

    source ·
    pub fn set_next_trigger()
    Expand description

    set the next timer interrupt

    +
    \ No newline at end of file diff --git a/ch6-dev/os/timer/index.html b/ch6-dev/os/timer/index.html index b2c1a940..3163dace 100644 --- a/ch6-dev/os/timer/index.html +++ b/ch6-dev/os/timer/index.html @@ -1,14 +1,2 @@ -os::timer - Rust - -
    -

    Module os::timer

    source · []
    Expand description

    RISC-V timer-related functionality

    -

    Constants

    -

    Functions

    -

    get current time

    -

    get current time in microseconds

    -

    set the next timer interrupt

    -
    - \ No newline at end of file +os::timer - Rust

    Module os::timer

    source ·
    Expand description

    RISC-V timer-related functionality

    +

    Constants

    Functions

    \ No newline at end of file diff --git a/ch6-dev/os/timer/sidebar-items.js b/ch6-dev/os/timer/sidebar-items.js index cc248a10..bf5ff37b 100644 --- a/ch6-dev/os/timer/sidebar-items.js +++ b/ch6-dev/os/timer/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["MSEC_PER_SEC",""],["TICKS_PER_SEC",""]],"fn":[["get_time","get current time"],["get_time_ms","get current time in microseconds"],["set_next_trigger","set the next timer interrupt"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["MSEC_PER_SEC","TICKS_PER_SEC"],"fn":["get_time","get_time_ms","set_next_trigger"]}; \ No newline at end of file diff --git a/ch6-dev/os/trap/context/index.html b/ch6-dev/os/trap/context/index.html index dbd6109a..87df363b 100644 --- a/ch6-dev/os/trap/context/index.html +++ b/ch6-dev/os/trap/context/index.html @@ -1,11 +1,2 @@ -os::trap::context - Rust - -
    -

    Module os::trap::context

    source · []
    Expand description

    Implementation of TrapContext

    -

    Structs

    -

    trap context structure containing sstatus, sepc and registers

    -
    - \ No newline at end of file +os::trap::context - Rust

    Module os::trap::context

    source ·
    Expand description

    Implementation of TrapContext

    +

    Structs

    • trap context structure containing sstatus, sepc and registers
    \ No newline at end of file diff --git a/ch6-dev/os/trap/context/sidebar-items.js b/ch6-dev/os/trap/context/sidebar-items.js index 3f97d83e..920f7c9e 100644 --- a/ch6-dev/os/trap/context/sidebar-items.js +++ b/ch6-dev/os/trap/context/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["TrapContext","trap context structure containing sstatus, sepc and registers"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"struct":["TrapContext"]}; \ No newline at end of file diff --git a/ch6-dev/os/trap/context/struct.TrapContext.html b/ch6-dev/os/trap/context/struct.TrapContext.html index 5a952415..86136fd7 100644 --- a/ch6-dev/os/trap/context/struct.TrapContext.html +++ b/ch6-dev/os/trap/context/struct.TrapContext.html @@ -1,36 +1,33 @@ -TrapContext in os::trap::context - Rust - -
    #[repr(C)]
    pub struct TrapContext { - pub x: [usize; 32], +TrapContext in os::trap::context - Rust

    Struct os::trap::context::TrapContext

    source ·
    #[repr(C)]
    pub struct TrapContext { + pub x: [usize; 32], pub sstatus: Sstatus, pub sepc: usize, pub kernel_satp: usize, pub kernel_sp: usize, pub trap_handler: usize, -}
    Expand description

    trap context structure containing sstatus, sepc and registers

    -

    Fields

    x: [usize; 32]

    general regs[0..31]

    -
    sstatus: Sstatus

    CSR sstatus

    -
    sepc: usize

    CSR sepc

    -
    kernel_satp: usize

    Addr of Page Table

    -
    kernel_sp: usize

    kernel stack

    -
    trap_handler: usize

    Addr of trap_handler function

    -

    Implementations

    set stack pointer to x_2 reg (sp)

    -

    init app context

    -

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    trap context structure containing sstatus, sepc and registers

    +

    Fields§

    §x: [usize; 32]

    general regs[0..31]

    +
    §sstatus: Sstatus

    CSR sstatus

    +
    §sepc: usize

    CSR sepc

    +
    §kernel_satp: usize

    Addr of Page Table

    +
    §kernel_sp: usize

    kernel stack

    +
    §trap_handler: usize

    Addr of trap_handler function

    +

    Implementations§

    source§

    impl TrapContext

    source

    pub fn set_sp(&mut self, sp: usize)

    set stack pointer to x_2 reg (sp)

    +
    source

    pub fn app_init_context( + entry: usize, + sp: usize, + kernel_satp: usize, + kernel_sp: usize, + trap_handler: usize +) -> Self

    init app context

    +

    Trait Implementations§

    source§

    impl Debug for TrapContext

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.enable_timer_interrupt.html b/ch6-dev/os/trap/fn.enable_timer_interrupt.html index c6f514af..9f286f5c 100644 --- a/ch6-dev/os/trap/fn.enable_timer_interrupt.html +++ b/ch6-dev/os/trap/fn.enable_timer_interrupt.html @@ -1,9 +1,2 @@ -enable_timer_interrupt in os::trap - Rust - -
    pub fn enable_timer_interrupt()
    Expand description

    enable timer interrupt in sie CSR

    -
    - \ No newline at end of file +enable_timer_interrupt in os::trap - Rust
    pub fn enable_timer_interrupt()
    Expand description

    enable timer interrupt in sie CSR

    +
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.init.html b/ch6-dev/os/trap/fn.init.html index d2f3ef65..4a472035 100644 --- a/ch6-dev/os/trap/fn.init.html +++ b/ch6-dev/os/trap/fn.init.html @@ -1,9 +1,2 @@ -init in os::trap - Rust - -
    -

    Function os::trap::init

    source · []
    pub fn init()
    Expand description

    initialize CSR stvec as the entry of __alltraps

    -
    - \ No newline at end of file +init in os::trap - Rust

    Function os::trap::init

    source ·
    pub fn init()
    Expand description

    initialize CSR stvec as the entry of __alltraps

    +
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.set_kernel_trap_entry.html b/ch6-dev/os/trap/fn.set_kernel_trap_entry.html index 59e9cdad..601fb857 100644 --- a/ch6-dev/os/trap/fn.set_kernel_trap_entry.html +++ b/ch6-dev/os/trap/fn.set_kernel_trap_entry.html @@ -1,8 +1 @@ -set_kernel_trap_entry in os::trap - Rust - -
    fn set_kernel_trap_entry()
    - \ No newline at end of file +set_kernel_trap_entry in os::trap - Rust

    Function os::trap::set_kernel_trap_entry

    source ·
    fn set_kernel_trap_entry()
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.set_user_trap_entry.html b/ch6-dev/os/trap/fn.set_user_trap_entry.html index 792b4705..5b3f1ca9 100644 --- a/ch6-dev/os/trap/fn.set_user_trap_entry.html +++ b/ch6-dev/os/trap/fn.set_user_trap_entry.html @@ -1,8 +1 @@ -set_user_trap_entry in os::trap - Rust - -
    fn set_user_trap_entry()
    - \ No newline at end of file +set_user_trap_entry in os::trap - Rust

    Function os::trap::set_user_trap_entry

    source ·
    fn set_user_trap_entry()
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.trap_from_kernel.html b/ch6-dev/os/trap/fn.trap_from_kernel.html index 1645b07b..55362f57 100644 --- a/ch6-dev/os/trap/fn.trap_from_kernel.html +++ b/ch6-dev/os/trap/fn.trap_from_kernel.html @@ -1,11 +1,4 @@ -trap_from_kernel in os::trap - Rust - -
    #[no_mangle]
    -pub fn trap_from_kernel() -> !
    Expand description

    Unimplement: traps/interrupts/exceptions from kernel mode +trap_from_kernel in os::trap - Rust

    Function os::trap::trap_from_kernel

    source ·
    #[no_mangle]
    +pub fn trap_from_kernel() -> !
    Expand description

    Unimplement: traps/interrupts/exceptions from kernel mode Todo: Chapter 9: I/O device

    -
    - \ No newline at end of file +
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.trap_handler.html b/ch6-dev/os/trap/fn.trap_handler.html index 24a87ae6..285ffd8d 100644 --- a/ch6-dev/os/trap/fn.trap_handler.html +++ b/ch6-dev/os/trap/fn.trap_handler.html @@ -1,10 +1,3 @@ -trap_handler in os::trap - Rust - -
    -

    Function os::trap::trap_handler

    source · []
    #[no_mangle]
    -pub fn trap_handler() -> !
    Expand description

    handle an interrupt, exception, or system call from user space

    -
    - \ No newline at end of file +trap_handler in os::trap - Rust

    Function os::trap::trap_handler

    source ·
    #[no_mangle]
    +pub fn trap_handler() -> !
    Expand description

    handle an interrupt, exception, or system call from user space

    +
    \ No newline at end of file diff --git a/ch6-dev/os/trap/fn.trap_return.html b/ch6-dev/os/trap/fn.trap_return.html index 8642c90a..f30cc457 100644 --- a/ch6-dev/os/trap/fn.trap_return.html +++ b/ch6-dev/os/trap/fn.trap_return.html @@ -1,12 +1,5 @@ -trap_return in os::trap - Rust - -
    -

    Function os::trap::trap_return

    source · []
    #[no_mangle]
    -pub fn trap_return() -> !
    Expand description

    set the new addr of __restore asm function in TRAMPOLINE page, +trap_return in os::trap - Rust

    Function os::trap::trap_return

    source ·
    #[no_mangle]
    +pub fn trap_return() -> !
    Expand description

    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 +
    \ No newline at end of file diff --git a/ch6-dev/os/trap/index.html b/ch6-dev/os/trap/index.html index a571c000..77a1b9e3 100644 --- a/ch6-dev/os/trap/index.html +++ b/ch6-dev/os/trap/index.html @@ -1,31 +1,14 @@ -os::trap - Rust - -
    -

    Module os::trap

    source · []
    Expand description

    Trap handling functionality

    +os::trap - Rust

    Module os::trap

    source ·
    Expand description

    Trap handling functionality

    For rCore, we have a single trap entry point, namely __alltraps. At -initialization in init(), we set the stvec CSR to point to it.

    +initialization in init(), we set the stvec CSR to point to it.

    All traps go through __alltraps, which is defined in trap.S. The assembly language code does just enough work restore the kernel space context, ensuring that Rust code safely runs, and transfers control to -trap_handler().

    +trap_handler().

    It then calls different functionality based on what exactly the exception was. For example, timer interrupts trigger task preemption, and syscalls go -to syscall().

    -

    Modules

    -
    context 🔒

    Implementation of TrapContext

    -

    Structs

    -

    trap context structure containing sstatus, sepc and registers

    -

    Functions

    -

    enable timer interrupt in sie CSR

    -

    initialize CSR stvec as the entry of __alltraps

    -

    Unimplement: traps/interrupts/exceptions from kernel mode -Todo: Chapter 9: I/O device

    -

    handle an interrupt, exception, or system call from user space

    -

    set the new addr of __restore asm function in TRAMPOLINE page, +to syscall().

    +

    Modules

    Structs

    • trap context structure containing sstatus, sepc and registers

    Functions

    • enable timer interrupt in sie CSR
    • initialize CSR stvec as the entry of __alltraps
    • Unimplement: traps/interrupts/exceptions from kernel mode +Todo: Chapter 9: I/O device
    • handle an interrupt, exception, or system call from user space
    • 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 +finally, jump to new addr of __restore asm function \ No newline at end of file diff --git a/ch6-dev/os/trap/sidebar-items.js b/ch6-dev/os/trap/sidebar-items.js index b082e657..0901c834 100644 --- a/ch6-dev/os/trap/sidebar-items.js +++ b/ch6-dev/os/trap/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["enable_timer_interrupt","enable timer interrupt in sie CSR"],["init","initialize CSR `stvec` as the entry of `__alltraps`"],["set_kernel_trap_entry",""],["set_user_trap_entry",""],["trap_from_kernel","Unimplement: traps/interrupts/exceptions from kernel mode Todo: Chapter 9: I/O device"],["trap_handler","handle an interrupt, exception, or system call from user space"],["trap_return","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"]],"mod":[["context","Implementation of [`TrapContext`]"]],"struct":[["TrapContext","trap context structure containing sstatus, sepc and registers"]]}); \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["enable_timer_interrupt","init","set_kernel_trap_entry","set_user_trap_entry","trap_from_kernel","trap_handler","trap_return"],"mod":["context"],"struct":["TrapContext"]}; \ No newline at end of file diff --git a/ch6-dev/os/trap/struct.TrapContext.html b/ch6-dev/os/trap/struct.TrapContext.html index 61cffbd0..fb639cc5 100644 --- a/ch6-dev/os/trap/struct.TrapContext.html +++ b/ch6-dev/os/trap/struct.TrapContext.html @@ -1,36 +1,33 @@ -TrapContext in os::trap - Rust - -
    #[repr(C)]
    pub struct TrapContext { - pub x: [usize; 32], +TrapContext in os::trap - Rust

    Struct os::trap::TrapContext

    source ·
    #[repr(C)]
    pub struct TrapContext { + pub x: [usize; 32], pub sstatus: Sstatus, pub sepc: usize, pub kernel_satp: usize, pub kernel_sp: usize, pub trap_handler: usize, -}
    Expand description

    trap context structure containing sstatus, sepc and registers

    -

    Fields

    x: [usize; 32]

    general regs[0..31]

    -
    sstatus: Sstatus

    CSR sstatus

    -
    sepc: usize

    CSR sepc

    -
    kernel_satp: usize

    Addr of Page Table

    -
    kernel_sp: usize

    kernel stack

    -
    trap_handler: usize

    Addr of trap_handler function

    -

    Implementations

    set stack pointer to x_2 reg (sp)

    -

    init app context

    -

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the argument unchanged.

    -

    Calls U::from(self).

    +}
    Expand description

    trap context structure containing sstatus, sepc and registers

    +

    Fields§

    §x: [usize; 32]

    general regs[0..31]

    +
    §sstatus: Sstatus

    CSR sstatus

    +
    §sepc: usize

    CSR sepc

    +
    §kernel_satp: usize

    Addr of Page Table

    +
    §kernel_sp: usize

    kernel stack

    +
    §trap_handler: usize

    Addr of trap_handler function

    +

    Implementations§

    source§

    impl TrapContext

    source

    pub fn set_sp(&mut self, sp: usize)

    set stack pointer to x_2 reg (sp)

    +
    source

    pub fn app_init_context( + entry: usize, + sp: usize, + kernel_satp: usize, + kernel_sp: usize, + trap_handler: usize +) -> Self

    init app context

    +

    Trait Implementations§

    source§

    impl Debug for TrapContext

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -

    The type returned in the event of a conversion error.

    -

    Performs the conversion.

    -
    - \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/ch6-dev/rustdoc.css b/ch6-dev/rustdoc.css deleted file mode 100644 index 674a5af6..00000000 --- a/ch6-dev/rustdoc.css +++ /dev/null @@ -1 +0,0 @@ - @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/ch6-dev/search-index.js b/ch6-dev/search-index.js index 41b697e6..35ad76be 100644 --- a/ch6-dev/search-index.js +++ b/ch6-dev/search-index.js @@ -1,4 +1,5 @@ var searchIndex = JSON.parse('{\ -"os":{"doc":"The main module and entrypoint","t":[0,5,0,0,0,0,0,0,14,14,5,0,0,0,0,0,0,6,17,17,17,17,17,17,17,8,17,3,17,12,11,11,10,11,5,10,11,10,11,11,11,11,11,11,11,17,17,17,17,17,17,17,3,11,11,11,11,5,11,11,11,11,0,3,12,5,11,11,11,11,11,0,11,11,11,0,12,13,13,12,4,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,11,11,13,12,12,13,12,12,12,12,12,12,12,12,12,12,11,4,12,12,12,12,12,12,12,3,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,17,17,17,17,17,17,12,12,17,12,12,12,12,12,12,12,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,5,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,12,12,12,12,3,17,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,8,3,3,3,3,12,12,0,5,5,10,10,12,0,10,12,10,18,3,3,3,18,18,3,18,18,12,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,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,5,11,11,11,12,5,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,12,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,12,12,12,12,3,3,3,3,3,3,3,3,8,3,3,3,3,12,0,12,12,12,12,12,12,12,5,0,5,12,0,5,5,0,0,12,12,5,12,10,5,5,5,5,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,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,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,5,11,11,12,11,12,11,11,11,11,11,12,11,11,11,5,11,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,3,3,18,18,18,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,12,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,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,5,5,5,5,5,3,12,0,3,11,11,11,11,12,11,11,11,11,11,17,17,17,17,17,17,17,17,17,17,17,0,0,5,5,5,5,5,5,5,5,5,5,5,5,12,17,3,3,3,3,3,3,3,12,5,5,11,11,0,12,12,5,5,5,11,5,5,11,12,11,0,0,12,5,0,12,12,12,5,12,5,12,5,0,5,0,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,3,3,12,11,5,11,11,11,11,11,11,5,11,11,11,11,11,12,11,11,11,11,11,11,12,3,3,3,3,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,5,11,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,12,11,11,11,11,11,12,5,5,5,11,11,11,11,12,11,11,11,5,5,11,5,11,11,11,11,11,11,5,13,13,3,3,4,13,11,12,11,11,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,12,12,11,12,12,12,12,11,12,11,11,11,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,11,12,12,12,11,12,12,11,11,11,12],"n":["board","clear_bss","config","console","drivers","fs","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","BlockDeviceImpl","CLOCK_FREQ","EXIT_FAILURE","EXIT_FAILURE_FLAG","EXIT_RESET","EXIT_SUCCESS","MEMORY_END","MMIO","QEMUExit","QEMU_EXIT_HANDLE","RISCV64","VIRT_TEST","addr","borrow","borrow_mut","exit","exit","exit_code_encode","exit_failure","exit_failure","exit_success","exit_success","from","into","new","try_from","try_into","type_id","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","block","BLOCK_DEVICE","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","sdcard","try_from","try_into","type_id","virtio_blk","0","ACMD23","ACMD41","CID_CRC","CMD","CMD0","CMD10","CMD12","CMD16","CMD17","CMD18","CMD24","CMD25","CMD55","CMD58","CMD59","CMD8","CMD9","CMDFailed","CSDStruct","CSD_CRC","CS_HIGH","CS_LOW","CannotGetCardInfo","CardBlockSize","CardCapacity","CardCapacityStatusNotSet","CardComdClasses","ContentProtectAppli","CopyFlag","DSRImpl","DeviceSize","ECC","EraseGrMul","EraseGrSize","FileFormat","FileFormatGroup","HIGH_SPEED_ENABLE","InitError","ManDeflECC","ManufactDate","ManufacturerID","MaxBusClkFrec","MaxWrBlockLen","NSAC","OEM_AppliID","PERIPHERALS","PartBlockRead","PermWrProtect","ProdName1","ProdName2","ProdRev","ProdSN","RdBlockLen","RdBlockMisalign","Reserved1","Reserved1","Reserved2","Reserved2","Reserved3","Reserved4","SDCard","SDCardCID","SDCardCSD","SDCardInfo","SDCardWrapper","SD_CS","SD_CS_GPIONUM","SD_START_DATA_MULTIPLE_BLOCK_READ","SD_START_DATA_MULTIPLE_BLOCK_WRITE","SD_START_DATA_SINGLE_BLOCK_READ","SD_START_DATA_SINGLE_BLOCK_WRITE","SD_cid","SD_csd","SEC_LEN","SysSpecVersion","TAAC","TempWrProtect","WrBlockMisalign","WrProtectGrEnable","WrProtectGrSize","WrSpeedFact","WriteBlockPaPartial","__private_field","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cs_gpionum","deref","end_cmd","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_cardinfo","get_cidregister","get_csdregister","get_dataresponse","get_response","init","init_sdcard","into","into","into","into","into","into","into","into","io_init","lowlevel_init","new","new","read_block","read_data","read_sector","send_cmd","spi","spi_cs","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","write_block","write_data","write_sector","0","0","1","0","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","__private_field","borrow","borrow","borrow_mut","borrow_mut","deref","from","from","into","into","new","read_block","try_from","try_from","try_into","try_into","type_id","type_id","virtio_dma_alloc","virtio_dma_dealloc","virtio_phys_to_virt","virtio_virt_to_phys","write_block","File","OSInode","OpenFlags","Stdin","Stdout","bits","inner","inode","list_apps","open_file","read","readable","readable","stdio","writable","writable","write","CREATE","OSInode","OSInodeInner","OpenFlags","RDONLY","RDWR","ROOT_INODE","TRUNC","WRONLY","__private_field","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","complement","contains","deref","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","inner","inode","insert","intersection","intersects","into","into","into","into","is_all","is_empty","list_apps","ne","new","not","offset","open_file","partial_cmp","read","read_all","read_write","readable","readable","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union","writable","writable","write","Stdin","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","read","read","readable","readable","try_from","try_from","try_into","try_into","type_id","type_id","writable","writable","write","write","panic","0","0","0","0","FrameTracker","KERNEL_SPACE","MapPermission","MemorySet","PageTable","PageTableEntry","PhysAddr","PhysPageNum","StepByOne","UserBuffer","UserBufferIterator","VirtAddr","VirtPageNum","__private_field","address","areas","bits","bits","buffers","buffers","current_buffer","current_idx","frame_alloc","frame_allocator","frame_dealloc","frames","heap_allocator","init","kernel_token","memory_set","page_table","page_table","ppn","remap_test","root_ppn","step","translated_byte_buffer","translated_ref","translated_refmut","translated_str","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_mut","get_pte_array","get_ref","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","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_another","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_existed_user","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","kernel_token","map","map_one","map_perm","map_trampoline","map_type","ne","new","new_bare","new_kernel","not","page_table","partial_cmp","push","recycle_data_pages","remap_test","remove","remove_area_with_start_vpn","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","UserBuffer","UserBufferIterator","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buffers","buffers","clone","clone","clone_into","clone_into","cmp","complement","contains","current_buffer","current_idx","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","into","into","into_iter","into_iter","is_all","is_empty","is_valid","len","map","ne","new","new","new","next","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translate_va","translated_byte_buffer","translated_ref","translated_refmut","translated_str","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","writable","SBI_CLEAR_IPI","SBI_CONSOLE_GETCHAR","SBI_CONSOLE_PUTCHAR","SBI_REMOTE_FENCE_I","SBI_REMOTE_SFENCE_VMA","SBI_REMOTE_SFENCE_VMA_ASID","SBI_SEND_IPI","SBI_SET_TIMER","SBI_SHUTDOWN","console_getchar","console_putchar","sbi_call","set_timer","shutdown","UPSafeCell","inner","up","UPSafeCell","borrow","borrow_mut","exclusive_access","from","inner","into","new","try_from","try_into","type_id","SYSCALL_CLOSE","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GET_TIME","SYSCALL_OPEN","SYSCALL_READ","SYSCALL_WAITPID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","sys_close","sys_open","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_waitpid","sys_yield","0","IDLE_PID","INITPROC","KernelStack","PidAllocator","PidHandle","Processor","TaskContext","TaskManager","__private_field","add_initproc","add_task","borrow","borrow_mut","context","current","current","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","fetch_task","from","idle_task_cx","into","manager","pid","pid","pid_alloc","processor","ra","ready_queue","recycled","run_tasks","s","schedule","sp","suspend_current_and_run_next","switch","take_current_task","task","try_from","try_into","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","TASK_MANAGER","TaskManager","__private_field","add","add_task","borrow","borrow","borrow_mut","borrow_mut","deref","fetch","fetch_task","from","from","into","into","new","ready_queue","try_from","try_from","try_into","try_into","type_id","type_id","0","KernelStack","PID_ALLOCATOR","PidAllocator","PidHandle","__private_field","alloc","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","deref","drop","drop","from","from","from","from","get_top","into","into","into","into","kernel_stack_position","new","new","pid","pid_alloc","push_on_top","recycled","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_task","current_trap_cx","current_user_token","deref","from","from","get_idle_task_cx_ptr","idle_task_cx","into","into","new","run_tasks","schedule","take_current","take_current_task","try_from","try_from","try_into","try_into","type_id","type_id","__switch","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","Zombie","alloc_fd","base_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","children","clone","clone_into","eq","exec","exit_code","fd_table","fork","from","from","from","get_status","get_trap_cx","get_user_token","getpid","inner","inner_exclusive_access","into","into","into","is_zombie","kernel_stack","memory_set","new","parent","pid","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_from","try_into","try_into","try_into","type_id","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","fmt","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::drivers","os::drivers::block","","","","","","","","","","","","","os::drivers::block::sdcard","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::block::sdcard::InitError","","","os::drivers::block::virtio_blk","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs","","","","","","","","","","","","","","","","","os::fs::inode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::stdio","","","","","","","","","","","","","","","","","","","","","","","","os::lang_items","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::manager","","","","","","","","","","","","","","","","","","","","","","","","os::task::pid","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::processor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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","","File system in os","The panic handler","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","","","","","","","","","","","RISCV64 configuration","","Address of the sifive_test mapped device.","","","Exit with specified return code.","Exit qemu with specified exit code.","Encode the exit code using EXIT_FAILURE_FLAG.","Exit QEMU using EXIT_FAILURE, aka 1.","","Exit QEMU using EXIT_SUCCESS, aka 0, if possible.","","Returns the argument unchanged.","Calls U::from(self).","Create an instance.","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","Number of blocks to erase (SDC) ","Initiate initialization process (SDC) ","","SD commands ","Software reset ","Read CID register ","Stop to read data ","Change R/W block size ","Read block ","Read multiple blocks ","Write a block ","Write multiple blocks ","Leading command for ACMD* ","Read OCR ","Enable/disable CRC check ","Check voltage range (SDC V2) ","Read CSD register ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Card Identification Data: CID Register","Card Specific Data: CSD Register","Card information","","CS value passed to SPI controller, this is a dummy value …","GPIOHS GPIO number to use for controlling the SD card CS …","Data token start byte, Start Multiple Block Read ","Data token start byte, Start Multiple Block Write ","Data token start byte, Start Single Block Read ","Data token start byte, Start Single Block Write ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","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).","Calls U::from(self).","Calls U::from(self).","Connect pins to internal functions ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","File trait","A wrapper around a filesystem inode to implement File …","Open file flags","Standard input","Standard output","","","Arc<Inode> -> OSInodeInner: In order to open files …","List all files in the filesystems","Open file with flags","Read file to UserBuffer","If readable","","Stdin & Stdout","If writable","","Write UserBuffer to file","Allow create","A wrapper around a filesystem inode to implement File …","The OS inode inner in ‘UPSafeCell’","Open file flags","Read only","Read & Write","","Clear file and return an empty one","Write only","","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.","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 …","","","","","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).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","List all files in the filesystems","","Construct an OS inode from a inode","Returns the complement of this set of flags.","","Open file with flags","","","Read all data inside a inode into vector","Do not check validity for simplicity Return (readable, …","","","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.","","","","Standard input","Standard output","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","manage a frame which has the same lifecycle as the tracker","a memory set instance through lazy_static! managing kernel …","map permission corresponding to that in pte: R W X U","memory set structure, controls virtual-memory space","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","Definitions","phiscal page number","Add value by one","Array of u8 slice that user communicate with os","Iterator of UserBuffer","virtual address","virtual page number","","Implementation of physical and virtual address and page …","","","PTE","U8 vec","","","","allocate a frame","Implementation of FrameAllocator which controls all the …","deallocate a frame","","The global allocator","initiate heap allocator, frame allocator and kernel space","Get kernelspace root ppn","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","Check PageTable running correctly","","Add value by one","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","Definitions","phiscal page number","a simple range structure for type T","iterator for the simple range structure","Add value by one","","a simple range structure for virtual page number","","virtual address","virtual page number","Check page aligned","Check page aligned","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","","","","","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Get u8 array on PhysPageNum","","Get mutable reference to PhysAddr value","Get Get mutable reference to PhysAddr value on PhysPageNum","Get PageTableEntry on PhysPageNum","Get reference to PhysAddr value","","Return VPN 3 level index","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Get page offset","Get page offset","","","","","","Add value by one","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","Create an empty FrameTracker","","","","","","","","","","","","","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","Readable","Accessible in U mode","Writable","Excutable","","Refresh TLB with sfence.vma","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 …","Clone a same MemorySet","","","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.","Get kernelspace root ppn","","","","Mention that trampoline is not collected by areas.","","","","Create an empty MemorySet","Without kernel stacks.","Returns the complement of this set of flags.","","","","Remove all MapArea","Check PageTable running correctly","Removes the specified flags in-place.","Remove MapArea that starts with start_vpn","","","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.","Get pagetable root_ppn","Translate throuth pagetable","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","","","Array of u8 slice that user communicate with os","Iterator of UserBuffer","","","","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.","","PTE","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","U8 vec","","","","","","","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.","Return an empty PTE","","Check PTE executable","","Find phsical address by virtual address","Find phsical address by virtual address, create a frame if …","Return 10bit flag","","","","","","","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 …","","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).","Calls U::from(self).","Calls U::from(self).","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Check PTE valid","Length of UserBuffer","Create a mapping form vpn to ppn","","Create an empty PageTable","Create a UserBuffer by parameter","Create a PTE from ppn","","Returns the complement of this set of flags.","","Return 44bit ppn","Check PTE readable","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.","Get root ppn","Translate VirtPageNum to PageTableEntry","Translate VirtAddr to PhysAddr","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Delete a mapping form vpn","Check PTE writable","","","","","","","","","","use sbi call to getchar from console (qemu uart handler)","use sbi call to putchar in console (qemu uart handler)","general sbi call","use sbi call to set timer","use sbi call to shutdown the kernel","Wrap a static data structure inside it so that we are able …","inner data","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","","handle syscall exception with syscall_id and other …","","","","","","","","","","If there is not a child process whose pid is same as …","","","pid of usertests app in make run TEST=1","Globle process that init user shell","Kernelstack for app","Pid Allocator struct","Bind pid lifetime to PidHandle","Processor management structure","task context structure containing some registers","A array of TaskControlBlock that is thread-safe","","Add init process to the manager","Interface offered to add task","","","Implementation of TaskContext","","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Exit the current ‘Running’ task and run the next task …","Interface offered to pop the first task","Returns the argument unchanged.","The basic control flow of each core, helping to select and …","Calls U::from(self).","Implementation of TaskManager","Implementation of PidAllocator","","Allocate a pid from PID_ALLOCATOR","Implementation of Processor and Intersection of control …","return address ( e.g. __restore ) of __switch ASM function","","","The main part of process execution and scheduling Loop …","s0-11 register, callee saved","Return to idle control flow for new scheduling","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Wrap switch.S as a function","Take the current task,leaving a None in its place","Implementation of TaskControlBlock","","","","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","s0-11 register, callee saved","kernel stack pointer of app","","","","init task context","","A array of TaskControlBlock that is thread-safe","","Add a task to TaskManager","Interface offered to add task","","","","","","Remove the first task and return it,or None if TaskManager …","Interface offered to pop the first task","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Creat an empty TaskManager","","","","","","","","","Kernelstack for app","","Pid Allocator struct","Bind pid lifetime to PidHandle","","Allocate a pid","","","","","","","","","","Recycle a pid","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the value on the top of kernelstack","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return (bottom, top) of a kernel stack in kernel space.","Create an empty PidAllocator","Create a kernelstack from pid","","Allocate a pid from PID_ALLOCATOR","Push a value on top of kernelstack","","","","","","","","","","","","","","","Processor management structure","","","","","","Get current task in cloning semanteme","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Returns the argument unchanged.","Returns the argument unchanged.","Get mutable reference to idle_task_cx","The basic control flow of each core, helping to select and …","Calls U::from(self).","Calls U::from(self).","Create an empty Processor","The main part of process execution and scheduling Loop …","Return to idle control flow for new scheduling","Get current task in moving semanteme","Take the current task,leaving a None in its place","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","get current time","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,0,0,1,1,1,2,1,0,2,1,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,0,3,3,3,3,0,0,4,0,4,4,4,4,4,0,4,4,4,0,5,6,6,7,0,6,6,6,6,6,6,6,6,6,6,6,6,6,8,9,9,10,10,8,11,11,8,9,9,9,9,9,9,9,9,9,9,10,0,9,7,7,9,9,9,7,0,9,9,7,7,7,7,9,9,9,7,9,7,9,9,0,0,0,0,0,0,0,0,0,0,0,11,11,0,9,9,9,9,9,9,9,9,12,10,5,6,8,9,7,11,12,10,5,6,8,9,7,11,12,6,8,9,7,11,6,8,9,7,11,10,12,10,6,6,8,9,7,11,10,5,6,8,9,7,11,12,10,10,10,10,10,10,0,10,5,6,8,9,7,11,12,0,10,10,5,5,10,10,10,10,10,6,8,9,7,11,10,5,6,8,9,7,11,12,10,5,6,8,9,7,11,12,10,5,6,8,9,7,11,12,5,10,10,13,14,13,15,0,0,0,16,15,16,15,16,16,15,16,15,16,15,15,15,16,15,16,15,16,0,0,0,0,15,0,0,0,0,0,17,18,0,0,0,19,19,18,0,19,18,19,17,0,0,0,17,17,0,17,17,20,17,17,17,17,17,17,17,17,17,18,21,20,17,18,21,20,17,17,17,17,17,17,20,17,17,17,17,17,17,17,17,17,18,21,20,17,17,17,17,17,17,18,21,17,17,17,18,21,20,17,17,17,0,17,18,17,21,0,17,18,18,17,18,18,17,17,17,17,17,17,17,18,21,20,17,18,21,20,17,18,21,20,17,17,18,18,18,0,0,22,23,22,23,22,23,22,23,22,23,22,23,22,23,22,23,22,23,22,23,22,23,0,24,25,26,27,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,29,30,31,32,33,33,33,0,0,0,34,0,0,0,0,0,29,35,0,34,36,0,0,0,0,24,25,26,27,0,0,0,0,0,0,0,0,0,0,0,0,24,25,37,24,25,26,27,38,37,24,25,26,27,38,24,25,24,25,26,27,38,24,25,26,27,38,24,25,26,27,37,37,24,25,26,27,24,25,24,25,26,27,37,24,24,24,25,25,25,26,26,26,27,27,27,38,26,38,24,26,26,24,38,27,37,24,25,26,27,38,37,38,38,24,25,26,27,37,38,37,24,25,24,25,26,27,38,36,26,27,24,25,26,27,38,37,24,25,26,27,38,37,24,25,26,27,38,37,24,25,26,27,38,0,0,0,0,0,39,40,41,35,41,39,35,41,39,41,40,41,39,35,41,35,0,0,0,35,41,39,41,0,35,41,39,40,35,41,35,41,35,41,39,35,41,39,35,41,39,0,0,0,0,0,42,42,0,0,0,0,0,30,30,30,30,28,29,30,29,30,30,30,30,30,30,30,30,29,43,28,42,30,29,43,28,42,30,42,30,42,30,30,30,30,43,43,28,30,0,0,0,30,42,30,0,0,30,42,30,30,30,30,30,29,43,28,42,30,43,30,30,30,29,29,30,30,30,29,30,30,29,43,28,42,30,30,30,0,43,43,43,29,43,30,43,29,29,30,29,30,29,29,0,30,29,0,0,30,0,0,0,30,30,30,42,30,30,29,29,29,43,28,42,30,29,43,28,42,30,29,43,28,42,30,30,43,43,43,44,44,44,0,0,0,44,44,0,0,44,44,44,44,44,44,44,44,44,44,31,44,44,34,32,33,44,31,34,32,33,44,31,32,33,44,31,44,31,44,44,44,33,33,44,44,31,44,31,44,34,34,31,44,44,44,44,44,34,34,32,33,44,31,44,44,44,44,34,44,44,44,44,34,32,33,44,31,32,33,44,44,31,32,34,44,34,32,31,33,44,44,31,31,44,34,44,44,44,44,44,31,44,34,34,34,0,0,0,0,34,32,33,44,31,34,32,33,44,31,34,32,33,44,31,44,34,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,45,45,45,45,45,45,45,45,45,45,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,46,0,0,0,0,0,0,0,0,47,0,0,47,47,0,48,49,0,0,0,47,0,0,47,49,47,0,0,50,0,0,51,52,48,0,51,0,51,0,0,0,0,47,47,47,0,51,51,51,51,51,51,51,51,51,51,51,51,0,0,53,52,0,52,53,52,53,53,52,0,52,53,52,53,52,52,52,53,52,53,52,53,46,0,0,0,0,54,48,48,46,50,54,48,46,50,54,48,48,54,46,50,48,46,50,54,50,48,46,50,54,0,48,50,50,0,50,48,48,46,50,54,48,46,50,54,48,46,50,54,0,0,55,49,55,49,55,49,49,0,0,0,55,49,55,49,49,49,55,49,0,0,49,0,49,55,49,55,49,55,0,56,56,0,0,0,56,57,57,58,57,56,58,57,56,57,56,56,56,58,57,57,58,58,57,56,57,57,57,58,58,58,58,57,56,57,58,57,58,57,58,57,57,56,57,58,57,56,58,57,56,58,57,56,0,0,0,0,0,0,0,0,0,59,59,59,0,0,59,0,0,59,0,59,0,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59],"f":[null,[[]],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,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0],["u32",0]],["never",0]],[[["",0],["u32",0]],["never",0]],[[["u32",0]],["u32",0]],[[["",0]],["never",0]],[[["",0]],["never",0]],[[["",0]],["never",0]],[[["",0]],["never",0]],[[]],[[]],[[["u64",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[["arguments",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0],["str",0]],["result",6]],null,null,null,[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["arc",3]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]]],[[["",0]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",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]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["cmd",4]],[[["",0]],["initerror",4]],[[["",0]],["sdcardcsd",3]],[[["",0]],["sdcardcid",3]],[[["",0]],["sdcardinfo",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[["",0]],["upsafecell",3]],[[["",0]]],[[["",0],["cmd",4]],["bool",0]],[[["",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]],["result",4,[["sdcardinfo",3]]]],[[["",0]],["result",4,[["sdcardcid",3]]]],[[["",0]],["result",4,[["sdcardcsd",3]]]],[[["",0]],["u8",0]],[[["",0]],["u8",0]],[[["",0]],["result",4,[["sdcardinfo",3],["initerror",4]]]],[[],["sdcard",3,[["spiimpl",3,[["spi0",3]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0]]],[[["u32",0],["u8",0]]],[[]],[[["",0],["usize",0]]],[[["",0]]],[[["",0],["u32",0]],["result",4]],[[["",0],["cmd",4],["u32",0],["u8",0]]],null,null,[[["",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]],[[],["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]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0],["usize",0]]],[[["",0]]],[[["",0],["u32",0]],["result",4]],null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["upsafecell",3]],[[]],[[]],[[]],[[]],[[]],[[["",0],["usize",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["usize",0]],["physaddr",3]],[[["physaddr",3],["usize",0]],["i32",0]],[[["physaddr",3]],["virtaddr",3]],[[["virtaddr",3]],["physaddr",3]],[[["",0],["usize",0]]],null,null,null,null,null,null,null,null,[[]],[[["str",0],["openflags",3]],["option",4,[["arc",3,[["osinode",3]]]]]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0]],["bool",0]],null,null,[[["",0]],["bool",0]],null,[[["",0],["userbuffer",3]],["usize",0]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[["",0]]],[[["openflags",3]]],[[["",0]]],[[["",0]],["u32",0]],null,[[]],[[["",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["openflags",3]],[[["",0],["",0]]],[[["",0],["openflags",3]],["ordering",4]],[[]],[[["",0]],["bool",0]],[[["",0]],["arc",3]],[[]],[[]],[[["",0],["openflags",3]],["bool",0]],[[["",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]],[[]],[[]],[[]],[[]],[[["u32",0]],["option",4]],[[["u32",0]]],[[["u32",0]]],[[["intoiterator",8]]],[[["",0],["",0]]],null,null,[[["",0]]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[]],[[["",0],["openflags",3]],["bool",0]],[[["bool",0],["bool",0],["arc",3,[["inode",3]]]]],[[]],null,[[["str",0],["openflags",3]],["option",4,[["arc",3,[["osinode",3]]]]]],[[["",0],["openflags",3]],["option",4,[["ordering",4]]]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0]],["vec",3,[["u8",0]]]],[[["",0]]],[[["",0]],["bool",0]],null,[[["",0]]],[[["",0],["bool",0]]],[[]],[[["",0]]],[[]],[[["",0]]],[[["",0]]],[[],["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]],["bool",0]],null,[[["",0],["userbuffer",3]],["usize",0]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[]],[[]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0],["userbuffer",3]],["usize",0]],[[["panicinfo",3]],["never",0]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["option",4,[["frametracker",3]]]],null,[[["physpagenum",3]]],null,null,[[]],[[],["usize",0]],null,null,null,null,[[]],null,[[["",0]]],[[["usize",0],["usize",0]],["vec",3]],[[["usize",0]],["",0]],[[["usize",0]],["",0]],[[["usize",0]],["string",3]],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]],[[]],[[]],[[["physpagenum",3]]],[[["usize",0]]],[[["usize",0]]],[[]],[[["virtpagenum",3]]],[[]],[[["usize",0]]],[[["physaddr",3]]],[[]],[[["usize",0]]],[[["virtaddr",3]]],[[]],[[["",0]]],[[["",0]]],[[["",0]],["",0]],[[["",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]]],[[["",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]],[[]],[[]],[[]],[[]],[[]],[[["maparea",3]]],[[["u8",0]],["option",4]],[[["u8",0]]],[[["u8",0]]],[[]],[[["memoryset",3]],["memoryset",3]],[[["intoiterator",8]]],[[["",0],["",0]]],[[["",0]]],[[["",0],["virtaddr",3],["virtaddr",3],["mappermission",3]]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[],["usize",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]]],[[]],[[["",0]]],[[["",0],["virtpagenum",3]]],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,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]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,[[["",0]],["pteflags",3]],[[["",0]],["pagetableentry",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["pteflags",3]],["ordering",4]],[[]],[[["",0]],["bool",0]],null,null,[[]],[[]],[[]],[[["",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]],["usize",0]],[[["",0],["virtpagenum",3],["physpagenum",3],["pteflags",3]]],[[["",0],["pteflags",3]],["bool",0]],[[]],[[["vec",3]]],[[["physpagenum",3],["pteflags",3]]],[[["",0]],["option",4]],[[]],[[["",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]]]],[[["",0],["virtaddr",3]],["option",4,[["physaddr",3]]]],[[["usize",0],["usize",0]],["vec",3]],[[["usize",0]],["",0]],[[["usize",0]],["",0]],[[["usize",0]],["string",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],["virtpagenum",3]]],[[["",0]],["bool",0]],null,null,null,null,null,null,null,null,null,[[],["usize",0]],[[["usize",0]]],[[["usize",0],["usize",0],["usize",0],["usize",0]],["usize",0]],[[["usize",0]]],[[],["never",0]],null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["refmut",3]],[[]],null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["u32",0]],["isize",0]],[[["usize",0],["usize",0]],["isize",0]],[[["usize",0],["usize",0]],["isize",0]],[[],["isize",0]],[[["i32",0]],["never",0]],[[],["isize",0]],[[],["isize",0]],[[],["isize",0]],[[["isize",0]],["isize",0]],[[],["isize",0]],null,null,null,null,null,null,null,null,null,null,[[]],[[["arc",3,[["taskcontrolblock",3]]]]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,null,[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["trapcontext",3]],[[],["usize",0]],[[["",0]],["arc",3]],[[["i32",0]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[]],null,[[]],null,null,null,[[],["pidhandle",3]],null,null,null,null,[[]],null,[[]],null,[[]],null,[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[["usize",0]]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,[[["",0],["arc",3,[["taskcontrolblock",3]]]]],[[["arc",3,[["taskcontrolblock",3]]]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["upsafecell",3]],[[["",0]],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,null,null,[[["",0]],["pidhandle",3]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0],["usize",0]]],[[["",0]],["upsafecell",3]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],[[]],[[["",0]],["usize",0]],[[]],[[]],[[]],[[]],[[["usize",0]]],[[]],[[["pidhandle",3]]],null,[[],["pidhandle",3]],[[["",0]]],null,[[],["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]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],null,[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["trapcontext",3]],[[],["usize",0]],[[["",0]],["upsafecell",3]],[[]],[[]],[[["",0]]],null,[[]],[[]],[[]],[[]],[[]],[[["",0]],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,null,null,null,[[["",0]],["usize",0]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0]],["taskstatus",4]],[[["",0],["",0]]],[[["",0],["taskstatus",4]],["bool",0]],[[["",0]]],null,null,[[["arc",3]],["arc",3,[["taskcontrolblock",3]]]],[[]],[[]],[[]],[[["",0]],["taskstatus",4]],[[["",0]],["trapcontext",3]],[[["",0]],["usize",0]],[[["",0]],["usize",0]],null,[[["",0]],["refmut",3,[["taskcontrolblockinner",3]]]],[[]],[[]],[[]],[[["",0]],["bool",0]],null,null,[[]],null,null,null,null,[[["",0]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",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]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],null,null,null,[[["",0],["usize",0]]],null,null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null],"p":[[3,"RISCV64"],[8,"QEMUExit"],[3,"Stdout"],[3,"BLOCK_DEVICE"],[3,"SDCardWrapper"],[4,"CMD"],[3,"SDCardCID"],[4,"InitError"],[3,"SDCardCSD"],[3,"SDCard"],[3,"SDCardInfo"],[3,"PERIPHERALS"],[13,"CMDFailed"],[13,"CardCapacityStatusNotSet"],[3,"VirtIOBlock"],[3,"QUEUE_FRAMES"],[3,"OpenFlags"],[3,"OSInode"],[8,"File"],[3,"ROOT_INODE"],[3,"OSInodeInner"],[3,"Stdin"],[3,"Stdout"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"PhysPageNum"],[3,"VirtPageNum"],[3,"KERNEL_SPACE"],[3,"MemorySet"],[3,"MapPermission"],[3,"PageTableEntry"],[3,"UserBuffer"],[3,"UserBufferIterator"],[3,"PageTable"],[3,"FrameTracker"],[8,"StepByOne"],[3,"SimpleRangeIterator"],[3,"SimpleRange"],[3,"FRAME_ALLOCATOR"],[8,"FrameAllocator"],[3,"StackFrameAllocator"],[4,"MapType"],[3,"MapArea"],[3,"PTEFlags"],[3,"UPSafeCell"],[3,"PidHandle"],[3,"INITPROC"],[3,"PidAllocator"],[3,"Processor"],[3,"KernelStack"],[3,"TaskContext"],[3,"TaskManager"],[3,"TASK_MANAGER"],[3,"PID_ALLOCATOR"],[3,"PROCESSOR"],[4,"TaskStatus"],[3,"TaskControlBlockInner"],[3,"TaskControlBlock"],[3,"TrapContext"]]}\ +"os":{"doc":"The main module and entrypoint","t":"AFAAAAAAOOFAAAAAAGRRRCRRCCRRRRRDLLLLFLLLLCCADCMFLLLLLLLLADRDDMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIDDDDMMAFFKKMAKMKRSGDDDSSDSSMLLLLLLMLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMMLLLLLLLLLFLLMFLLLLLMLLLLLLLLLLLLLLLLLLLLLMLDDLLLLLLLLLLLLLLLLLLLLLLFDCCDDDDDDDIDDDDMAMMMMMMMFAFMAFFAAMMFMKFFFFRRDDDDIRGRDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLMMKLLLLLLLLLLLLLLLLLLLLLLLLLDIGDDMKLLLLLLLMMKLLLMMLFFFLLLLFLLLKLLMMMLLLLLLLLLHHFFFNNDDDEDSSSSMLLMLLLLLMLLLLLLLLLLLLLLLLLLLLMLLFFFLLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLMLMLLLLMLLLFLLFFLFFFLLLLLLLLLLLLLLLLLLLLLLLLLLMSSSDDDSSDDSSSLLLLLLMMLLLLLLLLLLLLMMLLLLLLLMMLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLFFFFLLLLLLLLLLLLLLLLLLFFFFDDMADDLLLLLLLMLLLLLLLLLLLLRRRRRRRRRRRAAFFFFFFFFFFFFRDDDDDDDMFFLLAMMFFFLFFLMLAAMFAMMMFMFMFAFALLLDLLLLLMMMLLLLDDMLFLLLLLLFLLLLLMLLLLLLDDDDMLLLLLLLLLMLLLLLLLLLLLLLFLLMFLMLLLLLLLLLLLLDDMLLLLLMFFFLLLLMLLLFFLFLLLLLLFNNDDENLMLLLLLLMLLLLMMLLLLLLLLMLLLLLMMLMMMMLMLLLLLLLLLRRFFFDAFFMMMFFMFFMFMDLLLLLLMMMLMMLLLM","n":["board","clear_bss","config","console","drivers","fs","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","BlockDeviceImpl","CLOCK_FREQ","MEMORY_END","MMIO","CLOCK_FREQ","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","MMIO","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT","USER_STACK_SIZE","Stdout","borrow","borrow_mut","from","into","print","try_from","try_into","type_id","write_str","BLOCK_DEVICE","BLOCK_DEVICE","block","BLOCK_DEVICE","VirtIOBlock","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","try_from","try_into","type_id","virtio_blk","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","VirtioHal","__private_field","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","dma_alloc","dma_dealloc","from","from","from","into","into","into","new","phys_to_virt","read_block","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","virt_to_phys","write_block","File","OSInode","OpenFlags","Stdin","Stdout","bits","inner","inode","list_apps","open_file","read","readable","readable","stdio","writable","writable","write","BLOCK_CACHE_SIZE","CREATE","InodeType","OSInode","OSInodeInner","OpenFlags","RDONLY","RDWR","ROOT_INODE","TRUNC","WRONLY","__private_field","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","block_id","block_offset","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","complement","contains","deref","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","fs","hash","inner","inode","insert","intersection","intersects","into","into","into","into","is_all","is_empty","list_apps","new","not","offset","open_file","partial_cmp","read","read_all","read_write","readable","readable","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union","writable","writable","write","Stdin","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","read","read","readable","readable","try_from","try_from","try_into","try_into","type_id","type_id","writable","writable","write","write","panic","FrameTracker","KERNEL_SPACE","KERNEL_SPACE","KERNEL_SPACE","MapPermission","MemorySet","PageTable","PageTableEntry","PhysAddr","PhysPageNum","StepByOne","UserBuffer","UserBufferIterator","VirtAddr","VirtPageNum","__private_field","address","areas","bits","bits","buffers","buffers","current_buffer","current_idx","frame_alloc","frame_allocator","frame_dealloc","frames","heap_allocator","init","kernel_token","memory_set","page_table","page_table","ppn","remap_test","root_ppn","step","translated_byte_buffer","translated_ref","translated_refmut","translated_str","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_mut","get_pte_array","get_ref","get_start","indexes","into","into","into","into","into","into","into_iter","into_iter","l","l","new","new","next","page_offset","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","r","r","step","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","current","dealloc","dealloc","deref","drop","end","end","fmt","frame_alloc","frame_allocator_test","frame_dealloc","from","from","from","init","init_frame_allocator","into","into","into","new","new","new","ppn","recycled","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_another","from_bits","from_bits_truncate","from_bits_unchecked","from_elf","from_existed_user","from_iter","hash","insert","insert_framed_area","intersection","intersects","into","into","into","into","into","is_all","is_empty","kernel_token","map","map_one","map_perm","map_trampoline","map_type","new","new_bare","new_kernel","not","page_table","partial_cmp","push","recycle_data_pages","remap_test","remove","remove_area_with_start_vpn","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","UserBuffer","UserBufferIterator","V","W","X","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buffers","buffers","clone","clone","clone_into","clone_into","cmp","complement","contains","current_buffer","current_idx","difference","empty","empty","eq","executable","extend","find_pte","find_pte_create","flags","fmt","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_token","hash","insert","intersection","intersects","into","into","into","into","into","into_iter","into_iter","is_all","is_empty","is_valid","len","map","new","new","new","next","not","partial_cmp","ppn","readable","remove","root_ppn","set","sub","sub_assign","symmetric_difference","to_owned","to_owned","toggle","token","translate","translate_va","translated_byte_buffer","translated_ref","translated_refmut","translated_str","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","writable","console_getchar","console_putchar","set_timer","shutdown","RawExclusiveLock","UPSafeCell","inner","up","RawExclusiveLock","UPSafeCell","borrow","borrow","borrow_mut","borrow_mut","exclusive_access","from","from","inner","into","into","lock","new","try_from","try_from","try_into","try_into","try_lock","type_id","type_id","unlock","SYSCALL_CLOSE","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GET_TIME","SYSCALL_OPEN","SYSCALL_READ","SYSCALL_WAITPID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","syscall","sys_close","sys_open","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_waitpid","sys_yield","IDLE_PID","INITPROC","KernelStack","PidAllocator","PidHandle","Processor","TaskContext","TaskManager","__private_field","add_initproc","add_task","borrow","borrow_mut","context","current","current","current_task","current_trap_cx","current_user_token","deref","exit_current_and_run_next","fetch_task","from","idle_task_cx","into","manager","pid","pid","pid_alloc","processor","ra","ready_queue","recycled","run_tasks","s","schedule","sp","suspend_current_and_run_next","switch","take_current_task","task","try_from","try_into","type_id","TaskContext","borrow","borrow_mut","from","goto_trap_return","into","ra","s","sp","try_from","try_into","type_id","zero_init","TASK_MANAGER","TaskManager","__private_field","add","add_task","borrow","borrow","borrow_mut","borrow_mut","deref","fetch","fetch_task","from","from","into","into","new","ready_queue","try_from","try_from","try_into","try_into","type_id","type_id","KernelStack","PID_ALLOCATOR","PidAllocator","PidHandle","__private_field","alloc","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","deref","drop","drop","from","from","from","from","get_top","into","into","into","into","kernel_stack_position","new","new","pid","pid_alloc","push_on_top","recycled","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_task","current_trap_cx","current_user_token","deref","from","from","get_idle_task_cx_ptr","idle_task_cx","into","into","new","run_tasks","schedule","take_current","take_current_task","try_from","try_from","try_into","try_into","type_id","type_id","__switch","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","Zombie","alloc_fd","base_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","children","clone","clone_into","eq","exec","exit_code","fd_table","fork","from","from","from","get_status","get_trap_cx","get_user_token","getpid","inner","inner_exclusive_access","into","into","into","is_zombie","kernel_stack","memory_set","new","parent","pid","task_cx","task_status","to_owned","trap_cx_ppn","try_from","try_from","try_from","try_into","try_into","try_into","type_id","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","fmt","from","into","kernel_satp","kernel_sp","sepc","set_sp","sstatus","trap_handler","try_from","try_into","type_id","x"],"q":[[0,"os"],[17,"os::board"],[21,"os::config"],[31,"os::console"],[41,"os::drivers"],[44,"os::drivers::block"],[57,"os::drivers::block::virtio_blk"],[91,"os::fs"],[108,"os::fs::inode"],[209,"os::fs::stdio"],[233,"os::lang_items"],[234,"os::mm"],[276,"os::mm::address"],[399,"os::mm::frame_allocator"],[448,"os::mm::heap_allocator"],[453,"os::mm::memory_set"],[586,"os::mm::page_table"],[713,"os::sbi"],[717,"os::sync"],[721,"os::sync::up"],[743,"os::syscall"],[757,"os::syscall::fs"],[761,"os::syscall::process"],[768,"os::task"],[812,"os::task::context"],[825,"os::task::manager"],[849,"os::task::pid"],[896,"os::task::processor"],[926,"os::task::switch"],[927,"os::task::task"],[980,"os::timer"],[985,"os::trap"],[1000,"os::trap::context"],[1017,"core::fmt"],[1018,"core::result"],[1019,"core::any"],[1020,"core::fmt"],[1021,"alloc::sync"],[1022,"alloc::vec"],[1023,"core::option"],[1024,"core::cmp"],[1025,"easy_fs::vfs"],[1026,"core::iter::traits::collect"],[1027,"core::fmt"],[1028,"core::panic::panic_info"],[1029,"alloc::string"],[1030,"core::marker"],[1031,"core::cmp"],[1032,"core::alloc::layout"],[1033,"core::cell"],[1034,"core::marker"]],"d":["","clear BSS segment","Constants used in rCore","SBI console driver, for text output","","File system in os","The panic handler","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","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","File trait","A wrapper around a filesystem inode to implement File …","Open file flags","Standard input","Standard output","","","Arc<Inode> -> OSInodeInner: In order to open files …","List all files in the filesystems","Open file with flags","Read file to UserBuffer","If readable","","Stdin & Stdout","If writable","","Write UserBuffer to file","","Allow create","","A wrapper around a filesystem inode to implement File …","The OS inode inner in ‘UPSafeCell’","Open file flags","Read only","Read & Write","","Clear file and return an empty one","Write only","","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.","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 …","","","","","","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).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","List all files in the filesystems","Construct an OS inode from a inode","Returns the complement of this set of flags.","","Open file with flags","","","Read all data inside a inode into vector","Do not check validity for simplicity Return (readable, …","","","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.","","","","Standard input","Standard output","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","manage a frame which has the same lifecycle as the tracker","","","a memory set instance through lazy_static! managing kernel …","map permission corresponding to that in pte: R W X U","memory set structure, controls virtual-memory space","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","Definitions","phiscal page number","Add value by one","Array of u8 slice that user communicate with os","Iterator of UserBuffer","virtual address","virtual page number","","Implementation of physical and virtual address and page …","","","PTE","U8 vec","","","","allocate a frame","Implementation of FrameAllocator which controls all the …","deallocate a frame","","The global allocator","initiate heap allocator, frame allocator and kernel space","Get kernelspace root ppn","Implementation of MapArea and MemorySet.","Implementation of PageTableEntry and PageTable.","","","Check PageTable running correctly","","Add value by one","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","Definitions","phiscal page number","a simple range structure for type T","iterator for the simple range structure","Add value by one","","a simple range structure for virtual page number","","virtual address","virtual page number","Check page aligned","Check page aligned","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","","","","","","","","","","","","","","","","","PhysAddr->PhysPageNum","VirtAddr->VirtPageNum","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Get u8 array on PhysPageNum","","Get mutable reference to PhysAddr value","Get Get mutable reference to PhysAddr value on PhysPageNum","Get PageTableEntry on PhysPageNum","Get reference to PhysAddr value","","Return VPN 3 level index","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","Get page offset","Get page offset","","","","","","","Add value by one","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","Create an empty FrameTracker","","","","","","","","","","","","","","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","Readable","Accessible in U mode","Writable","Excutable","","Refresh TLB with sfence.vma","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 …","Clone a same MemorySet","","","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.","Get kernelspace root ppn","","","","Mention that trampoline is not collected by areas.","","","Create an empty MemorySet","Without kernel stacks.","Returns the complement of this set of flags.","","","","Remove all MapArea","Check PageTable running correctly","Removes the specified flags in-place.","Remove MapArea that starts with start_vpn","","","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.","Get pagetable root_ppn","Translate throuth pagetable","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","Record root ppn and has the same lifetime as 1 and 2 level …","page table entry structure","","","Array of u8 slice that user communicate with os","Iterator of UserBuffer","","","","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.","","PTE","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","U8 vec","","","","","","","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.","Return an empty PTE","","Check PTE executable","","Find phsical address by virtual address","Find phsical address by virtual address, create a frame if …","Return 10bit flag","","","","","","","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 …","","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).","Calls U::from(self).","Calls U::from(self).","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Check PTE valid","Length of UserBuffer","Create a mapping form vpn to ppn","Create an empty PageTable","Create a UserBuffer by parameter","Create a PTE from ppn","","Returns the complement of this set of flags.","","Return 44bit ppn","Check PTE readable","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.","Get root ppn","Translate VirtPageNum to PageTableEntry","Translate VirtAddr to PhysAddr","Translate a pointer to a mutable u8 Vec through page table","Translate a generic through page table and return a …","Translate a generic through page table and return a …","Translate a pointer to a mutable u8 Vec end with \\\\0 …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Delete a mapping form vpn","Check PTE writable","use sbi call to getchar from console (qemu uart handler)","use sbi call to putchar in console (qemu uart handler)","use sbi call to set timer","use sbi call to shutdown the kernel","The sync primitive used by easy-fs.","Wrap a static data structure inside it so that we are able …","inner data","Uniprocessor interior mutability primitives","The sync primitive used by easy-fs.","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.","Returns the argument unchanged.","inner data","Calls U::from(self).","Calls U::from(self).","","User is responsible to guarantee that inner struct is only …","","","","","","","","","","","","","","","","","","","","File and filesystem-related syscalls","","handle syscall exception with syscall_id and other …","","","","","","","","","","If there is not a child process whose pid is same as …","","pid of usertests app in make run TEST=1","Globle process that init user shell","Kernelstack for app","Pid Allocator struct","Bind pid lifetime to PidHandle","Processor management structure","task context structure containing some registers","A array of TaskControlBlock that is thread-safe","","Add init process to the manager","Interface offered to add task","","","Implementation of TaskContext","","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Exit the current ‘Running’ task and run the next task …","Interface offered to pop the first task","Returns the argument unchanged.","The basic control flow of each core, helping to select and …","Calls U::from(self).","Implementation of TaskManager","Implementation of PidAllocator","","Allocate a pid from PID_ALLOCATOR","Implementation of Processor and Intersection of control …","return address ( e.g. __restore ) of __switch ASM function","","","The main part of process execution and scheduling Loop …","s0-11 register, callee saved","Return to idle control flow for new scheduling","kernel stack pointer of app","Suspend the current ‘Running’ task and run the next …","Wrap switch.S as a function","Take the current task,leaving a None in its place","Implementation of TaskControlBlock","","","","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","s0-11 register, callee saved","kernel stack pointer of app","","","","init task context","","A array of TaskControlBlock that is thread-safe","","Add a task to TaskManager","Interface offered to add task","","","","","","Remove the first task and return it,or None if TaskManager …","Interface offered to pop the first task","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Creat an empty TaskManager","","","","","","","","Kernelstack for app","","Pid Allocator struct","Bind pid lifetime to PidHandle","","Allocate a pid","","","","","","","","","","Recycle a pid","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the value on the top of kernelstack","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return (bottom, top) of a kernel stack in kernel space.","Create an empty PidAllocator","Create a kernelstack from pid","","Allocate a pid from PID_ALLOCATOR","Push a value on top of kernelstack","","","","","","","","","","","","","","","Processor management structure","","","","","","Get current task in cloning semanteme","The task currently executing on the current processor","Get running task","Get the mutable reference to trap context of current task","Get token of the address space of current task","","Returns the argument unchanged.","Returns the argument unchanged.","Get mutable reference to idle_task_cx","The basic control flow of each core, helping to select and …","Calls U::from(self).","Calls U::from(self).","Create an empty Processor","The main part of process execution and scheduling Loop …","Return to idle control flow for new scheduling","Get current task in moving semanteme","Take the current task,leaving a None in its place","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","get current time","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,0,0,0,0,0,6,6,6,6,0,6,6,6,6,0,0,0,0,0,9,0,9,9,9,9,9,9,9,9,0,0,0,0,0,12,18,80,12,18,80,12,12,80,80,18,80,12,18,80,12,18,80,18,18,80,12,18,80,12,18,80,12,80,18,0,0,0,0,0,21,22,0,0,0,81,81,22,0,81,22,81,0,21,0,0,0,0,21,21,0,21,21,28,21,21,21,21,21,21,21,21,21,82,82,22,83,28,21,22,83,28,21,21,21,21,21,21,28,21,21,21,21,21,21,21,21,21,22,83,28,21,21,21,21,21,82,21,22,83,21,21,21,22,83,28,21,21,21,0,22,21,83,0,21,22,22,21,22,22,21,21,21,21,21,21,21,22,83,28,21,22,83,28,21,22,83,28,21,21,22,22,22,0,0,34,35,34,35,34,35,34,35,34,35,34,35,34,35,34,35,34,35,34,35,34,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,55,56,49,24,62,62,62,0,0,0,59,0,0,0,0,0,55,13,0,59,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,40,51,39,40,37,41,42,51,39,40,37,41,42,39,40,39,40,37,41,42,39,40,37,41,42,39,40,37,41,51,51,39,40,37,41,39,40,39,40,37,41,51,39,39,39,40,40,40,37,37,37,41,41,41,42,37,42,39,37,37,39,42,41,51,39,40,37,41,42,51,42,84,42,51,42,51,39,40,39,40,37,41,84,42,43,37,41,39,40,37,41,42,51,39,40,37,41,42,51,39,40,37,41,42,51,39,40,37,41,42,0,0,0,0,0,53,85,52,13,52,53,13,52,53,52,86,85,52,53,13,52,86,13,0,0,0,13,52,53,52,0,13,52,53,85,13,52,13,52,86,13,52,53,13,52,53,13,52,53,0,0,0,0,0,57,57,0,0,0,0,0,56,56,56,56,60,55,56,55,56,56,56,56,56,56,56,56,55,58,60,57,56,55,58,60,57,56,57,56,57,56,56,56,56,58,58,60,56,0,0,0,56,57,56,0,0,56,57,56,56,56,56,56,55,58,60,57,56,58,56,56,56,55,55,56,56,56,55,56,56,55,58,60,57,56,56,56,0,58,58,58,55,58,58,55,55,56,55,56,55,55,0,56,55,0,0,56,0,0,0,56,56,56,57,56,56,55,55,55,58,60,57,56,55,58,60,57,56,55,58,60,57,56,56,58,58,58,61,61,61,0,0,0,61,61,0,0,61,61,61,61,61,61,61,61,61,61,49,61,61,59,24,62,61,49,59,24,62,61,49,24,62,61,49,61,49,61,61,61,62,62,61,61,49,61,49,61,59,59,49,61,61,61,61,61,59,59,24,62,61,49,61,61,61,61,59,61,61,61,61,59,24,62,61,49,24,62,61,61,49,24,59,59,24,49,62,61,61,49,49,61,59,61,61,61,61,61,49,61,59,59,59,0,0,0,0,59,24,62,61,49,59,24,62,61,49,59,24,62,61,49,61,59,49,0,0,0,0,0,0,15,0,0,0,15,29,15,29,15,15,29,15,15,29,29,15,15,29,15,29,29,15,29,29,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,0,0,0,0,0,0,67,0,0,67,67,0,72,76,0,0,0,67,0,0,67,76,67,0,0,74,0,0,69,70,72,0,69,0,69,0,0,0,0,67,67,67,0,69,69,69,69,69,69,69,69,69,69,69,69,0,0,71,70,0,70,71,70,71,71,70,0,70,71,70,71,70,70,70,71,70,71,70,71,0,0,0,0,73,72,72,68,74,73,72,68,74,73,72,72,73,68,74,72,68,74,73,74,72,68,74,73,0,72,74,74,0,74,72,72,68,74,73,72,68,74,73,72,68,74,73,0,0,77,76,77,76,77,76,76,0,0,0,77,76,77,76,76,76,77,76,0,0,76,0,76,77,76,77,76,77,0,79,79,0,0,0,79,78,78,65,78,79,65,78,79,78,79,79,79,65,78,78,65,65,78,79,78,78,78,65,65,65,65,78,79,78,65,78,65,78,65,78,78,79,78,65,78,79,65,78,79,65,78,79,0,0,0,0,0,0,0,0,0,66,66,66,0,0,66,0,0,66,0,66,0,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],"f":[0,[[],1],0,0,0,0,0,0,0,0,[[],2],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],[-1,-2,[],[]],[3,1],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[[6,7],8],0,0,0,0,0,0,[[],1],[-1,-2,[],[]],[-1,-2,[],[]],[9,[[11,[10]]]],[-1,-1,[]],[-1,-2,[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[12,[[15,[[14,[13]]]]]],[16,16],[[16,16],17],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],18],[16,16],[[18,16,[20,[19]]],1],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[16,16],[[18,16,[20,[19]]],1],0,0,0,0,0,0,0,0,[[],1],[[7,21],[[23,[[11,[22]]]]]],[[-1,24],16,[]],[-1,25,[]],0,0,[-1,25,[]],0,[[-1,24],16,[]],0,0,0,0,0,0,0,0,0,0,0,0,[[],21],[[21,21],21],[[21,21],1],[[21,21],21],[[21,21],1],[21,26],0,[[21,21],21],[[21,21],1],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[21,21],[[-1,-2],1,[],[]],[[21,21],27],[21,21],[[21,21],25],[28,[[11,[[30,[29,29,29]]]]]],[[21,21],21],[[],21],[[21,21],25],[[21,-1],1,31],[[21,32],8],[[21,32],8],[[21,32],8],[[21,32],8],[[21,32],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[26,[[23,[21]]]],[26,21],[26,21],[-1,21,31],0,[[21,-1],1,33],0,0,[[21,21],1],[[21,21],21],[[21,21],25],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[21,25],[21,25],[[],1],[[25,25,[11,[[30,[29,29,29]]]]],22],[21,21],0,[[7,21],[[23,[[11,[22]]]]]],[[21,21],[[23,[27]]]],[[22,24],16],[22,[[14,[19]]]],[21,[[1,[25,25]]]],[22,25],0,[[21,21],1],[[21,21,25],1],[[21,21],21],[[21,21],1],[[21,21],21],[-1,-2,[],[]],[[21,21],1],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[[21,21],21],[22,25],0,[[22,24],16],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[[34,24],16],[[35,24],16],[34,25],[35,25],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[34,25],[35,25],[[34,24],16],[[35,24],16],[36,2],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],[[23,[13]]]],0,[37,1],0,0,[[],1],[[],16],0,0,0,0,[[],1],0,[-1,1,[]],[[16,19,16],[[14,[[20,[19]]]]]],[16,-1,[]],[16,-1,[]],[[16,19],38],0,0,0,0,0,0,0,0,0,0,0,0,[39,25],[40,25],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[39,37],[40,41],[39,39],[40,40],[37,37],[41,41],[[[42,[-1]]],[[42,[-1]]],[43,44,45,46,47,48]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[39,39],27],[[40,40],27],[[37,37],27],[[41,41],27],0,0,[[39,39],25],[[40,40],25],[[37,37],25],[[41,41],25],[39,37],[40,41],[[39,32],8],[[40,32],8],[[37,32],8],[[41,32],8],[-1,-1,[]],[37,39],[-1,-1,[]],[16,39],[41,40],[-1,-1,[]],[16,40],[16,37],[39,37],[-1,-1,[]],[-1,-1,[]],[16,41],[40,41],[-1,-1,[]],[37,[[20,[19]]]],[[[42,[-1]]],-1,[43,44,45,46,47]],[39,-1,[]],[37,-1,[]],[37,[[20,[49]]]],[39,-1,[]],[[[42,[-1]]],-1,[43,44,45,46,47]],[41,[[50,[16]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[42,[-1]]],[],[43,44,45,46,47]],0,0,[[-1,-1],[[51,[-1]]],[43,44,45,46,47]],[[-1,-1],[[42,[-1]]],[43,44,45,46,47]],[[[51,[-1]]],23,[43,44,45,46,47]],[39,16],[40,16],[[39,39],[[23,[27]]]],[[40,40],[[23,[27]]]],[[37,37],[[23,[27]]]],[[41,41],[[23,[27]]]],0,0,[-1,1,[]],[37,1],[41,1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],0,0,0,0,0,0,[-1,[[23,[37]]],[]],[52,[[23,[37]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[-1,37],1,[]],[[52,37],1],[53,[[15,[52]]]],[13,1],0,0,[[13,32],8],[[],[[23,[13]]]],[[],1],[37,1],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[52,37,37],1],[[],1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],-1,[]],[37,13],[[],52],0,0,0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],0,0,[54,2],[[],1],[[],1],0,0,0,0,0,0,0,0,0,0,0,0,[55,1],[[],56],0,[[56,56],56],[[56,56],1],[[56,56],56],[[56,56],1],[56,19],0,[[56,56],56],[[56,56],1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[57,57],[56,56],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[56,56],27],[56,56],[[56,56],25],[[58,59,[20,[19]]],1],0,[60,[[11,[[15,[55]]]]]],[[56,56],56],0,0,0,[[],56],[[57,57],25],[[56,56],25],0,0,[[56,-1],1,31],[[57,32],8],[[56,32],8],[[56,32],8],[[56,32],8],[[56,32],8],[[56,32],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[58,58],[19,[[23,[56]]]],[19,56],[19,56],[[[20,[19]]],[[1,[55,16,16]]]],[55,55],[-1,56,31],[[56,-1],1,33],[[56,56],1],[[55,40,40,56],1],[[56,56],56],[[56,56],25],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[56,25],[56,25],[[],16],[[58,59],1],[[58,59,41],1],0,[55,1],0,[[40,40,57,56],58],[[],55],[[],55],[56,56],0,[[56,56],[[23,[27]]]],[[55,58,[23,[[20,[19]]]]],1],[55,1],[[],1],[[56,56],1],[[55,41],1],0,0,[[56,56,25],1],0,0,0,[[56,56],56],[[56,56],1],[[56,56],56],[-1,-2,[],[]],[-1,-2,[],[]],[[56,56],1],[55,16],[[55,41],[[23,[49]]]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[[56,56],56],[[58,59],1],[[58,59,41],1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],61],[[61,61],61],[[61,61],1],[[61,61],61],[[61,61],1],[61,19],0,0,[[61,61],61],[[61,61],1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[61,61],[49,49],[[-1,-2],1,[],[]],[[-1,-2],1,[],[]],[[61,61],27],[61,61],[[61,61],25],0,0,[[61,61],61],[[],61],[[],49],[[61,61],25],[49,25],[[61,-1],1,31],[[59,41],[[23,[49]]]],[[59,41],[[23,[49]]]],[49,61],[[61,32],8],[[61,32],8],[[61,32],8],[[61,32],8],[[61,32],8],0,[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[19,[[23,[61]]]],[19,61],[19,61],[-1,61,31],[16,59],[[61,-1],1,33],[[61,61],1],[[61,61],61],[[61,61],25],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[24],[-1,-2,[],[]],[61,25],[61,25],[49,25],[24,16],[[59,41,37,61],1],[[],59],[[[14,[[20,[19]]]]],24],[[37,61],49],[62,23],[61,61],[[61,61],[[23,[27]]]],[49,37],[49,25],[[61,61],1],0,[[61,61,25],1],[[61,61],61],[[61,61],1],[[61,61],61],[-1,-2,[],[]],[-1,-2,[],[]],[[61,61],1],[59,16],[[59,41],[[23,[49]]]],[[59,40],[[23,[39]]]],[[16,19,16],[[14,[[20,[19]]]]]],[16,-1,[]],[16,-1,[]],[[16,19],38],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[[61,61],61],[[59,41],1],[49,25],[[],16],[16,1],[16,1],[25,2],0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[15,[-1]]],[[63,[-1]]],[]],[-1,-1,[]],[-1,-1,[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[29,1],[-1,[[15,[-1]]],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[29,25],[-1,5,[]],[-1,5,[]],[29,1],0,0,0,0,0,0,0,0,0,0,0,0,0,[[16,[50,[16]]],64],[16,64],[[19,26],64],[[16,19,16],64],[[16,19,16],64],[19,64],[17,2],[[],64],[[],64],[[],64],[[64,17],64],[[],64],0,0,0,0,0,0,0,0,0,[[],1],[[[11,[65]]],1],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[[],[[23,[[11,[65]]]]]],[[],66],[[],16],[67,[[11,[65]]]],[17,1],[[],[[23,[[11,[65]]]]]],[-1,-1,[]],0,[-1,-2,[],[]],0,0,0,[[],68],0,0,0,0,[[],1],0,[69,1],0,[[],1],0,[[],[[23,[[11,[65]]]]]],0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-1,[]],[16,69],[-1,-2,[],[]],0,0,0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[[],69],0,0,0,[[70,[11,[65]]],1],[[[11,[65]]],1],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[71,[[15,[70]]]],[70,[[23,[[11,[65]]]]]],[[],[[23,[[11,[65]]]]]],[-1,-1,[]],[-1,-1,[]],[-1,-2,[],[]],[-1,-2,[],[]],[[],70],0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],0,0,0,0,0,[72,68],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[[72,16],1],[73,[[15,[72]]]],[68,1],[74,1],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[74,16],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[16,[[1,[16,16]]]],[[],72],[68,74],0,[[],68],[[74,-1],[],75],0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[76,[[23,[[11,[65]]]]]],0,[[],[[23,[[11,[65]]]]]],[[],66],[[],16],[77,[[15,[76]]]],[-1,-1,[]],[-1,-1,[]],[76,69],0,[-1,-2,[],[]],[-1,-2,[],[]],[[],76],[[],1],[69,1],[76,[[23,[[11,[65]]]]]],[[],[[23,[[11,[65]]]]]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],0,0,0,0,0,0,0,[78,16],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[79,79],[[-1,-2],1,[],[]],[[79,79],25],[[65,[20,[19]]],1],0,0,[[[11,[65]]],[[11,[65]]]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[78,79],[78,66],[78,16],[65,16],0,[65,[[63,[78]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[78,25],0,0,[[[20,[19]]],65],0,0,0,0,[-1,-2,[],[]],0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],[-1,5,[]],[-1,5,[]],0,0,[[],16],[[],16],[[],1],0,0,[[],1],[[],1],0,0,0,[[],1],[[],1],0,[[],2],[[],2],0,[[],2],0,0,[[16,16,16,16,16],66],[-1,-2,[],[]],[-1,-2,[],[]],[[66,32],8],[-1,-1,[]],[-1,-2,[],[]],0,0,0,[[66,16],1],0,0,[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,5,[]],0],"c":[],"p":[[15,"tuple"],[15,"never"],[3,"Arguments",1017],[4,"Result",1018],[3,"TypeId",1019],[3,"Stdout",31],[15,"str"],[6,"Result",1017],[3,"BLOCK_DEVICE",44],[8,"BlockDevice",1020],[3,"Arc",1021],[3,"QUEUE_FRAMES",57],[3,"FrameTracker",399],[3,"Vec",1022],[3,"UPSafeCell",721],[15,"usize"],[15,"i32"],[3,"VirtIOBlock",57],[15,"u8"],[15,"slice"],[3,"OpenFlags",108],[3,"OSInode",108],[4,"Option",1023],[3,"UserBuffer",586],[15,"bool"],[15,"u32"],[4,"Ordering",1024],[3,"ROOT_INODE",108],[3,"RawExclusiveLock",721],[3,"Inode",1025],[8,"IntoIterator",1026],[3,"Formatter",1017],[8,"Hasher",1027],[3,"Stdin",209],[3,"Stdout",209],[3,"PanicInfo",1028],[3,"PhysPageNum",276],[3,"String",1029],[3,"PhysAddr",276],[3,"VirtAddr",276],[3,"VirtPageNum",276],[3,"SimpleRange",276],[8,"StepByOne",276],[8,"Copy",1030],[8,"PartialEq",1024],[8,"PartialOrd",1024],[8,"Debug",1017],[8,"Clone",1031],[3,"PageTableEntry",586],[15,"array"],[3,"SimpleRangeIterator",276],[3,"StackFrameAllocator",399],[3,"FRAME_ALLOCATOR",399],[3,"Layout",1032],[3,"MemorySet",453],[3,"MapPermission",453],[4,"MapType",453],[3,"MapArea",453],[3,"PageTable",586],[3,"KERNEL_SPACE",453],[3,"PTEFlags",586],[3,"UserBufferIterator",586],[3,"RefMut",1033],[15,"isize"],[3,"TaskControlBlock",927],[3,"TrapContext",1000],[3,"INITPROC",768],[3,"PidHandle",849],[3,"TaskContext",812],[3,"TaskManager",825],[3,"TASK_MANAGER",825],[3,"PidAllocator",849],[3,"PID_ALLOCATOR",849],[3,"KernelStack",849],[8,"Sized",1030],[3,"Processor",896],[3,"PROCESSOR",896],[3,"TaskControlBlockInner",927],[4,"TaskStatus",927],[3,"VirtioHal",57],[8,"File",91],[6,"InodeType",108],[3,"OSInodeInner",108],[6,"VPNRange",276],[8,"FrameAllocator",399],[6,"FrameAllocatorImpl",399]]}\ }'); -if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file +if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; +if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/ch6-dev/search.js b/ch6-dev/search.js deleted file mode 100644 index a8026db5..00000000 --- a/ch6-dev/search.js +++ /dev/null @@ -1,2 +0,0 @@ -(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||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!==null){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:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query,true);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(window.ALL_CRATES.length>1){crates=` in `}var output=`
    -

    Results for ${escape(query.query)} `+(query.type?" (type: "+escape(query.type)+")":"")+"

    "+crates+`
    `+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    ";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;let crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){query=query.raw.trim();var results={"in_args":[],"returned":[],"others":[],};if(query.length!==0){var tmp=execQuery(getQuery(query),searchWords,filterCrates);results.in_args.push(tmp.in_args);results.returned.push(tmp.returned);results.others.push(tmp.others)}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){putBackSearch()}return}var filterCrates=getFilterCrates();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=buildUrl(query.raw,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execSearch(query,searchWords,filterCrates),params["go_to_first"],filterCrates)}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;var crateCorpus=rawSearchIndex[crate];searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=crateCorpus.t;var itemNames=crateCorpus.n;var itemPaths=crateCorpus.q;var itemDescs=crateCorpus.d;var itemParentIdxs=crateCorpus.i;var itemFunctionSearchTypes=crateCorpus.f;var paths=crateCorpus.p;var aliases=crateCorpus.a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="All crates"){var params=searchState.getQueryStringParams();var query=searchState.input.value.trim();if(!history.state&&!params.search){history.pushState(null,"",buildUrl(query,null))}else{history.replaceState(null,"",buildUrl(query,null))}}currentResults=null;search(undefined,true)}searchWords=buildIndex(rawSearchIndex);registerSearchEvents();function runSearchIfNeeded(){if(searchState.getQueryStringParams().search){search()}}runSearchIfNeeded()};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file diff --git a/ch6-dev/settings.css b/ch6-dev/settings.css deleted file mode 100644 index 35df7bce..00000000 --- a/ch6-dev/settings.css +++ /dev/null @@ -1 +0,0 @@ -.setting-line{margin:0.6em 0 0.6em 0.3em;position:relative;}.setting-line>div{display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.setting-line>.title{font-size:19px;width:100%;max-width:none;border-bottom:1px solid;}.setting-line .radio-line,.setting-line .choices{display:flex;flex-wrap:wrap;}.setting-line .radio-line .setting-name{flex-grow:1;margin-top:auto;margin-bottom:auto;}.setting-line .radio-line input{margin-right:0.3em;}.radio-line .choice{border-radius:0.1em;border:1px solid;margin-left:0.5em;margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{opacity:0;position:absolute;}.select-wrapper{float:right;position:relative;height:27px;min-width:25%;}.select-wrapper select{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:none;border:2px solid #ccc;padding-right:28px;width:100%;}.select-wrapper img{pointer-events:none;position:absolute;right:0;bottom:0;background:#ccc;height:100%;width:28px;padding:0px 4px;}.select-wrapper select option{color:initial;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 0 2px #0a84ff,0 0 0 6px rgba(10,132,255,0.3);}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);}.setting-line>.sub-settings{padding-left:42px;width:100%;display:block;} \ No newline at end of file diff --git a/ch6-dev/settings.html b/ch6-dev/settings.html index a433d003..44145da1 100644 --- a/ch6-dev/settings.html +++ b/ch6-dev/settings.html @@ -1,17 +1 @@ -Rustdoc settings - -
    -

    Rustdoc settings

    Back
    Use system theme
    Theme
    Preferred light theme
    Preferred dark theme
    Auto-hide item contents for large items.
    Auto-hide item methods' documentation
    Auto-hide trait implementation documentation
    Directly go to item in search if there is only one result
    Show line numbers on code examples
    Disable keyboard shortcuts
    - \ No newline at end of file +Rustdoc settings

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/ch6-dev/settings.js b/ch6-dev/settings.js deleted file mode 100644 index 80471891..00000000 --- a/ch6-dev/settings.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function changeSetting(settingName,value){updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":case"use-system-theme":updateSystemTheme();updateLightAndDark();break}}function handleKey(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return}switch(getVirtualKey(ev)){case"Enter":case"Return":case"Space":ev.target.checked=!ev.target.checked;ev.preventDefault();break}}function showLightAndDark(){addClass(document.getElementById("theme").parentElement,"hidden");removeClass(document.getElementById("preferred-light-theme").parentElement,"hidden");removeClass(document.getElementById("preferred-dark-theme").parentElement,"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme").parentElement,"hidden");addClass(document.getElementById("preferred-dark-theme").parentElement,"hidden");removeClass(document.getElementById("theme").parentElement,"hidden")}function updateLightAndDark(){if(getSettingValue("use-system-theme")!=="false"){showLightAndDark()}else{hideLightAndDark()}}function setEvents(){updateLightAndDark();onEachLazy(document.getElementsByClassName("slider"),function(elem){var toggle=elem.previousElementSibling;var settingId=toggle.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)};toggle.onkeyup=handleKey;toggle.onkeyrelease=handleKey});onEachLazy(document.getElementsByClassName("select-wrapper"),function(elem){var select=elem.getElementsByTagName("select")[0];var settingId=select.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){select.value=settingValue}select.onchange=function(){changeSetting(this.id,this.value)}});onEachLazy(document.querySelectorAll("input[type=\"radio\"]"),function(elem){const settingId=elem.name;const settingValue=getSettingValue(settingId);if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",function(ev){changeSetting(ev.target.name,ev.target.value)})});document.getElementById("back").addEventListener("click",function(){history.back()})}window.addEventListener("DOMContentLoaded",setEvents)})() \ No newline at end of file diff --git a/ch6-dev/source-files.js b/ch6-dev/source-files.js deleted file mode 100644 index fe18d3e6..00000000 --- a/ch6-dev/source-files.js +++ /dev/null @@ -1,3 +0,0 @@ -var N = null;var sourcesIndex = {}; -sourcesIndex["os"] = {"name":"","dirs":[{"name":"boards","files":["qemu.rs"]},{"name":"drivers","dirs":[{"name":"block","files":["mod.rs","sdcard.rs","virtio_blk.rs"]}],"files":["mod.rs"]},{"name":"fs","files":["inode.rs","mod.rs","stdio.rs"]},{"name":"mm","files":["address.rs","frame_allocator.rs","heap_allocator.rs","memory_set.rs","mod.rs","page_table.rs"]},{"name":"sync","files":["mod.rs","up.rs"]},{"name":"syscall","files":["fs.rs","mod.rs","process.rs"]},{"name":"task","files":["context.rs","manager.rs","mod.rs","pid.rs","processor.rs","switch.rs","task.rs"]},{"name":"trap","files":["context.rs","mod.rs"]}],"files":["config.rs","console.rs","lang_items.rs","main.rs","sbi.rs","timer.rs"]}; -createSourceSidebar(); diff --git a/ch6-dev/source-script.js b/ch6-dev/source-script.js deleted file mode 100644 index 9faf492c..00000000 --- a/ch6-dev/source-script.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.classList.add("expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{sidebar.classList.remove("expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner=document.createElement("div");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var container=document.querySelector("nav.sidebar");var sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("source-sidebar-show")!=="true"){container.classList.remove("expanded")}else{container.classList.add("expanded")}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});container.appendChild(sidebar);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines();window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/ch6-dev/src-files.js b/ch6-dev/src-files.js new file mode 100644 index 00000000..45440865 --- /dev/null +++ b/ch6-dev/src-files.js @@ -0,0 +1,4 @@ +var srcIndex = JSON.parse('{\ +"os":["",[["boards",[],["qemu.rs"]],["drivers",[["block",[],["mod.rs","virtio_blk.rs"]]],["mod.rs"]],["fs",[],["inode.rs","mod.rs","stdio.rs"]],["mm",[],["address.rs","frame_allocator.rs","heap_allocator.rs","memory_set.rs","mod.rs","page_table.rs"]],["sync",[],["mod.rs","up.rs"]],["syscall",[],["fs.rs","mod.rs","process.rs"]],["task",[],["context.rs","manager.rs","mod.rs","pid.rs","processor.rs","switch.rs","task.rs"]],["trap",[],["context.rs","mod.rs"]]],["config.rs","console.rs","lang_items.rs","main.rs","sbi.rs","timer.rs"]]\ +}'); +createSrcSidebar(); diff --git a/ch6-dev/src/os/boards/qemu.rs.html b/ch6-dev/src/os/boards/qemu.rs.html index 7ccb8f34..255ec82f 100644 --- a/ch6-dev/src/os/boards/qemu.rs.html +++ b/ch6-dev/src/os/boards/qemu.rs.html @@ -1,186 +1,19 @@ -qemu.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -
    pub const CLOCK_FREQ: usize = 12500000;
    -pub const MEMORY_END: usize = 0x801000000;
    +qemu.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    pub const CLOCK_FREQ: usize = 12500000;
    +pub const MEMORY_END: usize = 0x88000000;
     
    -pub const MMIO: &[(usize, usize)] = &[
    -    (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC  in virt machine
    -    (0x1000_1000, 0x00_1000), // Virtio Block in virt machine
    -];
    +pub const MMIO: &[(usize, usize)] = &[
    +    (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC  in virt machine
    +    (0x1000_1000, 0x00_1000), // Virtio Block in virt machine
    +];
     
    -pub type BlockDeviceImpl = crate::drivers::block::VirtIOBlock;
    -
    -//ref:: https://github.com/andre-richter/qemu-exit
    -use core::arch::asm;
    -
    -const EXIT_SUCCESS: u32 = 0x5555; // Equals `exit(0)`. qemu successful exit
    -
    -const EXIT_FAILURE_FLAG: u32 = 0x3333;
    -const EXIT_FAILURE: u32 = exit_code_encode(1); // Equals `exit(1)`. qemu failed exit
    -const EXIT_RESET: u32 = 0x7777; // qemu reset
    -
    -pub trait QEMUExit {
    -    /// Exit with specified return code.
    -    ///
    -    /// Note: For `X86`, code is binary-OR'ed with `0x1` inside QEMU.
    -    fn exit(&self, code: u32) -> !;
    -
    -    /// Exit QEMU using `EXIT_SUCCESS`, aka `0`, if possible.
    -    ///
    -    /// Note: Not possible for `X86`.
    -    fn exit_success(&self) -> !;
    -
    -    /// Exit QEMU using `EXIT_FAILURE`, aka `1`.
    -    fn exit_failure(&self) -> !;
    -}
    -
    -/// RISCV64 configuration
    -pub struct RISCV64 {
    -    /// Address of the sifive_test mapped device.
    -    addr: u64,
    -}
    -
    -/// Encode the exit code using EXIT_FAILURE_FLAG.
    -const fn exit_code_encode(code: u32) -> u32 {
    -    (code << 16) | EXIT_FAILURE_FLAG
    -}
    -
    -impl RISCV64 {
    -    /// Create an instance.
    -    pub const fn new(addr: u64) -> Self {
    -        RISCV64 { addr }
    -    }
    -}
    -
    -impl QEMUExit for RISCV64 {
    -    /// Exit qemu with specified exit code.
    -    fn exit(&self, code: u32) -> ! {
    -        // If code is not a special value, we need to encode it with EXIT_FAILURE_FLAG.
    -        let code_new = match code {
    -            EXIT_SUCCESS | EXIT_FAILURE | EXIT_RESET => code,
    -            _ => exit_code_encode(code),
    -        };
    -
    -        unsafe {
    -            asm!(
    -                "sw {0}, 0({1})",
    -                in(reg)code_new, in(reg)self.addr
    -            );
    -
    -            // For the case that the QEMU exit attempt did not work, transition into an infinite
    -            // loop. Calling `panic!()` here is unfeasible, since there is a good chance
    -            // this function here is the last expression in the `panic!()` handler
    -            // itself. This prevents a possible infinite loop.
    -            loop {
    -                asm!("wfi", options(nomem, nostack));
    -            }
    -        }
    -    }
    -
    -    fn exit_success(&self) -> ! {
    -        self.exit(EXIT_SUCCESS);
    -    }
    -
    -    fn exit_failure(&self) -> ! {
    -        self.exit(EXIT_FAILURE);
    -    }
    -}
    -
    -const VIRT_TEST: u64 = 0x100000;
    -
    -pub const QEMU_EXIT_HANDLE: RISCV64 = RISCV64::new(VIRT_TEST);
    -
    -
    - \ No newline at end of file +pub type BlockDeviceImpl = crate::drivers::block::VirtIOBlock; + \ No newline at end of file diff --git a/ch6-dev/src/os/config.rs.html b/ch6-dev/src/os/config.rs.html index 432397fa..a868372d 100644 --- a/ch6-dev/src/os/config.rs.html +++ b/ch6-dev/src/os/config.rs.html @@ -1,36 +1,29 @@ -config.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -
    //! Constants used in rCore
    -#[allow(unused)]
    +config.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    //! Constants used in rCore
    +#[allow(unused)]
     
    -pub const USER_STACK_SIZE: usize = 4096 * 2;
    -pub const KERNEL_STACK_SIZE: usize = 4096 * 2;
    -pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
    +pub const USER_STACK_SIZE: usize = 4096 * 2;
    +pub const KERNEL_STACK_SIZE: usize = 4096 * 2;
    +pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
     
    -pub const PAGE_SIZE: usize = 0x1000;
    -pub const PAGE_SIZE_BITS: usize = 0xc;
    +pub const PAGE_SIZE: usize = 0x1000;
    +pub const PAGE_SIZE_BITS: usize = 0xc;
     
    -pub const TRAMPOLINE: usize = usize::MAX - PAGE_SIZE + 1;
    -pub const TRAP_CONTEXT: usize = TRAMPOLINE - PAGE_SIZE;
    +pub const TRAMPOLINE: usize = usize::MAX - PAGE_SIZE + 1;
    +pub const TRAP_CONTEXT: usize = TRAMPOLINE - PAGE_SIZE;
     
    -pub use crate::board::{CLOCK_FREQ, MEMORY_END, MMIO};
    -
    -
    - \ No newline at end of file +pub use crate::board::{CLOCK_FREQ, MEMORY_END, MMIO}; + \ No newline at end of file diff --git a/ch6-dev/src/os/console.rs.html b/ch6-dev/src/os/console.rs.html index 5022b66b..c1f9f845 100644 --- a/ch6-dev/src/os/console.rs.html +++ b/ch6-dev/src/os/console.rs.html @@ -1,76 +1,69 @@ -console.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -
    //! SBI console driver, for text output
    -use crate::sbi::console_putchar;
    -use core::fmt::{self, Write};
    +console.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +
    //! SBI console driver, for text output
    +use crate::sbi::console_putchar;
    +use core::fmt::{self, Write};
     
    -struct Stdout;
    +struct Stdout;
     
    -impl Write for Stdout {
    -    fn write_str(&mut self, s: &str) -> fmt::Result {
    -        for c in s.chars() {
    -            console_putchar(c as usize);
    +impl Write for Stdout {
    +    fn write_str(&mut self, s: &str) -> fmt::Result {
    +        for c in s.chars() {
    +            console_putchar(c as usize);
             }
             Ok(())
         }
     }
     
    -pub fn print(args: fmt::Arguments) {
    -    Stdout.write_fmt(args).unwrap();
    +pub fn print(args: fmt::Arguments) {
    +    Stdout.write_fmt(args).unwrap();
     }
     
    -#[macro_export]
    -/// print string macro
    -macro_rules! print {
    -    ($fmt: literal $(, $($arg: tt)+)?) => {
    -        $crate::console::print(format_args!($fmt $(, $($arg)+)?));
    +#[macro_export]
    +/// print string macro
    +macro_rules! print {
    +    ($fmt: literal $(, $($arg: tt)+)?) => {
    +        $crate::console::print(format_args!($fmt $(, $($arg)+)?));
         }
     }
     
    -#[macro_export]
    -/// println string macro
    -macro_rules! println {
    -    ($fmt: literal $(, $($arg: tt)+)?) => {
    -        $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
    +#[macro_export]
    +/// println string macro
    +macro_rules! println {
    +    ($fmt: literal $(, $($arg: tt)+)?) => {
    +        $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/drivers/block/mod.rs.html b/ch6-dev/src/os/drivers/block/mod.rs.html index bdff2da9..aea2f303 100644 --- a/ch6-dev/src/os/drivers/block/mod.rs.html +++ b/ch6-dev/src/os/drivers/block/mod.rs.html @@ -1,68 +1,57 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -
    mod sdcard;
    -mod virtio_blk;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    mod virtio_blk;
     
    -pub use sdcard::SDCardWrapper;
    -pub use virtio_blk::VirtIOBlock;
    +pub use virtio_blk::VirtIOBlock;
     
    -use crate::board::BlockDeviceImpl;
    -use alloc::sync::Arc;
    -use easy_fs::BlockDevice;
    -use lazy_static::*;
    +use crate::board::BlockDeviceImpl;
    +use alloc::sync::Arc;
    +use easy_fs::BlockDevice;
    +use lazy_static::*;
     
    -lazy_static! {
    -    pub static ref BLOCK_DEVICE: Arc<dyn BlockDevice> = Arc::new(BlockDeviceImpl::new());
    +lazy_static! {
    +    pub static ref BLOCK_DEVICE: Arc<dyn BlockDevice> = Arc::new(BlockDeviceImpl::new());
     }
     
    -#[allow(unused)]
    -pub fn block_device_test() {
    -    let block_device = BLOCK_DEVICE.clone();
    -    let mut write_buffer = [0u8; 512];
    -    let mut read_buffer = [0u8; 512];
    -    for i in 0..512 {
    -        for byte in write_buffer.iter_mut() {
    -            *byte = i as u8;
    +#[allow(unused)]
    +pub fn block_device_test() {
    +    let block_device = BLOCK_DEVICE.clone();
    +    let mut write_buffer = [0u8; 512];
    +    let mut read_buffer = [0u8; 512];
    +    for i in 0..512 {
    +        for byte in write_buffer.iter_mut() {
    +            *byte = i as u8;
             }
    -        block_device.write_block(i as usize, &write_buffer);
    -        block_device.read_block(i as usize, &mut read_buffer);
    -        assert_eq!(write_buffer, read_buffer);
    +        block_device.write_block(i as usize, &write_buffer);
    +        block_device.read_block(i as usize, &mut read_buffer);
    +        assert_eq!(write_buffer, read_buffer);
         }
         println!("block device test passed!");
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/drivers/block/sdcard.rs.html b/ch6-dev/src/os/drivers/block/sdcard.rs.html deleted file mode 100644 index 51359824..00000000 --- a/ch6-dev/src/os/drivers/block/sdcard.rs.html +++ /dev/null @@ -1,1536 +0,0 @@ -sdcard.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -389
    -390
    -391
    -392
    -393
    -394
    -395
    -396
    -397
    -398
    -399
    -400
    -401
    -402
    -403
    -404
    -405
    -406
    -407
    -408
    -409
    -410
    -411
    -412
    -413
    -414
    -415
    -416
    -417
    -418
    -419
    -420
    -421
    -422
    -423
    -424
    -425
    -426
    -427
    -428
    -429
    -430
    -431
    -432
    -433
    -434
    -435
    -436
    -437
    -438
    -439
    -440
    -441
    -442
    -443
    -444
    -445
    -446
    -447
    -448
    -449
    -450
    -451
    -452
    -453
    -454
    -455
    -456
    -457
    -458
    -459
    -460
    -461
    -462
    -463
    -464
    -465
    -466
    -467
    -468
    -469
    -470
    -471
    -472
    -473
    -474
    -475
    -476
    -477
    -478
    -479
    -480
    -481
    -482
    -483
    -484
    -485
    -486
    -487
    -488
    -489
    -490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
    -502
    -503
    -504
    -505
    -506
    -507
    -508
    -509
    -510
    -511
    -512
    -513
    -514
    -515
    -516
    -517
    -518
    -519
    -520
    -521
    -522
    -523
    -524
    -525
    -526
    -527
    -528
    -529
    -530
    -531
    -532
    -533
    -534
    -535
    -536
    -537
    -538
    -539
    -540
    -541
    -542
    -543
    -544
    -545
    -546
    -547
    -548
    -549
    -550
    -551
    -552
    -553
    -554
    -555
    -556
    -557
    -558
    -559
    -560
    -561
    -562
    -563
    -564
    -565
    -566
    -567
    -568
    -569
    -570
    -571
    -572
    -573
    -574
    -575
    -576
    -577
    -578
    -579
    -580
    -581
    -582
    -583
    -584
    -585
    -586
    -587
    -588
    -589
    -590
    -591
    -592
    -593
    -594
    -595
    -596
    -597
    -598
    -599
    -600
    -601
    -602
    -603
    -604
    -605
    -606
    -607
    -608
    -609
    -610
    -611
    -612
    -613
    -614
    -615
    -616
    -617
    -618
    -619
    -620
    -621
    -622
    -623
    -624
    -625
    -626
    -627
    -628
    -629
    -630
    -631
    -632
    -633
    -634
    -635
    -636
    -637
    -638
    -639
    -640
    -641
    -642
    -643
    -644
    -645
    -646
    -647
    -648
    -649
    -650
    -651
    -652
    -653
    -654
    -655
    -656
    -657
    -658
    -659
    -660
    -661
    -662
    -663
    -664
    -665
    -666
    -667
    -668
    -669
    -670
    -671
    -672
    -673
    -674
    -675
    -676
    -677
    -678
    -679
    -680
    -681
    -682
    -683
    -684
    -685
    -686
    -687
    -688
    -689
    -690
    -691
    -692
    -693
    -694
    -695
    -696
    -697
    -698
    -699
    -700
    -701
    -702
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    -728
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    -739
    -740
    -741
    -742
    -743
    -744
    -745
    -746
    -747
    -748
    -749
    -750
    -751
    -752
    -753
    -754
    -755
    -756
    -757
    -758
    -759
    -760
    -761
    -762
    -763
    -764
    -
    #![allow(non_snake_case)]
    -#![allow(non_camel_case_types)]
    -#![allow(unused)]
    -
    -use super::BlockDevice;
    -use crate::sync::UPSafeCell;
    -use core::convert::TryInto;
    -use k210_hal::prelude::*;
    -use k210_pac::{Peripherals, SPI0};
    -use k210_soc::{
    -    fpioa::{self, io},
    -    //dmac::{dma_channel, DMAC, DMACExt},
    -    gpio,
    -    gpiohs,
    -    sleep::usleep,
    -    spi::{aitm, frame_format, tmod, work_mode, SPIExt, SPIImpl, SPI},
    -    sysctl,
    -};
    -use lazy_static::*;
    -
    -pub struct SDCard<SPI> {
    -    spi: SPI,
    -    spi_cs: u32,
    -    cs_gpionum: u8,
    -    //dmac: &'a DMAC,
    -    //channel: dma_channel,
    -}
    -
    -/*
    - * Start Data tokens:
    - *         Tokens (necessary because at nop/idle (and CS active) only 0xff is
    - *         on the data/command line)
    - */
    -/** Data token start byte, Start Single Block Read */
    -pub const SD_START_DATA_SINGLE_BLOCK_READ: u8 = 0xFE;
    -/** Data token start byte, Start Multiple Block Read */
    -pub const SD_START_DATA_MULTIPLE_BLOCK_READ: u8 = 0xFE;
    -/** Data token start byte, Start Single Block Write */
    -pub const SD_START_DATA_SINGLE_BLOCK_WRITE: u8 = 0xFE;
    -/** Data token start byte, Start Multiple Block Write */
    -pub const SD_START_DATA_MULTIPLE_BLOCK_WRITE: u8 = 0xFC;
    -
    -pub const SEC_LEN: usize = 512;
    -
    -/** SD commands */
    -#[repr(u8)]
    -#[derive(Debug, PartialEq, Eq, Copy, Clone)]
    -#[allow(unused)]
    -pub enum CMD {
    -    /** Software reset */
    -    CMD0 = 0,
    -    /** Check voltage range (SDC V2) */
    -    CMD8 = 8,
    -    /** Read CSD register */
    -    CMD9 = 9,
    -    /** Read CID register */
    -    CMD10 = 10,
    -    /** Stop to read data */
    -    CMD12 = 12,
    -    /** Change R/W block size */
    -    CMD16 = 16,
    -    /** Read block */
    -    CMD17 = 17,
    -    /** Read multiple blocks */
    -    CMD18 = 18,
    -    /** Number of blocks to erase (SDC) */
    -    ACMD23 = 23,
    -    /** Write a block */
    -    CMD24 = 24,
    -    /** Write multiple blocks */
    -    CMD25 = 25,
    -    /** Initiate initialization process (SDC) */
    -    ACMD41 = 41,
    -    /** Leading command for ACMD* */
    -    CMD55 = 55,
    -    /** Read OCR */
    -    CMD58 = 58,
    -    /** Enable/disable CRC check */
    -    CMD59 = 59,
    -}
    -
    -#[allow(unused)]
    -#[derive(Debug, Copy, Clone)]
    -pub enum InitError {
    -    CMDFailed(CMD, u8),
    -    CardCapacityStatusNotSet([u8; 4]),
    -    CannotGetCardInfo,
    -}
    -
    -/**
    - * Card Specific Data: CSD Register
    - */
    -#[derive(Debug, Copy, Clone)]
    -pub struct SDCardCSD {
    -    pub CSDStruct: u8,        /* CSD structure */
    -    pub SysSpecVersion: u8,   /* System specification version */
    -    pub Reserved1: u8,        /* Reserved */
    -    pub TAAC: u8,             /* Data read access-time 1 */
    -    pub NSAC: u8,             /* Data read access-time 2 in CLK cycles */
    -    pub MaxBusClkFrec: u8,    /* Max. bus clock frequency */
    -    pub CardComdClasses: u16, /* Card command classes */
    -    pub RdBlockLen: u8,       /* Max. read data block length */
    -    pub PartBlockRead: u8,    /* Partial blocks for read allowed */
    -    pub WrBlockMisalign: u8,  /* Write block misalignment */
    -    pub RdBlockMisalign: u8,  /* Read block misalignment */
    -    pub DSRImpl: u8,          /* DSR implemented */
    -    pub Reserved2: u8,        /* Reserved */
    -    pub DeviceSize: u32,      /* Device Size */
    -    //MaxRdCurrentVDDMin: u8,   /* Max. read current @ VDD min */
    -    //MaxRdCurrentVDDMax: u8,   /* Max. read current @ VDD max */
    -    //MaxWrCurrentVDDMin: u8,   /* Max. write current @ VDD min */
    -    //MaxWrCurrentVDDMax: u8,   /* Max. write current @ VDD max */
    -    //DeviceSizeMul: u8,        /* Device size multiplier */
    -    pub EraseGrSize: u8,         /* Erase group size */
    -    pub EraseGrMul: u8,          /* Erase group size multiplier */
    -    pub WrProtectGrSize: u8,     /* Write protect group size */
    -    pub WrProtectGrEnable: u8,   /* Write protect group enable */
    -    pub ManDeflECC: u8,          /* Manufacturer default ECC */
    -    pub WrSpeedFact: u8,         /* Write speed factor */
    -    pub MaxWrBlockLen: u8,       /* Max. write data block length */
    -    pub WriteBlockPaPartial: u8, /* Partial blocks for write allowed */
    -    pub Reserved3: u8,           /* Reserded */
    -    pub ContentProtectAppli: u8, /* Content protection application */
    -    pub FileFormatGroup: u8,     /* File format group */
    -    pub CopyFlag: u8,            /* Copy flag (OTP) */
    -    pub PermWrProtect: u8,       /* Permanent write protection */
    -    pub TempWrProtect: u8,       /* Temporary write protection */
    -    pub FileFormat: u8,          /* File Format */
    -    pub ECC: u8,                 /* ECC code */
    -    pub CSD_CRC: u8,             /* CSD CRC */
    -    pub Reserved4: u8,           /* always 1*/
    -}
    -
    -/**
    - * Card Identification Data: CID Register
    - */
    -#[derive(Debug, Copy, Clone)]
    -pub struct SDCardCID {
    -    pub ManufacturerID: u8, /* ManufacturerID */
    -    pub OEM_AppliID: u16,   /* OEM/Application ID */
    -    pub ProdName1: u32,     /* Product Name part1 */
    -    pub ProdName2: u8,      /* Product Name part2*/
    -    pub ProdRev: u8,        /* Product Revision */
    -    pub ProdSN: u32,        /* Product Serial Number */
    -    pub Reserved1: u8,      /* Reserved1 */
    -    pub ManufactDate: u16,  /* Manufacturing Date */
    -    pub CID_CRC: u8,        /* CID CRC */
    -    pub Reserved2: u8,      /* always 1 */
    -}
    -
    -/**
    - * Card information
    - */
    -#[derive(Debug, Copy, Clone)]
    -pub struct SDCardInfo {
    -    pub SD_csd: SDCardCSD,
    -    pub SD_cid: SDCardCID,
    -    pub CardCapacity: u64,  /* Card Capacity */
    -    pub CardBlockSize: u64, /* Card Block Size */
    -}
    -
    -impl</*'a,*/ X: SPI> SDCard</*'a,*/ X> {
    -    pub fn new(
    -        spi: X,
    -        spi_cs: u32,
    -        cs_gpionum: u8, /*, dmac: &'a DMAC, channel: dma_channel*/
    -    ) -> Self {
    -        Self {
    -            spi,
    -            spi_cs,
    -            cs_gpionum,
    -            /*
    -            dmac,
    -            channel,
    -             */
    -        }
    -    }
    -
    -    fn CS_HIGH(&self) {
    -        gpiohs::set_pin(self.cs_gpionum, true);
    -    }
    -
    -    fn CS_LOW(&self) {
    -        gpiohs::set_pin(self.cs_gpionum, false);
    -    }
    -
    -    fn HIGH_SPEED_ENABLE(&self) {
    -        self.spi.set_clk_rate(10000000);
    -    }
    -
    -    fn lowlevel_init(&self) {
    -        gpiohs::set_direction(self.cs_gpionum, gpio::direction::OUTPUT);
    -        self.spi.set_clk_rate(200000);
    -    }
    -
    -    fn write_data(&self, data: &[u8]) {
    -        self.spi.configure(
    -            work_mode::MODE0,
    -            frame_format::STANDARD,
    -            8, /* data bits */
    -            0, /* endian */
    -            0, /*instruction length*/
    -            0, /*address length*/
    -            0, /*wait cycles*/
    -            aitm::STANDARD,
    -            tmod::TRANS,
    -        );
    -        self.spi.send_data(self.spi_cs, data);
    -    }
    -
    -    /*
    -    fn write_data_dma(&self, data: &[u32]) {
    -        self.spi.configure(
    -            work_mode::MODE0,
    -            frame_format::STANDARD,
    -            8, /* data bits */
    -            0, /* endian */
    -            0, /*instruction length*/
    -            0, /*address length*/
    -            0, /*wait cycles*/
    -            aitm::STANDARD,
    -            tmod::TRANS,
    -        );
    -        self.spi
    -            .send_data_dma(self.dmac, self.channel, self.spi_cs, data);
    -    }
    -     */
    -
    -    fn read_data(&self, data: &mut [u8]) {
    -        self.spi.configure(
    -            work_mode::MODE0,
    -            frame_format::STANDARD,
    -            8, /* data bits */
    -            0, /* endian */
    -            0, /*instruction length*/
    -            0, /*address length*/
    -            0, /*wait cycles*/
    -            aitm::STANDARD,
    -            tmod::RECV,
    -        );
    -        self.spi.recv_data(self.spi_cs, data);
    -    }
    -
    -    /*
    -    fn read_data_dma(&self, data: &mut [u32]) {
    -        self.spi.configure(
    -            work_mode::MODE0,
    -            frame_format::STANDARD,
    -            8, /* data bits */
    -            0, /* endian */
    -            0, /*instruction length*/
    -            0, /*address length*/
    -            0, /*wait cycles*/
    -            aitm::STANDARD,
    -            tmod::RECV,
    -        );
    -        self.spi
    -            .recv_data_dma(self.dmac, self.channel, self.spi_cs, data);
    -    }
    -     */
    -
    -    /*
    -     * Send 5 bytes command to the SD card.
    -     * @param  cmd: The user expected command to send to SD card.
    -     * @param  arg: The command argument.
    -     * @param  crc: The CRC.
    -     * @retval None
    -     */
    -    fn send_cmd(&self, cmd: CMD, arg: u32, crc: u8) {
    -        /* SD chip select low */
    -        self.CS_LOW();
    -        /* Send the Cmd bytes */
    -        self.write_data(&[
    -            /* Construct byte 1 */
    -            ((cmd as u8) | 0x40),
    -            /* Construct byte 2 */
    -            (arg >> 24) as u8,
    -            /* Construct byte 3 */
    -            ((arg >> 16) & 0xff) as u8,
    -            /* Construct byte 4 */
    -            ((arg >> 8) & 0xff) as u8,
    -            /* Construct byte 5 */
    -            (arg & 0xff) as u8,
    -            /* Construct CRC: byte 6 */
    -            crc,
    -        ]);
    -    }
    -
    -    /* Send end-command sequence to SD card */
    -    fn end_cmd(&self) {
    -        /* SD chip select high */
    -        self.CS_HIGH();
    -        /* Send the cmd byte */
    -        self.write_data(&[0xff]);
    -    }
    -
    -    /*
    -     * Returns the SD response.
    -     * @param  None
    -     * @retval The SD Response:
    -     *         - 0xFF: Sequence failed
    -     *         - 0: Sequence succeed
    -     */
    -    fn get_response(&self) -> u8 {
    -        let result = &mut [0u8];
    -        let mut timeout = 0x0FFF;
    -        /* Check if response is got or a timeout is happen */
    -        while timeout != 0 {
    -            self.read_data(result);
    -            /* Right response got */
    -            if result[0] != 0xFF {
    -                return result[0];
    -            }
    -            timeout -= 1;
    -        }
    -        /* After time out */
    -        0xFF
    -    }
    -
    -    /*
    -     * Get SD card data response.
    -     * @param  None
    -     * @retval The SD status: Read data response xxx0<status>1
    -     *         - status 010: Data accecpted
    -     *         - status 101: Data rejected due to a crc error
    -     *         - status 110: Data rejected due to a Write error.
    -     *         - status 111: Data rejected due to other error.
    -     */
    -    fn get_dataresponse(&self) -> u8 {
    -        let response = &mut [0u8];
    -        /* Read resonse */
    -        self.read_data(response);
    -        /* Mask unused bits */
    -        response[0] &= 0x1F;
    -        if response[0] != 0x05 {
    -            return 0xFF;
    -        }
    -        /* Wait null data */
    -        self.read_data(response);
    -        while response[0] == 0 {
    -            self.read_data(response);
    -        }
    -        /* Return response */
    -        0
    -    }
    -
    -    /*
    -     * Read the CSD card register
    -     *         Reading the contents of the CSD register in SPI mode is a simple
    -     *         read-block transaction.
    -     * @param  SD_csd: pointer on an SCD register structure
    -     * @retval The SD Response:
    -     *         - `Err()`: Sequence failed
    -     *         - `Ok(info)`: Sequence succeed
    -     */
    -    fn get_csdregister(&self) -> Result<SDCardCSD, ()> {
    -        let mut csd_tab = [0u8; 18];
    -        /* Send CMD9 (CSD register) */
    -        self.send_cmd(CMD::CMD9, 0, 0);
    -        /* Wait for response in the R1 format (0x00 is no errors) */
    -        if self.get_response() != 0x00 {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        /* Store CSD register value on csd_tab */
    -        /* Get CRC bytes (not really needed by us, but required by SD) */
    -        self.read_data(&mut csd_tab);
    -        self.end_cmd();
    -        /* see also: https://cdn-shop.adafruit.com/datasheets/TS16GUSDHC6.pdf */
    -        Ok(SDCardCSD {
    -            /* Byte 0 */
    -            CSDStruct: (csd_tab[0] & 0xC0) >> 6,
    -            SysSpecVersion: (csd_tab[0] & 0x3C) >> 2,
    -            Reserved1: csd_tab[0] & 0x03,
    -            /* Byte 1 */
    -            TAAC: csd_tab[1],
    -            /* Byte 2 */
    -            NSAC: csd_tab[2],
    -            /* Byte 3 */
    -            MaxBusClkFrec: csd_tab[3],
    -            /* Byte 4, 5 */
    -            CardComdClasses: (u16::from(csd_tab[4]) << 4) | ((u16::from(csd_tab[5]) & 0xF0) >> 4),
    -            /* Byte 5 */
    -            RdBlockLen: csd_tab[5] & 0x0F,
    -            /* Byte 6 */
    -            PartBlockRead: (csd_tab[6] & 0x80) >> 7,
    -            WrBlockMisalign: (csd_tab[6] & 0x40) >> 6,
    -            RdBlockMisalign: (csd_tab[6] & 0x20) >> 5,
    -            DSRImpl: (csd_tab[6] & 0x10) >> 4,
    -            Reserved2: 0,
    -            // DeviceSize: (csd_tab[6] & 0x03) << 10,
    -            /* Byte 7, 8, 9 */
    -            DeviceSize: ((u32::from(csd_tab[7]) & 0x3F) << 16)
    -                | (u32::from(csd_tab[8]) << 8)
    -                | u32::from(csd_tab[9]),
    -            /* Byte 10 */
    -            EraseGrSize: (csd_tab[10] & 0x40) >> 6,
    -            /* Byte 10, 11 */
    -            EraseGrMul: ((csd_tab[10] & 0x3F) << 1) | ((csd_tab[11] & 0x80) >> 7),
    -            /* Byte 11 */
    -            WrProtectGrSize: (csd_tab[11] & 0x7F),
    -            /* Byte 12 */
    -            WrProtectGrEnable: (csd_tab[12] & 0x80) >> 7,
    -            ManDeflECC: (csd_tab[12] & 0x60) >> 5,
    -            WrSpeedFact: (csd_tab[12] & 0x1C) >> 2,
    -            /* Byte 12,13 */
    -            MaxWrBlockLen: ((csd_tab[12] & 0x03) << 2) | ((csd_tab[13] & 0xC0) >> 6),
    -            /* Byte 13 */
    -            WriteBlockPaPartial: (csd_tab[13] & 0x20) >> 5,
    -            Reserved3: 0,
    -            ContentProtectAppli: (csd_tab[13] & 0x01),
    -            /* Byte 14 */
    -            FileFormatGroup: (csd_tab[14] & 0x80) >> 7,
    -            CopyFlag: (csd_tab[14] & 0x40) >> 6,
    -            PermWrProtect: (csd_tab[14] & 0x20) >> 5,
    -            TempWrProtect: (csd_tab[14] & 0x10) >> 4,
    -            FileFormat: (csd_tab[14] & 0x0C) >> 2,
    -            ECC: (csd_tab[14] & 0x03),
    -            /* Byte 15 */
    -            CSD_CRC: (csd_tab[15] & 0xFE) >> 1,
    -            Reserved4: 1,
    -            /* Return the reponse */
    -        })
    -    }
    -
    -    /*
    -     * Read the CID card register.
    -     *         Reading the contents of the CID register in SPI mode is a simple
    -     *         read-block transaction.
    -     * @param  SD_cid: pointer on an CID register structure
    -     * @retval The SD Response:
    -     *         - `Err()`: Sequence failed
    -     *         - `Ok(info)`: Sequence succeed
    -     */
    -    fn get_cidregister(&self) -> Result<SDCardCID, ()> {
    -        let mut cid_tab = [0u8; 18];
    -        /* Send CMD10 (CID register) */
    -        self.send_cmd(CMD::CMD10, 0, 0);
    -        /* Wait for response in the R1 format (0x00 is no errors) */
    -        if self.get_response() != 0x00 {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        /* Store CID register value on cid_tab */
    -        /* Get CRC bytes (not really needed by us, but required by SD) */
    -        self.read_data(&mut cid_tab);
    -        self.end_cmd();
    -        Ok(SDCardCID {
    -            /* Byte 0 */
    -            ManufacturerID: cid_tab[0],
    -            /* Byte 1, 2 */
    -            OEM_AppliID: (u16::from(cid_tab[1]) << 8) | u16::from(cid_tab[2]),
    -            /* Byte 3, 4, 5, 6 */
    -            ProdName1: (u32::from(cid_tab[3]) << 24)
    -                | (u32::from(cid_tab[4]) << 16)
    -                | (u32::from(cid_tab[5]) << 8)
    -                | u32::from(cid_tab[6]),
    -            /* Byte 7 */
    -            ProdName2: cid_tab[7],
    -            /* Byte 8 */
    -            ProdRev: cid_tab[8],
    -            /* Byte 9, 10, 11, 12 */
    -            ProdSN: (u32::from(cid_tab[9]) << 24)
    -                | (u32::from(cid_tab[10]) << 16)
    -                | (u32::from(cid_tab[11]) << 8)
    -                | u32::from(cid_tab[12]),
    -            /* Byte 13, 14 */
    -            Reserved1: (cid_tab[13] & 0xF0) >> 4,
    -            ManufactDate: ((u16::from(cid_tab[13]) & 0x0F) << 8) | u16::from(cid_tab[14]),
    -            /* Byte 15 */
    -            CID_CRC: (cid_tab[15] & 0xFE) >> 1,
    -            Reserved2: 1,
    -        })
    -    }
    -
    -    /*
    -     * Returns information about specific card.
    -     * @param  cardinfo: pointer to a SD_CardInfo structure that contains all SD
    -     *         card information.
    -     * @retval The SD Response:
    -     *         - `Err(())`: Sequence failed
    -     *         - `Ok(info)`: Sequence succeed
    -     */
    -    fn get_cardinfo(&self) -> Result<SDCardInfo, ()> {
    -        let mut info = SDCardInfo {
    -            SD_csd: self.get_csdregister()?,
    -            SD_cid: self.get_cidregister()?,
    -            CardCapacity: 0,
    -            CardBlockSize: 0,
    -        };
    -        info.CardBlockSize = 1 << u64::from(info.SD_csd.RdBlockLen);
    -        info.CardCapacity = (u64::from(info.SD_csd.DeviceSize) + 1) * 1024 * info.CardBlockSize;
    -
    -        Ok(info)
    -    }
    -
    -    /*
    -     * Initializes the SD/SD communication in SPI mode.
    -     * @param  None
    -     * @retval The SD Response info if succeeeded, otherwise Err
    -     */
    -    pub fn init(&self) -> Result<SDCardInfo, InitError> {
    -        /* Initialize SD_SPI */
    -        self.lowlevel_init();
    -        /* SD chip select high */
    -        self.CS_HIGH();
    -        /* NOTE: this reset doesn't always seem to work if the SD access was broken off in the
    -         * middle of an operation: CMDFailed(CMD0, 127). */
    -
    -        /* Send dummy byte 0xFF, 10 times with CS high */
    -        /* Rise CS and MOSI for 80 clocks cycles */
    -        /* Send dummy byte 0xFF */
    -        self.write_data(&[0xff; 10]);
    -        /*------------Put SD in SPI mode--------------*/
    -        /* SD initialized and set to SPI mode properly */
    -
    -        /* Send software reset */
    -        self.send_cmd(CMD::CMD0, 0, 0x95);
    -        let result = self.get_response();
    -        self.end_cmd();
    -        if result != 0x01 {
    -            return Err(InitError::CMDFailed(CMD::CMD0, result));
    -        }
    -
    -        /* Check voltage range */
    -        self.send_cmd(CMD::CMD8, 0x01AA, 0x87);
    -        /* 0x01 or 0x05 */
    -        let result = self.get_response();
    -        let mut frame = [0u8; 4];
    -        self.read_data(&mut frame);
    -        self.end_cmd();
    -        if result != 0x01 {
    -            return Err(InitError::CMDFailed(CMD::CMD8, result));
    -        }
    -        let mut index = 255;
    -        while index != 0 {
    -            /* <ACMD> */
    -            self.send_cmd(CMD::CMD55, 0, 0);
    -            let result = self.get_response();
    -            self.end_cmd();
    -            if result != 0x01 {
    -                return Err(InitError::CMDFailed(CMD::CMD55, result));
    -            }
    -            /* Initiate SDC initialization process */
    -            self.send_cmd(CMD::ACMD41, 0x40000000, 0);
    -            let result = self.get_response();
    -            self.end_cmd();
    -            if result == 0x00 {
    -                break;
    -            }
    -            index -= 1;
    -        }
    -        if index == 0 {
    -            return Err(InitError::CMDFailed(CMD::ACMD41, result));
    -        }
    -        index = 255;
    -        let mut frame = [0u8; 4];
    -        while index != 0 {
    -            /* Read OCR */
    -            self.send_cmd(CMD::CMD58, 0, 1);
    -            let result = self.get_response();
    -            self.read_data(&mut frame);
    -            self.end_cmd();
    -            if result == 0 {
    -                break;
    -            }
    -            index -= 1;
    -        }
    -        if index == 0 {
    -            return Err(InitError::CMDFailed(CMD::CMD58, result));
    -        }
    -        if (frame[0] & 0x40) == 0 {
    -            return Err(InitError::CardCapacityStatusNotSet(frame));
    -        }
    -        self.HIGH_SPEED_ENABLE();
    -        self.get_cardinfo()
    -            .map_err(|_| InitError::CannotGetCardInfo)
    -    }
    -
    -    /*
    -     * Reads a block of data from the SD.
    -     * @param  data_buf: slice that receives the data read from the SD.
    -     * @param  sector: SD's internal address to read from.
    -     * @retval The SD Response:
    -     *         - `Err(())`: Sequence failed
    -     *         - `Ok(())`: Sequence succeed
    -     */
    -    pub fn read_sector(&self, data_buf: &mut [u8], sector: u32) -> Result<(), ()> {
    -        assert!(data_buf.len() >= SEC_LEN && (data_buf.len() % SEC_LEN) == 0);
    -        /* Send CMD17 to read one block, or CMD18 for multiple */
    -        let flag = if data_buf.len() == SEC_LEN {
    -            self.send_cmd(CMD::CMD17, sector, 0);
    -            false
    -        } else {
    -            self.send_cmd(CMD::CMD18, sector, 0);
    -            true
    -        };
    -        /* Check if the SD acknowledged the read block command: R1 response (0x00: no errors) */
    -        if self.get_response() != 0x00 {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        let mut error = false;
    -        //let mut dma_chunk = [0u32; SEC_LEN];
    -        let mut tmp_chunk = [0u8; SEC_LEN];
    -        for chunk in data_buf.chunks_mut(SEC_LEN) {
    -            if self.get_response() != SD_START_DATA_SINGLE_BLOCK_READ {
    -                error = true;
    -                break;
    -            }
    -            /* Read the SD block data : read NumByteToRead data */
    -            //self.read_data_dma(&mut dma_chunk);
    -            self.read_data(&mut tmp_chunk);
    -            /* Place the data received as u32 units from DMA into the u8 target buffer */
    -            for (a, b) in chunk.iter_mut().zip(/*dma_chunk*/ tmp_chunk.iter()) {
    -                //*a = (b & 0xff) as u8;
    -                *a = *b;
    -            }
    -            /* Get CRC bytes (not really needed by us, but required by SD) */
    -            let mut frame = [0u8; 2];
    -            self.read_data(&mut frame);
    -        }
    -        self.end_cmd();
    -        if flag {
    -            self.send_cmd(CMD::CMD12, 0, 0);
    -            self.get_response();
    -            self.end_cmd();
    -            self.end_cmd();
    -        }
    -        /* It is an error if not everything requested was read */
    -        if error {
    -            Err(())
    -        } else {
    -            Ok(())
    -        }
    -    }
    -
    -    /*
    -     * Writes a block to the SD
    -     * @param  data_buf: slice containing the data to be written to the SD.
    -     * @param  sector: address to write on.
    -     * @retval The SD Response:
    -     *         - `Err(())`: Sequence failed
    -     *         - `Ok(())`: Sequence succeed
    -     */
    -    pub fn write_sector(&self, data_buf: &[u8], sector: u32) -> Result<(), ()> {
    -        assert!(data_buf.len() >= SEC_LEN && (data_buf.len() % SEC_LEN) == 0);
    -        let mut frame = [0xff, 0x00];
    -        if data_buf.len() == SEC_LEN {
    -            frame[1] = SD_START_DATA_SINGLE_BLOCK_WRITE;
    -            self.send_cmd(CMD::CMD24, sector, 0);
    -        } else {
    -            frame[1] = SD_START_DATA_MULTIPLE_BLOCK_WRITE;
    -            self.send_cmd(
    -                CMD::ACMD23,
    -                (data_buf.len() / SEC_LEN).try_into().unwrap(),
    -                0,
    -            );
    -            self.get_response();
    -            self.end_cmd();
    -            self.send_cmd(CMD::CMD25, sector, 0);
    -        }
    -        /* Check if the SD acknowledged the write block command: R1 response (0x00: no errors) */
    -        if self.get_response() != 0x00 {
    -            self.end_cmd();
    -            return Err(());
    -        }
    -        //let mut dma_chunk = [0u32; SEC_LEN];
    -        let mut tmp_chunk = [0u8; SEC_LEN];
    -        for chunk in data_buf.chunks(SEC_LEN) {
    -            /* Send the data token to signify the start of the data */
    -            self.write_data(&frame);
    -            /* Write the block data to SD : write count data by block */
    -            for (a, &b) in /*dma_chunk*/ tmp_chunk.iter_mut().zip(chunk.iter()) {
    -                //*a = b.into();
    -                *a = b;
    -            }
    -            //self.write_data_dma(&mut dma_chunk);
    -            self.write_data(&tmp_chunk);
    -            /* Put dummy CRC bytes */
    -            self.write_data(&[0xff, 0xff]);
    -            /* Read data response */
    -            if self.get_dataresponse() != 0x00 {
    -                self.end_cmd();
    -                return Err(());
    -            }
    -        }
    -        self.end_cmd();
    -        self.end_cmd();
    -        Ok(())
    -    }
    -}
    -
    -/** GPIOHS GPIO number to use for controlling the SD card CS pin */
    -const SD_CS_GPIONUM: u8 = 7;
    -/** CS value passed to SPI controller, this is a dummy value as SPI0_CS3 is not mapping to anything
    - * in the FPIOA */
    -const SD_CS: u32 = 3;
    -
    -/** Connect pins to internal functions */
    -fn io_init() {
    -    fpioa::set_function(io::SPI0_SCLK, fpioa::function::SPI0_SCLK);
    -    fpioa::set_function(io::SPI0_MOSI, fpioa::function::SPI0_D0);
    -    fpioa::set_function(io::SPI0_MISO, fpioa::function::SPI0_D1);
    -    fpioa::set_function(io::SPI0_CS0, fpioa::function::gpiohs(SD_CS_GPIONUM));
    -    fpioa::set_io_pull(io::SPI0_CS0, fpioa::pull::DOWN); // GPIO output=pull down
    -}
    -
    -lazy_static! {
    -    static ref PERIPHERALS: UPSafeCell<Peripherals> =
    -        unsafe { UPSafeCell::new(Peripherals::take().unwrap()) };
    -}
    -
    -fn init_sdcard() -> SDCard<SPIImpl<SPI0>> {
    -    // wait previous output
    -    usleep(100000);
    -    let peripherals = unsafe { Peripherals::steal() };
    -    sysctl::pll_set_freq(sysctl::pll::PLL0, 800_000_000).unwrap();
    -    sysctl::pll_set_freq(sysctl::pll::PLL1, 300_000_000).unwrap();
    -    sysctl::pll_set_freq(sysctl::pll::PLL2, 45_158_400).unwrap();
    -    let clocks = k210_hal::clock::Clocks::new();
    -    peripherals.UARTHS.configure(115_200.bps(), &clocks);
    -    io_init();
    -
    -    let spi = peripherals.SPI0.constrain();
    -    let sd = SDCard::new(spi, SD_CS, SD_CS_GPIONUM);
    -    let info = sd.init().unwrap();
    -    let num_sectors = info.CardCapacity / 512;
    -    assert!(num_sectors > 0);
    -
    -    println!("init sdcard!");
    -    sd
    -}
    -
    -pub struct SDCardWrapper(UPSafeCell<SDCard<SPIImpl<SPI0>>>);
    -
    -impl SDCardWrapper {
    -    pub fn new() -> Self {
    -        unsafe { Self(UPSafeCell::new(init_sdcard())) }
    -    }
    -}
    -
    -impl BlockDevice for SDCardWrapper {
    -    fn read_block(&self, block_id: usize, buf: &mut [u8]) {
    -        self.0
    -            .exclusive_access()
    -            .read_sector(buf, block_id as u32)
    -            .unwrap();
    -    }
    -    fn write_block(&self, block_id: usize, buf: &[u8]) {
    -        self.0
    -            .exclusive_access()
    -            .write_sector(buf, block_id as u32)
    -            .unwrap();
    -    }
    -}
    -
    -
    - \ No newline at end of file diff --git a/ch6-dev/src/os/drivers/block/virtio_blk.rs.html b/ch6-dev/src/os/drivers/block/virtio_blk.rs.html index f71d2899..6b83359f 100644 --- a/ch6-dev/src/os/drivers/block/virtio_blk.rs.html +++ b/ch6-dev/src/os/drivers/block/virtio_blk.rs.html @@ -1,168 +1,167 @@ -virtio_blk.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -
    use super::BlockDevice;
    -use crate::mm::{
    -    frame_alloc, frame_dealloc, kernel_token, FrameTracker, PageTable, PhysAddr, PhysPageNum,
    -    StepByOne, VirtAddr,
    +virtio_blk.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +
    use super::BlockDevice;
    +use crate::mm::{
    +    frame_alloc, frame_dealloc, kernel_token, FrameTracker, PageTable, PhysAddr, PhysPageNum,
    +    StepByOne, VirtAddr,
     };
    -use crate::sync::UPSafeCell;
    -use alloc::vec::Vec;
    -use lazy_static::*;
    -use virtio_drivers::{VirtIOBlk, VirtIOHeader};
    +use crate::sync::UPSafeCell;
    +use alloc::vec::Vec;
    +use lazy_static::*;
    +use virtio_drivers::{Hal, VirtIOBlk, VirtIOHeader};
     
    -#[allow(unused)]
    -const VIRTIO0: usize = 0x10001000;
    +#[allow(unused)]
    +const VIRTIO0: usize = 0x10001000;
     
    -pub struct VirtIOBlock(UPSafeCell<VirtIOBlk<'static>>);
    +pub struct VirtIOBlock(UPSafeCell<VirtIOBlk<'static, VirtioHal>>);
     
    -lazy_static! {
    -    static ref QUEUE_FRAMES: UPSafeCell<Vec<FrameTracker>> = unsafe { UPSafeCell::new(Vec::new()) };
    +lazy_static! {
    +    static ref QUEUE_FRAMES: UPSafeCell<Vec<FrameTracker>> = unsafe { UPSafeCell::new(Vec::new()) };
     }
     
    -impl BlockDevice for VirtIOBlock {
    -    fn read_block(&self, block_id: usize, buf: &mut [u8]) {
    -        self.0
    -            .exclusive_access()
    -            .read_block(block_id, buf)
    -            .expect("Error when reading VirtIOBlk");
    +impl BlockDevice for VirtIOBlock {
    +    fn read_block(&self, block_id: usize, buf: &mut [u8]) {
    +        self.0
    +            .exclusive_access()
    +            .read_block(block_id, buf)
    +            .expect("Error when reading VirtIOBlk");
         }
    -    fn write_block(&self, block_id: usize, buf: &[u8]) {
    -        self.0
    -            .exclusive_access()
    -            .write_block(block_id, buf)
    -            .expect("Error when writing VirtIOBlk");
    +    fn write_block(&self, block_id: usize, buf: &[u8]) {
    +        self.0
    +            .exclusive_access()
    +            .write_block(block_id, buf)
    +            .expect("Error when writing VirtIOBlk");
         }
     }
     
    -impl VirtIOBlock {
    -    #[allow(unused)]
    -    pub fn new() -> Self {
    -        unsafe {
    -            Self(UPSafeCell::new(
    -                VirtIOBlk::new(&mut *(VIRTIO0 as *mut VirtIOHeader)).unwrap(),
    +impl VirtIOBlock {
    +    #[allow(unused)]
    +    pub fn new() -> Self {
    +        unsafe {
    +            Self(UPSafeCell::new(
    +                VirtIOBlk::<VirtioHal>::new(&mut *(VIRTIO0 as *mut VirtIOHeader)).unwrap(),
                 ))
             }
         }
     }
     
    -#[no_mangle]
    -pub extern "C" fn virtio_dma_alloc(pages: usize) -> PhysAddr {
    -    let mut ppn_base = PhysPageNum(0);
    -    for i in 0..pages {
    -        let frame = frame_alloc().unwrap();
    -        if i == 0 {
    -            ppn_base = frame.ppn;
    +pub struct VirtioHal;
    +
    +impl Hal for VirtioHal {
    +    fn dma_alloc(pages: usize) -> usize {
    +        let mut ppn_base = PhysPageNum(0);
    +        for i in 0..pages {
    +            let frame = frame_alloc().unwrap();
    +            if i == 0 {
    +                ppn_base = frame.ppn;
    +            }
    +            assert_eq!(frame.ppn.0, ppn_base.0 + i);
    +            QUEUE_FRAMES.exclusive_access().push(frame);
             }
    -        assert_eq!(frame.ppn.0, ppn_base.0 + i);
    -        QUEUE_FRAMES.exclusive_access().push(frame);
    +        let pa: PhysAddr = ppn_base.into();
    +        pa.0
    +    }
    +
    +    fn dma_dealloc(pa: usize, pages: usize) -> i32 {
    +        let pa = PhysAddr::from(pa);
    +        let mut ppn_base: PhysPageNum = pa.into();
    +        for _ in 0..pages {
    +            frame_dealloc(ppn_base);
    +            ppn_base.step();
    +        }
    +        0
    +    }
    +
    +    fn phys_to_virt(addr: usize) -> usize {
    +        addr
         }
    -    ppn_base.into()
    -}
     
    -#[no_mangle]
    -pub extern "C" fn virtio_dma_dealloc(pa: PhysAddr, pages: usize) -> i32 {
    -    let mut ppn_base: PhysPageNum = pa.into();
    -    for _ in 0..pages {
    -        frame_dealloc(ppn_base);
    -        ppn_base.step();
    -    }
    -    0
    +    fn virt_to_phys(vaddr: usize) -> usize {
    +        PageTable::from_token(kernel_token())
    +            .translate_va(VirtAddr::from(vaddr))
    +            .unwrap()
    +            .0
    +    }
     }
    -
    -#[no_mangle]
    -pub extern "C" fn virtio_phys_to_virt(paddr: PhysAddr) -> VirtAddr {
    -    VirtAddr(paddr.0)
    -}
    -
    -#[no_mangle]
    -pub extern "C" fn virtio_virt_to_phys(vaddr: VirtAddr) -> PhysAddr {
    -    PageTable::from_token(kernel_token())
    -        .translate_va(vaddr)
    -        .unwrap()
    -}
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/drivers/mod.rs.html b/ch6-dev/src/os/drivers/mod.rs.html index f24e962d..0a15419b 100644 --- a/ch6-dev/src/os/drivers/mod.rs.html +++ b/ch6-dev/src/os/drivers/mod.rs.html @@ -1,14 +1,7 @@ -mod.rs - source - -
    1
    -2
    -3
    -
    pub mod block;
    +mod.rs - source
    1
    +2
    +3
    +
    pub mod block;
     
    -pub use block::BLOCK_DEVICE;
    -
    -
    - \ No newline at end of file +pub use block::BLOCK_DEVICE; + \ No newline at end of file diff --git a/ch6-dev/src/os/fs/inode.rs.html b/ch6-dev/src/os/fs/inode.rs.html index c51bc605..ffaffd63 100644 --- a/ch6-dev/src/os/fs/inode.rs.html +++ b/ch6-dev/src/os/fs/inode.rs.html @@ -1,316 +1,329 @@ -inode.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -
    //! `Arc<Inode>` -> `OSInodeInner`: In order to open files concurrently
    -//! we need to wrap `Inode` into `Arc`,but `Mutex` in `Inode` prevents
    -//! file systems from being accessed simultaneously
    -//!
    -//! `UPSafeCell<OSInodeInner>` -> `OSInode`: for static `ROOT_INODE`,we
    -//! need to wrap `OSInodeInner` into `UPSafeCell`
    -use super::File;
    -use crate::drivers::BLOCK_DEVICE;
    -use crate::mm::UserBuffer;
    -use crate::sync::UPSafeCell;
    -use alloc::sync::Arc;
    -use alloc::vec::Vec;
    -use bitflags::*;
    -use easy_fs::{EasyFileSystem, Inode};
    -use lazy_static::*;
    -/// A wrapper around a filesystem inode
    -/// to implement File trait atop
    -pub struct OSInode {
    -    readable: bool,
    -    writable: bool,
    -    inner: UPSafeCell<OSInodeInner>,
    +inode.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +
    //! `Arc<Inode>` -> `OSInodeInner`: In order to open files concurrently
    +//! we need to wrap `Inode` into `Arc`,but `Mutex` in `Inode` prevents
    +//! file systems from being accessed simultaneously
    +//!
    +//! `UPSafeCell<OSInodeInner>` -> `OSInode`: for static `ROOT_INODE`,we
    +//! need to wrap `OSInodeInner` into `UPSafeCell`
    +use super::File;
    +use crate::drivers::BLOCK_DEVICE;
    +use crate::mm::UserBuffer;
    +use crate::sync::{RawExclusiveLock, UPSafeCell};
    +use alloc::sync::Arc;
    +use alloc::vec::Vec;
    +use bitflags::*;
    +use easy_fs::{BlockCacheMgr, EasyFileSystem, Inode};
    +use lazy_static::*;
    +
    +const BLOCK_CACHE_SIZE: usize = 64;
    +type InodeType = Inode<RawExclusiveLock, BLOCK_CACHE_SIZE, RawExclusiveLock, RawExclusiveLock>;
    +
    +/// A wrapper around a filesystem inode
    +/// to implement File trait atop
    +pub struct OSInode {
    +    readable: bool,
    +    writable: bool,
    +    inner: UPSafeCell<OSInodeInner>,
     }
    -/// The OS inode inner in 'UPSafeCell'
    -pub struct OSInodeInner {
    -    offset: usize,
    -    inode: Arc<Inode>,
    +/// The OS inode inner in 'UPSafeCell'
    +pub struct OSInodeInner {
    +    offset: usize,
    +    inode: Arc<InodeType>,
     }
     
    -impl OSInode {
    -    /// Construct an OS inode from a inode
    -    pub fn new(readable: bool, writable: bool, inode: Arc<Inode>) -> Self {
    -        Self {
    -            readable,
    -            writable,
    -            inner: unsafe { UPSafeCell::new(OSInodeInner { offset: 0, inode }) },
    +impl OSInode {
    +    /// Construct an OS inode from a inode
    +    pub fn new(readable: bool, writable: bool, inode: Arc<InodeType>) -> Self {
    +        Self {
    +            readable,
    +            writable,
    +            inner: unsafe { UPSafeCell::new(OSInodeInner { offset: 0, inode }) },
             }
         }
    -    /// Read all data inside a inode into vector
    -    pub fn read_all(&self) -> Vec<u8> {
    -        let mut inner = self.inner.exclusive_access();
    -        let mut buffer = [0u8; 512];
    -        let mut v: Vec<u8> = Vec::new();
    -        loop {
    -            let len = inner.inode.read_at(inner.offset, &mut buffer);
    -            if len == 0 {
    +    /// Read all data inside a inode into vector
    +    pub fn read_all(&self) -> Vec<u8> {
    +        let mut inner = self.inner.exclusive_access();
    +        let mut buffer = [0u8; 512];
    +        let mut v: Vec<u8> = Vec::new();
    +        loop {
    +            let len = inner.inode.read_at(inner.offset, &mut buffer);
    +            if len == 0 {
                     break;
                 }
    -            inner.offset += len;
    -            v.extend_from_slice(&buffer[..len]);
    +            inner.offset += len;
    +            v.extend_from_slice(&buffer[..len]);
             }
    -        v
    +        v
         }
     }
     
    -lazy_static! {
    -    pub static ref ROOT_INODE: Arc<Inode> = {
    -        let efs = EasyFileSystem::open(BLOCK_DEVICE.clone());
    -        Arc::new(EasyFileSystem::root_inode(&efs))
    +lazy_static! {
    +    pub static ref ROOT_INODE: Arc<InodeType> = {
    +        let block_dev = BLOCK_DEVICE.clone();
    +        let bcache_mgr: BlockCacheMgr<BLOCK_CACHE_SIZE, RawExclusiveLock> =
    +            BlockCacheMgr::new(&block_dev);
    +        let efs: EasyFileSystem<BLOCK_CACHE_SIZE, RawExclusiveLock, _> =
    +            EasyFileSystem::open(bcache_mgr);
    +        let efs = Arc::new(lock_api::Mutex::<RawExclusiveLock, _>::new(efs));
    +        Arc::new(Inode::root_inode(&efs))
         };
     }
    -/// List all files in the filesystems
    -pub fn list_apps() {
    +/// List all files in the filesystems
    +#[allow(warnings)]
    +pub fn list_apps() {
         println!("/**** APPS ****");
    -    for app in ROOT_INODE.ls() {
    -        println!("{}", app);
    +    for app in ROOT_INODE.listdir() {
    +        println!("{}", app);
         }
         println!("**************/");
     }
     
    -bitflags! {
    -    ///Open file flags
    -    pub struct OpenFlags: u32 {
    -        ///Read only
    -        const RDONLY = 0;
    -        ///Write only
    -        const WRONLY = 1 << 0;
    -        ///Read & Write
    -        const RDWR = 1 << 1;
    -        ///Allow create
    -        const CREATE = 1 << 9;
    -        ///Clear file and return an empty one
    -        const TRUNC = 1 << 10;
    +bitflags! {
    +    ///Open file flags
    +    pub struct OpenFlags: u32 {
    +        ///Read only
    +        const RDONLY = 0;
    +        ///Write only
    +        const WRONLY = 1 << 0;
    +        ///Read & Write
    +        const RDWR = 1 << 1;
    +        ///Allow create
    +        const CREATE = 1 << 9;
    +        ///Clear file and return an empty one
    +        const TRUNC = 1 << 10;
         }
     }
     
    -impl OpenFlags {
    -    /// Do not check validity for simplicity
    -    /// Return (readable, writable)
    -    pub fn read_write(&self) -> (bool, bool) {
    -        if self.is_empty() {
    +impl OpenFlags {
    +    /// Do not check validity for simplicity
    +    /// Return (readable, writable)
    +    pub fn read_write(&self) -> (bool, bool) {
    +        if self.is_empty() {
                 (true, false)
    -        } else if self.contains(Self::WRONLY) {
    +        } else if self.contains(Self::WRONLY) {
                 (false, true)
    -        } else {
    +        } else {
                 (true, true)
             }
         }
     }
    -///Open file with flags
    -pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>> {
    -    let (readable, writable) = flags.read_write();
    -    if flags.contains(OpenFlags::CREATE) {
    -        if let Some(inode) = ROOT_INODE.find(name) {
    -            // clear size
    -            inode.clear();
    -            Some(Arc::new(OSInode::new(readable, writable, inode)))
    -        } else {
    -            // create file
    -            ROOT_INODE
    -                .create(name)
    -                .map(|inode| Arc::new(OSInode::new(readable, writable, inode)))
    +///Open file with flags
    +pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>> {
    +    let (readable, writable) = flags.read_write();
    +    if flags.contains(OpenFlags::CREATE) {
    +        if let Some(inode) = ROOT_INODE.find(name) {
    +            // clear size
    +            inode.clear();
    +            Some(Arc::new(OSInode::new(readable, writable, inode)))
    +        } else {
    +            // create file
    +            ROOT_INODE
    +                .create(name)
    +                .map(|inode| Arc::new(OSInode::new(readable, writable, inode)))
             }
    -    } else {
    -        ROOT_INODE.find(name).map(|inode| {
    -            if flags.contains(OpenFlags::TRUNC) {
    -                inode.clear();
    +    } else {
    +        ROOT_INODE.find(name).map(|inode| {
    +            if flags.contains(OpenFlags::TRUNC) {
    +                inode.clear();
                 }
    -            Arc::new(OSInode::new(readable, writable, inode))
    +            Arc::new(OSInode::new(readable, writable, inode))
             })
         }
     }
     
    -impl File for OSInode {
    -    fn readable(&self) -> bool {
    -        self.readable
    +impl File for OSInode {
    +    fn readable(&self) -> bool {
    +        self.readable
         }
    -    fn writable(&self) -> bool {
    -        self.writable
    +    fn writable(&self) -> bool {
    +        self.writable
         }
    -    fn read(&self, mut buf: UserBuffer) -> usize {
    -        let mut inner = self.inner.exclusive_access();
    -        let mut total_read_size = 0usize;
    -        for slice in buf.buffers.iter_mut() {
    -            let read_size = inner.inode.read_at(inner.offset, *slice);
    -            if read_size == 0 {
    +    fn read(&self, mut buf: UserBuffer) -> usize {
    +        let mut inner = self.inner.exclusive_access();
    +        let mut total_read_size = 0usize;
    +        for slice in buf.buffers.iter_mut() {
    +            let read_size = inner.inode.read_at(inner.offset, *slice);
    +            if read_size == 0 {
                     break;
                 }
    -            inner.offset += read_size;
    -            total_read_size += read_size;
    +            inner.offset += read_size;
    +            total_read_size += read_size;
             }
    -        total_read_size
    +        total_read_size
         }
    -    fn write(&self, buf: UserBuffer) -> usize {
    -        let mut inner = self.inner.exclusive_access();
    -        let mut total_write_size = 0usize;
    -        for slice in buf.buffers.iter() {
    -            let write_size = inner.inode.write_at(inner.offset, *slice);
    -            assert_eq!(write_size, slice.len());
    -            inner.offset += write_size;
    -            total_write_size += write_size;
    +    fn write(&self, buf: UserBuffer) -> usize {
    +        let mut inner = self.inner.exclusive_access();
    +        let mut total_write_size = 0usize;
    +        for slice in buf.buffers.iter() {
    +            let write_size = inner.inode.write_at(inner.offset, *slice);
    +            assert_eq!(write_size, slice.len());
    +            inner.offset += write_size;
    +            total_write_size += write_size;
             }
    -        total_write_size
    +        total_write_size
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/fs/mod.rs.html b/ch6-dev/src/os/fs/mod.rs.html index bb72ccc9..48b9d6b2 100644 --- a/ch6-dev/src/os/fs/mod.rs.html +++ b/ch6-dev/src/os/fs/mod.rs.html @@ -1,46 +1,39 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -
    //! File system in os
    -mod inode;
    -mod stdio;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    //! File system in os
    +mod inode;
    +mod stdio;
     
    -use crate::mm::UserBuffer;
    -/// File trait
    -pub trait File: Send + Sync {
    -    /// If readable
    -    fn readable(&self) -> bool;
    -    /// If writable
    -    fn writable(&self) -> bool;
    -    /// Read file to `UserBuffer`
    -    fn read(&self, buf: UserBuffer) -> usize;
    -    /// Write `UserBuffer` to file
    -    fn write(&self, buf: UserBuffer) -> usize;
    +use crate::mm::UserBuffer;
    +/// File trait
    +pub trait File: Send + Sync {
    +    /// If readable
    +    fn readable(&self) -> bool;
    +    /// If writable
    +    fn writable(&self) -> bool;
    +    /// Read file to `UserBuffer`
    +    fn read(&self, buf: UserBuffer) -> usize;
    +    /// Write `UserBuffer` to file
    +    fn write(&self, buf: UserBuffer) -> usize;
     }
     
    -pub use inode::{list_apps, open_file, OSInode, OpenFlags};
    -pub use stdio::{Stdin, Stdout};
    -
    -
    - \ No newline at end of file +pub use inode::{list_apps, open_file, OSInode, OpenFlags}; +pub use stdio::{Stdin, Stdout}; + \ No newline at end of file diff --git a/ch6-dev/src/os/fs/stdio.rs.html b/ch6-dev/src/os/fs/stdio.rs.html index 782a65b1..22ff1b65 100644 --- a/ch6-dev/src/os/fs/stdio.rs.html +++ b/ch6-dev/src/os/fs/stdio.rs.html @@ -1,124 +1,117 @@ -stdio.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -
    //!Stdin & Stdout
    -use super::File;
    -use crate::mm::UserBuffer;
    -use crate::sbi::console_getchar;
    -use crate::task::suspend_current_and_run_next;
    -///Standard input
    -pub struct Stdin;
    -///Standard output
    -pub struct Stdout;
    +stdio.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +
    //!Stdin & Stdout
    +use super::File;
    +use crate::mm::UserBuffer;
    +use crate::sbi::console_getchar;
    +use crate::task::suspend_current_and_run_next;
    +///Standard input
    +pub struct Stdin;
    +///Standard output
    +pub struct Stdout;
     
    -impl File for Stdin {
    -    fn readable(&self) -> bool {
    -        true
    -    }
    -    fn writable(&self) -> bool {
    -        false
    -    }
    -    fn read(&self, mut user_buf: UserBuffer) -> usize {
    -        assert_eq!(user_buf.len(), 1);
    -        // busy loop
    -        let mut c: usize;
    -        loop {
    -            c = console_getchar();
    -            if c == 0 {
    -                suspend_current_and_run_next();
    +impl File for Stdin {
    +    fn readable(&self) -> bool {
    +        true
    +    }
    +    fn writable(&self) -> bool {
    +        false
    +    }
    +    fn read(&self, mut user_buf: UserBuffer) -> usize {
    +        assert_eq!(user_buf.len(), 1);
    +        // busy loop
    +        let mut c: usize;
    +        loop {
    +            c = console_getchar();
    +            if c == 0 {
    +                suspend_current_and_run_next();
                     continue;
    -            } else {
    +            } else {
                     break;
                 }
             }
    -        let ch = c as u8;
    -        unsafe {
    -            user_buf.buffers[0].as_mut_ptr().write_volatile(ch);
    +        let ch = c as u8;
    +        unsafe {
    +            user_buf.buffers[0].as_mut_ptr().write_volatile(ch);
             }
    -        1
    -    }
    -    fn write(&self, _user_buf: UserBuffer) -> usize {
    +        1
    +    }
    +    fn write(&self, _user_buf: UserBuffer) -> usize {
             panic!("Cannot write to stdin!");
         }
     }
     
    -impl File for Stdout {
    -    fn readable(&self) -> bool {
    -        false
    -    }
    -    fn writable(&self) -> bool {
    -        true
    -    }
    -    fn read(&self, _user_buf: UserBuffer) -> usize {
    +impl File for Stdout {
    +    fn readable(&self) -> bool {
    +        false
    +    }
    +    fn writable(&self) -> bool {
    +        true
    +    }
    +    fn read(&self, _user_buf: UserBuffer) -> usize {
             panic!("Cannot read from stdout!");
         }
    -    fn write(&self, user_buf: UserBuffer) -> usize {
    -        for buffer in user_buf.buffers.iter() {
    -            print!("{}", core::str::from_utf8(*buffer).unwrap());
    +    fn write(&self, user_buf: UserBuffer) -> usize {
    +        for buffer in user_buf.buffers.iter() {
    +            print!("{}", core::str::from_utf8(*buffer).unwrap());
             }
    -        user_buf.len()
    +        user_buf.len()
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/lang_items.rs.html b/ch6-dev/src/os/lang_items.rs.html index 7e0aedab..5fe215bd 100644 --- a/ch6-dev/src/os/lang_items.rs.html +++ b/ch6-dev/src/os/lang_items.rs.html @@ -1,44 +1,39 @@ -lang_items.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -
    //! The panic handler
    -use crate::sbi::shutdown;
    -use core::panic::PanicInfo;
    +lang_items.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    //! The panic handler
    +use crate::sbi::shutdown;
    +use core::panic::PanicInfo;
    +use log::*;
     
    -#[panic_handler]
    -fn panic(info: &PanicInfo) -> ! {
    -    if let Some(location) = info.location() {
    -        println!(
    +#[panic_handler]
    +fn panic(info: &PanicInfo) -> ! {
    +    if let Some(location) = info.location() {
    +        error!(
                 "[kernel] Panicked at {}:{} {}",
    -            location.file(),
    -            location.line(),
    -            info.message().unwrap()
    +            location.file(),
    +            location.line(),
    +            info.message().unwrap()
             );
    -    } else {
    -        println!("[kernel] Panicked: {}", info.message().unwrap());
    +    } else {
    +        error!("[kernel] Panicked: {}", info.message().unwrap());
         }
    -    shutdown()
    +    shutdown(true)
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/main.rs.html b/ch6-dev/src/os/main.rs.html index 14a99ed8..2e34423e 100644 --- a/ch6-dev/src/os/main.rs.html +++ b/ch6-dev/src/os/main.rs.html @@ -1,176 +1,161 @@ -main.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -
    //! The main module and entrypoint
    -//!
    -//! Various facilities of the kernels are implemented as submodules. The most
    -//! important ones are:
    -//!
    -//! - [`trap`]: Handles all cases of switching from userspace to the kernel
    -//! - [`task`]: Task management
    -//! - [`syscall`]: System call handling and implementation
    -//! - [`mm`]: Address map using SV39
    -//! - [`sync`]: Wrap a static data structure inside it so that we are able to access it without any `unsafe`.
    -//! - [`fs`]: Separate user from file system with some structures
    -//!
    -//! The operating system also starts in this module. Kernel code starts
    -//! executing from `entry.asm`, after which [`rust_main()`] is called to
    -//! initialize various pieces of functionality. (See its source code for
    -//! details.)
    -//!
    -//! We then call [`task::run_tasks()`] and for the first time go to
    -//! userspace.
    +main.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +
    //! The main module and entrypoint
    +//!
    +//! Various facilities of the kernels are implemented as submodules. The most
    +//! important ones are:
    +//!
    +//! - [`trap`]: Handles all cases of switching from userspace to the kernel
    +//! - [`task`]: Task management
    +//! - [`syscall`]: System call handling and implementation
    +//! - [`mm`]: Address map using SV39
    +//! - [`sync`]: Wrap a static data structure inside it so that we are able to access it without any `unsafe`.
    +//! - [`fs`]: Separate user from file system with some structures
    +//!
    +//! The operating system also starts in this module. Kernel code starts
    +//! executing from `entry.asm`, after which [`rust_main()`] is called to
    +//! initialize various pieces of functionality. (See its source code for
    +//! details.)
    +//!
    +//! We then call [`task::run_tasks()`] and for the first time go to
    +//! userspace.
     
    -#![deny(missing_docs)]
    -#![deny(warnings)]
    -#![allow(unused_imports)]
    -#![no_std]
    -#![no_main]
    -#![feature(panic_info_message)]
    -#![feature(alloc_error_handler)]
    +#![deny(missing_docs)]
    +#![deny(warnings)]
    +#![allow(unused_imports)]
    +#![no_std]
    +#![no_main]
    +#![feature(panic_info_message)]
    +#![feature(alloc_error_handler)]
     
    -extern crate alloc;
    +extern crate alloc;
     
    -#[macro_use]
    -extern crate bitflags;
    +#[macro_use]
    +extern crate bitflags;
     
    -#[cfg(feature = "board_k210")]
    -#[path = "boards/k210.rs"]
    -mod board;
    -#[cfg(not(any(feature = "board_k210")))]
    -#[path = "boards/qemu.rs"]
    -mod board;
    +#[path = "boards/qemu.rs"]
    +mod board;
     
    -#[macro_use]
    -mod console;
    -mod config;
    -mod drivers;
    -pub mod fs;
    -pub mod lang_items;
    -pub mod mm;
    -pub mod sbi;
    -pub mod sync;
    -pub mod syscall;
    -pub mod task;
    -pub mod timer;
    -pub mod trap;
    +#[macro_use]
    +mod console;
    +mod config;
    +mod drivers;
    +pub mod fs;
    +pub mod lang_items;
    +pub mod mm;
    +pub mod sbi;
    +pub mod sync;
    +pub mod syscall;
    +pub mod task;
    +pub mod timer;
    +pub mod trap;
     
    -use core::arch::global_asm;
    +use core::arch::global_asm;
     
     global_asm!(include_str!("entry.asm"));
    -/// clear BSS segment
    -fn clear_bss() {
    -    extern "C" {
    -        fn sbss();
    -        fn ebss();
    +/// clear BSS segment
    +fn clear_bss() {
    +    extern "C" {
    +        fn sbss();
    +        fn ebss();
         }
    -    unsafe {
    -        core::slice::from_raw_parts_mut(sbss as usize as *mut u8, ebss as usize - sbss as usize)
    -            .fill(0);
    +    unsafe {
    +        core::slice::from_raw_parts_mut(sbss as usize as *mut u8, ebss as usize - sbss as usize)
    +            .fill(0);
         }
     }
     
    -#[no_mangle]
    -/// the rust entry-point of os
    -pub fn rust_main() -> ! {
    -    clear_bss();
    +#[no_mangle]
    +/// the rust entry-point of os
    +pub fn rust_main() -> ! {
    +    clear_bss();
         println!("[kernel] Hello, world!");
    -    mm::init();
    -    mm::remap_test();
    -    trap::init();
    -    trap::enable_timer_interrupt();
    -    timer::set_next_trigger();
    -    fs::list_apps();
    -    task::add_initproc();
    -    task::run_tasks();
    +    mm::init();
    +    mm::remap_test();
    +    trap::init();
    +    trap::enable_timer_interrupt();
    +    timer::set_next_trigger();
    +    fs::list_apps();
    +    task::add_initproc();
    +    task::run_tasks();
         panic!("Unreachable in rust_main!");
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/address.rs.html b/ch6-dev/src/os/mm/address.rs.html index db6464b2..357a7485 100644 --- a/ch6-dev/src/os/mm/address.rs.html +++ b/ch6-dev/src/os/mm/address.rs.html @@ -1,576 +1,585 @@ -address.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -
    //! Implementation of physical and virtual address and page number.
    -use super::PageTableEntry;
    -use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS};
    -use core::fmt::{self, Debug, Formatter};
    +address.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +
    //! Implementation of physical and virtual address and page number.
    +use super::PageTableEntry;
    +use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS};
    +use core::fmt::{self, Debug, Formatter};
     
    -const PA_WIDTH_SV39: usize = 56;
    -const VA_WIDTH_SV39: usize = 39;
    -const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS;
    -const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS;
    +const PA_WIDTH_SV39: usize = 56;
    +const VA_WIDTH_SV39: usize = 39;
    +const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS;
    +const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS;
     
    -/// Definitions
    -#[repr(C)]
    -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    -pub struct PhysAddr(pub usize);
    +/// Definitions
    +#[repr(C)]
    +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    +pub struct PhysAddr(pub usize);
     
    -#[repr(C)]
    -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    -///virtual address
    -pub struct VirtAddr(pub usize);
    +#[repr(C)]
    +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    +///virtual address
    +pub struct VirtAddr(pub usize);
     
    -#[repr(C)]
    -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    -///phiscal page number
    -pub struct PhysPageNum(pub usize);
    +#[repr(C)]
    +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    +///phiscal page number
    +pub struct PhysPageNum(pub usize);
     
    -#[repr(C)]
    -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    -///virtual page number
    -pub struct VirtPageNum(pub usize);
    +#[repr(C)]
    +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)]
    +///virtual page number
    +pub struct VirtPageNum(pub usize);
     
    -/// Debugging
    +/// Debugging
     
    -impl Debug for VirtAddr {
    -    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    -        f.write_fmt(format_args!("VA:{:#x}", self.0))
    +impl Debug for VirtAddr {
    +    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    +        f.write_fmt(format_args!("VA:{:#x}", self.0))
         }
     }
    -impl Debug for VirtPageNum {
    -    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    -        f.write_fmt(format_args!("VPN:{:#x}", self.0))
    +impl Debug for VirtPageNum {
    +    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    +        f.write_fmt(format_args!("VPN:{:#x}", self.0))
         }
     }
    -impl Debug for PhysAddr {
    -    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    -        f.write_fmt(format_args!("PA:{:#x}", self.0))
    +impl Debug for PhysAddr {
    +    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    +        f.write_fmt(format_args!("PA:{:#x}", self.0))
         }
     }
    -impl Debug for PhysPageNum {
    -    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    -        f.write_fmt(format_args!("PPN:{:#x}", self.0))
    +impl Debug for PhysPageNum {
    +    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    +        f.write_fmt(format_args!("PPN:{:#x}", self.0))
         }
     }
     
    -/// T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum}
    -/// T -> usize: T.0
    -/// usize -> T: usize.into()
    +/// T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum}
    +/// T -> usize: T.0
    +/// usize -> T: usize.into()
     
    -impl From<usize> for PhysAddr {
    -    fn from(v: usize) -> Self {
    -        Self(v & ((1 << PA_WIDTH_SV39) - 1))
    +impl From<usize> for PhysAddr {
    +    fn from(v: usize) -> Self {
    +        Self(v & ((1 << PA_WIDTH_SV39) - 1))
         }
     }
    -impl From<usize> for PhysPageNum {
    -    fn from(v: usize) -> Self {
    -        Self(v & ((1 << PPN_WIDTH_SV39) - 1))
    +impl From<usize> for PhysPageNum {
    +    fn from(v: usize) -> Self {
    +        Self(v & ((1 << PPN_WIDTH_SV39) - 1))
         }
     }
    -impl From<usize> for VirtAddr {
    -    fn from(v: usize) -> Self {
    -        Self(v & ((1 << VA_WIDTH_SV39) - 1))
    +impl From<usize> for VirtAddr {
    +    fn from(v: usize) -> Self {
    +        Self(v & ((1 << VA_WIDTH_SV39) - 1))
         }
     }
    -impl From<usize> for VirtPageNum {
    -    fn from(v: usize) -> Self {
    -        Self(v & ((1 << VPN_WIDTH_SV39) - 1))
    +impl From<usize> for VirtPageNum {
    +    fn from(v: usize) -> Self {
    +        Self(v & ((1 << VPN_WIDTH_SV39) - 1))
         }
     }
    -impl From<PhysAddr> for usize {
    -    fn from(v: PhysAddr) -> Self {
    -        v.0
    +impl From<PhysAddr> for usize {
    +    fn from(v: PhysAddr) -> Self {
    +        v.0
    +    }
    +}
    +impl From<PhysPageNum> for usize {
    +    fn from(v: PhysPageNum) -> Self {
    +        v.0
    +    }
    +}
    +impl From<VirtAddr> for usize {
    +    fn from(v: VirtAddr) -> Self {
    +        if v.0 >= (1 << (VA_WIDTH_SV39 - 1)) {
    +            v.0 | (!((1 << VA_WIDTH_SV39) - 1))
    +        } else {
    +            v.0
    +        }
         }
     }
    -impl From<PhysPageNum> for usize {
    -    fn from(v: PhysPageNum) -> Self {
    -        v.0
    +impl From<VirtPageNum> for usize {
    +    fn from(v: VirtPageNum) -> Self {
    +        v.0
    +    }
    +}
    +///
    +impl VirtAddr {
    +    ///`VirtAddr`->`VirtPageNum`
    +    pub fn floor(&self) -> VirtPageNum {
    +        VirtPageNum(self.0 / PAGE_SIZE)
    +    }
    +    ///`VirtAddr`->`VirtPageNum`
    +    pub fn ceil(&self) -> VirtPageNum {
    +        if self.0 == 0 {
    +            VirtPageNum(0)
    +        } else {
    +            VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE)
    +        }
    +    }
    +    ///Get page offset
    +    pub fn page_offset(&self) -> usize {
    +        self.0 & (PAGE_SIZE - 1)
    +    }
    +    ///Check page aligned
    +    pub fn aligned(&self) -> bool {
    +        self.page_offset() == 0
    +    }
    +}
    +impl From<VirtAddr> for VirtPageNum {
    +    fn from(v: VirtAddr) -> Self {
    +        assert_eq!(v.page_offset(), 0);
    +        v.floor()
         }
     }
    -impl From<VirtAddr> for usize {
    -    fn from(v: VirtAddr) -> Self {
    -        if v.0 >= (1 << (VA_WIDTH_SV39 - 1)) {
    -            v.0 | (!((1 << VA_WIDTH_SV39) - 1))
    -        } else {
    -            v.0
    +impl From<VirtPageNum> for VirtAddr {
    +    fn from(v: VirtPageNum) -> Self {
    +        Self(v.0 << PAGE_SIZE_BITS)
    +    }
    +}
    +impl PhysAddr {
    +    ///`PhysAddr`->`PhysPageNum`
    +    pub fn floor(&self) -> PhysPageNum {
    +        PhysPageNum(self.0 / PAGE_SIZE)
    +    }
    +    ///`PhysAddr`->`PhysPageNum`
    +    pub fn ceil(&self) -> PhysPageNum {
    +        if self.0 == 0 {
    +            PhysPageNum(0)
    +        } else {
    +            PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE)
    +        }
    +    }
    +    ///Get page offset
    +    pub fn page_offset(&self) -> usize {
    +        self.0 & (PAGE_SIZE - 1)
    +    }
    +    ///Check page aligned
    +    pub fn aligned(&self) -> bool {
    +        self.page_offset() == 0
    +    }
    +}
    +impl From<PhysAddr> for PhysPageNum {
    +    fn from(v: PhysAddr) -> Self {
    +        assert_eq!(v.page_offset(), 0);
    +        v.floor()
    +    }
    +}
    +impl From<PhysPageNum> for PhysAddr {
    +    fn from(v: PhysPageNum) -> Self {
    +        Self(v.0 << PAGE_SIZE_BITS)
    +    }
    +}
    +
    +impl VirtPageNum {
    +    ///Return VPN 3 level index
    +    pub fn indexes(&self) -> [usize; 3] {
    +        let mut vpn = self.0;
    +        let mut idx = [0usize; 3];
    +        for i in (0..3).rev() {
    +            idx[i] = vpn & 511;
    +            vpn >>= 9;
    +        }
    +        idx
    +    }
    +}
    +
    +impl PhysAddr {
    +    ///Get reference to `PhysAddr` value
    +    pub fn get_ref<T>(&self) -> &'static T {
    +        unsafe { (self.0 as *const T).as_ref().unwrap() }
    +    }
    +    ///Get mutable reference to `PhysAddr` value
    +    pub fn get_mut<T>(&self) -> &'static mut T {
    +        unsafe { (self.0 as *mut T).as_mut().unwrap() }
    +    }
    +}
    +impl PhysPageNum {
    +    ///Get `PageTableEntry` on `PhysPageNum`
    +    pub fn get_pte_array(&self) -> &'static mut [PageTableEntry] {
    +        let pa: PhysAddr = (*self).into();
    +        unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut PageTableEntry, 512) }
    +    }
    +    ///Get u8 array on `PhysPageNum`
    +    pub fn get_bytes_array(&self) -> &'static mut [u8] {
    +        let pa: PhysAddr = (*self).into();
    +        unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut u8, 4096) }
    +    }
    +    ///Get Get mutable reference to `PhysAddr` value on `PhysPageNum`
    +    pub fn get_mut<T>(&self) -> &'static mut T {
    +        let pa: PhysAddr = (*self).into();
    +        pa.get_mut()
    +    }
    +}
    +///Add value by one
    +pub trait StepByOne {
    +    ///Add value by one
    +    fn step(&mut self);
    +}
    +impl StepByOne for VirtPageNum {
    +    fn step(&mut self) {
    +        self.0 += 1;
    +    }
    +}
    +impl StepByOne for PhysPageNum {
    +    fn step(&mut self) {
    +        self.0 += 1;
    +    }
    +}
    +
    +#[derive(Copy, Clone)]
    +/// a simple range structure for type T
    +pub struct SimpleRange<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    l: T,
    +    r: T,
    +}
    +impl<T> SimpleRange<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    pub fn new(start: T, end: T) -> Self {
    +        assert!(start <= end, "start {:?} > end {:?}!", start, end);
    +        Self { l: start, r: end }
    +    }
    +    pub fn get_start(&self) -> T {
    +        self.l
    +    }
    +    pub fn get_end(&self) -> T {
    +        self.r
    +    }
    +}
    +impl<T> IntoIterator for SimpleRange<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    type Item = T;
    +    type IntoIter = SimpleRangeIterator<T>;
    +    fn into_iter(self) -> Self::IntoIter {
    +        SimpleRangeIterator::new(self.l, self.r)
    +    }
    +}
    +/// iterator for the simple range structure
    +pub struct SimpleRangeIterator<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    current: T,
    +    end: T,
    +}
    +impl<T> SimpleRangeIterator<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    pub fn new(l: T, r: T) -> Self {
    +        Self { current: l, end: r }
    +    }
    +}
    +impl<T> Iterator for SimpleRangeIterator<T>
    +where
    +    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    +{
    +    type Item = T;
    +    fn next(&mut self) -> Option<Self::Item> {
    +        if self.current == self.end {
    +            None
    +        } else {
    +            let t = self.current;
    +            self.current.step();
    +            Some(t)
             }
         }
     }
    -impl From<VirtPageNum> for usize {
    -    fn from(v: VirtPageNum) -> Self {
    -        v.0
    -    }
    -}
    -///
    -impl VirtAddr {
    -    ///`VirtAddr`->`VirtPageNum`
    -    pub fn floor(&self) -> VirtPageNum {
    -        VirtPageNum(self.0 / PAGE_SIZE)
    -    }
    -    ///`VirtAddr`->`VirtPageNum`
    -    pub fn ceil(&self) -> VirtPageNum {
    -        VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE)
    -    }
    -    ///Get page offset
    -    pub fn page_offset(&self) -> usize {
    -        self.0 & (PAGE_SIZE - 1)
    -    }
    -    ///Check page aligned
    -    pub fn aligned(&self) -> bool {
    -        self.page_offset() == 0
    -    }
    -}
    -impl From<VirtAddr> for VirtPageNum {
    -    fn from(v: VirtAddr) -> Self {
    -        assert_eq!(v.page_offset(), 0);
    -        v.floor()
    -    }
    -}
    -impl From<VirtPageNum> for VirtAddr {
    -    fn from(v: VirtPageNum) -> Self {
    -        Self(v.0 << PAGE_SIZE_BITS)
    -    }
    -}
    -impl PhysAddr {
    -    ///`PhysAddr`->`PhysPageNum`
    -    pub fn floor(&self) -> PhysPageNum {
    -        PhysPageNum(self.0 / PAGE_SIZE)
    -    }
    -    ///`PhysAddr`->`PhysPageNum`
    -    pub fn ceil(&self) -> PhysPageNum {
    -        PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE)
    -    }
    -    ///Get page offset
    -    pub fn page_offset(&self) -> usize {
    -        self.0 & (PAGE_SIZE - 1)
    -    }
    -    ///Check page aligned
    -    pub fn aligned(&self) -> bool {
    -        self.page_offset() == 0
    -    }
    -}
    -impl From<PhysAddr> for PhysPageNum {
    -    fn from(v: PhysAddr) -> Self {
    -        assert_eq!(v.page_offset(), 0);
    -        v.floor()
    -    }
    -}
    -impl From<PhysPageNum> for PhysAddr {
    -    fn from(v: PhysPageNum) -> Self {
    -        Self(v.0 << PAGE_SIZE_BITS)
    -    }
    -}
    -
    -impl VirtPageNum {
    -    ///Return VPN 3 level index
    -    pub fn indexes(&self) -> [usize; 3] {
    -        let mut vpn = self.0;
    -        let mut idx = [0usize; 3];
    -        for i in (0..3).rev() {
    -            idx[i] = vpn & 511;
    -            vpn >>= 9;
    -        }
    -        idx
    -    }
    -}
    -
    -impl PhysAddr {
    -    ///Get reference to `PhysAddr` value
    -    pub fn get_ref<T>(&self) -> &'static T {
    -        unsafe { (self.0 as *const T).as_ref().unwrap() }
    -    }
    -    ///Get mutable reference to `PhysAddr` value
    -    pub fn get_mut<T>(&self) -> &'static mut T {
    -        unsafe { (self.0 as *mut T).as_mut().unwrap() }
    -    }
    -}
    -impl PhysPageNum {
    -    ///Get `PageTableEntry` on `PhysPageNum`
    -    pub fn get_pte_array(&self) -> &'static mut [PageTableEntry] {
    -        let pa: PhysAddr = (*self).into();
    -        unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut PageTableEntry, 512) }
    -    }
    -    ///Get u8 array on `PhysPageNum`
    -    pub fn get_bytes_array(&self) -> &'static mut [u8] {
    -        let pa: PhysAddr = (*self).into();
    -        unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut u8, 4096) }
    -    }
    -    ///Get Get mutable reference to `PhysAddr` value on `PhysPageNum`
    -    pub fn get_mut<T>(&self) -> &'static mut T {
    -        let pa: PhysAddr = (*self).into();
    -        pa.get_mut()
    -    }
    -}
    -///Add value by one
    -pub trait StepByOne {
    -    ///Add value by one
    -    fn step(&mut self);
    -}
    -impl StepByOne for VirtPageNum {
    -    fn step(&mut self) {
    -        self.0 += 1;
    -    }
    -}
    -impl StepByOne for PhysPageNum {
    -    fn step(&mut self) {
    -        self.0 += 1;
    -    }
    -}
    -
    -#[derive(Copy, Clone)]
    -/// a simple range structure for type T
    -pub struct SimpleRange<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    l: T,
    -    r: T,
    -}
    -impl<T> SimpleRange<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    pub fn new(start: T, end: T) -> Self {
    -        assert!(start <= end, "start {:?} > end {:?}!", start, end);
    -        Self { l: start, r: end }
    -    }
    -    pub fn get_start(&self) -> T {
    -        self.l
    -    }
    -    pub fn get_end(&self) -> T {
    -        self.r
    -    }
    -}
    -impl<T> IntoIterator for SimpleRange<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    type Item = T;
    -    type IntoIter = SimpleRangeIterator<T>;
    -    fn into_iter(self) -> Self::IntoIter {
    -        SimpleRangeIterator::new(self.l, self.r)
    -    }
    -}
    -/// iterator for the simple range structure
    -pub struct SimpleRangeIterator<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    current: T,
    -    end: T,
    -}
    -impl<T> SimpleRangeIterator<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    pub fn new(l: T, r: T) -> Self {
    -        Self { current: l, end: r }
    -    }
    -}
    -impl<T> Iterator for SimpleRangeIterator<T>
    -where
    -    T: StepByOne + Copy + PartialEq + PartialOrd + Debug,
    -{
    -    type Item = T;
    -    fn next(&mut self) -> Option<Self::Item> {
    -        if self.current == self.end {
    -            None
    -        } else {
    -            let t = self.current;
    -            self.current.step();
    -            Some(t)
    -        }
    -    }
    -}
    -/// a simple range structure for virtual page number
    -pub type VPNRange = SimpleRange<VirtPageNum>;
    -
    -
    - \ No newline at end of file +/// a simple range structure for virtual page number +pub type VPNRange = SimpleRange<VirtPageNum>; + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/frame_allocator.rs.html b/ch6-dev/src/os/mm/frame_allocator.rs.html index 3a6d2c63..22973cfd 100644 --- a/ch6-dev/src/os/mm/frame_allocator.rs.html +++ b/ch6-dev/src/os/mm/frame_allocator.rs.html @@ -1,276 +1,269 @@ -frame_allocator.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -
    //! Implementation of [`FrameAllocator`] which
    -//! controls all the frames in the operating system.
    -use super::{PhysAddr, PhysPageNum};
    -use crate::config::MEMORY_END;
    -use crate::sync::UPSafeCell;
    -use alloc::vec::Vec;
    -use core::fmt::{self, Debug, Formatter};
    -use lazy_static::*;
    +frame_allocator.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +
    //! Implementation of [`FrameAllocator`] which
    +//! controls all the frames in the operating system.
    +use super::{PhysAddr, PhysPageNum};
    +use crate::config::MEMORY_END;
    +use crate::sync::UPSafeCell;
    +use alloc::vec::Vec;
    +use core::fmt::{self, Debug, Formatter};
    +use lazy_static::*;
     
    -/// manage a frame which has the same lifecycle as the tracker
    -pub struct FrameTracker {
    -    ///
    -    pub ppn: PhysPageNum,
    +/// manage a frame which has the same lifecycle as the tracker
    +pub struct FrameTracker {
    +    ///
    +    pub ppn: PhysPageNum,
     }
     
    -impl FrameTracker {
    -    ///Create an empty `FrameTracker`
    -    pub fn new(ppn: PhysPageNum) -> Self {
    -        // page cleaning
    -        let bytes_array = ppn.get_bytes_array();
    -        for i in bytes_array {
    -            *i = 0;
    +impl FrameTracker {
    +    ///Create an empty `FrameTracker`
    +    pub fn new(ppn: PhysPageNum) -> Self {
    +        // page cleaning
    +        let bytes_array = ppn.get_bytes_array();
    +        for i in bytes_array {
    +            *i = 0;
             }
    -        Self { ppn }
    +        Self { ppn }
         }
     }
     
    -impl Debug for FrameTracker {
    -    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    -        f.write_fmt(format_args!("FrameTracker:PPN={:#x}", self.ppn.0))
    +impl Debug for FrameTracker {
    +    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    +        f.write_fmt(format_args!("FrameTracker:PPN={:#x}", self.ppn.0))
         }
     }
     
    -impl Drop for FrameTracker {
    -    fn drop(&mut self) {
    -        frame_dealloc(self.ppn);
    +impl Drop for FrameTracker {
    +    fn drop(&mut self) {
    +        frame_dealloc(self.ppn);
         }
     }
     
    -trait FrameAllocator {
    -    fn new() -> Self;
    -    fn alloc(&mut self) -> Option<PhysPageNum>;
    -    fn dealloc(&mut self, ppn: PhysPageNum);
    +trait FrameAllocator {
    +    fn new() -> Self;
    +    fn alloc(&mut self) -> Option<PhysPageNum>;
    +    fn dealloc(&mut self, ppn: PhysPageNum);
     }
    -/// an implementation for frame allocator
    -pub struct StackFrameAllocator {
    -    current: usize,
    -    end: usize,
    -    recycled: Vec<usize>,
    +/// an implementation for frame allocator
    +pub struct StackFrameAllocator {
    +    current: usize,
    +    end: usize,
    +    recycled: Vec<usize>,
     }
     
    -impl StackFrameAllocator {
    -    pub fn init(&mut self, l: PhysPageNum, r: PhysPageNum) {
    -        self.current = l.0;
    -        self.end = r.0;
    -        println!("last {} Physical Frames.", self.end - self.current);
    +impl StackFrameAllocator {
    +    pub fn init(&mut self, l: PhysPageNum, r: PhysPageNum) {
    +        self.current = l.0;
    +        self.end = r.0;
    +        println!("last {} Physical Frames.", self.end - self.current);
         }
     }
    -impl FrameAllocator for StackFrameAllocator {
    -    fn new() -> Self {
    -        Self {
    -            current: 0,
    -            end: 0,
    -            recycled: Vec::new(),
    +impl FrameAllocator for StackFrameAllocator {
    +    fn new() -> Self {
    +        Self {
    +            current: 0,
    +            end: 0,
    +            recycled: Vec::new(),
             }
         }
    -    fn alloc(&mut self) -> Option<PhysPageNum> {
    -        if let Some(ppn) = self.recycled.pop() {
    -            Some(ppn.into())
    -        } else if self.current == self.end {
    -            None
    -        } else {
    -            self.current += 1;
    -            Some((self.current - 1).into())
    +    fn alloc(&mut self) -> Option<PhysPageNum> {
    +        if let Some(ppn) = self.recycled.pop() {
    +            Some(ppn.into())
    +        } else if self.current == self.end {
    +            None
    +        } else {
    +            self.current += 1;
    +            Some((self.current - 1).into())
             }
         }
    -    fn dealloc(&mut self, ppn: PhysPageNum) {
    -        let ppn = ppn.0;
    -        // validity check
    -        if ppn >= self.current || self.recycled.iter().any(|&v| v == ppn) {
    -            panic!("Frame ppn={:#x} has not been allocated!", ppn);
    +    fn dealloc(&mut self, ppn: PhysPageNum) {
    +        let ppn = ppn.0;
    +        // validity check
    +        if ppn >= self.current || self.recycled.iter().any(|&v| v == ppn) {
    +            panic!("Frame ppn={:#x} has not been allocated!", ppn);
             }
    -        // recycle
    -        self.recycled.push(ppn);
    +        // recycle
    +        self.recycled.push(ppn);
         }
     }
     
    -type FrameAllocatorImpl = StackFrameAllocator;
    +type FrameAllocatorImpl = StackFrameAllocator;
     
    -lazy_static! {
    -    /// frame allocator instance through lazy_static!
    -    pub static ref FRAME_ALLOCATOR: UPSafeCell<FrameAllocatorImpl> =
    -        unsafe { UPSafeCell::new(FrameAllocatorImpl::new()) };
    +lazy_static! {
    +    /// frame allocator instance through lazy_static!
    +    pub static ref FRAME_ALLOCATOR: UPSafeCell<FrameAllocatorImpl> =
    +        unsafe { UPSafeCell::new(FrameAllocatorImpl::new()) };
     }
    -/// initiate the frame allocator using `ekernel` and `MEMORY_END`
    -pub fn init_frame_allocator() {
    -    extern "C" {
    -        fn ekernel();
    +/// initiate the frame allocator using `ekernel` and `MEMORY_END`
    +pub fn init_frame_allocator() {
    +    extern "C" {
    +        fn ekernel();
         }
    -    FRAME_ALLOCATOR.exclusive_access().init(
    -        PhysAddr::from(ekernel as usize).ceil(),
    -        PhysAddr::from(MEMORY_END).floor(),
    +    FRAME_ALLOCATOR.exclusive_access().init(
    +        PhysAddr::from(ekernel as usize).ceil(),
    +        PhysAddr::from(MEMORY_END).floor(),
         );
     }
    -/// allocate a frame
    -pub fn frame_alloc() -> Option<FrameTracker> {
    -    FRAME_ALLOCATOR
    -        .exclusive_access()
    -        .alloc()
    -        .map(FrameTracker::new)
    +/// allocate a frame
    +pub fn frame_alloc() -> Option<FrameTracker> {
    +    FRAME_ALLOCATOR
    +        .exclusive_access()
    +        .alloc()
    +        .map(FrameTracker::new)
     }
    -/// deallocate a frame
    -pub fn frame_dealloc(ppn: PhysPageNum) {
    -    FRAME_ALLOCATOR.exclusive_access().dealloc(ppn);
    +/// deallocate a frame
    +pub fn frame_dealloc(ppn: PhysPageNum) {
    +    FRAME_ALLOCATOR.exclusive_access().dealloc(ppn);
     }
     
    -#[allow(unused)]
    -/// a simple test for frame allocator
    -pub fn frame_allocator_test() {
    -    let mut v: Vec<FrameTracker> = Vec::new();
    -    for i in 0..5 {
    -        let frame = frame_alloc().unwrap();
    -        println!("{:?}", frame);
    -        v.push(frame);
    +#[allow(unused)]
    +/// a simple test for frame allocator
    +pub fn frame_allocator_test() {
    +    let mut v: Vec<FrameTracker> = Vec::new();
    +    for i in 0..5 {
    +        let frame = frame_alloc().unwrap();
    +        println!("{:?}", frame);
    +        v.push(frame);
         }
    -    v.clear();
    -    for i in 0..5 {
    -        let frame = frame_alloc().unwrap();
    -        println!("{:?}", frame);
    -        v.push(frame);
    +    v.clear();
    +    for i in 0..5 {
    +        let frame = frame_alloc().unwrap();
    +        println!("{:?}", frame);
    +        v.push(frame);
         }
    -    drop(v);
    +    drop(v);
         println!("frame_allocator_test passed!");
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/heap_allocator.rs.html b/ch6-dev/src/os/mm/heap_allocator.rs.html index bf02b012..50696648 100644 --- a/ch6-dev/src/os/mm/heap_allocator.rs.html +++ b/ch6-dev/src/os/mm/heap_allocator.rs.html @@ -1,104 +1,97 @@ -heap_allocator.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -
    //! The global allocator
    -use crate::config::KERNEL_HEAP_SIZE;
    -use buddy_system_allocator::LockedHeap;
    +heap_allocator.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +
    //! The global allocator
    +use crate::config::KERNEL_HEAP_SIZE;
    +use buddy_system_allocator::LockedHeap;
     
    -#[global_allocator]
    -/// heap allocator instance
    -static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty();
    +#[global_allocator]
    +/// heap allocator instance
    +static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty();
     
    -#[alloc_error_handler]
    -/// panic when heap allocation error occurs
    -pub fn handle_alloc_error(layout: core::alloc::Layout) -> ! {
    -    panic!("Heap allocation error, layout = {:?}", layout);
    +#[alloc_error_handler]
    +/// panic when heap allocation error occurs
    +pub fn handle_alloc_error(layout: core::alloc::Layout) -> ! {
    +    panic!("Heap allocation error, layout = {:?}", layout);
     }
    -/// heap space ([u8; KERNEL_HEAP_SIZE])
    -static mut HEAP_SPACE: [u8; KERNEL_HEAP_SIZE] = [0; KERNEL_HEAP_SIZE];
    -/// initiate heap allocator
    -pub fn init_heap() {
    -    unsafe {
    -        HEAP_ALLOCATOR
    -            .lock()
    -            .init(HEAP_SPACE.as_ptr() as usize, KERNEL_HEAP_SIZE);
    +/// heap space ([u8; KERNEL_HEAP_SIZE])
    +static mut HEAP_SPACE: [u8; KERNEL_HEAP_SIZE] = [0; KERNEL_HEAP_SIZE];
    +/// initiate heap allocator
    +pub fn init_heap() {
    +    unsafe {
    +        HEAP_ALLOCATOR
    +            .lock()
    +            .init(HEAP_SPACE.as_ptr() as usize, KERNEL_HEAP_SIZE);
         }
     }
     
    -#[allow(unused)]
    -pub fn heap_test() {
    -    use alloc::boxed::Box;
    -    use alloc::vec::Vec;
    -    extern "C" {
    -        fn sbss();
    -        fn ebss();
    +#[allow(unused)]
    +pub fn heap_test() {
    +    use alloc::boxed::Box;
    +    use alloc::vec::Vec;
    +    extern "C" {
    +        fn sbss();
    +        fn ebss();
         }
    -    let bss_range = sbss as usize..ebss as usize;
    -    let a = Box::new(5);
    -    assert_eq!(*a, 5);
    -    assert!(bss_range.contains(&(a.as_ref() as *const _ as usize)));
    -    drop(a);
    -    let mut v: Vec<usize> = Vec::new();
    -    for i in 0..500 {
    -        v.push(i);
    +    let bss_range = sbss as usize..ebss as usize;
    +    let a = Box::new(5);
    +    assert_eq!(*a, 5);
    +    assert!(bss_range.contains(&(a.as_ref() as *const _ as usize)));
    +    drop(a);
    +    let mut v: Vec<usize> = Vec::new();
    +    for i in 0..500 {
    +        v.push(i);
         }
    -    for (i, val) in v.iter().take(500).enumerate() {
    -        assert_eq!(*val, i);
    +    for (i, val) in v.iter().take(500).enumerate() {
    +        assert_eq!(*val, i);
         }
    -    assert!(bss_range.contains(&(v.as_ptr() as usize)));
    -    drop(v);
    +    assert!(bss_range.contains(&(v.as_ptr() as usize)));
    +    drop(v);
         println!("heap_test passed!");
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/memory_set.rs.html b/ch6-dev/src/os/mm/memory_set.rs.html index 9d273a07..353c3652 100644 --- a/ch6-dev/src/os/mm/memory_set.rs.html +++ b/ch6-dev/src/os/mm/memory_set.rs.html @@ -1,824 +1,817 @@ -memory_set.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -389
    -390
    -391
    -392
    -393
    -394
    -395
    -396
    -397
    -398
    -399
    -400
    -401
    -402
    -403
    -404
    -405
    -406
    -407
    -408
    -
    //! Implementation of [`MapArea`] and [`MemorySet`].
    -use super::{frame_alloc, FrameTracker};
    -use super::{PTEFlags, PageTable, PageTableEntry};
    -use super::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum};
    -use super::{StepByOne, VPNRange};
    -use crate::config::{MEMORY_END, MMIO, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT, USER_STACK_SIZE};
    -use crate::sync::UPSafeCell;
    -use alloc::collections::BTreeMap;
    -use alloc::sync::Arc;
    -use alloc::vec::Vec;
    -use core::arch::asm;
    -use lazy_static::*;
    -use riscv::register::satp;
    +memory_set.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +335
    +336
    +337
    +338
    +339
    +340
    +341
    +342
    +343
    +344
    +345
    +346
    +347
    +348
    +349
    +350
    +351
    +352
    +353
    +354
    +355
    +356
    +357
    +358
    +359
    +360
    +361
    +362
    +363
    +364
    +365
    +366
    +367
    +368
    +369
    +370
    +371
    +372
    +373
    +374
    +375
    +376
    +377
    +378
    +379
    +380
    +381
    +382
    +383
    +384
    +385
    +386
    +387
    +388
    +389
    +390
    +391
    +392
    +393
    +394
    +395
    +396
    +397
    +398
    +399
    +400
    +401
    +402
    +403
    +404
    +405
    +406
    +407
    +408
    +
    //! Implementation of [`MapArea`] and [`MemorySet`].
    +use super::{frame_alloc, FrameTracker};
    +use super::{PTEFlags, PageTable, PageTableEntry};
    +use super::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum};
    +use super::{StepByOne, VPNRange};
    +use crate::config::{MEMORY_END, MMIO, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT, USER_STACK_SIZE};
    +use crate::sync::UPSafeCell;
    +use alloc::collections::BTreeMap;
    +use alloc::sync::Arc;
    +use alloc::vec::Vec;
    +use core::arch::asm;
    +use lazy_static::*;
    +use riscv::register::satp;
     
    -extern "C" {
    -    fn stext();
    -    fn etext();
    -    fn srodata();
    -    fn erodata();
    -    fn sdata();
    -    fn edata();
    -    fn sbss_with_stack();
    -    fn ebss();
    -    fn ekernel();
    -    fn strampoline();
    +extern "C" {
    +    fn stext();
    +    fn etext();
    +    fn srodata();
    +    fn erodata();
    +    fn sdata();
    +    fn edata();
    +    fn sbss_with_stack();
    +    fn ebss();
    +    fn ekernel();
    +    fn strampoline();
     }
     
    -lazy_static! {
    -    /// a memory set instance through lazy_static! managing kernel space
    -    pub static ref KERNEL_SPACE: Arc<UPSafeCell<MemorySet>> =
    -        Arc::new(unsafe { UPSafeCell::new(MemorySet::new_kernel()) });
    +lazy_static! {
    +    /// a memory set instance through lazy_static! managing kernel space
    +    pub static ref KERNEL_SPACE: Arc<UPSafeCell<MemorySet>> =
    +        Arc::new(unsafe { UPSafeCell::new(MemorySet::new_kernel()) });
     }
    -///Get kernelspace root ppn
    -pub fn kernel_token() -> usize {
    -    KERNEL_SPACE.exclusive_access().token()
    +///Get kernelspace root ppn
    +pub fn kernel_token() -> usize {
    +    KERNEL_SPACE.exclusive_access().token()
     }
    -/// memory set structure, controls virtual-memory space
    -pub struct MemorySet {
    -    page_table: PageTable,
    -    areas: Vec<MapArea>,
    +/// memory set structure, controls virtual-memory space
    +pub struct MemorySet {
    +    page_table: PageTable,
    +    areas: Vec<MapArea>,
     }
     
    -impl MemorySet {
    -    ///Create an empty `MemorySet`
    -    pub fn new_bare() -> Self {
    -        Self {
    -            page_table: PageTable::new(),
    -            areas: Vec::new(),
    +impl MemorySet {
    +    ///Create an empty `MemorySet`
    +    pub fn new_bare() -> Self {
    +        Self {
    +            page_table: PageTable::new(),
    +            areas: Vec::new(),
             }
         }
    -    ///Get pagetable `root_ppn`
    -    pub fn token(&self) -> usize {
    -        self.page_table.token()
    +    ///Get pagetable `root_ppn`
    +    pub fn token(&self) -> usize {
    +        self.page_table.token()
         }
    -    /// Assume that no conflicts.
    -    pub fn insert_framed_area(
    -        &mut self,
    -        start_va: VirtAddr,
    -        end_va: VirtAddr,
    -        permission: MapPermission,
    +    /// Assume that no conflicts.
    +    pub fn insert_framed_area(
    +        &mut self,
    +        start_va: VirtAddr,
    +        end_va: VirtAddr,
    +        permission: MapPermission,
         ) {
    -        self.push(
    -            MapArea::new(start_va, end_va, MapType::Framed, permission),
    +        self.push(
    +            MapArea::new(start_va, end_va, MapType::Framed, permission),
                 None,
             );
         }
    -    ///Remove `MapArea` that starts with `start_vpn`
    -    pub fn remove_area_with_start_vpn(&mut self, start_vpn: VirtPageNum) {
    -        if let Some((idx, area)) = self
    -            .areas
    -            .iter_mut()
    -            .enumerate()
    -            .find(|(_, area)| area.vpn_range.get_start() == start_vpn)
    +    ///Remove `MapArea` that starts with `start_vpn`
    +    pub fn remove_area_with_start_vpn(&mut self, start_vpn: VirtPageNum) {
    +        if let Some((idx, area)) = self
    +            .areas
    +            .iter_mut()
    +            .enumerate()
    +            .find(|(_, area)| area.vpn_range.get_start() == start_vpn)
             {
    -            area.unmap(&mut self.page_table);
    -            self.areas.remove(idx);
    +            area.unmap(&mut self.page_table);
    +            self.areas.remove(idx);
             }
         }
    -    fn push(&mut self, mut map_area: MapArea, data: Option<&[u8]>) {
    -        map_area.map(&mut self.page_table);
    -        if let Some(data) = data {
    -            map_area.copy_data(&mut self.page_table, data);
    +    fn push(&mut self, mut map_area: MapArea, data: Option<&[u8]>) {
    +        map_area.map(&mut self.page_table);
    +        if let Some(data) = data {
    +            map_area.copy_data(&mut self.page_table, data);
             }
    -        self.areas.push(map_area);
    +        self.areas.push(map_area);
         }
    -    /// Mention that trampoline is not collected by areas.
    -    fn map_trampoline(&mut self) {
    -        self.page_table.map(
    -            VirtAddr::from(TRAMPOLINE).into(),
    -            PhysAddr::from(strampoline as usize).into(),
    -            PTEFlags::R | PTEFlags::X,
    +    /// Mention that trampoline is not collected by areas.
    +    fn map_trampoline(&mut self) {
    +        self.page_table.map(
    +            VirtAddr::from(TRAMPOLINE).into(),
    +            PhysAddr::from(strampoline as usize).into(),
    +            PTEFlags::R | PTEFlags::X,
             );
         }
    -    /// Without kernel stacks.
    -    pub fn new_kernel() -> Self {
    -        let mut memory_set = Self::new_bare();
    -        // map trampoline
    -        memory_set.map_trampoline();
    -        // map kernel sections
    -        println!(".text [{:#x}, {:#x})", stext as usize, etext as usize);
    -        println!(".rodata [{:#x}, {:#x})", srodata as usize, erodata as usize);
    -        println!(".data [{:#x}, {:#x})", sdata as usize, edata as usize);
    +    /// Without kernel stacks.
    +    pub fn new_kernel() -> Self {
    +        let mut memory_set = Self::new_bare();
    +        // map trampoline
    +        memory_set.map_trampoline();
    +        // map kernel sections
    +        println!(".text [{:#x}, {:#x})", stext as usize, etext as usize);
    +        println!(".rodata [{:#x}, {:#x})", srodata as usize, erodata as usize);
    +        println!(".data [{:#x}, {:#x})", sdata as usize, edata as usize);
             println!(
                 ".bss [{:#x}, {:#x})",
    -            sbss_with_stack as usize, ebss as usize
    +            sbss_with_stack as usize, ebss as usize
             );
             println!("mapping .text section");
    -        memory_set.push(
    -            MapArea::new(
    -                (stext as usize).into(),
    -                (etext as usize).into(),
    -                MapType::Identical,
    -                MapPermission::R | MapPermission::X,
    +        memory_set.push(
    +            MapArea::new(
    +                (stext as usize).into(),
    +                (etext as usize).into(),
    +                MapType::Identical,
    +                MapPermission::R | MapPermission::X,
                 ),
                 None,
             );
             println!("mapping .rodata section");
    -        memory_set.push(
    -            MapArea::new(
    -                (srodata as usize).into(),
    -                (erodata as usize).into(),
    -                MapType::Identical,
    -                MapPermission::R,
    +        memory_set.push(
    +            MapArea::new(
    +                (srodata as usize).into(),
    +                (erodata as usize).into(),
    +                MapType::Identical,
    +                MapPermission::R,
                 ),
                 None,
             );
             println!("mapping .data section");
    -        memory_set.push(
    -            MapArea::new(
    -                (sdata as usize).into(),
    -                (edata as usize).into(),
    -                MapType::Identical,
    -                MapPermission::R | MapPermission::W,
    +        memory_set.push(
    +            MapArea::new(
    +                (sdata as usize).into(),
    +                (edata as usize).into(),
    +                MapType::Identical,
    +                MapPermission::R | MapPermission::W,
                 ),
                 None,
             );
             println!("mapping .bss section");
    -        memory_set.push(
    -            MapArea::new(
    -                (sbss_with_stack as usize).into(),
    -                (ebss as usize).into(),
    -                MapType::Identical,
    -                MapPermission::R | MapPermission::W,
    +        memory_set.push(
    +            MapArea::new(
    +                (sbss_with_stack as usize).into(),
    +                (ebss as usize).into(),
    +                MapType::Identical,
    +                MapPermission::R | MapPermission::W,
                 ),
                 None,
             );
             println!("mapping physical memory");
    -        memory_set.push(
    -            MapArea::new(
    -                (ekernel as usize).into(),
    -                MEMORY_END.into(),
    -                MapType::Identical,
    -                MapPermission::R | MapPermission::W,
    +        memory_set.push(
    +            MapArea::new(
    +                (ekernel as usize).into(),
    +                MEMORY_END.into(),
    +                MapType::Identical,
    +                MapPermission::R | MapPermission::W,
                 ),
                 None,
             );
             println!("mapping memory-mapped registers");
    -        for pair in MMIO {
    -            memory_set.push(
    -                MapArea::new(
    -                    (*pair).0.into(),
    -                    ((*pair).0 + (*pair).1).into(),
    -                    MapType::Identical,
    -                    MapPermission::R | MapPermission::W,
    +        for pair in MMIO {
    +            memory_set.push(
    +                MapArea::new(
    +                    (*pair).0.into(),
    +                    ((*pair).0 + (*pair).1).into(),
    +                    MapType::Identical,
    +                    MapPermission::R | MapPermission::W,
                     ),
                     None,
                 );
             }
    -        memory_set
    +        memory_set
         }
    -    /// Include sections in elf and trampoline and TrapContext and user stack,
    -    /// also returns user_sp and entry point.
    -    pub fn from_elf(elf_data: &[u8]) -> (Self, usize, usize) {
    -        let mut memory_set = Self::new_bare();
    -        // map trampoline
    -        memory_set.map_trampoline();
    -        // map program headers of elf, with U flag
    -        let elf = xmas_elf::ElfFile::new(elf_data).unwrap();
    -        let elf_header = elf.header;
    -        let magic = elf_header.pt1.magic;
    -        assert_eq!(magic, [0x7f, 0x45, 0x4c, 0x46], "invalid elf!");
    -        let ph_count = elf_header.pt2.ph_count();
    -        let mut max_end_vpn = VirtPageNum(0);
    -        for i in 0..ph_count {
    -            let ph = elf.program_header(i).unwrap();
    -            if ph.get_type().unwrap() == xmas_elf::program::Type::Load {
    -                let start_va: VirtAddr = (ph.virtual_addr() as usize).into();
    -                let end_va: VirtAddr = ((ph.virtual_addr() + ph.mem_size()) as usize).into();
    -                let mut map_perm = MapPermission::U;
    -                let ph_flags = ph.flags();
    -                if ph_flags.is_read() {
    -                    map_perm |= MapPermission::R;
    +    /// Include sections in elf and trampoline and TrapContext and user stack,
    +    /// also returns user_sp and entry point.
    +    pub fn from_elf(elf_data: &[u8]) -> (Self, usize, usize) {
    +        let mut memory_set = Self::new_bare();
    +        // map trampoline
    +        memory_set.map_trampoline();
    +        // map program headers of elf, with U flag
    +        let elf = xmas_elf::ElfFile::new(elf_data).unwrap();
    +        let elf_header = elf.header;
    +        let magic = elf_header.pt1.magic;
    +        assert_eq!(magic, [0x7f, 0x45, 0x4c, 0x46], "invalid elf!");
    +        let ph_count = elf_header.pt2.ph_count();
    +        let mut max_end_vpn = VirtPageNum(0);
    +        for i in 0..ph_count {
    +            let ph = elf.program_header(i).unwrap();
    +            if ph.get_type().unwrap() == xmas_elf::program::Type::Load {
    +                let start_va: VirtAddr = (ph.virtual_addr() as usize).into();
    +                let end_va: VirtAddr = ((ph.virtual_addr() + ph.mem_size()) as usize).into();
    +                let mut map_perm = MapPermission::U;
    +                let ph_flags = ph.flags();
    +                if ph_flags.is_read() {
    +                    map_perm |= MapPermission::R;
                     }
    -                if ph_flags.is_write() {
    -                    map_perm |= MapPermission::W;
    +                if ph_flags.is_write() {
    +                    map_perm |= MapPermission::W;
                     }
    -                if ph_flags.is_execute() {
    -                    map_perm |= MapPermission::X;
    +                if ph_flags.is_execute() {
    +                    map_perm |= MapPermission::X;
                     }
    -                let map_area = MapArea::new(start_va, end_va, MapType::Framed, map_perm);
    -                max_end_vpn = map_area.vpn_range.get_end();
    -                memory_set.push(
    -                    map_area,
    -                    Some(&elf.input[ph.offset() as usize..(ph.offset() + ph.file_size()) as usize]),
    +                let map_area = MapArea::new(start_va, end_va, MapType::Framed, map_perm);
    +                max_end_vpn = map_area.vpn_range.get_end();
    +                memory_set.push(
    +                    map_area,
    +                    Some(&elf.input[ph.offset() as usize..(ph.offset() + ph.file_size()) as usize]),
                     );
                 }
             }
    -        // map user stack with U flags
    -        let max_end_va: VirtAddr = max_end_vpn.into();
    -        let mut user_stack_bottom: usize = max_end_va.into();
    -        // guard page
    -        user_stack_bottom += PAGE_SIZE;
    -        let user_stack_top = user_stack_bottom + USER_STACK_SIZE;
    -        memory_set.push(
    -            MapArea::new(
    -                user_stack_bottom.into(),
    -                user_stack_top.into(),
    -                MapType::Framed,
    -                MapPermission::R | MapPermission::W | MapPermission::U,
    +        // map user stack with U flags
    +        let max_end_va: VirtAddr = max_end_vpn.into();
    +        let mut user_stack_bottom: usize = max_end_va.into();
    +        // guard page
    +        user_stack_bottom += PAGE_SIZE;
    +        let user_stack_top = user_stack_bottom + USER_STACK_SIZE;
    +        memory_set.push(
    +            MapArea::new(
    +                user_stack_bottom.into(),
    +                user_stack_top.into(),
    +                MapType::Framed,
    +                MapPermission::R | MapPermission::W | MapPermission::U,
                 ),
                 None,
             );
    -        // map TrapContext
    -        memory_set.push(
    -            MapArea::new(
    -                TRAP_CONTEXT.into(),
    -                TRAMPOLINE.into(),
    -                MapType::Framed,
    -                MapPermission::R | MapPermission::W,
    +        // map TrapContext
    +        memory_set.push(
    +            MapArea::new(
    +                TRAP_CONTEXT.into(),
    +                TRAMPOLINE.into(),
    +                MapType::Framed,
    +                MapPermission::R | MapPermission::W,
                 ),
                 None,
             );
             (
    -            memory_set,
    -            user_stack_top,
    -            elf.header.pt2.entry_point() as usize,
    +            memory_set,
    +            user_stack_top,
    +            elf.header.pt2.entry_point() as usize,
             )
         }
    -    ///Clone a same `MemorySet`
    -    pub fn from_existed_user(user_space: &MemorySet) -> MemorySet {
    -        let mut memory_set = Self::new_bare();
    -        // map trampoline
    -        memory_set.map_trampoline();
    -        // copy data sections/trap_context/user_stack
    -        for area in user_space.areas.iter() {
    -            let new_area = MapArea::from_another(area);
    -            memory_set.push(new_area, None);
    -            // copy data from another space
    -            for vpn in area.vpn_range {
    -                let src_ppn = user_space.translate(vpn).unwrap().ppn();
    -                let dst_ppn = memory_set.translate(vpn).unwrap().ppn();
    -                dst_ppn
    -                    .get_bytes_array()
    -                    .copy_from_slice(src_ppn.get_bytes_array());
    +    ///Clone a same `MemorySet`
    +    pub fn from_existed_user(user_space: &MemorySet) -> MemorySet {
    +        let mut memory_set = Self::new_bare();
    +        // map trampoline
    +        memory_set.map_trampoline();
    +        // copy data sections/trap_context/user_stack
    +        for area in user_space.areas.iter() {
    +            let new_area = MapArea::from_another(area);
    +            memory_set.push(new_area, None);
    +            // copy data from another space
    +            for vpn in area.vpn_range {
    +                let src_ppn = user_space.translate(vpn).unwrap().ppn();
    +                let dst_ppn = memory_set.translate(vpn).unwrap().ppn();
    +                dst_ppn
    +                    .get_bytes_array()
    +                    .copy_from_slice(src_ppn.get_bytes_array());
                 }
             }
    -        memory_set
    +        memory_set
         }
    -    ///Refresh TLB with `sfence.vma`
    -    pub fn activate(&self) {
    -        let satp = self.page_table.token();
    -        unsafe {
    -            satp::write(satp);
    +    ///Refresh TLB with `sfence.vma`
    +    pub fn activate(&self) {
    +        let satp = self.page_table.token();
    +        unsafe {
    +            satp::write(satp);
                 asm!("sfence.vma");
             }
         }
    -    ///Translate throuth pagetable
    -    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry> {
    -        self.page_table.translate(vpn)
    +    ///Translate throuth pagetable
    +    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry> {
    +        self.page_table.translate(vpn)
         }
    -    ///Remove all `MapArea`
    -    pub fn recycle_data_pages(&mut self) {
    -        //*self = Self::new_bare();
    -        self.areas.clear();
    +    ///Remove all `MapArea`
    +    pub fn recycle_data_pages(&mut self) {
    +        //*self = Self::new_bare();
    +        self.areas.clear();
         }
     }
    -/// map area structure, controls a contiguous piece of virtual memory
    -pub struct MapArea {
    -    vpn_range: VPNRange,
    -    data_frames: BTreeMap<VirtPageNum, FrameTracker>,
    -    map_type: MapType,
    -    map_perm: MapPermission,
    +/// map area structure, controls a contiguous piece of virtual memory
    +pub struct MapArea {
    +    vpn_range: VPNRange,
    +    data_frames: BTreeMap<VirtPageNum, FrameTracker>,
    +    map_type: MapType,
    +    map_perm: MapPermission,
     }
     
    -impl MapArea {
    -    pub fn new(
    -        start_va: VirtAddr,
    -        end_va: VirtAddr,
    -        map_type: MapType,
    -        map_perm: MapPermission,
    -    ) -> Self {
    -        let start_vpn: VirtPageNum = start_va.floor();
    -        let end_vpn: VirtPageNum = end_va.ceil();
    -        Self {
    -            vpn_range: VPNRange::new(start_vpn, end_vpn),
    -            data_frames: BTreeMap::new(),
    -            map_type,
    -            map_perm,
    +impl MapArea {
    +    pub fn new(
    +        start_va: VirtAddr,
    +        end_va: VirtAddr,
    +        map_type: MapType,
    +        map_perm: MapPermission,
    +    ) -> Self {
    +        let start_vpn: VirtPageNum = start_va.floor();
    +        let end_vpn: VirtPageNum = end_va.ceil();
    +        Self {
    +            vpn_range: VPNRange::new(start_vpn, end_vpn),
    +            data_frames: BTreeMap::new(),
    +            map_type,
    +            map_perm,
             }
         }
    -    pub fn from_another(another: &MapArea) -> Self {
    -        Self {
    -            vpn_range: VPNRange::new(another.vpn_range.get_start(), another.vpn_range.get_end()),
    -            data_frames: BTreeMap::new(),
    -            map_type: another.map_type,
    -            map_perm: another.map_perm,
    +    pub fn from_another(another: &MapArea) -> Self {
    +        Self {
    +            vpn_range: VPNRange::new(another.vpn_range.get_start(), another.vpn_range.get_end()),
    +            data_frames: BTreeMap::new(),
    +            map_type: another.map_type,
    +            map_perm: another.map_perm,
             }
         }
    -    pub fn map_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum) {
    -        let ppn: PhysPageNum;
    -        match self.map_type {
    -            MapType::Identical => {
    -                ppn = PhysPageNum(vpn.0);
    +    pub fn map_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum) {
    +        let ppn: PhysPageNum;
    +        match self.map_type {
    +            MapType::Identical => {
    +                ppn = PhysPageNum(vpn.0);
                 }
    -            MapType::Framed => {
    -                let frame = frame_alloc().unwrap();
    -                ppn = frame.ppn;
    -                self.data_frames.insert(vpn, frame);
    +            MapType::Framed => {
    +                let frame = frame_alloc().unwrap();
    +                ppn = frame.ppn;
    +                self.data_frames.insert(vpn, frame);
                 }
             }
    -        let pte_flags = PTEFlags::from_bits(self.map_perm.bits).unwrap();
    -        page_table.map(vpn, ppn, pte_flags);
    +        let pte_flags = PTEFlags::from_bits(self.map_perm.bits).unwrap();
    +        page_table.map(vpn, ppn, pte_flags);
         }
    -    pub fn unmap_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum) {
    -        if self.map_type == MapType::Framed {
    -            self.data_frames.remove(&vpn);
    +    pub fn unmap_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum) {
    +        if self.map_type == MapType::Framed {
    +            self.data_frames.remove(&vpn);
             }
    -        page_table.unmap(vpn);
    +        page_table.unmap(vpn);
         }
    -    pub fn map(&mut self, page_table: &mut PageTable) {
    -        for vpn in self.vpn_range {
    -            self.map_one(page_table, vpn);
    +    pub fn map(&mut self, page_table: &mut PageTable) {
    +        for vpn in self.vpn_range {
    +            self.map_one(page_table, vpn);
             }
         }
    -    pub fn unmap(&mut self, page_table: &mut PageTable) {
    -        for vpn in self.vpn_range {
    -            self.unmap_one(page_table, vpn);
    +    pub fn unmap(&mut self, page_table: &mut PageTable) {
    +        for vpn in self.vpn_range {
    +            self.unmap_one(page_table, vpn);
             }
         }
    -    /// data: start-aligned but maybe with shorter length
    -    /// assume that all frames were cleared before
    -    pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8]) {
    -        assert_eq!(self.map_type, MapType::Framed);
    -        let mut start: usize = 0;
    -        let mut current_vpn = self.vpn_range.get_start();
    -        let len = data.len();
    -        loop {
    -            let src = &data[start..len.min(start + PAGE_SIZE)];
    -            let dst = &mut page_table
    -                .translate(current_vpn)
    -                .unwrap()
    -                .ppn()
    -                .get_bytes_array()[..src.len()];
    -            dst.copy_from_slice(src);
    -            start += PAGE_SIZE;
    -            if start >= len {
    +    /// data: start-aligned but maybe with shorter length
    +    /// assume that all frames were cleared before
    +    pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8]) {
    +        assert_eq!(self.map_type, MapType::Framed);
    +        let mut start: usize = 0;
    +        let mut current_vpn = self.vpn_range.get_start();
    +        let len = data.len();
    +        loop {
    +            let src = &data[start..len.min(start + PAGE_SIZE)];
    +            let dst = &mut page_table
    +                .translate(current_vpn)
    +                .unwrap()
    +                .ppn()
    +                .get_bytes_array()[..src.len()];
    +            dst.copy_from_slice(src);
    +            start += PAGE_SIZE;
    +            if start >= len {
                     break;
                 }
    -            current_vpn.step();
    +            current_vpn.step();
             }
         }
     }
     
    -#[derive(Copy, Clone, PartialEq, Debug)]
    -/// map type for memory set: identical or framed
    -pub enum MapType {
    -    Identical,
    -    Framed,
    +#[derive(Copy, Clone, PartialEq, Debug)]
    +/// map type for memory set: identical or framed
    +pub enum MapType {
    +    Identical,
    +    Framed,
     }
     
    -bitflags! {
    -    /// map permission corresponding to that in pte: `R W X U`
    -    pub struct MapPermission: u8 {
    -        ///Readable
    -        const R = 1 << 1;
    -        ///Writable
    -        const W = 1 << 2;
    -        ///Excutable
    -        const X = 1 << 3;
    -        ///Accessible in U mode
    -        const U = 1 << 4;
    +bitflags! {
    +    /// map permission corresponding to that in pte: `R W X U`
    +    pub struct MapPermission: u8 {
    +        ///Readable
    +        const R = 1 << 1;
    +        ///Writable
    +        const W = 1 << 2;
    +        ///Excutable
    +        const X = 1 << 3;
    +        ///Accessible in U mode
    +        const U = 1 << 4;
         }
     }
     
    -#[allow(unused)]
    -///Check PageTable running correctly
    -pub fn remap_test() {
    -    let mut kernel_space = KERNEL_SPACE.exclusive_access();
    -    let mid_text: VirtAddr = ((stext as usize + etext as usize) / 2).into();
    -    let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into();
    -    let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into();
    -    assert!(!kernel_space
    -        .page_table
    -        .translate(mid_text.floor())
    -        .unwrap()
    -        .writable(),);
    -    assert!(!kernel_space
    -        .page_table
    -        .translate(mid_rodata.floor())
    -        .unwrap()
    -        .writable(),);
    -    assert!(!kernel_space
    -        .page_table
    -        .translate(mid_data.floor())
    -        .unwrap()
    -        .executable(),);
    +#[allow(unused)]
    +///Check PageTable running correctly
    +pub fn remap_test() {
    +    let mut kernel_space = KERNEL_SPACE.exclusive_access();
    +    let mid_text: VirtAddr = ((stext as usize + etext as usize) / 2).into();
    +    let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into();
    +    let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into();
    +    assert!(!kernel_space
    +        .page_table
    +        .translate(mid_text.floor())
    +        .unwrap()
    +        .writable(),);
    +    assert!(!kernel_space
    +        .page_table
    +        .translate(mid_rodata.floor())
    +        .unwrap()
    +        .writable(),);
    +    assert!(!kernel_space
    +        .page_table
    +        .translate(mid_data.floor())
    +        .unwrap()
    +        .executable(),);
         println!("remap_test passed!");
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/mod.rs.html b/ch6-dev/src/os/mm/mod.rs.html index 830fc941..aea3529f 100644 --- a/ch6-dev/src/os/mm/mod.rs.html +++ b/ch6-dev/src/os/mm/mod.rs.html @@ -1,66 +1,59 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -
    //! Memory management implementation
    -//!
    -//! 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.
    -mod address;
    -mod frame_allocator;
    -mod heap_allocator;
    -mod memory_set;
    -mod page_table;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +
    //! Memory management implementation
    +//!
    +//! 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.
    +mod address;
    +mod frame_allocator;
    +mod heap_allocator;
    +mod memory_set;
    +mod page_table;
     
    -use address::VPNRange;
    -pub use address::{PhysAddr, PhysPageNum, StepByOne, VirtAddr, VirtPageNum};
    -pub use frame_allocator::{frame_alloc, frame_dealloc, FrameTracker};
    -pub use memory_set::remap_test;
    -pub use memory_set::{kernel_token, MapPermission, MemorySet, KERNEL_SPACE};
    -use page_table::PTEFlags;
    -pub use page_table::{
    -    translated_byte_buffer, translated_ref, translated_refmut, translated_str, PageTable,
    -    PageTableEntry, UserBuffer, UserBufferIterator,
    +use address::VPNRange;
    +pub use address::{PhysAddr, PhysPageNum, StepByOne, VirtAddr, VirtPageNum};
    +pub use frame_allocator::{frame_alloc, frame_dealloc, FrameTracker};
    +pub use memory_set::remap_test;
    +pub use memory_set::{kernel_token, MapPermission, MemorySet, KERNEL_SPACE};
    +use page_table::PTEFlags;
    +pub use page_table::{
    +    translated_byte_buffer, translated_ref, translated_refmut, translated_str, PageTable,
    +    PageTableEntry, UserBuffer, UserBufferIterator,
     };
    -/// initiate heap allocator, frame allocator and kernel space
    -pub fn init() {
    -    heap_allocator::init_heap();
    -    frame_allocator::init_frame_allocator();
    -    KERNEL_SPACE.exclusive_access().activate();
    +/// initiate heap allocator, frame allocator and kernel space
    +pub fn init() {
    +    heap_allocator::init_heap();
    +    frame_allocator::init_frame_allocator();
    +    KERNEL_SPACE.exclusive_access().activate();
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/mm/page_table.rs.html b/ch6-dev/src/os/mm/page_table.rs.html index ce64c2e6..77c1ab7f 100644 --- a/ch6-dev/src/os/mm/page_table.rs.html +++ b/ch6-dev/src/os/mm/page_table.rs.html @@ -1,554 +1,547 @@ -page_table.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -
    //! Implementation of [`PageTableEntry`] and [`PageTable`].
    -use super::{frame_alloc, FrameTracker, PhysAddr, PhysPageNum, StepByOne, VirtAddr, VirtPageNum};
    -use alloc::string::String;
    -use alloc::vec;
    -use alloc::vec::Vec;
    -use bitflags::*;
    +page_table.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +
    //! Implementation of [`PageTableEntry`] and [`PageTable`].
    +use super::{frame_alloc, FrameTracker, PhysAddr, PhysPageNum, StepByOne, VirtAddr, VirtPageNum};
    +use alloc::string::String;
    +use alloc::vec;
    +use alloc::vec::Vec;
    +use bitflags::*;
     
    -bitflags! {
    -    pub struct PTEFlags: u8 {
    -        const V = 1 << 0;
    -        const R = 1 << 1;
    -        const W = 1 << 2;
    -        const X = 1 << 3;
    -        const U = 1 << 4;
    -        const G = 1 << 5;
    -        const A = 1 << 6;
    -        const D = 1 << 7;
    +bitflags! {
    +    pub struct PTEFlags: u8 {
    +        const V = 1 << 0;
    +        const R = 1 << 1;
    +        const W = 1 << 2;
    +        const X = 1 << 3;
    +        const U = 1 << 4;
    +        const G = 1 << 5;
    +        const A = 1 << 6;
    +        const D = 1 << 7;
         }
     }
     
    -#[derive(Copy, Clone)]
    -#[repr(C)]
    -/// page table entry structure
    -pub struct PageTableEntry {
    -    ///PTE
    -    pub bits: usize,
    +#[derive(Copy, Clone)]
    +#[repr(C)]
    +/// page table entry structure
    +pub struct PageTableEntry {
    +    ///PTE
    +    pub bits: usize,
     }
     
    -impl PageTableEntry {
    -    ///Create a PTE from ppn
    -    pub fn new(ppn: PhysPageNum, flags: PTEFlags) -> Self {
    -        PageTableEntry {
    -            bits: ppn.0 << 10 | flags.bits as usize,
    +impl PageTableEntry {
    +    ///Create a PTE from ppn
    +    pub fn new(ppn: PhysPageNum, flags: PTEFlags) -> Self {
    +        PageTableEntry {
    +            bits: ppn.0 << 10 | flags.bits as usize,
             }
         }
    -    ///Return an empty PTE
    -    pub fn empty() -> Self {
    -        PageTableEntry { bits: 0 }
    +    ///Return an empty PTE
    +    pub fn empty() -> Self {
    +        PageTableEntry { bits: 0 }
         }
    -    ///Return 44bit ppn
    -    pub fn ppn(&self) -> PhysPageNum {
    -        (self.bits >> 10 & ((1usize << 44) - 1)).into()
    +    ///Return 44bit ppn
    +    pub fn ppn(&self) -> PhysPageNum {
    +        (self.bits >> 10 & ((1usize << 44) - 1)).into()
         }
    -    ///Return 10bit flag
    -    pub fn flags(&self) -> PTEFlags {
    -        PTEFlags::from_bits(self.bits as u8).unwrap()
    +    ///Return 10bit flag
    +    pub fn flags(&self) -> PTEFlags {
    +        PTEFlags::from_bits(self.bits as u8).unwrap()
         }
    -    ///Check PTE valid
    -    pub fn is_valid(&self) -> bool {
    -        (self.flags() & PTEFlags::V) != PTEFlags::empty()
    +    ///Check PTE valid
    +    pub fn is_valid(&self) -> bool {
    +        (self.flags() & PTEFlags::V) != PTEFlags::empty()
         }
    -    ///Check PTE readable
    -    pub fn readable(&self) -> bool {
    -        (self.flags() & PTEFlags::R) != PTEFlags::empty()
    +    ///Check PTE readable
    +    pub fn readable(&self) -> bool {
    +        (self.flags() & PTEFlags::R) != PTEFlags::empty()
         }
    -    ///Check PTE writable
    -    pub fn writable(&self) -> bool {
    -        (self.flags() & PTEFlags::W) != PTEFlags::empty()
    +    ///Check PTE writable
    +    pub fn writable(&self) -> bool {
    +        (self.flags() & PTEFlags::W) != PTEFlags::empty()
         }
    -    ///Check PTE executable
    -    pub fn executable(&self) -> bool {
    -        (self.flags() & PTEFlags::X) != PTEFlags::empty()
    +    ///Check PTE executable
    +    pub fn executable(&self) -> bool {
    +        (self.flags() & PTEFlags::X) != PTEFlags::empty()
         }
     }
    -///Record root ppn and has the same lifetime as 1 and 2 level `PageTableEntry`
    -pub struct PageTable {
    -    root_ppn: PhysPageNum,
    -    frames: Vec<FrameTracker>,
    +///Record root ppn and has the same lifetime as 1 and 2 level `PageTableEntry`
    +pub struct PageTable {
    +    root_ppn: PhysPageNum,
    +    frames: Vec<FrameTracker>,
     }
     
    -/// Assume that it won't oom when creating/mapping.
    -impl PageTable {
    -    /// Create an empty `PageTable`
    -    pub fn new() -> Self {
    -        let frame = frame_alloc().unwrap();
    -        PageTable {
    -            root_ppn: frame.ppn,
    -            frames: vec![frame],
    +/// Assume that it won't oom when creating/mapping.
    +impl PageTable {
    +    /// Create an empty `PageTable`
    +    pub fn new() -> Self {
    +        let frame = frame_alloc().unwrap();
    +        PageTable {
    +            root_ppn: frame.ppn,
    +            frames: vec![frame],
             }
         }
    -    /// Temporarily used to get arguments from user space.
    -    pub fn from_token(satp: usize) -> Self {
    -        Self {
    -            root_ppn: PhysPageNum::from(satp & ((1usize << 44) - 1)),
    -            frames: Vec::new(),
    +    /// Temporarily used to get arguments from user space.
    +    pub fn from_token(satp: usize) -> Self {
    +        Self {
    +            root_ppn: PhysPageNum::from(satp & ((1usize << 44) - 1)),
    +            frames: Vec::new(),
             }
         }
    -    /// Find phsical address by virtual address, create a frame if not exist
    -    fn find_pte_create(&mut self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
    -        let idxs = vpn.indexes();
    -        let mut ppn = self.root_ppn;
    -        let mut result: Option<&mut PageTableEntry> = None;
    -        for (i, idx) in idxs.iter().enumerate() {
    -            let pte = &mut ppn.get_pte_array()[*idx];
    -            if i == 2 {
    -                result = Some(pte);
    +    /// Find phsical address by virtual address, create a frame if not exist
    +    fn find_pte_create(&mut self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
    +        let idxs = vpn.indexes();
    +        let mut ppn = self.root_ppn;
    +        let mut result: Option<&mut PageTableEntry> = None;
    +        for (i, idx) in idxs.iter().enumerate() {
    +            let pte = &mut ppn.get_pte_array()[*idx];
    +            if i == 2 {
    +                result = Some(pte);
                     break;
                 }
    -            if !pte.is_valid() {
    -                let frame = frame_alloc().unwrap();
    -                *pte = PageTableEntry::new(frame.ppn, PTEFlags::V);
    -                self.frames.push(frame);
    +            if !pte.is_valid() {
    +                let frame = frame_alloc().unwrap();
    +                *pte = PageTableEntry::new(frame.ppn, PTEFlags::V);
    +                self.frames.push(frame);
                 }
    -            ppn = pte.ppn();
    +            ppn = pte.ppn();
             }
    -        result
    +        result
         }
    -    /// Find phsical address by virtual address
    -    fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
    -        let idxs = vpn.indexes();
    -        let mut ppn = self.root_ppn;
    -        let mut result: Option<&mut PageTableEntry> = None;
    -        for (i, idx) in idxs.iter().enumerate() {
    -            let pte = &mut ppn.get_pte_array()[*idx];
    -            if i == 2 {
    -                result = Some(pte);
    +    /// Find phsical address by virtual address
    +    fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
    +        let idxs = vpn.indexes();
    +        let mut ppn = self.root_ppn;
    +        let mut result: Option<&mut PageTableEntry> = None;
    +        for (i, idx) in idxs.iter().enumerate() {
    +            let pte = &mut ppn.get_pte_array()[*idx];
    +            if i == 2 {
    +                result = Some(pte);
                     break;
                 }
    -            if !pte.is_valid() {
    -                return None;
    +            if !pte.is_valid() {
    +                return None;
                 }
    -            ppn = pte.ppn();
    +            ppn = pte.ppn();
             }
    -        result
    +        result
         }
    -    #[allow(unused)]
    -    /// Create a mapping form `vpn` to `ppn`
    -    pub fn map(&mut self, vpn: VirtPageNum, ppn: PhysPageNum, flags: PTEFlags) {
    -        let pte = self.find_pte_create(vpn).unwrap();
    -        assert!(!pte.is_valid(), "vpn {:?} is mapped before mapping", vpn);
    -        *pte = PageTableEntry::new(ppn, flags | PTEFlags::V);
    +    #[allow(unused)]
    +    /// Create a mapping form `vpn` to `ppn`
    +    pub fn map(&mut self, vpn: VirtPageNum, ppn: PhysPageNum, flags: PTEFlags) {
    +        let pte = self.find_pte_create(vpn).unwrap();
    +        assert!(!pte.is_valid(), "vpn {:?} is mapped before mapping", vpn);
    +        *pte = PageTableEntry::new(ppn, flags | PTEFlags::V);
         }
    -    #[allow(unused)]
    -    /// Delete a mapping form `vpn`
    -    pub fn unmap(&mut self, vpn: VirtPageNum) {
    -        let pte = self.find_pte(vpn).unwrap();
    -        assert!(pte.is_valid(), "vpn {:?} is invalid before unmapping", vpn);
    -        *pte = PageTableEntry::empty();
    +    #[allow(unused)]
    +    /// Delete a mapping form `vpn`
    +    pub fn unmap(&mut self, vpn: VirtPageNum) {
    +        let pte = self.find_pte(vpn).unwrap();
    +        assert!(pte.is_valid(), "vpn {:?} is invalid before unmapping", vpn);
    +        *pte = PageTableEntry::empty();
         }
    -    /// Translate `VirtPageNum` to `PageTableEntry`
    -    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry> {
    -        self.find_pte(vpn).map(|pte| *pte)
    +    /// Translate `VirtPageNum` to `PageTableEntry`
    +    pub fn translate(&self, vpn: VirtPageNum) -> Option<PageTableEntry> {
    +        self.find_pte(vpn).map(|pte| *pte)
         }
    -    /// Translate `VirtAddr` to `PhysAddr`
    -    pub fn translate_va(&self, va: VirtAddr) -> Option<PhysAddr> {
    -        self.find_pte(va.clone().floor()).map(|pte| {
    -            let aligned_pa: PhysAddr = pte.ppn().into();
    -            let offset = va.page_offset();
    -            let aligned_pa_usize: usize = aligned_pa.into();
    -            (aligned_pa_usize + offset).into()
    +    /// Translate `VirtAddr` to `PhysAddr`
    +    pub fn translate_va(&self, va: VirtAddr) -> Option<PhysAddr> {
    +        self.find_pte(va.clone().floor()).map(|pte| {
    +            let aligned_pa: PhysAddr = pte.ppn().into();
    +            let offset = va.page_offset();
    +            let aligned_pa_usize: usize = aligned_pa.into();
    +            (aligned_pa_usize + offset).into()
             })
         }
    -    /// Get root ppn
    -    pub fn token(&self) -> usize {
    -        8usize << 60 | self.root_ppn.0
    -    }
    +    /// Get root ppn
    +    pub fn token(&self) -> usize {
    +        8usize << 60 | self.root_ppn.0
    +    }
     }
    -/// Translate a pointer to a mutable u8 Vec through page table
    -pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static mut [u8]> {
    -    let page_table = PageTable::from_token(token);
    -    let mut start = ptr as usize;
    -    let end = start + len;
    -    let mut v = Vec::new();
    -    while start < end {
    -        let start_va = VirtAddr::from(start);
    -        let mut vpn = start_va.floor();
    -        let ppn = page_table.translate(vpn).unwrap().ppn();
    -        vpn.step();
    -        let mut end_va: VirtAddr = vpn.into();
    -        end_va = end_va.min(VirtAddr::from(end));
    -        if end_va.page_offset() == 0 {
    -            v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..]);
    -        } else {
    -            v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]);
    +/// Translate a pointer to a mutable u8 Vec through page table
    +pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static mut [u8]> {
    +    let page_table = PageTable::from_token(token);
    +    let mut start = ptr as usize;
    +    let end = start + len;
    +    let mut v = Vec::new();
    +    while start < end {
    +        let start_va = VirtAddr::from(start);
    +        let mut vpn = start_va.floor();
    +        let ppn = page_table.translate(vpn).unwrap().ppn();
    +        vpn.step();
    +        let mut end_va: VirtAddr = vpn.into();
    +        end_va = end_va.min(VirtAddr::from(end));
    +        if end_va.page_offset() == 0 {
    +            v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..]);
    +        } else {
    +            v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]);
             }
    -        start = end_va.into();
    +        start = end_va.into();
         }
    -    v
    +    v
     }
     
    -/// Translate a pointer to a mutable u8 Vec end with `\0` through page table to a `String`
    -pub fn translated_str(token: usize, ptr: *const u8) -> String {
    -    let page_table = PageTable::from_token(token);
    -    let mut string = String::new();
    -    let mut va = ptr as usize;
    -    loop {
    -        let ch: u8 = *(page_table
    -            .translate_va(VirtAddr::from(va))
    -            .unwrap()
    -            .get_mut());
    -        if ch == 0 {
    +/// Translate a pointer to a mutable u8 Vec end with `\0` through page table to a `String`
    +pub fn translated_str(token: usize, ptr: *const u8) -> String {
    +    let page_table = PageTable::from_token(token);
    +    let mut string = String::new();
    +    let mut va = ptr as usize;
    +    loop {
    +        let ch: u8 = *(page_table
    +            .translate_va(VirtAddr::from(va))
    +            .unwrap()
    +            .get_mut());
    +        if ch == 0 {
                 break;
             }
    -        string.push(ch as char);
    -        va += 1;
    +        string.push(ch as char);
    +        va += 1;
         }
    -    string
    +    string
     }
     
    -#[allow(unused)]
    -///Translate a generic through page table and return a reference
    -pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T {
    -    let page_table = PageTable::from_token(token);
    -    page_table
    -        .translate_va(VirtAddr::from(ptr as usize))
    -        .unwrap()
    -        .get_ref()
    +#[allow(unused)]
    +///Translate a generic through page table and return a reference
    +pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T {
    +    let page_table = PageTable::from_token(token);
    +    page_table
    +        .translate_va(VirtAddr::from(ptr as usize))
    +        .unwrap()
    +        .get_ref()
     }
    -///Translate a generic through page table and return a mutable reference
    -pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T {
    -    let page_table = PageTable::from_token(token);
    -    let va = ptr as usize;
    -    page_table
    -        .translate_va(VirtAddr::from(va))
    -        .unwrap()
    -        .get_mut()
    +///Translate a generic through page table and return a mutable reference
    +pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T {
    +    let page_table = PageTable::from_token(token);
    +    let va = ptr as usize;
    +    page_table
    +        .translate_va(VirtAddr::from(va))
    +        .unwrap()
    +        .get_mut()
     }
    -///Array of u8 slice that user communicate with os
    -pub struct UserBuffer {
    -    ///U8 vec
    -    pub buffers: Vec<&'static mut [u8]>,
    +///Array of u8 slice that user communicate with os
    +pub struct UserBuffer {
    +    ///U8 vec
    +    pub buffers: Vec<&'static mut [u8]>,
     }
     
    -impl UserBuffer {
    -    ///Create a `UserBuffer` by parameter
    -    pub fn new(buffers: Vec<&'static mut [u8]>) -> Self {
    -        Self { buffers }
    +impl UserBuffer {
    +    ///Create a `UserBuffer` by parameter
    +    pub fn new(buffers: Vec<&'static mut [u8]>) -> Self {
    +        Self { buffers }
         }
    -    ///Length of `UserBuffer`
    -    pub fn len(&self) -> usize {
    -        let mut total: usize = 0;
    -        for b in self.buffers.iter() {
    -            total += b.len();
    +    ///Length of `UserBuffer`
    +    pub fn len(&self) -> usize {
    +        let mut total: usize = 0;
    +        for b in self.buffers.iter() {
    +            total += b.len();
             }
    -        total
    +        total
         }
     }
     
    -impl IntoIterator for UserBuffer {
    -    type Item = *mut u8;
    -    type IntoIter = UserBufferIterator;
    -    fn into_iter(self) -> Self::IntoIter {
    -        UserBufferIterator {
    -            buffers: self.buffers,
    -            current_buffer: 0,
    -            current_idx: 0,
    +impl IntoIterator for UserBuffer {
    +    type Item = *mut u8;
    +    type IntoIter = UserBufferIterator;
    +    fn into_iter(self) -> Self::IntoIter {
    +        UserBufferIterator {
    +            buffers: self.buffers,
    +            current_buffer: 0,
    +            current_idx: 0,
             }
         }
     }
    -/// Iterator of `UserBuffer`
    -pub struct UserBufferIterator {
    -    buffers: Vec<&'static mut [u8]>,
    -    current_buffer: usize,
    -    current_idx: usize,
    +/// Iterator of `UserBuffer`
    +pub struct UserBufferIterator {
    +    buffers: Vec<&'static mut [u8]>,
    +    current_buffer: usize,
    +    current_idx: usize,
     }
     
    -impl Iterator for UserBufferIterator {
    -    type Item = *mut u8;
    -    fn next(&mut self) -> Option<Self::Item> {
    -        if self.current_buffer >= self.buffers.len() {
    -            None
    -        } else {
    -            let r = &mut self.buffers[self.current_buffer][self.current_idx] as *mut _;
    -            if self.current_idx + 1 == self.buffers[self.current_buffer].len() {
    -                self.current_idx = 0;
    -                self.current_buffer += 1;
    -            } else {
    -                self.current_idx += 1;
    +impl Iterator for UserBufferIterator {
    +    type Item = *mut u8;
    +    fn next(&mut self) -> Option<Self::Item> {
    +        if self.current_buffer >= self.buffers.len() {
    +            None
    +        } else {
    +            let r = &mut self.buffers[self.current_buffer][self.current_idx] as *mut _;
    +            if self.current_idx + 1 == self.buffers[self.current_buffer].len() {
    +                self.current_idx = 0;
    +                self.current_buffer += 1;
    +            } else {
    +                self.current_idx += 1;
                 }
    -            Some(r)
    +            Some(r)
             }
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/sbi.rs.html b/ch6-dev/src/os/sbi.rs.html index bd95b413..ca251be2 100644 --- a/ch6-dev/src/os/sbi.rs.html +++ b/ch6-dev/src/os/sbi.rs.html @@ -1,102 +1,61 @@ -sbi.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -
    //! SBI call wrappers
    -#![allow(unused)]
    +sbi.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +
    //! SBI call wrappers
    +#![allow(unused)]
     
    -use core::arch::asm;
    +/// use sbi call to putchar in console (qemu uart handler)
    +pub fn console_putchar(c: usize) {
    +    #[allow(deprecated)]
    +    sbi_rt::legacy::console_putchar(c);
    +}
     
    -const SBI_SET_TIMER: usize = 0;
    -const SBI_CONSOLE_PUTCHAR: usize = 1;
    -const SBI_CONSOLE_GETCHAR: usize = 2;
    -const SBI_CLEAR_IPI: usize = 3;
    -const SBI_SEND_IPI: usize = 4;
    -const SBI_REMOTE_FENCE_I: usize = 5;
    -const SBI_REMOTE_SFENCE_VMA: usize = 6;
    -const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7;
    -const SBI_SHUTDOWN: usize = 8;
    -/// general sbi call
    -#[inline(always)]
    -fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
    -    let mut ret;
    -    unsafe {
    -        asm!(
    -            "li x16, 0",
    -            "ecall",
    -            inlateout("x10") arg0 => ret,
    -            in("x11") arg1,
    -            in("x12") arg2,
    -            in("x17") which,
    -        );
    +/// use sbi call to getchar from console (qemu uart handler)
    +pub fn console_getchar() -> usize {
    +    #[allow(deprecated)]
    +    sbi_rt::legacy::console_getchar()
    +}
    +
    +/// use sbi call to set timer
    +pub fn set_timer(timer: usize) {
    +    sbi_rt::set_timer(timer as _);
    +}
    +
    +/// use sbi call to shutdown the kernel
    +pub fn shutdown(failure: bool) -> ! {
    +    use sbi_rt::{system_reset, NoReason, Shutdown, SystemFailure};
    +    if !failure {
    +        system_reset(Shutdown, NoReason);
    +    } else {
    +        system_reset(Shutdown, SystemFailure);
         }
    -    ret
    +    unreachable!()
     }
    -/// use sbi call to set timer
    -pub fn set_timer(timer: usize) {
    -    sbi_call(SBI_SET_TIMER, timer, 0, 0);
    -}
    -/// use sbi call to putchar in console (qemu uart handler)
    -pub fn console_putchar(c: usize) {
    -    sbi_call(SBI_CONSOLE_PUTCHAR, c, 0, 0);
    -}
    -/// use sbi call to getchar from console (qemu uart handler)
    -pub fn console_getchar() -> usize {
    -    sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0)
    -}
    -/// use sbi call to shutdown the kernel
    -pub fn shutdown() -> ! {
    -    sbi_call(SBI_SHUTDOWN, 0, 0, 0);
    -    panic!("It should shutdown!");
    -}
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/sync/mod.rs.html b/ch6-dev/src/os/sync/mod.rs.html index ddac4110..65cc1f4a 100644 --- a/ch6-dev/src/os/sync/mod.rs.html +++ b/ch6-dev/src/os/sync/mod.rs.html @@ -1,16 +1,9 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -
    //! Synchronization and interior mutability primitives
    -mod up;
    +mod.rs - source
    1
    +2
    +3
    +4
    +
    //! Synchronization and interior mutability primitives
    +mod up;
     
    -pub use up::UPSafeCell;
    -
    -
    - \ No newline at end of file +pub use up::{RawExclusiveLock, UPSafeCell}; + \ No newline at end of file diff --git a/ch6-dev/src/os/sync/up.rs.html b/ch6-dev/src/os/sync/up.rs.html index ebbd89d3..60f88e72 100644 --- a/ch6-dev/src/os/sync/up.rs.html +++ b/ch6-dev/src/os/sync/up.rs.html @@ -1,68 +1,103 @@ -up.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -
    //! Uniprocessor interior mutability primitives
    -use core::cell::{RefCell, RefMut};
    +up.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +
    //! Uniprocessor interior mutability primitives
    +use core::cell::{RefCell, RefMut};
    +use core::sync::atomic::{AtomicBool, Ordering};
     
    -/// Wrap a static data structure inside it so that we are
    -/// able to access it without any `unsafe`.
    -///
    -/// We should only use it in uniprocessor.
    -///
    -/// In order to get mutable reference of inner data, call
    -/// `exclusive_access`.
    -pub struct UPSafeCell<T> {
    -    /// inner data
    -    inner: RefCell<T>,
    +/// Wrap a static data structure inside it so that we are
    +/// able to access it without any `unsafe`.
    +///
    +/// We should only use it in uniprocessor.
    +///
    +/// In order to get mutable reference of inner data, call
    +/// `exclusive_access`.
    +pub struct UPSafeCell<T> {
    +    /// inner data
    +    inner: RefCell<T>,
     }
     
    -unsafe impl<T> Sync for UPSafeCell<T> {}
    +unsafe impl<T> Sync for UPSafeCell<T> {}
     
    -impl<T> UPSafeCell<T> {
    -    /// User is responsible to guarantee that inner struct is only used in
    -    /// uniprocessor.
    -    pub unsafe fn new(value: T) -> Self {
    -        Self {
    -            inner: RefCell::new(value),
    +impl<T> UPSafeCell<T> {
    +    /// User is responsible to guarantee that inner struct is only used in
    +    /// uniprocessor.
    +    pub unsafe fn new(value: T) -> Self {
    +        Self {
    +            inner: RefCell::new(value),
             }
         }
    -    /// Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.
    -    pub fn exclusive_access(&self) -> RefMut<'_, T> {
    -        self.inner.borrow_mut()
    +    /// Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed.
    +    pub fn exclusive_access(&self) -> RefMut<'_, T> {
    +        self.inner.borrow_mut()
         }
     }
    -
    -
    - \ No newline at end of file + +/// The sync primitive used by easy-fs. +pub struct RawExclusiveLock(AtomicBool); + +unsafe impl lock_api::RawMutex for RawExclusiveLock { + const INIT: Self = Self(AtomicBool::new(false)); + type GuardMarker = lock_api::GuardNoSend; + fn lock(&self) { + assert_eq!(self.0.load(Ordering::Relaxed), false); + self.0.store(true, Ordering::Relaxed); + } + fn try_lock(&self) -> bool { + self.0 + .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed) + .is_ok() + } + unsafe fn unlock(&self) { + self.0.store(false, Ordering::Relaxed); + } +} + \ No newline at end of file diff --git a/ch6-dev/src/os/syscall/fs.rs.html b/ch6-dev/src/os/syscall/fs.rs.html index 086ed642..25c62d8c 100644 --- a/ch6-dev/src/os/syscall/fs.rs.html +++ b/ch6-dev/src/os/syscall/fs.rs.html @@ -1,150 +1,143 @@ -fs.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -
    //! File and filesystem-related syscalls
    -use crate::fs::{open_file, OpenFlags};
    -use crate::mm::{translated_byte_buffer, translated_str, UserBuffer};
    -use crate::task::{current_task, current_user_token};
    +fs.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +
    //! File and filesystem-related syscalls
    +use crate::fs::{open_file, OpenFlags};
    +use crate::mm::{translated_byte_buffer, translated_str, UserBuffer};
    +use crate::task::{current_task, current_user_token};
     
    -pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize {
    -    let token = current_user_token();
    -    let task = current_task().unwrap();
    -    let inner = task.inner_exclusive_access();
    -    if fd >= inner.fd_table.len() {
    -        return -1;
    +pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize {
    +    let token = current_user_token();
    +    let task = current_task().unwrap();
    +    let inner = task.inner_exclusive_access();
    +    if fd >= inner.fd_table.len() {
    +        return -1;
         }
    -    if let Some(file) = &inner.fd_table[fd] {
    -        if !file.writable() {
    -            return -1;
    +    if let Some(file) = &inner.fd_table[fd] {
    +        if !file.writable() {
    +            return -1;
             }
    -        let file = file.clone();
    -        // release current task TCB manually to avoid multi-borrow
    -        drop(inner);
    -        file.write(UserBuffer::new(translated_byte_buffer(token, buf, len))) as isize
    -    } else {
    -        -1
    -    }
    +        let file = file.clone();
    +        // release current task TCB manually to avoid multi-borrow
    +        drop(inner);
    +        file.write(UserBuffer::new(translated_byte_buffer(token, buf, len))) as isize
    +    } else {
    +        -1
    +    }
     }
     
    -pub fn sys_read(fd: usize, buf: *const u8, len: usize) -> isize {
    -    let token = current_user_token();
    -    let task = current_task().unwrap();
    -    let inner = task.inner_exclusive_access();
    -    if fd >= inner.fd_table.len() {
    -        return -1;
    +pub fn sys_read(fd: usize, buf: *const u8, len: usize) -> isize {
    +    let token = current_user_token();
    +    let task = current_task().unwrap();
    +    let inner = task.inner_exclusive_access();
    +    if fd >= inner.fd_table.len() {
    +        return -1;
         }
    -    if let Some(file) = &inner.fd_table[fd] {
    -        let file = file.clone();
    -        if !file.readable() {
    -            return -1;
    +    if let Some(file) = &inner.fd_table[fd] {
    +        let file = file.clone();
    +        if !file.readable() {
    +            return -1;
             }
    -        // release current task TCB manually to avoid multi-borrow
    -        drop(inner);
    -        file.read(UserBuffer::new(translated_byte_buffer(token, buf, len))) as isize
    -    } else {
    -        -1
    -    }
    +        // release current task TCB manually to avoid multi-borrow
    +        drop(inner);
    +        file.read(UserBuffer::new(translated_byte_buffer(token, buf, len))) as isize
    +    } else {
    +        -1
    +    }
     }
     
    -pub fn sys_open(path: *const u8, flags: u32) -> isize {
    -    let task = current_task().unwrap();
    -    let token = current_user_token();
    -    let path = translated_str(token, path);
    -    if let Some(inode) = open_file(path.as_str(), OpenFlags::from_bits(flags).unwrap()) {
    -        let mut inner = task.inner_exclusive_access();
    -        let fd = inner.alloc_fd();
    -        inner.fd_table[fd] = Some(inode);
    -        fd as isize
    -    } else {
    -        -1
    -    }
    +pub fn sys_open(path: *const u8, flags: u32) -> isize {
    +    let task = current_task().unwrap();
    +    let token = current_user_token();
    +    let path = translated_str(token, path);
    +    if let Some(inode) = open_file(path.as_str(), OpenFlags::from_bits(flags).unwrap()) {
    +        let mut inner = task.inner_exclusive_access();
    +        let fd = inner.alloc_fd();
    +        inner.fd_table[fd] = Some(inode);
    +        fd as isize
    +    } else {
    +        -1
    +    }
     }
     
    -pub fn sys_close(fd: usize) -> isize {
    -    let task = current_task().unwrap();
    -    let mut inner = task.inner_exclusive_access();
    -    if fd >= inner.fd_table.len() {
    -        return -1;
    +pub fn sys_close(fd: usize) -> isize {
    +    let task = current_task().unwrap();
    +    let mut inner = task.inner_exclusive_access();
    +    if fd >= inner.fd_table.len() {
    +        return -1;
         }
    -    if inner.fd_table[fd].is_none() {
    -        return -1;
    +    if inner.fd_table[fd].is_none() {
    +        return -1;
         }
    -    inner.fd_table[fd].take();
    -    0
    -}
    -
    -
    - \ No newline at end of file + inner.fd_table[fd].take(); + 0 +} + \ No newline at end of file diff --git a/ch6-dev/src/os/syscall/mod.rs.html b/ch6-dev/src/os/syscall/mod.rs.html index f64ae49a..ea62a67b 100644 --- a/ch6-dev/src/os/syscall/mod.rs.html +++ b/ch6-dev/src/os/syscall/mod.rs.html @@ -1,98 +1,91 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -
    //! Implementation of syscalls
    -//!
    -//! 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
    -//! U-mode' exception, which is handled as one of the cases in
    -//! [`crate::trap::trap_handler`].
    -//!
    -//! For clarity, each single syscall is implemented as its own function, named
    -//! `sys_` then the name of the syscall. You can find functions like this in
    -//! submodules, and you should also implement syscalls this way.
    -const SYSCALL_OPEN: usize = 56;
    -const SYSCALL_CLOSE: usize = 57;
    -const SYSCALL_READ: usize = 63;
    -const SYSCALL_WRITE: usize = 64;
    -const SYSCALL_EXIT: usize = 93;
    -const SYSCALL_YIELD: usize = 124;
    -const SYSCALL_GET_TIME: usize = 169;
    -const SYSCALL_GETPID: usize = 172;
    -const SYSCALL_FORK: usize = 220;
    -const SYSCALL_EXEC: usize = 221;
    -const SYSCALL_WAITPID: usize = 260;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +
    //! Implementation of syscalls
    +//!
    +//! 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
    +//! U-mode' exception, which is handled as one of the cases in
    +//! [`crate::trap::trap_handler`].
    +//!
    +//! For clarity, each single syscall is implemented as its own function, named
    +//! `sys_` then the name of the syscall. You can find functions like this in
    +//! submodules, and you should also implement syscalls this way.
    +const SYSCALL_OPEN: usize = 56;
    +const SYSCALL_CLOSE: usize = 57;
    +const SYSCALL_READ: usize = 63;
    +const SYSCALL_WRITE: usize = 64;
    +const SYSCALL_EXIT: usize = 93;
    +const SYSCALL_YIELD: usize = 124;
    +const SYSCALL_GET_TIME: usize = 169;
    +const SYSCALL_GETPID: usize = 172;
    +const SYSCALL_FORK: usize = 220;
    +const SYSCALL_EXEC: usize = 221;
    +const SYSCALL_WAITPID: usize = 260;
     
    -mod fs;
    -mod process;
    +mod fs;
    +mod process;
     
    -use fs::*;
    -use process::*;
    -/// handle syscall exception with `syscall_id` and other arguments
    -pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
    -    match syscall_id {
    -        SYSCALL_OPEN => sys_open(args[0] as *const u8, args[1] as u32),
    -        SYSCALL_CLOSE => sys_close(args[0]),
    -        SYSCALL_READ => sys_read(args[0], args[1] as *const u8, args[2]),
    -        SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]),
    -        SYSCALL_EXIT => sys_exit(args[0] as i32),
    -        SYSCALL_YIELD => sys_yield(),
    -        SYSCALL_GET_TIME => sys_get_time(),
    -        SYSCALL_GETPID => sys_getpid(),
    -        SYSCALL_FORK => sys_fork(),
    -        SYSCALL_EXEC => sys_exec(args[0] as *const u8),
    -        SYSCALL_WAITPID => sys_waitpid(args[0] as isize, args[1] as *mut i32),
    -        _ => panic!("Unsupported syscall_id: {}", syscall_id),
    +use fs::*;
    +use process::*;
    +/// handle syscall exception with `syscall_id` and other arguments
    +pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
    +    match syscall_id {
    +        SYSCALL_OPEN => sys_open(args[0] as *const u8, args[1] as u32),
    +        SYSCALL_CLOSE => sys_close(args[0]),
    +        SYSCALL_READ => sys_read(args[0], args[1] as *const u8, args[2]),
    +        SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]),
    +        SYSCALL_EXIT => sys_exit(args[0] as i32),
    +        SYSCALL_YIELD => sys_yield(),
    +        SYSCALL_GET_TIME => sys_get_time(),
    +        SYSCALL_GETPID => sys_getpid(),
    +        SYSCALL_FORK => sys_fork(),
    +        SYSCALL_EXEC => sys_exec(args[0] as *const u8),
    +        SYSCALL_WAITPID => sys_waitpid(args[0] as isize, args[1] as *mut i32),
    +        _ => panic!("Unsupported syscall_id: {}", syscall_id),
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/syscall/process.rs.html b/ch6-dev/src/os/syscall/process.rs.html index 1fe6caf7..5b6abc9d 100644 --- a/ch6-dev/src/os/syscall/process.rs.html +++ b/ch6-dev/src/os/syscall/process.rs.html @@ -1,188 +1,181 @@ -process.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -
    use crate::fs::{open_file, OpenFlags};
    -use crate::mm::{translated_refmut, translated_str};
    -use crate::task::{
    -    add_task, current_task, current_user_token, exit_current_and_run_next,
    -    suspend_current_and_run_next,
    +process.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +
    use crate::fs::{open_file, OpenFlags};
    +use crate::mm::{translated_refmut, translated_str};
    +use crate::task::{
    +    add_task, current_task, current_user_token, exit_current_and_run_next,
    +    suspend_current_and_run_next,
     };
    -use crate::timer::get_time_ms;
    -use alloc::sync::Arc;
    +use crate::timer::get_time_ms;
    +use alloc::sync::Arc;
     
    -pub fn sys_exit(exit_code: i32) -> ! {
    -    exit_current_and_run_next(exit_code);
    +pub fn sys_exit(exit_code: i32) -> ! {
    +    exit_current_and_run_next(exit_code);
         panic!("Unreachable in sys_exit!");
     }
     
    -pub fn sys_yield() -> isize {
    -    suspend_current_and_run_next();
    -    0
    +pub fn sys_yield() -> isize {
    +    suspend_current_and_run_next();
    +    0
    +}
    +
    +pub fn sys_get_time() -> isize {
    +    get_time_ms() as isize
     }
     
    -pub fn sys_get_time() -> isize {
    -    get_time_ms() as isize
    +pub fn sys_getpid() -> isize {
    +    current_task().unwrap().pid.0 as isize
     }
     
    -pub fn sys_getpid() -> isize {
    -    current_task().unwrap().pid.0 as isize
    +pub fn sys_fork() -> isize {
    +    let current_task = current_task().unwrap();
    +    let new_task = current_task.fork();
    +    let new_pid = new_task.pid.0;
    +    // modify trap context of new_task, because it returns immediately after switching
    +    let trap_cx = new_task.inner_exclusive_access().get_trap_cx();
    +    // we do not have to move to next instruction since we have done it before
    +    // for child process, fork returns 0
    +    trap_cx.x[10] = 0;
    +    // add new task to scheduler
    +    add_task(new_task);
    +    new_pid as isize
     }
     
    -pub fn sys_fork() -> isize {
    -    let current_task = current_task().unwrap();
    -    let new_task = current_task.fork();
    -    let new_pid = new_task.pid.0;
    -    // modify trap context of new_task, because it returns immediately after switching
    -    let trap_cx = new_task.inner_exclusive_access().get_trap_cx();
    -    // we do not have to move to next instruction since we have done it before
    -    // for child process, fork returns 0
    -    trap_cx.x[10] = 0;
    -    // add new task to scheduler
    -    add_task(new_task);
    -    new_pid as isize
    +pub fn sys_exec(path: *const u8) -> isize {
    +    let token = current_user_token();
    +    let path = translated_str(token, path);
    +    if let Some(app_inode) = open_file(path.as_str(), OpenFlags::RDONLY) {
    +        let all_data = app_inode.read_all();
    +        let task = current_task().unwrap();
    +        task.exec(all_data.as_slice());
    +        0
    +    } else {
    +        -1
    +    }
     }
     
    -pub fn sys_exec(path: *const u8) -> isize {
    -    let token = current_user_token();
    -    let path = translated_str(token, path);
    -    if let Some(app_inode) = open_file(path.as_str(), OpenFlags::RDONLY) {
    -        let all_data = app_inode.read_all();
    -        let task = current_task().unwrap();
    -        task.exec(all_data.as_slice());
    -        0
    -    } else {
    -        -1
    -    }
    -}
    +/// If there is not a child process whose pid is same as given, return -1.
    +/// Else if there is a child process but it is still running, return -2.
    +pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize {
    +    let task = current_task().unwrap();
    +    // find a child process
     
    -/// If there is not a child process whose pid is same as given, return -1.
    -/// Else if there is a child process but it is still running, return -2.
    -pub fn sys_waitpid(pid: isize, exit_code_ptr: *mut i32) -> isize {
    -    let task = current_task().unwrap();
    -    // find a child process
    -
    -    // ---- access current PCB exclusively
    -    let mut inner = task.inner_exclusive_access();
    -    if !inner
    -        .children
    -        .iter()
    -        .any(|p| pid == -1 || pid as usize == p.getpid())
    +    // ---- access current PCB exclusively
    +    let mut inner = task.inner_exclusive_access();
    +    if !inner
    +        .children
    +        .iter()
    +        .any(|p| pid == -1 || pid as usize == p.getpid())
         {
    -        return -1;
    -        // ---- release current PCB
    -    }
    -    let pair = inner.children.iter().enumerate().find(|(_, p)| {
    -        // ++++ temporarily access child PCB exclusively
    -        p.inner_exclusive_access().is_zombie() && (pid == -1 || pid as usize == p.getpid())
    -        // ++++ release child PCB
    -    });
    -    if let Some((idx, _)) = pair {
    -        let child = inner.children.remove(idx);
    -        // confirm that child will be deallocated after being removed from children list
    -        assert_eq!(Arc::strong_count(&child), 1);
    -        let found_pid = child.getpid();
    -        // ++++ temporarily access child PCB exclusively
    -        let exit_code = child.inner_exclusive_access().exit_code;
    -        // ++++ release child PCB
    -        *translated_refmut(inner.memory_set.token(), exit_code_ptr) = exit_code;
    -        found_pid as isize
    -    } else {
    -        -2
    -    }
    -    // ---- release current PCB automatically
    -}
    -
    -
    - \ No newline at end of file + return -1; + // ---- release current PCB + } + let pair = inner.children.iter().enumerate().find(|(_, p)| { + // ++++ temporarily access child PCB exclusively + p.inner_exclusive_access().is_zombie() && (pid == -1 || pid as usize == p.getpid()) + // ++++ release child PCB + }); + if let Some((idx, _)) = pair { + let child = inner.children.remove(idx); + // confirm that child will be deallocated after being removed from children list + assert_eq!(Arc::strong_count(&child), 1); + let found_pid = child.getpid(); + // ++++ temporarily access child PCB exclusively + let exit_code = child.inner_exclusive_access().exit_code; + // ++++ release child PCB + *translated_refmut(inner.memory_set.token(), exit_code_ptr) = exit_code; + found_pid as isize + } else { + -2 + } + // ---- release current PCB automatically +} + \ No newline at end of file diff --git a/ch6-dev/src/os/task/context.rs.html b/ch6-dev/src/os/task/context.rs.html index 74f63852..f6f78874 100644 --- a/ch6-dev/src/os/task/context.rs.html +++ b/ch6-dev/src/os/task/context.rs.html @@ -1,72 +1,65 @@ -context.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -
    //! Implementation of [`TaskContext`]
    -use crate::trap::trap_return;
    +context.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +
    //! Implementation of [`TaskContext`]
    +use crate::trap::trap_return;
     
    -#[repr(C)]
    -/// task context structure containing some registers
    -pub struct TaskContext {
    -    /// return address ( e.g. __restore ) of __switch ASM function
    -    ra: usize,
    -    /// kernel stack pointer of app
    -    sp: usize,
    -    /// s0-11 register, callee saved
    -    s: [usize; 12],
    +#[repr(C)]
    +/// task context structure containing some registers
    +pub struct TaskContext {
    +    /// return address ( e.g. __restore ) of __switch ASM function
    +    ra: usize,
    +    /// kernel stack pointer of app
    +    sp: usize,
    +    /// s0-11 register, callee saved
    +    s: [usize; 12],
     }
     
    -impl TaskContext {
    -    /// init task context
    -    pub fn zero_init() -> Self {
    -        Self {
    -            ra: 0,
    -            sp: 0,
    -            s: [0; 12],
    +impl TaskContext {
    +    /// init task context
    +    pub fn zero_init() -> Self {
    +        Self {
    +            ra: 0,
    +            sp: 0,
    +            s: [0; 12],
             }
         }
    -    /// set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}
    -    pub fn goto_trap_return(kstack_ptr: usize) -> Self {
    -        Self {
    -            ra: trap_return as usize,
    -            sp: kstack_ptr,
    -            s: [0; 12],
    +    /// set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12}
    +    pub fn goto_trap_return(kstack_ptr: usize) -> Self {
    +        Self {
    +            ra: trap_return as usize,
    +            sp: kstack_ptr,
    +            s: [0; 12],
             }
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/manager.rs.html b/ch6-dev/src/os/task/manager.rs.html index 7b725e41..47b41f43 100644 --- a/ch6-dev/src/os/task/manager.rs.html +++ b/ch6-dev/src/os/task/manager.rs.html @@ -1,90 +1,83 @@ -manager.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -
    //!Implementation of [`TaskManager`]
    -use super::TaskControlBlock;
    -use crate::sync::UPSafeCell;
    -use alloc::collections::VecDeque;
    -use alloc::sync::Arc;
    -use lazy_static::*;
    -///A array of `TaskControlBlock` that is thread-safe
    -pub struct TaskManager {
    -    ready_queue: VecDeque<Arc<TaskControlBlock>>,
    +manager.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +
    //!Implementation of [`TaskManager`]
    +use super::TaskControlBlock;
    +use crate::sync::UPSafeCell;
    +use alloc::collections::VecDeque;
    +use alloc::sync::Arc;
    +use lazy_static::*;
    +///A array of `TaskControlBlock` that is thread-safe
    +pub struct TaskManager {
    +    ready_queue: VecDeque<Arc<TaskControlBlock>>,
     }
     
    -/// A simple FIFO scheduler.
    -impl TaskManager {
    -    ///Creat an empty TaskManager
    -    pub fn new() -> Self {
    -        Self {
    -            ready_queue: VecDeque::new(),
    +/// A simple FIFO scheduler.
    +impl TaskManager {
    +    ///Creat an empty TaskManager
    +    pub fn new() -> Self {
    +        Self {
    +            ready_queue: VecDeque::new(),
             }
         }
    -    ///Add a task to `TaskManager`
    -    pub fn add(&mut self, task: Arc<TaskControlBlock>) {
    -        self.ready_queue.push_back(task);
    +    ///Add a task to `TaskManager`
    +    pub fn add(&mut self, task: Arc<TaskControlBlock>) {
    +        self.ready_queue.push_back(task);
         }
    -    ///Remove the first task and return it,or `None` if `TaskManager` is empty
    -    pub fn fetch(&mut self) -> Option<Arc<TaskControlBlock>> {
    -        self.ready_queue.pop_front()
    +    ///Remove the first task and return it,or `None` if `TaskManager` is empty
    +    pub fn fetch(&mut self) -> Option<Arc<TaskControlBlock>> {
    +        self.ready_queue.pop_front()
         }
     }
     
    -lazy_static! {
    -    pub static ref TASK_MANAGER: UPSafeCell<TaskManager> =
    -        unsafe { UPSafeCell::new(TaskManager::new()) };
    +lazy_static! {
    +    pub static ref TASK_MANAGER: UPSafeCell<TaskManager> =
    +        unsafe { UPSafeCell::new(TaskManager::new()) };
     }
    -///Interface offered to add task
    -pub fn add_task(task: Arc<TaskControlBlock>) {
    -    TASK_MANAGER.exclusive_access().add(task);
    +///Interface offered to add task
    +pub fn add_task(task: Arc<TaskControlBlock>) {
    +    TASK_MANAGER.exclusive_access().add(task);
     }
    -///Interface offered to pop the first task
    -pub fn fetch_task() -> Option<Arc<TaskControlBlock>> {
    -    TASK_MANAGER.exclusive_access().fetch()
    +///Interface offered to pop the first task
    +pub fn fetch_task() -> Option<Arc<TaskControlBlock>> {
    +    TASK_MANAGER.exclusive_access().fetch()
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/mod.rs.html b/ch6-dev/src/os/task/mod.rs.html index 99701463..7830ef34 100644 --- a/ch6-dev/src/os/task/mod.rs.html +++ b/ch6-dev/src/os/task/mod.rs.html @@ -1,264 +1,249 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -
    //! Task management implementation
    -//!
    -//! Everything about task management, like starting and switching tasks is
    -//! implemented here.
    -//!
    -//! A single global instance of [`TaskManager`] called `TASK_MANAGER` controls
    -//! all the tasks in the whole operating system.
    -//!
    -//! A single global instance of [`Processor`] called `PROCESSOR` monitors running
    -//! task(s) for each core.
    -//!
    -//! A single global instance of [`PidAllocator`] called `PID_ALLOCATOR` allocates
    -//! pid for user apps.
    -//!
    -//! Be careful when you see `__switch` ASM function in `switch.S`. Control flow around this function
    -//! might not be what you expect.
    -mod context;
    -mod manager;
    -mod pid;
    -mod processor;
    -mod switch;
    -#[allow(clippy::module_inception)]
    -#[allow(rustdoc::private_intra_doc_links)]
    -mod task;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +
    //! Task management implementation
    +//!
    +//! Everything about task management, like starting and switching tasks is
    +//! implemented here.
    +//!
    +//! A single global instance of [`TaskManager`] called `TASK_MANAGER` controls
    +//! all the tasks in the whole operating system.
    +//!
    +//! A single global instance of [`Processor`] called `PROCESSOR` monitors running
    +//! task(s) for each core.
    +//!
    +//! A single global instance of [`PidAllocator`] called `PID_ALLOCATOR` allocates
    +//! pid for user apps.
    +//!
    +//! Be careful when you see `__switch` ASM function in `switch.S`. Control flow around this function
    +//! might not be what you expect.
    +mod context;
    +mod manager;
    +mod pid;
    +mod processor;
    +mod switch;
    +#[allow(clippy::module_inception)]
    +#[allow(rustdoc::private_intra_doc_links)]
    +mod task;
     
    -use crate::fs::{open_file, OpenFlags};
    -use alloc::sync::Arc;
    -pub use context::TaskContext;
    -use lazy_static::*;
    -pub use manager::{fetch_task, TaskManager};
    -use switch::__switch;
    -use task::{TaskControlBlock, TaskStatus};
    +use crate::fs::{open_file, OpenFlags};
    +use crate::sbi::shutdown;
    +use alloc::sync::Arc;
    +pub use context::TaskContext;
    +use lazy_static::*;
    +pub use manager::{fetch_task, TaskManager};
    +use switch::__switch;
    +use task::{TaskControlBlock, TaskStatus};
     
    -pub use manager::add_task;
    -pub use pid::{pid_alloc, KernelStack, PidAllocator, PidHandle};
    -pub use processor::{
    -    current_task, current_trap_cx, current_user_token, run_tasks, schedule, take_current_task,
    -    Processor,
    +pub use manager::add_task;
    +pub use pid::{pid_alloc, KernelStack, PidAllocator, PidHandle};
    +pub use processor::{
    +    current_task, current_trap_cx, current_user_token, run_tasks, schedule, take_current_task,
    +    Processor,
     };
    -/// Suspend the current 'Running' task and run the next task in task list.
    -pub fn suspend_current_and_run_next() {
    -    // There must be an application running.
    -    let task = take_current_task().unwrap();
    +/// Suspend the current 'Running' task and run the next task in task list.
    +pub fn suspend_current_and_run_next() {
    +    // There must be an application running.
    +    let task = take_current_task().unwrap();
     
    -    // ---- access current TCB exclusively
    -    let mut task_inner = task.inner_exclusive_access();
    -    let task_cx_ptr = &mut task_inner.task_cx as *mut TaskContext;
    -    // Change status to Ready
    -    task_inner.task_status = TaskStatus::Ready;
    -    drop(task_inner);
    -    // ---- release current PCB
    +    // ---- access current TCB exclusively
    +    let mut task_inner = task.inner_exclusive_access();
    +    let task_cx_ptr = &mut task_inner.task_cx as *mut TaskContext;
    +    // Change status to Ready
    +    task_inner.task_status = TaskStatus::Ready;
    +    drop(task_inner);
    +    // ---- release current PCB
     
    -    // push back to ready queue.
    -    add_task(task);
    -    // jump to scheduling cycle
    -    schedule(task_cx_ptr);
    +    // push back to ready queue.
    +    add_task(task);
    +    // jump to scheduling cycle
    +    schedule(task_cx_ptr);
     }
     
    -/// pid of usertests app in make run TEST=1
    -pub const IDLE_PID: usize = 0;
    +/// pid of usertests app in make run TEST=1
    +pub const IDLE_PID: usize = 0;
     
    -#[cfg(feature = "board_qemu")]
    -use crate::board::QEMUExit;
    +/// Exit the current 'Running' task and run the next task in task list.
    +pub fn exit_current_and_run_next(exit_code: i32) {
    +    // take from Processor
    +    let task = take_current_task().unwrap();
     
    -/// Exit the current 'Running' task and run the next task in task list.
    -pub fn exit_current_and_run_next(exit_code: i32) {
    -    // take from Processor
    -    let task = take_current_task().unwrap();
    -
    -    #[cfg(feature = "board_qemu")]
    -    let pid = task.getpid();
    -    #[cfg(feature = "board_qemu")]
    -    if pid == IDLE_PID {
    +    let pid = task.getpid();
    +    if pid == IDLE_PID {
             println!(
                 "[kernel] Idle process exit with exit_code {} ...",
    -            exit_code
    +            exit_code
             );
    -        if exit_code != 0 {
    -            //crate::sbi::shutdown(255); //255 == -1 for err hint
    -            crate::board::QEMU_EXIT_HANDLE.exit_failure();
    -        } else {
    -            //crate::sbi::shutdown(0); //0 for success hint
    -            crate::board::QEMU_EXIT_HANDLE.exit_success();
    +        if exit_code != 0 {
    +            //crate::sbi::shutdown(255); //255 == -1 for err hint
    +            shutdown(true)
    +        } else {
    +            //crate::sbi::shutdown(0); //0 for success hint
    +            shutdown(false)
             }
         }
     
    -    // **** access current TCB exclusively
    -    let mut inner = task.inner_exclusive_access();
    -    // Change status to Zombie
    -    inner.task_status = TaskStatus::Zombie;
    -    // Record exit code
    -    inner.exit_code = exit_code;
    -    // do not move to its parent but under initproc
    +    // **** access current TCB exclusively
    +    let mut inner = task.inner_exclusive_access();
    +    // Change status to Zombie
    +    inner.task_status = TaskStatus::Zombie;
    +    // Record exit code
    +    inner.exit_code = exit_code;
    +    // do not move to its parent but under initproc
     
    -    // ++++++ access initproc TCB exclusively
    -    {
    -        let mut initproc_inner = INITPROC.inner_exclusive_access();
    -        for child in inner.children.iter() {
    -            child.inner_exclusive_access().parent = Some(Arc::downgrade(&INITPROC));
    -            initproc_inner.children.push(child.clone());
    +    // ++++++ access initproc TCB exclusively
    +    {
    +        let mut initproc_inner = INITPROC.inner_exclusive_access();
    +        for child in inner.children.iter() {
    +            child.inner_exclusive_access().parent = Some(Arc::downgrade(&INITPROC));
    +            initproc_inner.children.push(child.clone());
             }
         }
    -    // ++++++ release parent PCB
    +    // ++++++ release parent PCB
     
    -    inner.children.clear();
    -    // deallocate user space
    -    inner.memory_set.recycle_data_pages();
    -    drop(inner);
    -    // **** release current PCB
    -    // drop task manually to maintain rc correctly
    -    drop(task);
    -    // we do not have to save task context
    -    let mut _unused = TaskContext::zero_init();
    -    schedule(&mut _unused as *mut _);
    +    inner.children.clear();
    +    // deallocate user space
    +    inner.memory_set.recycle_data_pages();
    +    drop(inner);
    +    // **** release current PCB
    +    // drop task manually to maintain rc correctly
    +    drop(task);
    +    // we do not have to save task context
    +    let mut _unused = TaskContext::zero_init();
    +    schedule(&mut _unused as *mut _);
     }
     
    -lazy_static! {
    -    ///Globle process that init user shell
    -    pub static ref INITPROC: Arc<TaskControlBlock> = Arc::new({
    -        let inode = open_file("initproc", OpenFlags::RDONLY).unwrap();
    -        let v = inode.read_all();
    -        TaskControlBlock::new(v.as_slice())
    +lazy_static! {
    +    ///Globle process that init user shell
    +    pub static ref INITPROC: Arc<TaskControlBlock> = Arc::new({
    +        let inode = open_file("initproc", OpenFlags::RDONLY).unwrap();
    +        let v = inode.read_all();
    +        TaskControlBlock::new(v.as_slice())
         });
     }
    -///Add init process to the manager
    -pub fn add_initproc() {
    -    add_task(INITPROC.clone());
    +///Add init process to the manager
    +pub fn add_initproc() {
    +    add_task(INITPROC.clone());
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/pid.rs.html b/ch6-dev/src/os/task/pid.rs.html index 69239241..4d55c2bf 100644 --- a/ch6-dev/src/os/task/pid.rs.html +++ b/ch6-dev/src/os/task/pid.rs.html @@ -1,230 +1,223 @@ -pid.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -
    //!Implementation of [`PidAllocator`]
    -use crate::config::{KERNEL_STACK_SIZE, PAGE_SIZE, TRAMPOLINE};
    -use crate::mm::{MapPermission, VirtAddr, KERNEL_SPACE};
    -use crate::sync::UPSafeCell;
    -use alloc::vec::Vec;
    -use lazy_static::*;
    -///Pid Allocator struct
    -pub struct PidAllocator {
    -    current: usize,
    -    recycled: Vec<usize>,
    +pid.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +
    //!Implementation of [`PidAllocator`]
    +use crate::config::{KERNEL_STACK_SIZE, PAGE_SIZE, TRAMPOLINE};
    +use crate::mm::{MapPermission, VirtAddr, KERNEL_SPACE};
    +use crate::sync::UPSafeCell;
    +use alloc::vec::Vec;
    +use lazy_static::*;
    +///Pid Allocator struct
    +pub struct PidAllocator {
    +    current: usize,
    +    recycled: Vec<usize>,
     }
     
    -impl PidAllocator {
    -    ///Create an empty `PidAllocator`
    -    pub fn new() -> Self {
    -        PidAllocator {
    -            current: 0,
    -            recycled: Vec::new(),
    +impl PidAllocator {
    +    ///Create an empty `PidAllocator`
    +    pub fn new() -> Self {
    +        PidAllocator {
    +            current: 0,
    +            recycled: Vec::new(),
             }
         }
    -    ///Allocate a pid
    -    pub fn alloc(&mut self) -> PidHandle {
    -        if let Some(pid) = self.recycled.pop() {
    -            PidHandle(pid)
    -        } else {
    -            self.current += 1;
    -            PidHandle(self.current - 1)
    +    ///Allocate a pid
    +    pub fn alloc(&mut self) -> PidHandle {
    +        if let Some(pid) = self.recycled.pop() {
    +            PidHandle(pid)
    +        } else {
    +            self.current += 1;
    +            PidHandle(self.current - 1)
             }
         }
    -    ///Recycle a pid
    -    pub fn dealloc(&mut self, pid: usize) {
    -        assert!(pid < self.current);
    +    ///Recycle a pid
    +    pub fn dealloc(&mut self, pid: usize) {
    +        assert!(pid < self.current);
             assert!(
    -            !self.recycled.iter().any(|ppid| *ppid == pid),
    +            !self.recycled.iter().any(|ppid| *ppid == pid),
                 "pid {} has been deallocated!",
    -            pid
    +            pid
             );
    -        self.recycled.push(pid);
    +        self.recycled.push(pid);
         }
     }
     
    -lazy_static! {
    -    pub static ref PID_ALLOCATOR: UPSafeCell<PidAllocator> =
    -        unsafe { UPSafeCell::new(PidAllocator::new()) };
    +lazy_static! {
    +    pub static ref PID_ALLOCATOR: UPSafeCell<PidAllocator> =
    +        unsafe { UPSafeCell::new(PidAllocator::new()) };
     }
    -///Bind pid lifetime to `PidHandle`
    -pub struct PidHandle(pub usize);
    +///Bind pid lifetime to `PidHandle`
    +pub struct PidHandle(pub usize);
     
    -impl Drop for PidHandle {
    -    fn drop(&mut self) {
    -        //println!("drop pid {}", self.0);
    -        PID_ALLOCATOR.exclusive_access().dealloc(self.0);
    +impl Drop for PidHandle {
    +    fn drop(&mut self) {
    +        //println!("drop pid {}", self.0);
    +        PID_ALLOCATOR.exclusive_access().dealloc(self.0);
         }
     }
    -///Allocate a pid from PID_ALLOCATOR
    -pub fn pid_alloc() -> PidHandle {
    -    PID_ALLOCATOR.exclusive_access().alloc()
    +///Allocate a pid from PID_ALLOCATOR
    +pub fn pid_alloc() -> PidHandle {
    +    PID_ALLOCATOR.exclusive_access().alloc()
     }
     
    -/// Return (bottom, top) of a kernel stack in kernel space.
    -pub fn kernel_stack_position(app_id: usize) -> (usize, usize) {
    -    let top = TRAMPOLINE - app_id * (KERNEL_STACK_SIZE + PAGE_SIZE);
    -    let bottom = top - KERNEL_STACK_SIZE;
    -    (bottom, top)
    +/// Return (bottom, top) of a kernel stack in kernel space.
    +pub fn kernel_stack_position(app_id: usize) -> (usize, usize) {
    +    let top = TRAMPOLINE - app_id * (KERNEL_STACK_SIZE + PAGE_SIZE);
    +    let bottom = top - KERNEL_STACK_SIZE;
    +    (bottom, top)
     }
    -///Kernelstack for app
    -pub struct KernelStack {
    -    pid: usize,
    +///Kernelstack for app
    +pub struct KernelStack {
    +    pid: usize,
     }
     
    -impl KernelStack {
    -    ///Create a kernelstack from pid
    -    pub fn new(pid_handle: &PidHandle) -> Self {
    -        let pid = pid_handle.0;
    -        let (kernel_stack_bottom, kernel_stack_top) = kernel_stack_position(pid);
    -        KERNEL_SPACE.exclusive_access().insert_framed_area(
    -            kernel_stack_bottom.into(),
    -            kernel_stack_top.into(),
    -            MapPermission::R | MapPermission::W,
    +impl KernelStack {
    +    ///Create a kernelstack from pid
    +    pub fn new(pid_handle: &PidHandle) -> Self {
    +        let pid = pid_handle.0;
    +        let (kernel_stack_bottom, kernel_stack_top) = kernel_stack_position(pid);
    +        KERNEL_SPACE.exclusive_access().insert_framed_area(
    +            kernel_stack_bottom.into(),
    +            kernel_stack_top.into(),
    +            MapPermission::R | MapPermission::W,
             );
    -        KernelStack { pid: pid_handle.0 }
    +        KernelStack { pid: pid_handle.0 }
         }
    -    #[allow(unused)]
    -    ///Push a value on top of kernelstack
    -    pub fn push_on_top<T>(&self, value: T) -> *mut T
    -    where
    -        T: Sized,
    +    #[allow(unused)]
    +    ///Push a value on top of kernelstack
    +    pub fn push_on_top<T>(&self, value: T) -> *mut T
    +    where
    +        T: Sized,
         {
    -        let kernel_stack_top = self.get_top();
    -        let ptr_mut = (kernel_stack_top - core::mem::size_of::<T>()) as *mut T;
    -        unsafe {
    -            *ptr_mut = value;
    +        let kernel_stack_top = self.get_top();
    +        let ptr_mut = (kernel_stack_top - core::mem::size_of::<T>()) as *mut T;
    +        unsafe {
    +            *ptr_mut = value;
             }
    -        ptr_mut
    +        ptr_mut
         }
    -    ///Get the value on the top of kernelstack
    -    pub fn get_top(&self) -> usize {
    -        let (_, kernel_stack_top) = kernel_stack_position(self.pid);
    -        kernel_stack_top
    +    ///Get the value on the top of kernelstack
    +    pub fn get_top(&self) -> usize {
    +        let (_, kernel_stack_top) = kernel_stack_position(self.pid);
    +        kernel_stack_top
         }
     }
     
    -impl Drop for KernelStack {
    -    fn drop(&mut self) {
    -        let (kernel_stack_bottom, _) = kernel_stack_position(self.pid);
    -        let kernel_stack_bottom_va: VirtAddr = kernel_stack_bottom.into();
    -        KERNEL_SPACE
    -            .exclusive_access()
    -            .remove_area_with_start_vpn(kernel_stack_bottom_va.into());
    +impl Drop for KernelStack {
    +    fn drop(&mut self) {
    +        let (kernel_stack_bottom, _) = kernel_stack_position(self.pid);
    +        let kernel_stack_bottom_va: VirtAddr = kernel_stack_bottom.into();
    +        KERNEL_SPACE
    +            .exclusive_access()
    +            .remove_area_with_start_vpn(kernel_stack_bottom_va.into());
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/processor.rs.html b/ch6-dev/src/os/task/processor.rs.html index c9d0690a..39c529dc 100644 --- a/ch6-dev/src/os/task/processor.rs.html +++ b/ch6-dev/src/os/task/processor.rs.html @@ -1,194 +1,187 @@ -processor.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -
    //!Implementation of [`Processor`] and Intersection of control flow
    -use super::__switch;
    -use super::{fetch_task, TaskStatus};
    -use super::{TaskContext, TaskControlBlock};
    -use crate::sync::UPSafeCell;
    -use crate::trap::TrapContext;
    -use alloc::sync::Arc;
    -use lazy_static::*;
    -///Processor management structure
    -pub struct Processor {
    -    ///The task currently executing on the current processor
    -    current: Option<Arc<TaskControlBlock>>,
    -    ///The basic control flow of each core, helping to select and switch process
    -    idle_task_cx: TaskContext,
    +processor.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +
    //!Implementation of [`Processor`] and Intersection of control flow
    +use super::__switch;
    +use super::{fetch_task, TaskStatus};
    +use super::{TaskContext, TaskControlBlock};
    +use crate::sync::UPSafeCell;
    +use crate::trap::TrapContext;
    +use alloc::sync::Arc;
    +use lazy_static::*;
    +///Processor management structure
    +pub struct Processor {
    +    ///The task currently executing on the current processor
    +    current: Option<Arc<TaskControlBlock>>,
    +    ///The basic control flow of each core, helping to select and switch process
    +    idle_task_cx: TaskContext,
     }
     
    -impl Processor {
    -    ///Create an empty Processor
    -    pub fn new() -> Self {
    -        Self {
    -            current: None,
    -            idle_task_cx: TaskContext::zero_init(),
    +impl Processor {
    +    ///Create an empty Processor
    +    pub fn new() -> Self {
    +        Self {
    +            current: None,
    +            idle_task_cx: TaskContext::zero_init(),
             }
         }
    -    ///Get mutable reference to `idle_task_cx`
    -    fn get_idle_task_cx_ptr(&mut self) -> *mut TaskContext {
    -        &mut self.idle_task_cx as *mut _
    +    ///Get mutable reference to `idle_task_cx`
    +    fn get_idle_task_cx_ptr(&mut self) -> *mut TaskContext {
    +        &mut self.idle_task_cx as *mut _
    +    }
    +    ///Get current task in moving semanteme
    +    pub fn take_current(&mut self) -> Option<Arc<TaskControlBlock>> {
    +        self.current.take()
         }
    -    ///Get current task in moving semanteme
    -    pub fn take_current(&mut self) -> Option<Arc<TaskControlBlock>> {
    -        self.current.take()
    -    }
    -    ///Get current task in cloning semanteme
    -    pub fn current(&self) -> Option<Arc<TaskControlBlock>> {
    -        self.current.as_ref().map(Arc::clone)
    +    ///Get current task in cloning semanteme
    +    pub fn current(&self) -> Option<Arc<TaskControlBlock>> {
    +        self.current.as_ref().map(Arc::clone)
         }
     }
     
    -lazy_static! {
    -    pub static ref PROCESSOR: UPSafeCell<Processor> = unsafe { UPSafeCell::new(Processor::new()) };
    +lazy_static! {
    +    pub static ref PROCESSOR: UPSafeCell<Processor> = unsafe { UPSafeCell::new(Processor::new()) };
     }
    -///The main part of process execution and scheduling
    -///Loop `fetch_task` to get the process that needs to run, and switch the process through `__switch`
    -pub fn run_tasks() {
    -    loop {
    -        let mut processor = PROCESSOR.exclusive_access();
    -        if let Some(task) = fetch_task() {
    -            let idle_task_cx_ptr = processor.get_idle_task_cx_ptr();
    -            // access coming task TCB exclusively
    -            let mut task_inner = task.inner_exclusive_access();
    -            let next_task_cx_ptr = &task_inner.task_cx as *const TaskContext;
    -            task_inner.task_status = TaskStatus::Running;
    -            drop(task_inner);
    -            // release coming task TCB manually
    -            processor.current = Some(task);
    -            // release processor manually
    -            drop(processor);
    -            unsafe {
    -                __switch(idle_task_cx_ptr, next_task_cx_ptr);
    +///The main part of process execution and scheduling
    +///Loop `fetch_task` to get the process that needs to run, and switch the process through `__switch`
    +pub fn run_tasks() {
    +    loop {
    +        let mut processor = PROCESSOR.exclusive_access();
    +        if let Some(task) = fetch_task() {
    +            let idle_task_cx_ptr = processor.get_idle_task_cx_ptr();
    +            // access coming task TCB exclusively
    +            let mut task_inner = task.inner_exclusive_access();
    +            let next_task_cx_ptr = &task_inner.task_cx as *const TaskContext;
    +            task_inner.task_status = TaskStatus::Running;
    +            drop(task_inner);
    +            // release coming task TCB manually
    +            processor.current = Some(task);
    +            // release processor manually
    +            drop(processor);
    +            unsafe {
    +                __switch(idle_task_cx_ptr, next_task_cx_ptr);
                 }
             }
         }
     }
    -///Take the current task,leaving a None in its place
    -pub fn take_current_task() -> Option<Arc<TaskControlBlock>> {
    -    PROCESSOR.exclusive_access().take_current()
    +///Take the current task,leaving a None in its place
    +pub fn take_current_task() -> Option<Arc<TaskControlBlock>> {
    +    PROCESSOR.exclusive_access().take_current()
     }
    -///Get running task
    -pub fn current_task() -> Option<Arc<TaskControlBlock>> {
    -    PROCESSOR.exclusive_access().current()
    +///Get running task
    +pub fn current_task() -> Option<Arc<TaskControlBlock>> {
    +    PROCESSOR.exclusive_access().current()
     }
    -///Get token of the address space of current task
    -pub fn current_user_token() -> usize {
    -    let task = current_task().unwrap();
    -    let token = task.inner_exclusive_access().get_user_token();
    -    token
    +///Get token of the address space of current task
    +pub fn current_user_token() -> usize {
    +    let task = current_task().unwrap();
    +    let token = task.inner_exclusive_access().get_user_token();
    +    token
     }
    -///Get the mutable reference to trap context of current task
    -pub fn current_trap_cx() -> &'static mut TrapContext {
    -    current_task()
    -        .unwrap()
    -        .inner_exclusive_access()
    -        .get_trap_cx()
    +///Get the mutable reference to trap context of current task
    +pub fn current_trap_cx() -> &'static mut TrapContext {
    +    current_task()
    +        .unwrap()
    +        .inner_exclusive_access()
    +        .get_trap_cx()
     }
    -///Return to idle control flow for new scheduling
    -pub fn schedule(switched_task_cx_ptr: *mut TaskContext) {
    -    let mut processor = PROCESSOR.exclusive_access();
    -    let idle_task_cx_ptr = processor.get_idle_task_cx_ptr();
    -    drop(processor);
    -    unsafe {
    -        __switch(switched_task_cx_ptr, idle_task_cx_ptr);
    +///Return to idle control flow for new scheduling
    +pub fn schedule(switched_task_cx_ptr: *mut TaskContext) {
    +    let mut processor = PROCESSOR.exclusive_access();
    +    let idle_task_cx_ptr = processor.get_idle_task_cx_ptr();
    +    drop(processor);
    +    unsafe {
    +        __switch(switched_task_cx_ptr, idle_task_cx_ptr);
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/switch.rs.html b/ch6-dev/src/os/task/switch.rs.html index d2bb7497..a14b8a8e 100644 --- a/ch6-dev/src/os/task/switch.rs.html +++ b/ch6-dev/src/os/task/switch.rs.html @@ -1,26 +1,19 @@ -switch.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -
    //!Wrap `switch.S` as a function
    -use super::TaskContext;
    -use core::arch::global_asm;
    +switch.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    //!Wrap `switch.S` as a function
    +use super::TaskContext;
    +use core::arch::global_asm;
     
     global_asm!(include_str!("switch.S"));
     
    -extern "C" {
    -    pub fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext);
    +extern "C" {
    +    pub fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext);
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/task/task.rs.html b/ch6-dev/src/os/task/task.rs.html index 399795a6..e4ea6891 100644 --- a/ch6-dev/src/os/task/task.rs.html +++ b/ch6-dev/src/os/task/task.rs.html @@ -1,392 +1,385 @@ -task.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -
    //!Implementation of [`TaskControlBlock`]
    -use super::TaskContext;
    -use super::{pid_alloc, KernelStack, PidHandle};
    -use crate::config::TRAP_CONTEXT;
    -use crate::fs::{File, Stdin, Stdout};
    -use crate::mm::{MemorySet, PhysPageNum, VirtAddr, KERNEL_SPACE};
    -use crate::sync::UPSafeCell;
    -use crate::trap::{trap_handler, TrapContext};
    -use alloc::sync::{Arc, Weak};
    -use alloc::vec;
    -use alloc::vec::Vec;
    -use core::cell::RefMut;
    +task.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +
    //!Implementation of [`TaskControlBlock`]
    +use super::TaskContext;
    +use super::{pid_alloc, KernelStack, PidHandle};
    +use crate::config::TRAP_CONTEXT;
    +use crate::fs::{File, Stdin, Stdout};
    +use crate::mm::{MemorySet, PhysPageNum, VirtAddr, KERNEL_SPACE};
    +use crate::sync::UPSafeCell;
    +use crate::trap::{trap_handler, TrapContext};
    +use alloc::sync::{Arc, Weak};
    +use alloc::vec;
    +use alloc::vec::Vec;
    +use core::cell::RefMut;
     
    -pub struct TaskControlBlock {
    -    // immutable
    -    pub pid: PidHandle,
    -    pub kernel_stack: KernelStack,
    -    // mutable
    -    inner: UPSafeCell<TaskControlBlockInner>,
    +pub struct TaskControlBlock {
    +    // immutable
    +    pub pid: PidHandle,
    +    pub kernel_stack: KernelStack,
    +    // mutable
    +    inner: UPSafeCell<TaskControlBlockInner>,
     }
     
    -pub struct TaskControlBlockInner {
    -    pub trap_cx_ppn: PhysPageNum,
    -    pub base_size: usize,
    -    pub task_cx: TaskContext,
    -    pub task_status: TaskStatus,
    -    pub memory_set: MemorySet,
    -    pub parent: Option<Weak<TaskControlBlock>>,
    -    pub children: Vec<Arc<TaskControlBlock>>,
    -    pub exit_code: i32,
    -    pub fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>,
    +pub struct TaskControlBlockInner {
    +    pub trap_cx_ppn: PhysPageNum,
    +    pub base_size: usize,
    +    pub task_cx: TaskContext,
    +    pub task_status: TaskStatus,
    +    pub memory_set: MemorySet,
    +    pub parent: Option<Weak<TaskControlBlock>>,
    +    pub children: Vec<Arc<TaskControlBlock>>,
    +    pub exit_code: i32,
    +    pub fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>,
     }
     
    -impl TaskControlBlockInner {
    -    pub fn get_trap_cx(&self) -> &'static mut TrapContext {
    -        self.trap_cx_ppn.get_mut()
    +impl TaskControlBlockInner {
    +    pub fn get_trap_cx(&self) -> &'static mut TrapContext {
    +        self.trap_cx_ppn.get_mut()
         }
    -    pub fn get_user_token(&self) -> usize {
    -        self.memory_set.token()
    +    pub fn get_user_token(&self) -> usize {
    +        self.memory_set.token()
         }
    -    fn get_status(&self) -> TaskStatus {
    -        self.task_status
    +    fn get_status(&self) -> TaskStatus {
    +        self.task_status
         }
    -    pub fn is_zombie(&self) -> bool {
    -        self.get_status() == TaskStatus::Zombie
    +    pub fn is_zombie(&self) -> bool {
    +        self.get_status() == TaskStatus::Zombie
         }
    -    pub fn alloc_fd(&mut self) -> usize {
    -        if let Some(fd) = (0..self.fd_table.len()).find(|fd| self.fd_table[*fd].is_none()) {
    -            fd
    -        } else {
    -            self.fd_table.push(None);
    -            self.fd_table.len() - 1
    -        }
    +    pub fn alloc_fd(&mut self) -> usize {
    +        if let Some(fd) = (0..self.fd_table.len()).find(|fd| self.fd_table[*fd].is_none()) {
    +            fd
    +        } else {
    +            self.fd_table.push(None);
    +            self.fd_table.len() - 1
    +        }
         }
     }
     
    -impl TaskControlBlock {
    -    pub fn inner_exclusive_access(&self) -> RefMut<'_, TaskControlBlockInner> {
    -        self.inner.exclusive_access()
    +impl TaskControlBlock {
    +    pub fn inner_exclusive_access(&self) -> RefMut<'_, TaskControlBlockInner> {
    +        self.inner.exclusive_access()
         }
    -    pub fn new(elf_data: &[u8]) -> Self {
    -        // memory_set with elf program headers/trampoline/trap context/user stack
    -        let (memory_set, user_sp, entry_point) = MemorySet::from_elf(elf_data);
    -        let trap_cx_ppn = memory_set
    -            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    -            .unwrap()
    -            .ppn();
    -        // alloc a pid and a kernel stack in kernel space
    -        let pid_handle = pid_alloc();
    -        let kernel_stack = KernelStack::new(&pid_handle);
    -        let kernel_stack_top = kernel_stack.get_top();
    -        let task_control_block = Self {
    -            pid: pid_handle,
    -            kernel_stack,
    -            inner: unsafe {
    -                UPSafeCell::new(TaskControlBlockInner {
    -                    trap_cx_ppn,
    -                    base_size: user_sp,
    -                    task_cx: TaskContext::goto_trap_return(kernel_stack_top),
    -                    task_status: TaskStatus::Ready,
    -                    memory_set,
    -                    parent: None,
    -                    children: Vec::new(),
    -                    exit_code: 0,
    -                    fd_table: vec![
    -                        // 0 -> stdin
    -                        Some(Arc::new(Stdin)),
    -                        // 1 -> stdout
    -                        Some(Arc::new(Stdout)),
    -                        // 2 -> stderr
    -                        Some(Arc::new(Stdout)),
    +    pub fn new(elf_data: &[u8]) -> Self {
    +        // memory_set with elf program headers/trampoline/trap context/user stack
    +        let (memory_set, user_sp, entry_point) = MemorySet::from_elf(elf_data);
    +        let trap_cx_ppn = memory_set
    +            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    +            .unwrap()
    +            .ppn();
    +        // alloc a pid and a kernel stack in kernel space
    +        let pid_handle = pid_alloc();
    +        let kernel_stack = KernelStack::new(&pid_handle);
    +        let kernel_stack_top = kernel_stack.get_top();
    +        let task_control_block = Self {
    +            pid: pid_handle,
    +            kernel_stack,
    +            inner: unsafe {
    +                UPSafeCell::new(TaskControlBlockInner {
    +                    trap_cx_ppn,
    +                    base_size: user_sp,
    +                    task_cx: TaskContext::goto_trap_return(kernel_stack_top),
    +                    task_status: TaskStatus::Ready,
    +                    memory_set,
    +                    parent: None,
    +                    children: Vec::new(),
    +                    exit_code: 0,
    +                    fd_table: vec![
    +                        // 0 -> stdin
    +                        Some(Arc::new(Stdin)),
    +                        // 1 -> stdout
    +                        Some(Arc::new(Stdout)),
    +                        // 2 -> stderr
    +                        Some(Arc::new(Stdout)),
                         ],
                     })
                 },
             };
    -        // prepare TrapContext in user space
    -        let trap_cx = task_control_block.inner_exclusive_access().get_trap_cx();
    -        *trap_cx = TrapContext::app_init_context(
    -            entry_point,
    -            user_sp,
    -            KERNEL_SPACE.exclusive_access().token(),
    -            kernel_stack_top,
    -            trap_handler as usize,
    +        // prepare TrapContext in user space
    +        let trap_cx = task_control_block.inner_exclusive_access().get_trap_cx();
    +        *trap_cx = TrapContext::app_init_context(
    +            entry_point,
    +            user_sp,
    +            KERNEL_SPACE.exclusive_access().token(),
    +            kernel_stack_top,
    +            trap_handler as usize,
             );
    -        task_control_block
    +        task_control_block
         }
    -    pub fn exec(&self, elf_data: &[u8]) {
    -        // memory_set with elf program headers/trampoline/trap context/user stack
    -        let (memory_set, user_sp, entry_point) = MemorySet::from_elf(elf_data);
    -        let trap_cx_ppn = memory_set
    -            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    -            .unwrap()
    -            .ppn();
    +    pub fn exec(&self, elf_data: &[u8]) {
    +        // memory_set with elf program headers/trampoline/trap context/user stack
    +        let (memory_set, user_sp, entry_point) = MemorySet::from_elf(elf_data);
    +        let trap_cx_ppn = memory_set
    +            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    +            .unwrap()
    +            .ppn();
     
    -        // **** access current TCB exclusively
    -        let mut inner = self.inner_exclusive_access();
    -        // substitute memory_set
    -        inner.memory_set = memory_set;
    -        // update trap_cx ppn
    -        inner.trap_cx_ppn = trap_cx_ppn;
    -        // initialize trap_cx
    -        let trap_cx = TrapContext::app_init_context(
    -            entry_point,
    -            user_sp,
    -            KERNEL_SPACE.exclusive_access().token(),
    -            self.kernel_stack.get_top(),
    -            trap_handler as usize,
    +        // **** access current TCB exclusively
    +        let mut inner = self.inner_exclusive_access();
    +        // substitute memory_set
    +        inner.memory_set = memory_set;
    +        // update trap_cx ppn
    +        inner.trap_cx_ppn = trap_cx_ppn;
    +        // initialize trap_cx
    +        let trap_cx = TrapContext::app_init_context(
    +            entry_point,
    +            user_sp,
    +            KERNEL_SPACE.exclusive_access().token(),
    +            self.kernel_stack.get_top(),
    +            trap_handler as usize,
             );
    -        *inner.get_trap_cx() = trap_cx;
    -        // **** release current PCB
    -    }
    -    pub fn fork(self: &Arc<TaskControlBlock>) -> Arc<TaskControlBlock> {
    -        // ---- hold parent PCB lock
    -        let mut parent_inner = self.inner_exclusive_access();
    -        // copy user space(include trap context)
    -        let memory_set = MemorySet::from_existed_user(&parent_inner.memory_set);
    -        let trap_cx_ppn = memory_set
    -            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    -            .unwrap()
    -            .ppn();
    -        // alloc a pid and a kernel stack in kernel space
    -        let pid_handle = pid_alloc();
    -        let kernel_stack = KernelStack::new(&pid_handle);
    -        let kernel_stack_top = kernel_stack.get_top();
    -        // copy fd table
    -        let mut new_fd_table: Vec<Option<Arc<dyn File + Send + Sync>>> = Vec::new();
    -        for fd in parent_inner.fd_table.iter() {
    -            if let Some(file) = fd {
    -                new_fd_table.push(Some(file.clone()));
    -            } else {
    -                new_fd_table.push(None);
    +        *inner.get_trap_cx() = trap_cx;
    +        // **** release current PCB
    +    }
    +    pub fn fork(self: &Arc<TaskControlBlock>) -> Arc<TaskControlBlock> {
    +        // ---- hold parent PCB lock
    +        let mut parent_inner = self.inner_exclusive_access();
    +        // copy user space(include trap context)
    +        let memory_set = MemorySet::from_existed_user(&parent_inner.memory_set);
    +        let trap_cx_ppn = memory_set
    +            .translate(VirtAddr::from(TRAP_CONTEXT).into())
    +            .unwrap()
    +            .ppn();
    +        // alloc a pid and a kernel stack in kernel space
    +        let pid_handle = pid_alloc();
    +        let kernel_stack = KernelStack::new(&pid_handle);
    +        let kernel_stack_top = kernel_stack.get_top();
    +        // copy fd table
    +        let mut new_fd_table: Vec<Option<Arc<dyn File + Send + Sync>>> = Vec::new();
    +        for fd in parent_inner.fd_table.iter() {
    +            if let Some(file) = fd {
    +                new_fd_table.push(Some(file.clone()));
    +            } else {
    +                new_fd_table.push(None);
                 }
             }
    -        let task_control_block = Arc::new(TaskControlBlock {
    -            pid: pid_handle,
    -            kernel_stack,
    -            inner: unsafe {
    -                UPSafeCell::new(TaskControlBlockInner {
    -                    trap_cx_ppn,
    -                    base_size: parent_inner.base_size,
    -                    task_cx: TaskContext::goto_trap_return(kernel_stack_top),
    -                    task_status: TaskStatus::Ready,
    -                    memory_set,
    -                    parent: Some(Arc::downgrade(self)),
    -                    children: Vec::new(),
    -                    exit_code: 0,
    -                    fd_table: new_fd_table,
    +        let task_control_block = Arc::new(TaskControlBlock {
    +            pid: pid_handle,
    +            kernel_stack,
    +            inner: unsafe {
    +                UPSafeCell::new(TaskControlBlockInner {
    +                    trap_cx_ppn,
    +                    base_size: parent_inner.base_size,
    +                    task_cx: TaskContext::goto_trap_return(kernel_stack_top),
    +                    task_status: TaskStatus::Ready,
    +                    memory_set,
    +                    parent: Some(Arc::downgrade(self)),
    +                    children: Vec::new(),
    +                    exit_code: 0,
    +                    fd_table: new_fd_table,
                     })
                 },
             });
    -        // add child
    -        parent_inner.children.push(task_control_block.clone());
    -        // modify kernel_sp in trap_cx
    -        // **** access child PCB exclusively
    -        let trap_cx = task_control_block.inner_exclusive_access().get_trap_cx();
    -        trap_cx.kernel_sp = kernel_stack_top;
    -        // return
    -        task_control_block
    -        // **** release child PCB
    -        // ---- release parent PCB
    -    }
    -    pub fn getpid(&self) -> usize {
    -        self.pid.0
    -    }
    +        // add child
    +        parent_inner.children.push(task_control_block.clone());
    +        // modify kernel_sp in trap_cx
    +        // **** access child PCB exclusively
    +        let trap_cx = task_control_block.inner_exclusive_access().get_trap_cx();
    +        trap_cx.kernel_sp = kernel_stack_top;
    +        // return
    +        task_control_block
    +        // **** release child PCB
    +        // ---- release parent PCB
    +    }
    +    pub fn getpid(&self) -> usize {
    +        self.pid.0
    +    }
     }
     
    -#[derive(Copy, Clone, PartialEq)]
    -pub enum TaskStatus {
    -    Ready,
    -    Running,
    -    Zombie,
    +#[derive(Copy, Clone, PartialEq)]
    +pub enum TaskStatus {
    +    Ready,
    +    Running,
    +    Zombie,
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/timer.rs.html b/ch6-dev/src/os/timer.rs.html index 739147fb..d4830ce5 100644 --- a/ch6-dev/src/os/timer.rs.html +++ b/ch6-dev/src/os/timer.rs.html @@ -1,48 +1,41 @@ -timer.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -
    //! RISC-V timer-related functionality
    +timer.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +
    //! RISC-V timer-related functionality
     
    -use crate::config::CLOCK_FREQ;
    -use crate::sbi::set_timer;
    -use riscv::register::time;
    +use crate::config::CLOCK_FREQ;
    +use crate::sbi::set_timer;
    +use riscv::register::time;
     
    -const TICKS_PER_SEC: usize = 100;
    -const MSEC_PER_SEC: usize = 1000;
    -///get current time
    -pub fn get_time() -> usize {
    -    time::read()
    +const TICKS_PER_SEC: usize = 100;
    +const MSEC_PER_SEC: usize = 1000;
    +///get current time
    +pub fn get_time() -> usize {
    +    time::read()
     }
    -/// get current time in microseconds
    -pub fn get_time_ms() -> usize {
    -    time::read() / (CLOCK_FREQ / MSEC_PER_SEC)
    +/// get current time in microseconds
    +pub fn get_time_ms() -> usize {
    +    time::read() / (CLOCK_FREQ / MSEC_PER_SEC)
     }
    -/// set the next timer interrupt
    -pub fn set_next_trigger() {
    -    set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC);
    +/// set the next timer interrupt
    +pub fn set_next_trigger() {
    +    set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC);
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/trap/context.rs.html b/ch6-dev/src/os/trap/context.rs.html index c48f3c3c..b67846ac 100644 --- a/ch6-dev/src/os/trap/context.rs.html +++ b/ch6-dev/src/os/trap/context.rs.html @@ -1,106 +1,99 @@ -context.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -
    //! Implementation of [`TrapContext`]
    -use riscv::register::sstatus::{self, Sstatus, SPP};
    +context.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +
    //! Implementation of [`TrapContext`]
    +use riscv::register::sstatus::{self, Sstatus, SPP};
     
    -#[repr(C)]
    -#[derive(Debug)]
    -///trap context structure containing sstatus, sepc and registers
    -pub struct TrapContext {
    -    /// general regs[0..31]
    -    pub x: [usize; 32],
    -    /// CSR sstatus      
    -    pub sstatus: Sstatus,
    -    /// CSR sepc
    -    pub sepc: usize,
    -    /// Addr of Page Table
    -    pub kernel_satp: usize,
    -    /// kernel stack
    -    pub kernel_sp: usize,
    -    /// Addr of trap_handler function
    -    pub trap_handler: usize,
    +#[repr(C)]
    +#[derive(Debug)]
    +///trap context structure containing sstatus, sepc and registers
    +pub struct TrapContext {
    +    /// general regs[0..31]
    +    pub x: [usize; 32],
    +    /// CSR sstatus      
    +    pub sstatus: Sstatus,
    +    /// CSR sepc
    +    pub sepc: usize,
    +    /// Addr of Page Table
    +    pub kernel_satp: usize,
    +    /// kernel stack
    +    pub kernel_sp: usize,
    +    /// Addr of trap_handler function
    +    pub trap_handler: usize,
     }
     
    -impl TrapContext {
    -    ///set stack pointer to x_2 reg (sp)
    -    pub fn set_sp(&mut self, sp: usize) {
    -        self.x[2] = sp;
    +impl TrapContext {
    +    ///set stack pointer to x_2 reg (sp)
    +    pub fn set_sp(&mut self, sp: usize) {
    +        self.x[2] = sp;
         }
    -    ///init app context
    -    pub fn app_init_context(
    -        entry: usize,
    -        sp: usize,
    -        kernel_satp: usize,
    -        kernel_sp: usize,
    -        trap_handler: usize,
    -    ) -> Self {
    -        let mut sstatus = sstatus::read();
    -        // set CPU privilege to User after trapping back
    -        sstatus.set_spp(SPP::User);
    -        let mut cx = Self {
    -            x: [0; 32],
    -            sstatus,
    -            sepc: entry,
    -            kernel_satp,
    -            kernel_sp,
    -            trap_handler,
    +    ///init app context
    +    pub fn app_init_context(
    +        entry: usize,
    +        sp: usize,
    +        kernel_satp: usize,
    +        kernel_sp: usize,
    +        trap_handler: usize,
    +    ) -> Self {
    +        let mut sstatus = sstatus::read();
    +        // set CPU privilege to User after trapping back
    +        sstatus.set_spp(SPP::User);
    +        let mut cx = Self {
    +            x: [0; 32],
    +            sstatus,
    +            sepc: entry,
    +            kernel_satp,
    +            kernel_sp,
    +            trap_handler,
             };
    -        cx.set_sp(sp);
    -        cx
    +        cx.set_sp(sp);
    +        cx
         }
     }
    -
    -
    - \ No newline at end of file + \ No newline at end of file diff --git a/ch6-dev/src/os/trap/mod.rs.html b/ch6-dev/src/os/trap/mod.rs.html index 5d6b5d9a..f78d2292 100644 --- a/ch6-dev/src/os/trap/mod.rs.html +++ b/ch6-dev/src/os/trap/mod.rs.html @@ -1,288 +1,281 @@ -mod.rs - source - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -
    //! Trap handling functionality
    -//!
    -//! 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
    -//! assembly language code does just enough work restore the kernel space
    -//! context, ensuring that Rust code safely runs, and transfers control to
    -//! [`trap_handler()`].
    -//!
    -//! It then calls different functionality based on what exactly the exception
    -//! was. For example, timer interrupts trigger task preemption, and syscalls go
    -//! to [`syscall()`].
    -mod context;
    +mod.rs - source
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +65
    +66
    +67
    +68
    +69
    +70
    +71
    +72
    +73
    +74
    +75
    +76
    +77
    +78
    +79
    +80
    +81
    +82
    +83
    +84
    +85
    +86
    +87
    +88
    +89
    +90
    +91
    +92
    +93
    +94
    +95
    +96
    +97
    +98
    +99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +
    //! Trap handling functionality
    +//!
    +//! 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
    +//! assembly language code does just enough work restore the kernel space
    +//! context, ensuring that Rust code safely runs, and transfers control to
    +//! [`trap_handler()`].
    +//!
    +//! It then calls different functionality based on what exactly the exception
    +//! was. For example, timer interrupts trigger task preemption, and syscalls go
    +//! to [`syscall()`].
    +mod context;
     
    -use crate::config::{TRAMPOLINE, TRAP_CONTEXT};
    -use crate::syscall::syscall;
    -use crate::task::{
    -    current_trap_cx, current_user_token, exit_current_and_run_next, suspend_current_and_run_next,
    +use crate::config::{TRAMPOLINE, TRAP_CONTEXT};
    +use crate::syscall::syscall;
    +use crate::task::{
    +    current_trap_cx, current_user_token, exit_current_and_run_next, suspend_current_and_run_next,
     };
    -use crate::timer::set_next_trigger;
    -use core::arch::{asm, global_asm};
    -use riscv::register::{
    -    mtvec::TrapMode,
    -    scause::{self, Exception, Interrupt, Trap},
    -    sie, stval, stvec,
    +use crate::timer::set_next_trigger;
    +use core::arch::{asm, global_asm};
    +use riscv::register::{
    +    mtvec::TrapMode,
    +    scause::{self, Exception, Interrupt, Trap},
    +    sie, stval, stvec,
     };
     
     global_asm!(include_str!("trap.S"));
    -/// initialize CSR `stvec` as the entry of `__alltraps`
    -pub fn init() {
    -    set_kernel_trap_entry();
    +/// initialize CSR `stvec` as the entry of `__alltraps`
    +pub fn init() {
    +    set_kernel_trap_entry();
     }
     
    -fn set_kernel_trap_entry() {
    -    unsafe {
    -        stvec::write(trap_from_kernel as usize, TrapMode::Direct);
    +fn set_kernel_trap_entry() {
    +    unsafe {
    +        stvec::write(trap_from_kernel as usize, TrapMode::Direct);
         }
     }
     
    -fn set_user_trap_entry() {
    -    unsafe {
    -        stvec::write(TRAMPOLINE as usize, TrapMode::Direct);
    +fn set_user_trap_entry() {
    +    unsafe {
    +        stvec::write(TRAMPOLINE as usize, TrapMode::Direct);
         }
     }
    -/// enable timer interrupt in sie CSR
    -pub fn enable_timer_interrupt() {
    -    unsafe {
    -        sie::set_stimer();
    +/// enable timer interrupt in sie CSR
    +pub fn enable_timer_interrupt() {
    +    unsafe {
    +        sie::set_stimer();
         }
     }
     
    -#[no_mangle]
    -/// handle an interrupt, exception, or system call from user space
    -pub fn trap_handler() -> ! {
    -    set_kernel_trap_entry();
    -    let scause = scause::read();
    -    let stval = stval::read();
    -    match scause.cause() {
    -        Trap::Exception(Exception::UserEnvCall) => {
    -            // jump to next instruction anyway
    -            let mut cx = current_trap_cx();
    -            cx.sepc += 4;
    -            // get system call return value
    -            let result = syscall(cx.x[17], [cx.x[10], cx.x[11], cx.x[12]]);
    -            // cx is changed during sys_exec, so we have to call it again
    -            cx = current_trap_cx();
    -            cx.x[10] = result as usize;
    +#[no_mangle]
    +/// handle an interrupt, exception, or system call from user space
    +pub fn trap_handler() -> ! {
    +    set_kernel_trap_entry();
    +    let scause = scause::read();
    +    let stval = stval::read();
    +    match scause.cause() {
    +        Trap::Exception(Exception::UserEnvCall) => {
    +            // jump to next instruction anyway
    +            let mut cx = current_trap_cx();
    +            cx.sepc += 4;
    +            // get system call return value
    +            let result = syscall(cx.x[17], [cx.x[10], cx.x[11], cx.x[12]]);
    +            // cx is changed during sys_exec, so we have to call it again
    +            cx = current_trap_cx();
    +            cx.x[10] = result as usize;
             }
    -        Trap::Exception(Exception::StoreFault)
    -        | Trap::Exception(Exception::StorePageFault)
    -        | Trap::Exception(Exception::InstructionFault)
    -        | Trap::Exception(Exception::InstructionPageFault)
    -        | Trap::Exception(Exception::LoadFault)
    -        | Trap::Exception(Exception::LoadPageFault) => {
    +        Trap::Exception(Exception::StoreFault)
    +        | Trap::Exception(Exception::StorePageFault)
    +        | Trap::Exception(Exception::InstructionFault)
    +        | Trap::Exception(Exception::InstructionPageFault)
    +        | Trap::Exception(Exception::LoadFault)
    +        | Trap::Exception(Exception::LoadPageFault) => {
                 println!(
                     "[kernel] {:?} in application, bad addr = {:#x}, bad instruction = {:#x}, kernel killed it.",
    -                scause.cause(),
    -                stval,
    -                current_trap_cx().sepc,
    +                scause.cause(),
    +                stval,
    +                current_trap_cx().sepc,
                 );
    -            // page fault exit code
    -            exit_current_and_run_next(-2);
    +            // page fault exit code
    +            exit_current_and_run_next(-2);
             }
    -        Trap::Exception(Exception::IllegalInstruction) => {
    +        Trap::Exception(Exception::IllegalInstruction) => {
                 println!("[kernel] IllegalInstruction in application, kernel killed it.");
    -            // illegal instruction exit code
    -            exit_current_and_run_next(-3);
    +            // illegal instruction exit code
    +            exit_current_and_run_next(-3);
             }
    -        Trap::Interrupt(Interrupt::SupervisorTimer) => {
    -            set_next_trigger();
    -            suspend_current_and_run_next();
    +        Trap::Interrupt(Interrupt::SupervisorTimer) => {
    +            set_next_trigger();
    +            suspend_current_and_run_next();
             }
    -        _ => {
    +        _ => {
                 panic!(
                     "Unsupported trap {:?}, stval = {:#x}!",
    -                scause.cause(),
    -                stval
    +                scause.cause(),
    +                stval
                 );
             }
         }
    -    //println!("before trap_return");
    -    trap_return();
    +    //println!("before trap_return");
    +    trap_return();
     }
     
    -#[no_mangle]
    -/// 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
    -pub fn trap_return() -> ! {
    -    set_user_trap_entry();
    -    let trap_cx_ptr = TRAP_CONTEXT;
    -    let user_satp = current_user_token();
    -    extern "C" {
    -        fn __alltraps();
    -        fn __restore();
    +#[no_mangle]
    +/// 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
    +pub fn trap_return() -> ! {
    +    set_user_trap_entry();
    +    let trap_cx_ptr = TRAP_CONTEXT;
    +    let user_satp = current_user_token();
    +    extern "C" {
    +        fn __alltraps();
    +        fn __restore();
         }
    -    let restore_va = __restore as usize - __alltraps as usize + TRAMPOLINE;
    -    unsafe {
    +    let restore_va = __restore as usize - __alltraps as usize + TRAMPOLINE;
    +    unsafe {
             asm!(
                 "fence.i",
                 "jr {restore_va}",
    -            restore_va = in(reg) restore_va,
    -            in("a0") trap_cx_ptr,
    -            in("a1") user_satp,
    -            options(noreturn)
    +            restore_va = in(reg) restore_va,
    +            in("a0") trap_cx_ptr,
    +            in("a1") user_satp,
    +            options(noreturn)
             );
         }
     }
     
    -#[no_mangle]
    -/// Unimplement: traps/interrupts/exceptions from kernel mode
    -/// Todo: Chapter 9: I/O device
    -pub fn trap_from_kernel() -> ! {
    -    use riscv::register::sepc;
    -    println!("stval = {:#x}, sepc = {:#x}", stval::read(), sepc::read());
    -    panic!("a trap {:?} from kernel!", scause::read().cause());
    +#[no_mangle]
    +/// Unimplement: traps/interrupts/exceptions from kernel mode
    +/// Todo: Chapter 9: I/O device
    +pub fn trap_from_kernel() -> ! {
    +    use riscv::register::sepc;
    +    println!("stval = {:#x}, sepc = {:#x}", stval::read(), sepc::read());
    +    panic!("a trap {:?} from kernel!", scause::read().cause());
     }
     
    -pub use context::TrapContext;
    -
    -
    - \ No newline at end of file +pub use context::TrapContext; + \ No newline at end of file diff --git a/ch6-dev/COPYRIGHT.txt b/ch6-dev/static.files/COPYRIGHT-23e9bde6c69aea69.txt similarity index 83% rename from ch6-dev/COPYRIGHT.txt rename to ch6-dev/static.files/COPYRIGHT-23e9bde6c69aea69.txt index c2629a83..1447df79 100644 --- a/ch6-dev/COPYRIGHT.txt +++ b/ch6-dev/static.files/COPYRIGHT-23e9bde6c69aea69.txt @@ -1,9 +1,10 @@ +# REUSE-IgnoreStart + These documentation pages include resources by third parties. This copyright file applies only to those resources. The following third party resources are included, and carry their own copyright notices and license terms: -* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2, - FiraSans-Regular.woff, FiraSans-Medium.woff): +* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2): Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ with Reserved Font Name Fira Sans. @@ -25,9 +26,7 @@ included, and carry their own copyright notices and license terms: Licensed under the MIT license (see LICENSE-MIT.txt). * Source Code Pro (SourceCodePro-Regular.ttf.woff2, - SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2, - SourceCodePro-Regular.ttf.woff, SourceCodePro-Semibold.ttf.woff, - SourceCodePro-It.ttf.woff): + SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2): Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark @@ -37,8 +36,7 @@ included, and carry their own copyright notices and license terms: See SourceCodePro-LICENSE.txt. * Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, - SourceSerif4-It.ttf.woff2, SourceSerif4-Regular.ttf.woff, - SourceSerif4-Bold.ttf.woff, SourceSerif4-It.ttf.woff): + SourceSerif4-It.ttf.woff2): Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United @@ -48,3 +46,5 @@ included, and carry their own copyright notices and license terms: See SourceSerif4-LICENSE.md. This copyright file is intended to be distributed with rustdoc output. + +# REUSE-IgnoreEnd diff --git a/ch6-dev/FiraSans-LICENSE.txt b/ch6-dev/static.files/FiraSans-LICENSE-db4b642586e02d97.txt similarity index 99% rename from ch6-dev/FiraSans-LICENSE.txt rename to ch6-dev/static.files/FiraSans-LICENSE-db4b642586e02d97.txt index ff9afab0..d7e9c149 100644 --- a/ch6-dev/FiraSans-LICENSE.txt +++ b/ch6-dev/static.files/FiraSans-LICENSE-db4b642586e02d97.txt @@ -1,3 +1,5 @@ +// REUSE-IgnoreStart + Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. with Reserved Font Name < Fira >, @@ -92,3 +94,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/ch6-dev/FiraSans-Medium.woff2 b/ch6-dev/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 similarity index 100% rename from ch6-dev/FiraSans-Medium.woff2 rename to ch6-dev/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 diff --git a/ch6-dev/FiraSans-Regular.woff2 b/ch6-dev/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 similarity index 100% rename from ch6-dev/FiraSans-Regular.woff2 rename to ch6-dev/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 diff --git a/ch6-dev/LICENSE-APACHE.txt b/ch6-dev/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt similarity index 100% rename from ch6-dev/LICENSE-APACHE.txt rename to ch6-dev/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt diff --git a/ch6-dev/LICENSE-MIT.txt b/ch6-dev/static.files/LICENSE-MIT-65090b722b3f6c56.txt similarity index 100% rename from ch6-dev/LICENSE-MIT.txt rename to ch6-dev/static.files/LICENSE-MIT-65090b722b3f6c56.txt diff --git a/ch6-dev/NanumBarunGothic.ttf.woff2 b/ch6-dev/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 similarity index 100% rename from ch6-dev/NanumBarunGothic.ttf.woff2 rename to ch6-dev/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 diff --git a/ch6-dev/NanumBarunGothic-LICENSE.txt b/ch6-dev/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt similarity index 99% rename from ch6-dev/NanumBarunGothic-LICENSE.txt rename to ch6-dev/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt index 0bf46682..4b3edc29 100644 --- a/ch6-dev/NanumBarunGothic-LICENSE.txt +++ b/ch6-dev/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt @@ -1,3 +1,5 @@ +// REUSE-IgnoreStart + Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, @@ -97,3 +99,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/ch6-dev/SourceCodePro-It.ttf.woff2 b/ch6-dev/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 similarity index 100% rename from ch6-dev/SourceCodePro-It.ttf.woff2 rename to ch6-dev/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 diff --git a/ch6-dev/SourceCodePro-LICENSE.txt b/ch6-dev/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt similarity index 99% rename from ch6-dev/SourceCodePro-LICENSE.txt rename to ch6-dev/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt index 07542572..0d2941e1 100644 --- a/ch6-dev/SourceCodePro-LICENSE.txt +++ b/ch6-dev/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt @@ -1,3 +1,5 @@ +// REUSE-IgnoreStart + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. @@ -91,3 +93,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/ch6-dev/SourceCodePro-Regular.ttf.woff2 b/ch6-dev/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 similarity index 100% rename from ch6-dev/SourceCodePro-Regular.ttf.woff2 rename to ch6-dev/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 diff --git a/ch6-dev/SourceCodePro-Semibold.ttf.woff2 b/ch6-dev/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 similarity index 100% rename from ch6-dev/SourceCodePro-Semibold.ttf.woff2 rename to ch6-dev/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 diff --git a/ch6-dev/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 b/ch6-dev/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..181a07f63bef8f18e42a5a57463e0e60cf8e8035 GIT binary patch literal 81540 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 literal 0 HcmV?d00001 diff --git a/ch6-dev/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 b/ch6-dev/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2ae08a7bedfed08cdfea76039c1bb1fa1d6cdf67 GIT binary patch literal 59716 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 tC40Gi`Mi4m<9BpxR%m?w=so8}_Gqj!BM1dG + Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. +Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. @@ -91,3 +94,5 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + + diff --git a/ch6-dev/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 b/ch6-dev/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0263fc304226d90e224e53053855ad138303b70b GIT binary patch literal 76260 zcmV)PK()VjPew8T0RR910V(7F4gdfE1Ongy0V#(71OZ0?00000000000000000000 z0000PMjC|*8->w)9O@umT~|AHUcCAtzZNo1(QSv?|xg(ptBYJ zQ*_=t(04+BTtGHcW_3U-8nx0;9m6Dwbfq0b)aSFNK#mx@(E@n&t<28R(g6|u9y@_< z+intOdT!e)-i-)p_W%F?|NsC0|NsC0|Nr}wAE8@6^ENx%QYuLxR0UBifCV@X&%6Jz z2pKEPS#Mcju}zqz)H%a45^M7!NhyS2ViM*GTUKN|uNywfgS0Vo3LWmTL^d8%JCR{J zn+GZi8u=(PD0qPd_sa~dhP&0+bFbZfqtJMk+^;tz53DuT7tE1!!VQTrpxau*#^fGL z0Z)cK)?%imX~2edY5p8uLZB>7AFX4SUVYMfa+Wgh#fRmav3bfY2pJg>veu%#u#s@# zLNap3a$}7Za5&Z$dhuc>?49>4rchX)u|PGFxfF&QxRdBI`mp@dJQu8I7Vbs8#iG0! z;53G^Y%@AC3xu2jhK#rJB~D!MYvzr6$18;;J1F|7P8lB9Sy?V{0gWtF7ZLtiC44Mo z725)fYN2)qW|Y-i+R>Ue+rk>!(`f*Paws^#mGV7qs6vvt6?=u!dK<)ZU7B4d(}jn51jovT!8WLCK{dD`=`oC!@Ab} zjfB;-v)KI55!&c-xF=7Cn-zKataKn=>i2cKDTE_AHLzPNEYy zS!c(qSzC>FmV}Aco5rm9h~5$qLJ8;ke8cQ(((LLV7VG!AEWzbKs~z`FS)xDAs1mxT z(-b(mS$u_qsGn5&Cmy#mTJzi1Z|al{Neus0P)eAG$ZqiWnO#{DMTpL07m|V7iYFt= z94>LLo=0L66ovnAArXn@ditVHShAT9!2fkeU^lSSqm1@4 z;1>-py{AIyO`BIla_nXgs?^Y;O>ONsq7&EkD6jIFejy^*Z$EqQ(T^yDd_-weR(`RQ zE-|7$SPe!LW?)4jO5JPwHk0_Q{l7_0b-6_o%ql-|f)yQAfp@JorP+J5FaUFN78P^U zh&qUr5)~?<5~U*Qs7bU4W6%;~gPwyHN60Ziz!Bnzbc__K4HzvG=g1AuPiHS_+9W^T zdMZiNh&A#frcJ!5q>-8wbv?O@K-VP>~6F-K0|d)nKtg4{Kq*wv5t?tIid zLK={0uu+8&cAZ);v$1>le_~H}&-;JZ7DW-8q(mVExk<|yjO+#gryl-Bv(G&MNE3=A zkR!N1xMtp_R7Uj3Egu#!K;H(A9@yv!H>(x^1E(v|1T4|rcYn&we#yFp6oxmR$)KTx z1hI+_T{59t{-&#P`*t=t98Z6Eew#f-3|SN;i{b5ZrQia z+wQjOMP9DrdU1CHOYZ<5Uq}Zy!8W&Kf2Q{8)M|hfq3HT59{I;DB3Fn$XfQ6Ps79{pAh*J^K z`v@uBVi`)G1t0IgY%wr=ZsNB)w#TUp+c&*j!~f32fQF!Lkq~dNn3cxlC2wK{FpvWQ z09(u7-$_bd2qCkx6I$4#WFJfKs>mIVOI{&*l5CnJiG}9=|IPQ;N)l^@ zkV%aalt6wz^zxEl34j|*maN7ONvTO-SD^<$R&?->><7Pd@40V#;eCO1jd&ufCQXdU z$c&VA-DDjvfsx2WGN?{P$1Xns%?7O9?okMY6lg`z5;A(~PkeWOV#!RPB3LX#!8Qn} ze}4qO>hw*JNRLCK34Rp@g+dsF1hvMazC=$(iQP@+&70F#+J70y+s!dhfDA1=MD0fq zBvl(1XaID%5o6hnR|5$C$K24D$&>WCt}i2@?2$E-Njv(EPH7esq3R6LP2YYIz4IYg z4WneqDud;sV|sXSDJ_>&w{qfumHm(uA#Yk!vj71x^YgA_KlkSkkr-N(9GbK>+gA87 z;F)uWC3t77=1k36Ek=c;Cd*v1O_akSEmMX!*Y@TM_e=HL_rwM{48w#-4q$|2_DGhsR_3LImvL(Y3{GoGMDkXP;BlcMdV5uwg^?&xF z{`5Trc>dqpJJVlaDYqJEBG+ty1va3T>AY`7Q?XDD@uEGfXqiG&K}5wQcnT_fC?ypuYS60654%=!(t@LlsX(-t(p{i#wcZyK6P%#Sk!LvNdRaF;@u77?{dW7yNQce~(7RN%z zznT!D8jTu9O2#0wQD~gTd91-Jh@zX;4K5~uF9`Kn8cO~DYTDZl2+JZ%sY(G?zGlr4xQP6D+2FIBU}6HX&8&j}Z7oijSo z84i7H3+yf+;NxqR=)lFEhIS^Xa{wKAbV#vu=kkhD6rDn7D%Yi3SFO9!McbKw=$G$o zHfO$~E_HDziIpiE+ND3r%S1Sk5eAvT+DPc3znEULlhKL%nbf*(4^Ij(2%5t{4r=~O zXLbE0IY`DmjXH{n-I>YuOuxIs#EtQ^dpXtrze-j0e-(%-zzPH*V2vfyEhI;Qw^fo1 zlAs46iw-HcQxXE&dB#Aeh&_qTc29JtI3b4X#&GMmr+It2?cqEj-8Q82ac{>IPfJkU z#0?k>)&6-H33tz#M{=w%re z#{>LYsolx{FL)E$E3pd6__;(FFtS1|%pA@B@C1oefnDobAzQ7=Kfe~f_FY1u3sGk1 zsaWsIPb+pa=F2Fd%M<&>|LQvo69q%H?}T5PvF}3={w>OepMqV#|NZ_~%@R_Al|qa} zlZ)PudHS^XBcgX^&popaFz>8+!Vd+icyeo^Er})?geVE>3lVt!f2z`0SFcOm4k~I; zCjq*w@WCROQx9eRE}x(Uc-P@}h<`T}0K5Rz?_FxxQEa6Z0z&9$ks+P=Gds!3^1gSQ zYn@iskYc1O9gsu(;Q!xcvy+$mmoB78n{6dC&=rT{*HM~8$d!U>@t^%x?|};ps1vYE zS+uX?YvIfBnx5tKCIzHhVe<8buONrCx)Zf3W%$Mq=hrsH1kp3W=!GhDOC9ia74`EX zn6}IwQW|NM(o#u%_@@s~+uMJ=Q})b$d%J|t1PLM{;uKPd1PO9yS$~@$+FbiqL_`ef z;?jtmO5vofM2hDbgb-#qEOg6$PNPr+S#j1xjOrwVb9Xlb4k3gv-L{ zhy)2i{B16`hq(U&LI7hxiv=p-jhe(L?Py!R1YO4=>ONUJ4si)xIS$D%(~bj%00;_W zbV&I_0R+$isGcbzD1s2$Yfng#LNV4@LY_RrdK(C*oFWt`AiVL0P@qQ_to z#4=X;Adj#y#pVio8&D58JmcRL$4{JpQ3@#mf>s&`j>yst%zDJ%l>K5L%Ij(4H!U zj&vb(WeA}+djD39n!#=}++#+0%|uC=EG0RRSqhyE>atlqmJk?PB2o%TnJutX$b+Ru z0VMUd!qT9Fm$rS82p>L+ovAKg>X^6sVk-Xk^_|TkR4Bl`o@)bzC%YDbx;>XAxJWAc zZNCf;DaDT@h#;+mW~iP|nxj-c)$^SSP_wUV7wB-LeHrL?s_g?~-t5;v6uHVSYa)=5 z9rkM>CQtc(HRAGByp)ZE0+p)3d;~I6`TcYHUc$&lY=FR|$WvXq$A*Y02VMfiNK>F% z%h~;Hrx-JB(YigfIget(wfK)yQDUUXlBZ0SCS8VF{QF{RPC&qdPHPj7dj4rcVS`e`@a6*wFC3oQr;OFUh68%$N1$aJgKMF31&hMO`p7G{l>C#a!7CG|0Pu7ar~& zum2@~`s#z=VY4>CrGTp;T$-|tZUlw5*1qoHH_}P}zJ$$gapZ07_h>uqB5P*$ISf2} z63M2RYT6lQo^1{}<&k%gpoJ9^0j!kQ&kR{nn5x6p+~+!DptphjE_W6WFRl?W!{%34 z%dNNbdE^uftB>)1so6|LEmJFw1XkN1L#`s_N1<(TFO9X-UdPrhr0;d<@7GHo{R}c9 zTgGNlcrVKQs`6$??k2ejv(2-_a{S=7#ab(mx7lKwIQtwb)QLKMmmYS~-f0)i+i|PK zrg0SaJoMjCW`4h(im!G}V~#(`l+*k3^k<#*Ztwow_Gr%*un_kaH71E?(i1H1J|+3u zOlrXpE6AyNyk)E8_3GBNk85A|@Dtq2WBcX;BG=ad1k~@_R^ImB+C_ugB1}8i7^Cr= zemv_A$GS)*hf^IvSJgO6SaYg zTE(ONasFTmN{T%)v@x}o#z!!xO5Yafu=&t{6Q(%fjxRL`q(1d&s+INxpv>}!d=}N% zQrn!HDsV*cB(*ukIPj@y(xjYy(-~(D&8bDtbZ^cRx~d-RLZ`~4<(nHuUi+`dpWO~a>~KJj zH`VY*KprN_dPa!~T_lki5)#?#b0S5$6Qwtv7}mI|7dh4!t4nsox3At+Z=s?kN;lX@ z<1byN9HTse=Q_M`nq%rMoKhJ2aw4Dm9N-=c)1{lKR~Ovk_K#eQK`i!Q-1Mn$t>g2T zq`SVt#Y&cGsL>{xF2@4Ptg^v2dmM7ySp`zyw`;`kkrqZtJsR{*AD4uiE7%jUE{kwh zFW=4d%P=p+_-LTV=#s?EH903ZRqwItc?*LYTaJ&koc;ehZ*l2D8=lKR?tM2%{0{2g z2YvoEnEL17!oLO!ejYsc%i!zJ2b;dg|Bl?2Ox6!PKD$ceKcquIGQtbvI0ewm*#=lI z1~6-#tbtD5oLVfN!D>0ReBB}O=T2?1>!b+NBh}gFP zXxMPz!b1c;q6oyqC4`bv(sJa=$dj)?p(4dflq!=|t^$}!s;H)hTI#5$fkv8WMKi5w zLtBOzbP{X6XI%A2X%LrB8Jj_fGs_^O`*KM`53>n+_{iV;5By^I$T8z)`b@{b(8!@< zGi$LRXrVwX8$z(oOC*T}SzR=pFP5v#0ah$XRVaWMfFZ$-3RS806eORNiiVbsfl-jL z@kncz(V~Y2&Z>=GthKv%ZI7MV_ z7OJUrrp_AmUn(^+(+HE6z9BCg+0xT1sM4mbwk3J{jQ=&7YRk%*vRopAwpEEuL zIeY^MKp_lb00vlShR@ImdvIBzd?URjM21M1ERf9-C;MOwh%gTnpdkYiO7!r6_UMEV zgklt?AObO1ji0d-ds_n(8fSD^7t~>hWptYHA^n&%W}Oy|Ju?Q#2ZSi;2c%in%|vI# zI(mvc^XUN90Y#B8MpC?V0>kK-@e%71&pZ>LHlQey+32_i+(17``h4AW&-0I=`Oi?w zHX~N=DdU+31C*7<22f_OL^-N=aQfjz&|8LgA4VySltD11yR2;64R;DhkF|hABv#V% zPWNjfD~4X51UbU0p7?gcCPjpy6*Oq9ay}`24F2y`%enQg?Tcb1b$CRPV!B z`khz@q6NpWB0+qMWXSJs7UPp!iwI4F_9mC|;VBf@1{me8z7e1E^Ex`1HHtW$|n zjng2c#n4#PLv$PrM$(Umppw!Ol=f9Jl?=-ko+viwcobm1_|X!%l)VpXM@7dR9oIWy zeD;2_071&~sbMlEWIVlzcWIE;=h9tYr2f_`w|S=eIijR4*#uU)n-QQb+#N2Xhl z8%E(+nE>q?glifwt@P%hGEG7glLE&|AM1>Ec;w*h;8-RN850i)ITZQR?K`R(J`WL4 zC6^^U9D&6S=GM1NtP>D8CLFPzS5e)Owc6o2XVSMi)`Ko&r(jVuqp@O<2s7ALG8%2? zx)B`#fo(1dPpfh(5q48gvtJ1)Y6qSA>8SnmN=4780PQ2GtPErMBJ$j9JpCtRaQ|xK zwN4R%441dmfJAT+siq}gM07{}`*gfyWMLru)?n#GmHXIITB1UGWUr7mpr7<0Qazkm|5}+9Zh-Mn$N3 z=|jRMm}`t@I2v=_XryiG;`sLP8eQ;6*O*cyJxpMX)q1%>WruybYrO91JqR$Z=iQ4r07RL`xh?1aIne$cJdot-C-}tg$O)2W=Pm_jhP- ztipk~5vBz}U4RzOaZ zFB#eRXbtToC|E`0>2py9&GkH2jL!G7CWZ2;A2=1V2^x&B4rKl(bE6sojCIp3x7~5q zJ@-BE&?ApM@v2J_B*2JKhtyXeU0}m<~P|VmiZxqQ>l21N>5Cf8F82BJ&)1sL#JYf3j!KB0g|F zo533!N-X?2{0n4uESEMG=5i&&)5*(87?6BEC!ERWl8ya>_<&lspv@_XFS(U8vbt#_ zsD`aMTb2YkV|<~s1eWyI-FGiCdE`aoLhg5m?4dnpyC;_`3M-o@{lPLBN?w8^pTLyQ zp=BYWY7$6ILqxp<->85XonRPe!!@pjW!#Xk!So_56@p->GTNFnG#gI4idZq(8#cTpWw(8C!w5I9WLmJ;>HYjVLa&YO!!q9(WMiqN{CWTlg)lqMX?3nVRI_X_zazI-)^2L{2q+NT?(xIdJ(y6o9 z9`m(Ef`hA)bm^*|bnDJqe)v%%nKW5FnKqq`%$UhVX3gd-bLOfq^X7}~13zmd3l^#* zzx=A6ELzN3mMmu_D^{x`B&4il%Xap%W2XwTYq#G0Y_AHkZ@=FCj#>lx<497X! z*Wcp$+i?x$#7TC-K!zgtAtoQ;Hg7s+ZZ4DF~0Kg@cAU9cszRR z2@>KA%#NOkQdwk)pmdazi%LpSRW;qG6?Jr?o?g_~Pfj$5hDOOD3CUrJ5hyhxWTqF& zjd-X?R2V6WldE8&zkIiU&88>nroow}^JbYr&oK+mGn-m&G5=rDle?5}^jjE%EHf-C9A~w0tJXB%n$>mY ziAB`)$f5z&Y()2M!j$i^*^Fxx`21i|e6-3|oBTq`4sy{+$*9 zf7Bd^aVVij(j3dki5!3A1);#nq9&G|(-k>WHK5MipwoumgZg z2t^o$RE#8)G7wj$O!%Rdg(Qs9h=Y`a1cHhnhNyfbkyI3ZWR#N1mFG~QqNFNS#Z{{= zs77r`b?OSCqBg2teMt=(3TV_=Qj@0QXy^qsYc7O=kzI?H{Fs=9u(0xD<1~VcR~#R| zBmrS@twcG9iA#`@% zqYC_)o#X1-lE>WjAnu`30!9K9jbK>0FL*72EadZRQB)yK7pkf@Qd2L~(5R)URa;xT zk#(IyvAA_Z!$KpY)=d=pys#`lI1r>l(ZH}4$9n`8kqtSyNx8auqo*GR20cT=Fg6KO)5gp!0DuGn2NYVtU;&3W2xOp8B^n)A zY{Cev@^!lACz{pfBT8-f2#t&CwD zdx?%w_!BLd*&9;fLTkjGEUX=>`6}qZoMOVE^h}5H=bELmQ*Xo>0m;sbf_erQZT4Cz%Fy>*T>+CLFo+!X;EOfpr;gjXv34C` z6xn{OQLr{Ox$;Xt%G(SdymNJSE~*I?s&4-bt&~Se*XK=#dvUc;u)JTkrzCFdI?0IF zueZn9L9Szrh*;=IJ5Wt-Efx|6>RN^eL`K1oaqwjl9GL=7UO_yc0?Aqg)eqZffHGRa zG}%QzQ_ZVT9WA`!zh9*!)5`c}NKtir5Z>8H5Go(Y*2BGxV(Hy zMIBXus6s&@D0)fQjToQsVmpQ46jl?=3VTWZN8G>vHkmj^Tpm9xCA5G^LXl7;6bVHU zBSnCOAn1_@Efk{>UhEsss;C-dP`_L*r)Y|Xa=Bd9ys9P6U@`}7Mz&iW$ra=kgOXBER*6Sy&0#IszNQAGCrX!n(iu*=$dWpfWFRSMq>dudA(=ob_)%vMmf+En9C>eK*kDl_{1Sbxv;LFN zlAd-$h{uHmhEcG&^+QF$0{SFjnb^BR&gsg(3;OMmhdbTDZVtG1>!#PDq*?AQL&Oqz zn#6v`-X^YQO>nrW5kS$!qVJe#b360(#3Nqo0-m#~LhCO*lD9TI9p({QAuoC;bp5-= z%u`Akdn88D{|YW!xq?o7H5HkiR|RtJE>gJAeb4}ONSy=L2qCP(o0GgrSVJ5+GZ|@d z5y6M`SlVj0+i6;Arg8i_Bbh}2+Z{_E8tJwPN1@2yp)?)wC1`?%)V-#>LwpcliP{_0 z#1J#!r$PuvEU92i(8^i!5ouaWC!oV(BQ%#QTnQ<&_Wb#K;A6I1vpa38x#^rD_uf4a z%+p$#;)J@RFYTdj_y&spyz3x@gu-Vd5vh4bdG4L<*GGUr?voT7iiED6y?k(@V2Zs? z(6CFLe)|lJs?RN*wQKo5Ye#x*=9%c|JGKhRnUWpZEIS7wu(VF~hMMsH*)lYl0~WXQ zb+SNrB6r^tP`T{%gbkfnhTM$bA1*P`*UYsuusIc*5Hb@3?Ia|=`&j!N9Fsb8L5GyA z!yix>Noi>cxpJBGaAtODeOK-Bp!E)KoQ6T1;s!y7D^0@#CZB4DGY6K zF2$v|6qh>sLCC8=I3MTpAz#o2IE4WSiNto056gp&q+?7~kQWMYIv>UP##9A)p#Z1z zQ3{V@%eHIV?`wa@B}jyb5CB6ong|gg0F9P*$}mUFEQ^|Qgvszr23|6pQcfiq62WZQ zc5Mrgu1Hs|%v>cIV&=-+mAS;C)F7?&VIh%NN-QO%^ssU#v6Q&8EOAFWozte12|A1{ zQ*#)EK|n0!$QXzL48s5h$#fhBFc^a{G6paRA%hs1QwCv>^FU^nDN?3Fky3)GP5LmY zJhDFWeO8g#3>g?iTDzk{hqM+)zr3{BrQMVp(m`!uo?2rXSz2XGiP85(6;@hYxaFq( zPF3OZxV&ys;VSaDyskd99A2B!GC&-4!U~Ve<8{YXem)m>V#v4&$jcV3b^e28!m&aG_q~1nr%Xqd|s4kA>F9dy{j~pryzM z{In9bbYG-`br5ZOwdr|MKWF%TF3)ZOo&i32)!@xP&7woK51zUW(t4KccW5L@Y%ZN@ zy#t32dgF=y>KQP+yUm)Ur>-VV9ZcXwFkDw@AfQKZn*_7R<32L&;ZITz08+CdlxD~H z!TBTLuD1|}2sF%{fEwewtMCyMVYUY2XJY5=hO>RRG2+ehzB*0Foi~UG!`w9sE5jv~ zl(TcP((YOT&lIXUM2O@8bpm}_trsmajydbPxZ!=*&B;krk6@}U8tkNfjC7ak00eYy z&oYE}dy!Ftwl5dsHN&{=$x9W|(bWE!4UbaO27QfF>CpXsQz!De$vW@;1lfJ9Bi<27 zKeMp=^(?U!4r@HXv%2!=D`aiG7?$02IOaRGC+$2VWRWXU9oD}P&aD!c2~Fk!Ph_Gi zO(b7RGfx|~`YTZpP53LSvz1s@ULBH)D>h2yUX$QbWTrxyuCMOZuyxpMkD4;1>*&@p zq&E3N9e|Paw5k_^;{><=31aL&Vj6x7IN_=C92reO_~KnyNMOU@9AJBT`%pT*Ey_!c?w9da83@pcnTeg{E&6;WOSmzN@$B>p{=SWMa)ri z6hj@GM-hV)WWHcf$L2~%X%+CLz%B)FDIg17%PX~{QpgmGv8k=9CM`6IuqIGk_0WB> zEs0w;U6Hh@6IVTSUu;W)sJfG~lA{u?YNFbNCN5GJsWBJBFc+zd)EL8JC8k=2QPa`% zhd=}(kQO2kfd~yk18E=v5y%y3A;OhFga&d&kY9oMkL7*n>fy9uP{PBs7qx7nDFR36ujs3;-R_X&EJ^ z{=`5J&;S55KnH*Z7=RAMfClLDVm%<119U(yyNra>PD0uJ#-S+QR3H)0tAu>E>6wbS zs#;S7Ber68s77EVqwL!3j4>;L#c_1avM;lKoSoa zp93+I#*iW%=90R@T;Ro~c(24l!nXz1U{{Yu{#Upn?TJ0nkp>cY0K`c=?kJd>{v0fw zhO6T!br=V{yAH_1i};!H$iY2Q5d0xS5dV;L6AGxUqi^B|9;X0I1MNDn-wn(GJ0B z+S#q@OJ!-j4<=?tHywhYT`L_=FG|9fap4GEtkerHC}n$w@ZlgFniWEt^$9Z4)OR8G zw%{V%)-d;d@M?C}yra7r!l~~$eC8}@PjBwND7TX$nONTghzCgyD-tq6g;1ytj#_q3 zQ*ab^qO<`Q_SU^@V>mEFky`1nT1Q2W$x0COOhtf_sgh2$nzRTTAXlhN!&Eg&;@ANO z2U2~y8a~?;-wdPUOh>e}o~)59TN=vpWRbkUiBdGRF?Y7)vMQ4R7KWIR2+&}#pVHSA z#VbnEgNPI>RTAs#S)cuv4W&4+jGZlaQrL7xfHE#50v2{5|GJQQUC6l>rV(Jkwx$71 zL%IkGl47Mw67sC+kYQbImC$jTlA;_?@Rug9kjAa` zj*pIyuAV?3(DBjn(G>^^ER$)-XF&>5kTRek1u4jeY>G`m3Q|1EfPy?oK{myspsl{P zem$#S8wA!zfcjiIgG-p2icQ5uszPH>SBU6@UX{gi zNGwMthg2ak5_3lwhjb&|8v;3G4CBQu88cOeB+QEsBqA{pnPW+J5)*N{K|Y*=E62og zNGuu}4;ZHj*o#{dGjTIoS>mRz$5S;wmKM+ z`?u9I>jGFWsSeUTo`*;ggEYbxkcrL^6M#y7$?U*PPT;=Y9ak1drC5ov!jTv(wZmJ* zt_}u;tC&o9rqT$EZJH!O+GvugeRJQ{c$~o^1*T=Fp-1p{=bm}N;6j4!K%U!(jL_0^ z>+E&s&xQ_alU!$cY{&YyODYcB@!$yfh6 zvj##ka1j}{F*hGcuQgW}GNPVJlsFcisqGtCpja*BRBBD3oYc3;(>Cssqv>kaDX>i7 zJ~WvgM!NxuU48$`Rux^z?c;Y0k&N#ts9OX$H5l%ZJ*+MU?UgTR;`YO8$H>$R28u!0 zZ1_>jAbH9<4EQxWBCpwwFQ59Ad?uS0=F_dHflAqHWJl#xY@mWolT`I2@)FeLd#=z> z(kW;!-#fcYkCRu|P`|dOt?aY+bQ|ilVL(0YLYwQc=Jg6SP%30`v_!=lXxTDat5&hv zwALbCYKMJyXYq`wi586m^TeD#Jo7hIVs>;}Pk+|h2JcPc`LB$aTa;$|q414&`X5u? zhLf<05>wvWNZ2Xc2IB79FqwbyIDa^3nL)B}@*Tg{Av08%7Vk%K0HFf59|1lrjR_U- z{G4SS<|TdE=r25Es5rw9Q*qu~D;zBqY^(BFpXY@HL|T=U2d(x00c_Cfegq2)OoFzI zI4&mrG^b2SZ8TYnsRbpm@_Ovr7OOG|CTGM}m8HN+M>YvnDI43PjxX9=-z?N9HPoSG zNCTHupk(OW2{etP(^NRLoc1IdOyo5_7+w3GDqBQdZ@Q1T?XDHUeRF1Ipg+fv#@o|U zxlsYq&u~EEQbN&?hE<=cEutpso>MUGii(74W|rbe$|5FaX635yI7;OaHNF+D&lI9W zVf%i$6y>ZrO)&d7jKer=1>-Od<0y{8D2&56jKEefj^Hqk!U!DaNRl8F4XJbVj#HQ} zA-(9jdFl7DYL9>R%96bh?lXOOqm1OEf!u_oO;o)T^6JQ#2>N z?^S(WOk6C25Bo8d44REPw0LJ69QgklPWZ93X=s=SE z&|EFfuHI$KZ+u}@nWZc|Z(OJu?onw7J8{Q|8V>4h6y2aHHCmM6j+Yrc*t{RB)$SE) zOepu$m`WQgh+p^i^em9JXQ}|*gC5B0R02H?QXDdkhTFn@5?L-3l%{N4*?O+lNP|F} z$CHaD>7`c?5~smpj1^nDlLiHxd>93-rWO6A_Z{ahkr8#0M5{g`<@u^r~L1y+BW6S68vy;`D1v z^V&@Gnn+9L3t@hFk?jWXZoehk-(cP?6AWdyLFfVUURng{z=IKq@kW&)T@r|%xW(}J zpj5YbEf%}eny@-U}z!)$Twt?UQF=9%gzA`i@d`rmKY^VYjzcOYwV`Y3l`2Bd8* zzwP{0Y5}Z8ZZsD_@|K7Ieb`^fj{Hgm*}iQeFj5Ox*+PxBr&OG@V7{Vs!{7R0hlOBf zDPd&?`x*Boj@E)E=9hYOJLyp7!I<66UsTNejhh4e!eY-g5pgjlI$7-_48&BiE^Y7= zUex4+HY+dc;jeE^Ofx51B594XaU5w%!Bf?|=y_viry@!Qhro>t%~46wNYy$@7H1pK zE$N&j4s)G~!mc^7nEg^on7rLmvn(#*g!{(WEGae-7e1^5)1-7sAIfIAY@+5Hlr&9L z%TZZO9&*lioaXofk(T?*ftFG=()do}S-e8M(MkDYo&4B*m;3uG2X@$U4tSoqF(O-s-ild+|!25+2Zh@ z{PVPsg=socj=P;U`Tb+s_<`z%aV)2cWjp18sY$Wq`Z zEf?`Xk&TFuLe>*QmSn_)(z7kuzALbmr8MfLDlXYrc$J_Dy-qq*Z7Jzk)GbP#Ka zCJ3dwthdtCBQuHwI@&m+aZE!U zrCHE^X&dMqns1+8MVGA`4PeD05ZKug(GnU*W! z;<}(q&Y5OTE2o=tuhTY{SGu!%!D;2{EaQ5B$`dHLv3VBm6Ht?G!kih3k(WOh?;FaTSbl$Fj6aRXcml> zl6Q@o0wWGRi^%0HzbE+)w^s6hk%DF6q8Lus4JOzy;a%9ODs>QwpZ^8{R@^!aBA=P; z#{+M3PU36kRnuS#3nzulLiYy3*N@6Qt%Ys&DCvZ)WwYNy9c-og?ss~w_ubpd@-HSbsd$WeN3?9G*5=lzoRqOBGpgC)XQBuv5a@x=1Bq;^R>~~RknB1- zi0SS4so9vh$`3e<6;IXo!BJTn!_vckzy@va`#$M`J*|SGT4y2f25JmiJ5}%CP#<@8 zesLK_agt_vc>*Y#Otsm~+xH(neil!Y48lz`$z+){$&a6IhM5zJ=Mu(AK1HjlX=nk%4OgS9F8Hyk`$=aqx;2MP*1C8UFgqnhzM%#(Bi>%#< zUj#M#a$NH-4_n(n-S-kXIVxIe8dbelQPEDi_GT%xuhexQ3es})bV*;S)O9e{0&_Gr zsN{*77EeoUzW=0+V{*np!zfI1i)3cPm04keQDnH}n3O20qH~%0s0i~ja-9zi+GMoo ziF0=BI-|1fl-5?$RP^b?yEh9^mA0m4$BJ&&0#DVnLyr#4n#0Uthz1c2B57s)rR(NC z;fL^Z1GZy|9-7o@(#~YFwecf56P=09^v*U0f{cMmkP^|V7{EdvBUH&PgOT9%${?C>SDYT+%aFTzB~cn60MK}_MAJ%0 zWJ|PJ44Kv1p4UUm?b^0WBDp--@;X*;3WG{4+qP31I9s+$87~i8f_NN78x^tyC&HPQ z8`jrxgCEy1cqYMiUy=ea&@T~Ro_oQ1GDNl6NzJe9$-2kp z{gaR3XW6@7_+w@F3wx~M!Rx{wYqq3hEb?`0OK$}S0-vN7;_%}W9)6$1;kIEo$xboNDFhR46=gXCQ$#io>CuW8V zajhFeMe8gD=O&G}i;Dtmr80co>MJHwZ6e3>@ia)o#D>IF+dRet304PG$=!F0u#SXs zEqP7AtmS^Tdi|5%6d=K@${~Sq_4h0lh@*OwYQq~1Qbo#-WE+lVm4_o$hr2UOH-qUk zHHes;guC)Pguvu(00PK{!h0kpN*|iDV7`yj<3uO$Ds~K9JbRx1H)U6vaC;unm$Rb9 z0l01%6bUO@kUdGD+IkcYa%+`0Aln>C_cYNF;`2b5#>Y+GO{g3bl0mgi4Xx#$Isa{y zmQsk-!J;QjLTjwsz4!dG^wnJcXWH_S@ao4HUUX)Xw`FPtX6TExy>Gwd9U>&RKFP>o9Ir+&Km*1W)9 zMsn4I+uYQM+V;S;zc;d~jY3hgtE+Bh06&8ruWnUL>N08>6N%(#<66i3IX}r6n-%ak zI5rwV(y|YzAv+qHM##MTjA>Deau&E{EB%rA9irp|?649(!ejRHE|%izd+H_Po%y2F zit~eSc}m-He47d+MHvN$h*1bpQ-!XMI|{olzN?;%v7y$t&c06aXl8#WeY9|(Gd@f>h|!sX0>gl@ zp7>w5quqvME}r{{c))iDQI880`Zf&>kxZ?hx55}@EQN9AF>#VJXmxNL^S0ELd|c%k zf$Q8TaFh8Q-0V(qcX>hRMK3b9XsRmiVYkAKCRC|J)RYoKO^sMR3t`JWV?z?Dq9m&3 zl*Fo7;;MO(L?=QMQa3AN^&@0*O(cf8XH{5T31MT)JxhZ{7VjjgK3f;DdTM=R)^o$- zsvkB+BD7c-Nu=_6T-UbP-|6UiT)HstJmOR?Q;oE|Mvgnk_1-e>AN!I*TO zx{3THJ#?I=p3Yk3Cn#jyPu=;C{u9~U2r+H1<=4%fJBsnjrN#r`o!@1s6xBESr>Klo z?d3~AlUGpJ6e6iaDv?U05}5{)A(>25Ci2oEv~~Qid7|0=s!Uz8y9#|T3PKsCOw34+ z%wfQsi=7%Xl!+PX(KrW;qA_c%qzoxT9?LwIaa*Go)Fd29;`VX-fFyagRaHDx;oG!@ zn-U0t5Qr{9AOu2S1cqP;fe;9a=pqD4AOwb>2w_c08B*#og5`RcpJS`Alisk5of$i8 zY&z`_%h<%3u`^>cob)%>exF$RF6Wwdi>0*eWPWzB*fW+}qS&p>+^Np7BvOkKK4>;q z#5e;C)NF8L4D73`quG+|nTLO~*#BwhnAyGM7-T#vOBPt1zo&_1YdVh<-9(UBZYj6n_9|3LQ1Rrhq)T3S zffdw`Qze#>3ZrVm8_o7)|AI>ZlGSn7F9-yWXLW*&ReUtFSI5RPdSwS@lAFUTHUh^=SZlr)G?C9N>63_JT5mVXy;D6$vHFq1 zURprrHrgAd4?juoi_>CRSWeBmaJ&|!e{rtHJ|f5^1*aha46mW|9$i$U8Aw*;wywZj zt+l5$Z{@Rs%_iT}KC~yGC?(ue9TmD^GZd(s+x3R;2 z%6%5qdv(rZE8fi#sySwVhNcuaX;dtq8cnC3m8LdTajqvyg!Kl=hc($*GkI+gWW&M( z8ws+)i8W_Ftwaz?o2L=#fQ@qGac{DK#ZLTjYzfYQ4df)RsmO3eyP-$zPi1#(%31o= zJa^~mnM%V@Q0RRM5aX6t$S7o>MlA;~d5?z=Y?o_~5 zNg3xtf=ixXz6<0605E^)KT*I-a9NFSjVo&7kl@~fIE&9&f>DP(Ap}E~C+1dG1a%T6 zX7RpI!b8PDB7~UnT)(ie&@wibpAQh1h@x8|MuIqTi+7kYI-Zdj=zvj}(wmb9H}Dmp z2^eMOQ<*>;juC}p1R2qo0uNt77!q|7F(`Zpb`RnmDP>InlzRdQfMg&;00JPGO0!G1 zC(A%MOct9%m~t?tLnemH$t#Ey#S}XL1VA#7AppTt8eNtF83G8C%^^?%B~SvzOgR__ z!u59icXDbF6O$&!rWU4%sXFjfU`mrTNt0$IP0}Py(G*FMG)a?u(u}0} zG)Yq=pQHhdpl6Jpl@(PLI3kXS<2=U&5l6&fbzOALCD&aRE4U)!6rI6y(t{#S=K(aw z1rdkUbRw*!=E+#sQK#{bpu7<8oKf!hRepvs(PC98<)-rJa1n1%&#s-!)GKuYe@8C3 zK5|o$(Vw|1eYMhBLjnmAtF<)X2S0)BufHO0G$xSNS|6bT{dCcpJJ zaUqa~F@-~;w4feV)ubw5@TvcE-vjxKx0!o=Hw*FPxAheoE6z`uo!M^Hfj9)RJ0}cF zrVKE1;?Ghz`Ee?+PG01>xXY^jtfWQ?+2wrJw7epez>Qd+K)h3jQYl+*I`TXqby2Wg zUJsCD{|_&-otAEM@JU;oEbF4UasH5sC<6hw73s@r#;gYxt%eLPLhaN2Q(h8&JuF3dQ;=E(V~t z;zRWV_=~>goyW>!sm?v|ly~n>T^IFPzeV(TL3WPP{5j2mIl5(iU%QGKsW>GU1jNVp zr1vaJUJ+TL+PL@YJ?Wy>E@BKYAqD5~Nt)y7x&);`7)yotuGD$8R+SC%>oZ;9{PE4K zwO-iDsrl&Myc~orbeK>_-f|;*IDt#79y#2i{|&MslA_e7S~VaRosta-2k|m|a`D~1 zSFE@#ZH6=FUheqBzH!q@U~3p;(WX;khXa@D2C43__c+Fzy9u&D2Y$(<+C?W|gJgKw z$ivoFVA&7x*kPYpjlK0iPad(DNFAE}Q%6Z6R!?L?>Na;>V(kVpLi%064GEme{idp) zcPO$T8?LN7cl}_jI=S^Cd2VCwv+G>0OS?_bcRcSE=d}l0&kH97UOG$MY7~RcSRW3bj9XykzN$&#?f;`N zoI`S*!4WN7-l5&|EKn>Vh&?$hv`Yw@~34 zl?7#^=@f|OaR2R{OPpWS=i7-CnXt*CGz5eR#b7d+3?_rg05a=L8JgN;iB0Y5;T@uD zurSIMO@naEEdpTk&P^mj3r-SV3t!RTnbnn#MQu+d40;+CJp-Gbg-6eU>3JCR0xWtF zHoa7MFt*Lb1jWKHF1EyXy0Qd0p$y3(Iiv#V$RRl-0i4?)35Ls|zl;Ksj)d zP}rIdxpkRraK%;EypZgD)JkqTS{){Yz}R(t*@Q9-%k0PNc-OD)J+kB|zt z=cd$6*3?pCS@s1Ag+lW}VK6hOsVNldm=ER%gPJ;=3|cCUPHiQh)2DDwpE5b!2;}rB zjnj=Bjz40*jQcHtBTkCnNO}~rDUq>BO4pFyq@)LFQlf^GCdFx_Nf80Udp!@YL zLdT-zkkzi}#K^Mh6rJc&w2+hWgw5(tv^0GalF8~xluF2C)gz=9Qdy~PgfvbjrHG%- zD4*WaJUu64IwN3uE)V0)ety1A`|RtpGDJr8A*1V%QESL3E@V^|Jly%N-0j%ck9v9Q zAHW;X@H%FcF<+HG@jyuw`jWdA0S@=veF*U8)7AslUUKB-FkQu?2uo{W9UKEpCh)}U9Vvrhx67c)h$u1u!ASTEUb zQ~g30g%WB!Nh<&ztltbvXz3A$Kx0*L>szKEg|DIGR%P#z4w~74)sVNpcq{^{kTR)k z-#wk;_gu9w|Ck~3Vd&S3rlL4#)M!!t1X*%h3{bfEDeQI|*#M+T*kAM>9AD z(D#N1!|rGPT6|4QJhD=FV53VnobJ~NPN4g|JwQ9ao0rP>d=-8tR9aslFykth?Z~O% zRS{PzBEMpVBkX`nA(_?5TMU`(RID>9IspR@DJLW9X5p4D zlee3qSEX@L8o>#Nm3J^~m15w228{u1c$jVG;4Ax3vyAeZLKy|hl<|&Wcvosc9!TFSe`p&Dt9~yPhMf(2ex@_DYq}H2R0@+e zUFm-G`Ha72u|n#cRC&I8Mhs65jhLjeZV10Z%{+K;sC;5lkSXfR&S}kg(CD zq)JsL74U|t)rww|R!my4B5B2xN-5K-)##HnXhl+`GJfIAu6=uUc#cuU<|K*#jBMF- zpzqjJ(a@P)`}XYc9HWZnT)%Vs>0BlKY~%n2aH|a9dn@1jE<~H?w4Dt+Q(5Q)I`Zqt zuVW|B3G}Qo&0=O9LHyCnlcMww*^(q!JfScOqcA>3VH8FY6oC;Kg;5xe@i7XgFp9u% zY^}Sh!C8}a{zQ}0g?=_0<=MoZ+dSp#dSA?S3&qe(#f*v=8f8w*ff${y(sfc==ptYX z>LhXGWtks==R(hi~h0L4Um+ISB1{q+U+`?p742-6UyN zSAEC*A5SGJy(862wFV)DCDnLGs&!I#hmV75d+RxpaLe@@3Ke%hq&fMP({8!0Lt(k) zalfXtb2YlHN?h?u4-GUP8mKrl&~NBw8=X0Eym zF!Ik{n4X$YllL%%I=5v|DW`8YR+y2JWS*fGP&v3p2IeEpL)V^bi8|HxZ@Mktl!{mA z>py8$Qv`02S1+PrBRGBd#3SBX^?bFi%#g=$kl4;lY7Np52ZFUtFOI~KmS!oBJQwG# z5sTpgy?Oj4b}!LqZGqhz+$1FDxD*H1QK#(X&lIQCp?g01MKVrzTrU;piNT6baTni? zCvkyUd`@AV|1Rt76z=_5D!ljT&ah^7M_HGssp*>nOF_kibDUJMAHU3tw50DFttDnj@6o$kY(_>-tI?{DrVX-q@|QE zva8Nk{Nj@}whINqrQxgjOsy>Q8q)%D&&x|60<3~&({Hc8t> zlDk{v(^(pRQT`?QwDBp7_(niI?Vlm-i*#}S{=`tY@dse&0!3x;pz>Y%I4<(cA;c?hB6dE&gVh|GI`^j9%ceF5V@WRs=3_%J00oNrkQx zRHvfOLz+~8nPHjtw%Jg`#gp~r1_m}TGC;F|vO%yxt?$wMD|{6Jt3j%PsqZmhz@-7D zL6unIB6eG3h(kwi%q|t_ea@_2F($^u`ie<}i7_#cui($6f8UY<50S14F@$$5A%e6( z5|q@9%$c0lYY-D-VtvI7!o)njf=l0$Vgq3UvJgNxzyS_$KyH!?X* zS|LbRUX8j-5G!6+u3Wh3qP-$52^A%gR?Ry2i4Ex0FM_5?vo?N3jpj6#`o+f5BbhP) z3O>RXg)Ij3BLsvZT;EJX0W`{L6pI;)nT6FTt5G5Q$lHh>aqaD#*4S&Wct|;ravIP=U~ zaD#>V9t+*@Yn86ErL6#J;cem7?8QAqv9Z9$!aWw)S;U4O>@3I%kyzN}Yj74qno;2N z>e_YEJurN{3T{|C0ss2~{O60E{k(r~hwbQtcKjJJ=FqI4HLA1fe*!RIVq-{{!3=s3 z1Asz8mJ1IGh1ep(n78kP{+1S>Q< ztZ`TqSQizA4F;nQePE&SVQ3603riwc*07OaW}(?&vp->HS53eO7Md;l1gr6rT}4Wv zVWC;W-20CE+_WTtHEbhj_PQSeL7eLzZW-5YLbvXMhmm815K5N;mOl3@eO_0VkYH}| z|0?!%BY>%D`iK{fJ=$+S_3yxUq8a~V_~K7PTInrPvcblhZk`o3*yXUZDxkq4J=^N? z%RCs4v_E<#e04tpXhew4`iPQZh;e3^Z>5cPJL23^Gknrtz6yafrnN5mik51q@n%{e z*Cu-$b)I%3U5jL(rN4buf@ne;-SiV9%`g+pvQVDQ_B!Umt}O)=)8D=t!8FxYcm2gm zH{3-3TV$0j_Brk%tZBckKiuEs-<$DYwK{cZrkw%eWEf$RY>Tb7)qW>jde;o*^jEJz zU7BmJhfwh{jWk(~CDz#HfRhTIn&F=Q>NTlH3mx09%GTKygEVIrIhn#kWGGNp{UTqripH6y-kYtcCrkQKG^>)g4##L>xX@>JV zRu`{3ZK2L_bP*dMFsYW`ckWoK^jUJ?#s^ds_{zlA9Th;URHw;D?YiN6WXH!6!Lq$M zjoAp2rOvdi-{*DMi3e{GP+?-gq)q~UvTg?z zea^F8#)hZ)ujGAhBBaPsrcReJOZJcBDtx;TFFyPPi4Y4et+Q`+ezrU%%GGMnq76=8 z58Y~C+k{!mD1Hw;0bs$?f_M7F(6I@@)Qs%B!h7PNbjay9YTB$Nn{4~O zv(Gy98ra6Rg=pE%(9_F!h>)Y+#^3XI)Se?3UVQio5+QcM(|##Uwmc=u)oRe9O^knE zaAp`NKseWc`kmRq!y~w4H3Q7Rvw!V@1gqP-W0SGQ_;YmaHV>EJDOSooFb-61$|swQ z1S4ABaHXtQO21O}E9JH_mH$;J9C4-#q&mS=RuF(i=9p=+v4+c%x+fnd5-VI^-F4Jj za}7n$1y{NIg%&Duhb|v3!8KbEk5oE8mf%BYy@iXHZYap|(IUCOXo5q(v$s6*#utUk zViOx+Qsk-9Wy&j}UCy9Mv)0Qv#XmQYim#3a5XVmih}2(g(V+E18`e0>q>1nBO1l%M&T%tg2FIF z6+>J}q?TEhvX`S=Ryh(D5W_G0p_)aFV^ zL}CNa|MFRy!7|D;RQL$d;)DnnC03$TnNm_!wOSpemR@#+g{!Wy_S)8=PW7mFA%!-q zF@^O%{iI(ZVcvX*a$Q%cRjf><8ugmA>d>N=)vMtk963_-I0+M%UT(6S`HPgQt3rc~ zKQhCyu5IykAv6V^`D$aBa9o$)B>?28N zE$O-viWnk4B0r?)QGJOZ1uc$bV-X;PK~vzF(=;6q0r!R=1R)?G=$}Fe5ky8sf{3&Y zdbO$&DiuogC9Pv38&X8h={XPc@w_G0KT8WKb_FC-cgid!jC00^N7LyQpILL8?Deitl2n}av) z=&eoOc;k&XrEG;1La0HJ4pE4R17zbO17gIQlT?qKWFef!8R0Aw)& zvgRTt2?BhpP&$t^Y0_8Eb3c@PPnak&{}PQ=gYirDy zO*9+E$|m&knrqu4fGYX!te$>Gx;J#}tKe20&-O9`4-H08@WW%O)5FlU8y=M|o=|(| zng=n{jXqds8}Ja9qfj;_OoKIhQn^aX!omZJEl=E;hku(pJn0^5x-G`Jl{}h<|7$|| z{;YyJCr+zJZ~UvB{2|Tefc7p8WNKNqxgjnYPMmYpgY6)|`0@7Ok^nVrm8e zg1|u4#}YZJFe#kVH786mKSAJH*MDs@AlU9a}^ih085uM1P}5ue=Y& zV?Tekw;L-n3oDy#>;K#3;pJ1puT+_G6*+NFmsY`%iYrAwFO=CM7~@EjUpm{Qh>z+& zd}+<(rFW8&6T|3q8BSaqsDKrUfD#>KSL-VG>f~AORAH5f^S7rgcLXna;j|gE=FHoK z|8@44Me8$mAtLNSDl((x#dP&_QedOKKYD!J&v{bO40c=WtLw_ zmDSf;>)!7Dy7f`Rn$n_T+u5-$_YR{8R9OJ^cJNe4(x92#&EN zG2o3{f+yPxs^M`}A13-lbziT<(gwz{({514kPgE-jp#C}+nB6zJtpK#%9~O!t!R~A ztMys4$kA_Y1J}&-Y?irZzFBA%n{~|+EK`>4Q?;651^|M<5a5M9Wp8|5a|--8YGwD+uzQ+(b^87|0LwHs#8C?gCs>q%YPB3>NeHut|l z&_P!f=q`m5X~qau+Y>x!6@ zAGcKQbi%~CngrQyCg*w&QlQ+URH*hWb?UuHlV&f|rrWFZne{dciN5Bd146rUXWzmGOE0-pYXXR<%e`BU|vSX)fa^t3Z@)IOGrHPV*ppaEwkn%u?NP`k# zfsjQYiGo0qhCs3lLMBgIX|;{wU3WuD+8&Z!U%2mqKP|L~U%A9m z%Z4wEL13yFZnac7@ed~wv&MP|B}tH|!FSQBpQz4y8>QK7i%eN5bLjJJrRw7B+vL7N zTYiBNBW;@%q~H@&nMU!HN6PmGssaz7f8{OI&U=b|V7DjZ5($H}MieX$XrQbJ zbkM9!OP{eSizV^j*{w2`=}Z&r3}%RJHnWNOTvr#1VMojS(T~RY{CIR=dmRQ#nLOZn zTd_dM{T%6*#aE}}t)vtwR;p5?CIrHHi`301J8b+J3Ke=apMa}kutWb>;N_b+9!fmE zkHFIy8l1U*od6%Sjo=~X8R~D>zYb>p_^Jx>wS}@sBNP1a$;Y4ry{>|yZK35)ieMNy z{ug%396aMM9@v)4A|uNOxQ0u6lX6|*RE~8)u?!losi ziqBh77&-W)<4zm3+x_O7Nl&C_8PoK`%S_EWY0TEVD2jEu%bw13$J1Fc4L{%6xh92k za?5=#$b*br=5D6TUCeZabJ>-z%wx;AssN?L`?^@-hT?s~aw9@suqy_!v-so)W&EuW zgd1`r2Ec;40KHoYKy^M(jR0kep$ukK4Bu1$3`mmnc7L(q^icfY&i~&d9u2<-JprWJ zPz=y90W<-~09l{_b2}kG(k%f2WDz)dZqi|&!J&41s0%;$qMg~UR8O`e*lguI!=)rNGY^ZjW=XZySmJvrfkP_ovk&b6jQZE~33c?qGNj_&hfc;#P;@+JG( z$!-TrOAc#WYa2q%&*Y`5g1MG&`QF2HFhP5hjB}pzUEo}IyBGA`XFm67+z=^BOtHif zEw0$&i9p$3g6bClrqEBLj(V761~B7Hn!;4}bn(j>ausXd!Zvo4a9Z8XwZ}F0p|(2f zs=twbWek#+#gjal@)Rj`m2qa6DZ&ch*=&zv&N$~!f4MSl)wu3GS@=*ZUDfLMVXf;} z?|y7l|D$|k5>%i?Jjx_3{G1`+iW-T9}>LclO)JRJ@5bER{=e>s82KfL>M7AW$GYyKq~j%sC9G! zTj>zKSW8>mQC#sI=xkRkO=}e`vTfRuzG=3(R*Ch0dt288s9=)i7V-;uT0Sg%UTl2C zt!{mLqlS&GE(mY471l^zIiaG?Z`m*miZ5E7cDg?8wM zi7*JCwrpzTZYQt=VcDborr3`c;I^&HidMTo7dv z)oc8}yKndIo@NtV+P=w^Qjee1vH-N1iMw!DVC&--^yg$ykK;I9vXzgqd|mDRJltFzi)hW+O> z@E4tb3ot0rUdW9!vPD8oI3E2T%`jIUE>u8) zNUM;@kmQgov%X*mxCZn91-n$HZ0%ZVjX>8`FvFK~ZtJL9B+hwInj&T%UL2gyW?bQm zt)MLk3z$l&*6t?TOh4{kFf)G3kFiO}J>Za8h?&hrw`|7B0i>e|vXG)TSP{y{GNYx1Bw2N6$LYi}nZYMj0J1s?)`GqUcT*)2Uu|tIY0~+dWS!?0LmK zt4Kh3Iag3p&HXeiL5sW7nO=3Fgw7V%x#Bw?ti`F2<76!YLl?nRlgnVsaU!SmVOvE=Q>RS`@?TP#EN%+nreRon`nzZjZzyHSagUR~g zuKCgA{CL;>Wb%GG1wWgjpHImzrreFTDE_SG6zP@e+gp1p>Ru^5DkHhZGGde#y$NYI zF`Xu*+m!U1nnC|(R(2NUWZ9Oy+uD=1<gCAIcf z8~?QM%YO>B@<)gwE&bMrFPiX8Q{Of7Lu0;*uBw=-i>;=x$VF6MWEDkKS$LF2)Y|Zb zt?WU$IkhB*mgU&;?zN)(E$wcra%oL&tg^tgN8&dI|~u>Ut1{lm_9q#ud@m; z1zS+JgRMwmunpxLY)4}V>_Dvyb}s5#uxoasyn;Pw1lWrvGuVf62=*hz!2vX8z(JH} za0nG2soL&e|?}bf}J|fch=8=AgN&ki2kO2}By08-xCNAL%J0KBa6M6GU6w(s?zDG_B zQWL*$1Cn5R5*Lm`k_=7q!f8l~kx5-R0ZB6~=?fx7?s5(fkP+gFfq52>zLPe;2!PIdS+pt7yhJKqKF>6Pwuy&K%u8%^s??lRv3(|fDgz1^JNVP5Y%H|KgvKhJo{ z`13Mm^%Zly>J3--O$)r`D<}19SNXb<= zwl4&Hi~{}$B>30}{18afYx>1IL1vAA0+}t$xwpD+y{ z_2eGp(GCl4Su4=%g}4gfFRk(0DMT(SLqD07&r79>>rlO8? zq~uO?qO|=86rjaJy##VaA~Z-MOwys#W+F-^^vNPpg+K2(|Fs|cHY&+q5H#4Et9kw+vsm-0V?FOvtPQ3Mi4L!*dyq1FocXC>5G1^=yv3Txn}wNT|-_-!3j`wsqyg&OPOuMJRXBmA-niU7Wc z&o)B|!2jW^El}zQ_~u6_^AmjcGZX`Cg)g>2n_mc@?a*!q;kOey{7MAGL8D!S$8Ko0 zhXCz`7Qd0J_Cc%P2}nFN*-v;KfB^@Il0(q%Fi~^_<{c#u9D@bNiIWpBu~G_Nt6PoZjxlT;M{GJ>JD7EOVZqfOZQ2-zv0XSk|Gse{6q3QglGQ}lr(ttAIX;v zZ@S;#MHYl!jUfg*LT|LFgP}LM%)0h&E0Ds_TfdHMvgvQO+4U#;?E6=xD)%Xe9Qu}1 z&V9)xm%gVTw?kFj?jR+h_d?q}^xnwJ(ARuveAnWGI!yi(aHv1ktA0OrL(ujJeammP zpF*b1q3yZTL3xBe<6F(3tQmGFpGGyh>hCdpP&qVqrX8wIv*!OpHGAjrL9L@Tt!aJh zTHl8EMn0%bw0XANYJYE&KWb|`XV*`0)7T#64rq+3#-A{ z0&BrI3@gF7u&^AAD{~bVgR`}T-Qeum`8lv3oV_}~1`dL=59g1-Z{Y09e1$*2*)P}w z&i=w)aQ1KEKXBeZ1Mn9(zXkt-iy`<2T%1_g2k!UGUNQ{)hI$VCmU;^O4)qN9UFv!8 z`+lhxp+6t_AS3E}pa0bd$Vebfd`c501sD*I@zWT+bV z&KM!QtAU?gMtqX;g^2-{bj#pd&DoqcKQsywGM#LoT9jrVd;n^n4dihu5tM9NuXUDV3FrqgaXYSF@f3}Pk4)Q)>-RH4*RqQep=HPkjnvZSM1 zN;I);V{QHZet)NFh}OkzIpDhkezya4<^iqw6Sed>)rjJG!I;ajNm;D&sO|1P>A3n# zLaLbr&&qZ6L|7c`=nzt3S?;<#k2Bx-6~rTsG9g^6%GjjIv|HB}MFFm8L^t|YS#NPv zUPiRSCe_1GLJf_6S0{)P!)kPuvZ29@lnW{2zy$yh%ZTvrives{t6HvNph~VH!^Ier z*tL&H(IrZdcudKXJAW{7Wjuxhz{Jc-xp6I5&It#sX;lG<+v5r-G`<4_IB*g?rwn1$ zHfmVZd4Q`{iH@e`9SAn6kr#t|p0^4;ASbl!3X9`bOH1eJq_Pj!I;$+V03R3yCmL@H zhYC5u#g$ra7vi~E-MK(3WGxP=2YniN36HBU%Q|YMg|m4s*3iCw;I9t29vfK7+eTo( z{=uv6zg8LRhfeWEEn*tZ=)~uYMzYqIw(LTSc;d#aE3iM zFruOuM;7qv-mfj)Zk$2SuB?0m$;ozBK4IsHM12%l6qmU$fEpps;Szu`Mp=>Pm71A( zQOHOIaPAyq`D6e#GNqoEOo9dh&Lwe$L0MwB#NQf(B$;cuBQcwR z9ON8V&$9owq2!PcB<1E+Kp8}sz`$knEp#AbvFO)uyjPR~I1J#8Z^Ra1s2hO6o*f z*H2_Cb%}1Im=%m^`6kt<%NDLHsM(H_5L*wC!P1-h^U8j?qO0K4dMV0-NlVaLN>A zAf%cTbpT%TETfev0f0CDDhpBZ%9ra<>3TZuRznDkA|W}&DJ67yi);sq1{U(Hz$706 z?vw-tLD;16cB0=nV`w!lA{GHCCIIdL+}ZUlS2HST1>P}L`NJKgRlkbq%F<}T;2Z#X zAKd&j$winbA(c}N5h?mQ-D`~jnyhoH2BBSXk$r8J6!PKTE==w7?zyQDNQVVkAZJoqmGc9+YaGkjOq^?6=TYyU<#|VNnC!)0#Lo=rGvl`j?T{Ta%Nrz z3Bs=m+Cyf#S)>B&%@`u8c9w)9gwoM#AeiH4Yg1?+gPY~%O@1#+DFxXjvSjH6?T=bo zE4QjKsnyd;wfX78+%!3oc{~@$P918-&ACMuqBDivQb`Zu83t;jj+vFyzD74H`p_`rT!%~&MGe@lc|5gqzX%yZt=eZuqP8D5!cxoE*$-m6pP_U>T<2pDKnAF(ILSh?YUIYx<4HTx%5pdF z_%T<5=t8Q1LR?KN?dK{NI=FQ9o>$?-hYz|Y(>%<7QOJ`zrK;dstcHo|W_D4kv&+bJ z&KxSY0$93O0`i7Wkd4Iilp9BESak9uk3r6kxo$;>I1w2?p3p~H+8p3GU#6>|h0Gn7 zs5)$J2;hc+7%4QP!3rcrTIskytqqjz)Kk4|VSNr6O4U_jk_5uz&;Tev*S|u}3L%5I z6=Noe=DNIQD870HQojTnNH7=?_Art%Dt~$(@hI!RF^Eqp1ww=IUL3g-eWptB1q_HN zgU9eC3n@B&5+=4j=Vc~L2|3IbOc>~+Gi1L$cIJo;RO5V^fRO4C=gucrU2i>EyKwdZ zJX;CvsrPIeHK1j9QdadcX&t#$(dS_ky(54u<;%3|)F{a&R7m%a3<$zo)N<+=_N6l$ z+GF?6NAiA561}MLA9DQ5WmPf%Vx7&+85Y7IQvf~M$WGQm$cSP0OCKJ+g=v(Ml!Zb4 zww==0qTV2{a48xFgmeYY9%`*S5U{|tQ0$7claq1t4O4QmvqjgZVQQc|lclqNwSTAM zrJyq|*xYAmZCK=@UH3SQ<1Q206;LO>uD5pjIeDF`4NAz}UOT zYbEOc=xhBUlH9w4EZJM`FT9Thldj#y_0taZB7Cl5x@{JZO&mbj*%qexPkeC_m4a1}y;F;8`+$W>l2?=7}&MUT$Syt@&UV z>=`bvPvZKtQF&Hb$Hv!jgG|zsbwEv>l!1=ZNIGBbksJsp~bp$x^x+o48gA z_4j#9dK{#o7}4_ja&ha(UiU3=>+etfTK%883Rd{{apY{4T}zvcU#YPkofh~@^m5=2 z4u#MsIB2!U?rGNEz)``q1PWeYI>(}A>npfSDmOX3S^?qR<5I$B9PhV;Qg#*X!lVs};aY-7dAGY}CFORd zbxLX%l5ODDS%TQqZdW=>4#w`9;;dUD@G<~9u4qEe4VMS1xq!A@2V8DrISLe_#>qg& zFp$&>jDvtO(X-)Ng{8#{qC$UHjA9z`m`Z0h*IM7SvBcOSS$)>~5|cibEyv)!V9yM5o!9eW!7hHzPSKxq3-^G3UB z7X`+_fB&M*xAoh*>dV8)K2)9xy4PY0Aq9Aq-nG;{ZzPb8;2o_iZ#^%N0xYc|X#b5Q zUIG2+V)CJYAGqg_~As0LQVJ$3o&t8=ZXi-u(OM)v^il&r6`S^i~g+;dP;y zIFG=L)g@)11$RyqH2hOJwHH-sK-`2hN@VX|fmYR~&aTgh8qXfTQ002d*Dp*smz(ED z(r46x?})q->x5O=>ts@Taan zKX?h2TxY04s>URHP+xjdFKcr)soc%gxVA?utGp{&o|>j&l#ZA$)l)nvAl_g)HTa{0 z4INw<4Fbvm>HhV^JBuA&@KGU05;0~mL5(ZgHAIMhM8&fQ>k>H z=8hqa9(_BNw4l;j~Ca;>i&uy#sLzZjBpFksag(+~d=K5})ke-g&UY2i5%Trzh z+u~`}xt2LM;0Tec4m#_qqqeUs3EyW-hWWZ%(8wWqO=lM^BFHt7ThSa{bk*FBk<*YQ zd`YoKEkHk%tU&ha0@BM@?;CNVwbCZyu zh*EE}J`3YYYFnTz1^i#YJB}3pB{_t-6E#gWZYQ5?_-Zeq4^!kJ5Rf3Raz7~T=iKaS zK@Z^P`iuoWxwff-O%{K;(Y3Sa!OmJuCH|^Eiwe^zA6hUPtJ{{mu(fpIp`3j>Y~7}( z5{k`B9~%74{bZpI?g8_`hNPb}TR6tzjv)ct(}qUHm&C_DHX-Gx0~Tm)Xfrv;PDjl{ zeHWgsg!?E+>%&$?zK2W}4)HK@2JLRRWA~V8{KD_zFJ4e^W?+UN>oQ2@2A>p(4xl~EwWtp6UTJ&Xj7v0N=+{z-IA8r&jZ zY&jV)c=k~JZ0G68O?PZuvWFW?B#J<4>*6xyvHE`{BH0s2H5z;`0p$_TDbVxwS4kgW z9DN5%D4-te1yOIlPa*LJyd453r=J4__P_Td#ChUfi?h@q9q+@=-HIOp5yuu#|DwOE zuhZA!;-93vYj4G%SeHoEcnk(E20jG&j_p zAMhoCeIg6HE*zKXf`HsK-G`wR#!l_Z6&QhQ_@ay~_~uOcvr-&S-R|A(cIJ(T-a7R` z0C8VgpQC$z(PwAUKUa6PKF-+jFx#ge2aw39Resyf)#%@QxB-c2S(5HjzVy`l=FE4oq)9E&BL{gmrG^Z6rhqZV5M z0zUe&(9I{V|8S0OuaInEM|Z9D;f;_o!n-C;EFxAz+82;40AUiW8P^tq9qdi_{@2Qo zSiw64-_^g(ktYDBN5K=BQJ}e+;&wBRCuETI$L%(LLSWp=DoBdf-dfaA&G73>GbO}B z>NApXw=A51K!7HMrKKI1D7JS+?W?s?UQ<{{;6B7SvAwWQpW>E3?O2qPt}Gj zO%nQ6yZ+eXI@yA%JTienR#A9QuTa4ox%CEEg-Wl@oT&(QjLqpxm>Q(-RN!tdZzhm5 zLBT7n$*3o%a3Q?yfv)#`w3*bz;8G%f^8`rXj8?G05kt{K(!Hb>atJi(e~G>O=td^| z=!Zceozn!UWa+OxJbJy69wluBROW=4QySSb&B+gMe_nOa}pRqj_DAuIHS*7Kn%t!rs3QMdI)CP?R2%971 zO}T{T1z2YcvDw zNhQ|iX8*y3h2g94@>w{*t_Z=Sh9hXHheMo(lrPxp$asEqS&xju_gNsPMoL#7YqHU09VkN8O1AF|Fd)eiKnyahonv zH=^o9byq@f35+QPhNe=ZeyUxFQs0_^=9~mmNUmb9cf%H`8e}auwb^`Dc2wxSIn-fZ zz%}ZEe3> z23g3%Y{8Tp@-JP*Amd~2loVCh!+jhM2CZJAHXz~VOU_j$u{m~8ZY8+W^Ic3YyyKE6 zIYxKsL-pf(Sg}$oN8P;!&ORo(iymTZx8ki&?4)o6+)w=k!4ur9(z7eGxsz2K10vx$ zfdooRWv$#i-R-Faeh2>@04ANEh6lx*lbyo5>5{4B%%pJ)OQnO`2D>wi6-6g`rSbJUNq42H^m(^;dhCBp*D1G231ybQaW`S0X zO;~udojqZZK}&-~YQ)X4-M$Kig+ACba&f3br!xXM_L-tKb7SuvN5O6gJ=Od^;FJ-b z!i5<5ED-Cogs{m*e9xTRCdBv*vygJP`4XfJmyOFvo_;RKwStuHU>l2J(~G}0HQv&P zH8EWgB#oW6K;z?+Hc!jj9K#Py9&H`U*T@+H!4AuAi&iECqB!?UO`D;E<3==t%_M0*^ zU2((4t3x|mQIRiYCB2O8%1x~&Y%FA-GK-!}AXSg2>x;SB%WRMwXEl<366}+As)Yri zv}MLo$()5u)DV35@5&kyjVUy?^X~FRBT4*3Mf1*EHvg9TKGz%P{l*%I3UQs_sTCo+ zySC7{;4M>cMX~4>yKum*%uels=P7wlwh1zjXUk~!EPXy;-PXlnW{bNMr*$`ogc_K{ zR7fU&_X|B69s1TdjK|{wjSQ#g(twWguQ-{&q(45i2qVSyj!Q5R=5h0D6*Uz7US~~A z5v(jUAtrYy`)|LL<8c@dbWopFb4$~oCMHwcD^g+Kz>Jz}6(-GFMw_{%NghbirSEO| zYpAttxB>~+HU;**&2H`PzZy^MjS)f(O?N#lEVto}bfxH%+F zGJ%djXfsXId(CHlryHR3b&nxcD=+0e4%o0GQ4`H29AkkRNTv4fWZe!5*iLcMi(oB|= zv1N!EV;!*6{`uJjn{f5Oe{=Gv+kO*ce9*ncm6(kyA2%ts8I5;sqzs9%jcJLk>k+xO zM#c6PR}QW`wgJYL*|;w!_1olI%go|E95Z#^i-6F+la7@eL&|u=Ne`q>ctkN{-C%1N-)K#uI;Fp?g!f&0=&oGnard}g-BvvG_(T>1lD_fL z9Zh|4o&TXNqs4zCY^jd$rw~fOHcpggf8OE3>}*yUYdd#^m*0xSkIvRi)N?SAbT9Qk z3*@&wxpc`6%AxNfuJX>_o`JlU@@r&V8EeZ;_x+xvzCUrZ8-Jn+c?o4%wzfQ-VoWV+ zKVjAWM2Dyz&@&fwf|H6WR#zW79~E7k1L@j7&r>W$DXS|gM0jr2u zM``hGx}s?XS7iN+XRvr+2SeLFoPadk8rDkJjm!}CljJuk>(Yujet)e#4mi!feOs#j z2HY|+Gj1SBER3N#ThZU_4p54>*xZv~iNOWy>6 zXLW;3^$>UCJJ18{ZEV)=$#g)ItEA$ZFnXIoKCg{5WKBO$&X=T)Ovlv-yGX>|UiK_a zlmS;rIHKCo9M1d3uigf+mW<~%Qja!gu$FQn(0P+ZU@WPmHt2=?7x)6 za`502D3p58j{Bb;5+U`8m|9c-TmvTE=BJR#^XJp%8ZqCQnM-`^kth${$g;vStaF-F3EgBp%?+118?`#OUICFk(L{v7)B?%&v#@!)qn- zfj*W41D(BJ+v5>sR(esi1um%S^dhJ#|Es%M6LL|&W6EVb?q&PQE1wnbo?j`ANm5pN zlar!wG$g?9ib{r~s^$4lj65Lqj{D!6qrUP7TUmW_NDfWLPJ(9r8Vov%fLq2(FlVmC zxK1urW4?K_q8%Hi!a2f`SK9E#fs;(n4)w9QZRBRwO44^Ya8pqMWWgqAmX0{%to!Uf zWY#>}oE?ud8Y27OfrX~8V8kL`<1*rKLqpEF$Xf}S@4ypfYifbl zR`eC_DO*@o56La_Z=no1;gtz~oo+-s1?^#=w7#Lp88?mWJBJ2Qz$x`Nmu%ZUS(Wl0 z9ycG26#B`wj+jQmKdGdI<2B3}*00?vy?nLb^yn%-N?`HoM9LLXB&(3qZ=NufuD&;6 zl3xl{c^tb$qqdId2 zS@mJ%dkw_ZXICkhq6*%UK`LTazZtg=w(_y|pAE?q%Tn-w=ge6-2IX6$s!aYC-keIN z#EQQ*{Viv{Vq=&z^*^Ml?duYJmo^}cqg`Z5u=kve2T3QDC?#@upA{=^p83FZE@zUl zkgUE6Co2ViG?+}fUGD04LkAnu_E;W_QrKAscKO^W(4b)I)64fnPg!4YbY0nBmUh`; zmPa8DCJ%W-jUFPF!C2g8RDnaHYI7sU(r(%9Mgw7nHC=rRn{vv)K1$s_h_OgE1MC`s zeZLqGkl-m5KbvICvQbrtDE@~42G>-Y>n>gt7=AgIX1T~gEVM}qIZ9A|h~dFr2#iwh zeM`d;ac16}>~LQn#OSSa4E zeat7sTjrlTAO*F#sUsSlFWCfhTsp9d1>zVC@~G!o_^d`RUU`vNMy%9sgM;`=IOF1L zw|5zG^uv3#AS$n&74}@;8;M!x=-azpT3}miDSJqrW>y9VA=?OA$dOxvvJE|>=k3HC z*uXW2d2NW#S`&?za*Z4D#x3{ayhp1s_+D=92My z$2;$3ro9C*Qx0ff8n3a5k_2IDh*uGHFmV%@_zk>z^O+{ZH;o(-wgLs^!MJw$il#c< zXwi}?UGSl;(Z7)Ei5sijYJ5o!6$UQlhrFZnl0M*OuXD&3thm>CH16Yk6Md<zp>Ng|4=6;8!Ps`qBsf|LsdD( z!B|AZ#W#JpRZONjQ)A!itk5px0v$`!hp(JTRGZa5-AY`?ZZ{u9iQY(2Doo-nF?AQE zH;Xu57?tz_-yIMt^k?hth)j2L@KCz%3At7byHCW153&u`lVbhgr2sQ%L((^Egv^B` zr=!YVSVvN@$o~tI{J!FmTpq_er~u|_qg*-W+SOzGhdE1$!sifBDXeKuRvf6Vcuk32 zWv%niU9r9@+jGZa%9U;>_3U>>!|hunug|>$y&4Y#rC_fT;ToXWmU+ZHBG3l_WUtb} zKvaSKfa9sZFv_%-{u#Hy(c?_L^&olN<3w2r{s_g!r0FR}*ekpNjB6tkc zCML0aimaItn7cWLe52Z4(v?diYWUW%=C`eE3F&-Dn;PdkIq<67_Yp3*m0PW#{?E&b zlLW}Nyyu)=xlRswqDG(nk*&>8Z;3qN!qhy#?y+ znX1fhXyFo1e8~!@2W+cy0|`weW!`j4e_w=}kQ^paF|m0E5mH!9gDC5CplC68bymRE zmnJuLowX}_(#@+*oEn79ZpSvlfdm&urZ5+E&aD8@#-LyY0*-opwDz&~(k9lqpTqE9 z@VD)x`-)`^%$pdS-&i}_3EnHWcDLwDZ#Gtgyvc33pR4_@%AXFKQz(InPq9(nrnMS$ zS#D*%O;gc&?1-SK&Gm+gzdBd<-M^DnuXV+KY>Fb#HX*ltT;SM8(+rLJa*En+E9yy9 zXUBH4y!L2@Nrw#a&@n`czj-Fb;iByD9(z9r*b~>G*0F-6PK(naaWE-MZS$n{uNjA~ z@9HCEYmy7CQzmtjr)JFA~>G{)x^ah5XRBlgSce7 zPkh{=VOYLCs;b)7v^h2Ffny*A;Bqnrp0w zh!%uUD%usFq1`%#wqq+#y-(91MNhGmlKF}uYsOn(s&mCnY>%E7=lpEdiNW!F7|!$S zX{A!RRA@m+cT4yu6AhMJf}Xj&I7XK=J%CEVR~2+%3Suv7>|pHR6%}0D8 zJAVmwsO`W-X0kiC9959)Zq~*QmH`?hV4r@U1#-Yk(?LpP`Zu$BwqxzDp(-<={auUO zb`4;WRGA1~`JenD^#X9b=r2EZKD9^PaB zns+2-@D5J!LUo$2$9;bF*Qb6FIz`UZU*a69scJ%5KiyY9(k9j;?zqCwW$wXws4X4$ z+;!lfr$ui%qvN2OJ$0J85Fw*)p5m!?w#qo*&3#N}29NO&JcbAG1}a#OA}k@ce0D_DzE*GjUBXSeX8!yHV5Vr~(M%q=n+W-Jw3|Oqvcg?XdmkB=)i`9A*L63;IN{FLQfC zQA;~@6b8liamh5>Gwlk?UV5VZL$kz6E+u^rWilNCxz@+J~+x131d z4+a18D4x)rZ%gyPZ?+zmTgQGFNsN5DB+6_XvOiI_DR$1_zVYZmg#K*3r2d>_#|A>1 zLRE90Tkb=Pznr}~Q32=!Y5TTRNvc`<_2g)0UGwKBEP|0->amd-Z(A2(LtyxL>)AR- zJq@+O`^vH^XrM#wEz8BxlvNDUP@CM|GUiy@1U4Mfc9c5oaDzmhEeVA>JM*S#SC?5Y zT}ZHLH=Uf5br1q&fHW9i#5m?DC-1=0!akVKd^q0T>g)%+%_0nNDt|N$lhWRdo^Im- zbF7*KORG;wC8<0lba;}jrq=ARjVzCtilo5 z3QOIf^=p#}^-akuT?Gjp*R76E)b>w)~9UB0h0g}e9S z;hH(KiHxgPVs4bmF5{cPww6ti>fXlFXKNF&gTK==zJi{_Cg|y|LYOSA-nYkQn2hQ4 zEph%e_4Ag6=5Br*FOBkQY88JErPM2w%(v+h@l}I;OKX0vm8hFm>c`hwHuUz2SR#Go zlf?r03u|u*hJ?^Z%I8Wre`j8K*;S?ayGH=`2C)V&kKz?Fbq@0 zusK+P1}NPqb=Mgwl-I0V7ZR**)Hy-+_H4j$v*QTy~d5)dd{Ev)=K+k}>3Y1|bNtDrL;&vB{A7SS zH8{NCUZZ?+ZrBx8CGYUd!!+u*y?C(VcMw6lE6fi|EtVkqdrtGwt72jQsVJfP3AmYs zS$|88B`$hhujE*C@A&l(QQ!Y1pVAkgQ{9R11hd`0!Mo>clS_ZLnx0497X}FQ>O7i- zH4oxwV7EZ~6)Ll_SpBg%n9GCeG`+AzwDFfZO&s9>>SWZ1fYjjXuLm-$9@UTR2rGB$ zjeB`s7u29OF0~#uRy~ zWjzxNSp*JvT}Oi^cwKwvtjxnJmNy_47ztf>BvF(jcJs#SYTZhs(%$&;HA0uMWWl96 z5_lrlgH+_9>A8I)a|f2Rc!4oUYHgN3( z{;4Kz(ho6Uu<>F{x#&kRx@?aTz|B9(WKG%Lvi8I%$*jERe~U4}!v>IGUJAkVhs|m- zv37rn>u4YlKRQ-YXUtabM=UfFI`l^Mu*0}gIe&O%S55^h8I<6I7-59)A{zL`!rTTL zxYi9*VLucDhMJ|C0Ss9N`l%o0G>y^^63k1mcYG800=o{20fP;d)`f=FrL2ccjBk@D z&M_Dr`5U%#6L?L&Kgqmi{1+H^tg4Y03CchoEkL0i#`0@dR8puVz>nZc z{O0GcG?}n)2yDl$=2oxf0w3|DYmct^KGg~^j`T~z%z~)nzbjveY)K})eG@{k51(#@ z;5|PGz7t$*tpx`=e>uqhza^Fanua{5v*TfKu^avkcH!GvcBKE)K!AUTUAP=;8N8|N zw-Zzmb6bSTB)s13kS)7?BVuiCvoMj8EiVDQ@{$qJ&U6DTa#am#)NzfX_$0{@ATF*R zRBN1F978=2wCRQ9Ln_6Z38b8!NH~UqF_Ra^QfgJ%tg2701i@0~_NIz~@J;#L`y#KV zwM=Qlb;X@G*0t+bQMI1keI5rCqVf2Rq}tV|=PP1>Y%BpxKw^lw%^%d8)YcvpOzB#e ziE5+S81dHD_lb*5k?=2SviSKhv}S~2=1Fzn6^^~PvuD`sU=s^D+eqjc#<8?fqc&yZ z+ctk=SGQlQwHJkExUK#leNz;0e0?7=v`X zS@hV9iY#7^+eiA81t{H3q2s-;dgp!dGZ z?RTsG`&I_5G2y*)Y`!VVvKWmC!&B`wMF{?gJ-}aftT@sJ&HFbx`~)~KFh@9WfW`RmS8|J z*MC;TW~uO&xA&oC zkz&p!h`QOW0wuND{#-s;o`nzrtlYPqq8JozZ7SY!PaenMdWVtk^9fAx#_q4jC6&7omaQ2h z-wS~S?IZF)Pf_aN>6|ewpK~{}2TEBmzW-e)aXuwevnCp_>IFI02{_T$VOP)(H7F{y z&rI0Gb;tZ8aB~{XuAxvx@(NnrASRywj za-9s|DOD4APk1`YzntQZsE{RZjBIBEZ>fsF16-b-fCL_f7!FUcV7M#tpN7uZcwz5e ze?z|E_bUUg{H@;{dRas)6j!d9d?Ipid}VpV=zzc5(QQ=kx#gwdT&`HS$zbG#Fm|I6}QKPjJwuF zFL7W#iPhCD6%kN?Gdc2Gf2i1?cyw;P(lQ!}TE_d;+T41zbvzoej`k~$$kn}tqGP~f zu@4jr_Ff?Mx^J~MZc`m&kCZvRVP#wgw*~`>@eYHIqp1JW$^|w|36aNGO+HjXeb_@+ zThl#RM;}OeUv0_gn@gX<6xC5#Px=-M77sB%s zn`+f@QNss`Jgopk4DT-%P(9aMl-!!GC4C;{-rZx@Cx32a15c@)$OE6D6V>I`k``5Y zaqVVOP6LB}*RJXo_Cq|Vd0)> z=T#`^2k7&PS-Hml0R2O}^SqK1TT`c&_8D1$Mn|!x5|^&Jnq+!6@4)3C?^nJDJ0WVi zGj}~m;436{@TnbB z_OnQM`t`r6yD&Hh38R1Q$DiIfm6dF0N~ds1f0-w|F@SyyM|aIiRg3CfVmy;XeZTSk za*0~hpu|gsE-8 z8=rbsK)sZld?~8z<__6p?6P^fxXLRSKu=wDfx01%w2($!M~d4pg}+B6TFd9}Nlsb| zq(d*`CjB&9U9`-x?KsdD(x&}c|3B=3u%Jr*YW+Dk8h!{nAZdmPf)m0&4O~1_gqndT z)?Vf%9KH!!Jl$*fOB2%BFC*|GSG+dr^Qv{fqY=BNu->a(*RqtMUg;ax8(M^F)a#|c zVpH6C9|`J(`Q@bvGoje|dhEVaKvz>P$D)!gIHgSgi*#+x32soh*c748SzT0 z^4H&2z?G4iQ7z(;`t|-R_o-6G*=;ru4NXr^)+`>zW<-rB!A509DHno^e|y6#YH6n? zr)>k>GobZanYL0gD9h6jD7tYG_isrI3WY(U{_h9>U!POSpBfj^RYUIE##l~?AXU>@ zCCf6a&3cL+Qe~W{CD0Q}i(x`%B{7)7_qcqf?zYN5@T55Xc|I%j>*3PP(N4wE=E(95 z=cs%ElXa&`(@vF9;VOvD%1*h=9(rDYM{5}}Ip9;LvLP^2<6m}?K@vlUl!bijP3vVl zxsuKA7ewK(Rbusp?h0c|5HC?xxEQVUyn1S4`pynU+MGo$9vOt&=Uw**D}_;ebQfJ5 zVYGSjEu9qZ+-(nKb>DmrjdhTsmOffhy+CBvDG zCW{b3Saye*maGd8i5A+BYx7HvmOCaeZxyZOiuj*q8@o-*ky*9;fk4UoXww7C4Mmod zDpx(H$9MAwN~>y~)O%m3NhTJ5C7(5q>}%6|FI+BuZD^koI5bvfVS;i>iBjnN&$uqZ?L#Bq%H3mSG3bQxN;R{csd-VG5RNFOL(ylUNnnqRK~>Xqa80-1Jxwl!!5UVTRX|1RBZE>RbdUtoFifffi=$ z4GW-f9_rvE1Vxf(%#(9u1<$s*0V-@C;ycEwcm48+|3V2oc9sRBO^jc|p$kOEVVLtt2Mj_8G7Ym4vL zpxY8#ushaMmO9HegT>*TW?F`*EUW>G4ET91F;_N?2muNCK~YJ|vre-A-Sn7Edt=En zC6&bI!v#l~rxVrbdxR12-?|~Vps1F;wrr(@k!3L(8~13Ftu=k;Z_xCwiP7u6AgDeO z#`Tq7s#p2NZq~JjjwDHjvsL0UFr8N5md*x5uBNAC-?{RCnG5~NB1Rprm0Rof#e}cj z`Bl*~`=y^|W2ZbTvn2KO+*1(=?i!7w`?!2XRJdB{jvF#MxWVaFj(3}N+!w!0J1RaZ zccE~2BI3v|x(&b|Wt>V>w@3O%MjU0m5I{V|{bz^JftmHaM&m@EG3L)QLM~oLNjmEh ze|5U^9(3SlCT|-2@S&wm#>qqt+Q9>;kCl@VIU&xFZvypgeg zE4PBT0*~%I`;t?l%NrO_E6~@x z`&rcc$6Z{iEd?J8!%Me{qLkO};^;+6*T7bZ(%oC|hdv^3zyzK39lVrVugXL)S;sC3 zO%oAPEWf8p#7HJQQF4BK5Y2i8VC#HjFh)w?u+TmW?Pv z^h#@d%0IEv7Y@a%U`NYj021 zUI15eNh)r#Y4k~MzQHdVhk7N1uYGvj3|oBLhwC3{p` zz4xVHi%_(ga74mu>Df~8O~lan+02*M)_3%ejSW%su&zuWOW1fW_OZ@&<#Ky*?aBnL zZlqxNk-Z8 zbDVYDgyx1Z8)E?$jPy?dHa=I_(Qs2Q`JVg7iKPhTb~DD?E?d;*e~&gJFKospt!e&G z)KCbi6#WLz%zPgM6j6;fljg~(5Ac7H|hc!tMO*m#mebNz!SBWKsf&o1OThF-7# zD)>5ABM{>G0u{F&G5>pE`p7K&KuNX4ZS0oF9kAV3^fD26V4wxL)=r<(8*r)Rny{by zoA1bvjbE*Rsz|Z`UigL3Oo%l|M}XA$zAQe^RSDixprt(xDLzZFC#h4RdEM?xxq_{s zJp(B}OL6qoO^4_7yUJx9^ekgxs_T(&su0Cp&603)=Nr{wx<>jSXA(GOMx|M|Yy8Gd z7osS)=yy*@VD&ed=^J(xebL-Rv(Xnr= zfe(cAMe^l%M*Z$8xst5~_KmwLJg?hTQFNE3^x>~c|I#(qZsW)*CT3=8&oT+^$*xDf zE)Dm96J}PK^ou5>^e8JVx)CR7Ib3ty$Jq8{UnFT_$i&nlkTeF0czspLnS zR-7pSrqaHuzwXMGulD+XGXxz=xrH*93L1JdR<&nO9B$ntm&Tr?!&S*HpOE2*_xU}t zl^0eAAffgBR)PUY(W>^IN9@HJJbs(S=Ltw)p~~wttA5Bs+21%jX%dyZ#_?rMp(E9o za4PNbf19xSxKWu^oQHu3yN{e9Je<3`p=jVd^yaz}kkBh>bIuCLvzJ}}Tx^!u2ZYm_7}{W?tTTB`?u59r-F;zL8s9!Z#w^3RM-ScVQSZ4t@qrH z_5ni0X3orIxQ74QRel-It1;zNWaOa#U_@d`SG+awIgnCkveT057QI3!U}VSf8Ul2jZ>wNIbfm86lMST5mAB3 zWLKGPhNC0KSw~e;O@PK(Izu!#4O1rxD^env$6(AT>z0|SN4ED>cy3-Z0FIemqc#j= zvxeEcR-IF&)sM?&^)o%{ZLGeQLb|=Bu$JCD!l`Xg|mzY9*jdjaXLP;YPFR7&D;bA#~*L&1<)eXq;`PAD`n zb@rCc)syu5s^m&Vg+;$_QZ-|9p54owuQ|k4mapkt)4U{S)^2CXE2h$&6>I3Wa|PeA`&H|*Ns4@5(T zT;rkQgGHOB(61``*=8&3aP~w#NF%9BSH?>$+ zVl*qdyA`=_99QGMea&Q$uVc(iungnYNtg-pKK=D?JY5K_kM$}1_S@w( zwECxiP_v+;bK0WF1t*3&(<;8-JB4)k7=e6b^Y7+nmsVs2Y+Dj+_3oD+0;%BSXuE$( z*~N~rPLI?>8WyCfADIr3*e5~Vdof>pY-N#Uk<`X-J0I=(c?FyH5CnYT^I{T8;9p=X z_3EAsyTrJqdzS77sh2F`Zj}x`Abl^*(+Ay4lPZT`P#V6kP4RrTmqgtIg_T7GwK*KB2- zJGt(<%5l@$-N_R=NVIO?w5BfUzA)d!ou+v1sZWiOCi~8i$|8QMX}cG zy0g7tF|R(?ct0s6iP&35DxITS*Vr`&n6`*?^gZ-N1vt{jooYLQ%zwtBC?Xt=N~lgu z&61JtdkPiVgPGO}>jw1j$ZNo>ogx_)nVp?TNiSwSt4W*_iqlk*e?~pI(MBfwx+Gmz zZDLKbH@O*CXvY{Ni5%!H@dJ2st8615Lxa62S0bS)@au@Q%ucfa{h1jG4{dC zawK~%HREeYbV7bT-`ft{xjP1dAw)@LWiheZ^D(ugb7#)sDwuOMB@(zZpT)vX0*)N!RhX6}pBmvJ-^gg+#=!8E#mW+0$3j;m2w8 zS$3c}fBjcif0ZD5@zVnwOQ(cush^5lBVQ^-99W@usJRWcSOn(tpFEaiC)7U3<|rhB z`gq2WZP&jnm`z`|W)d%YH{c^)88}tDhY{NAKEEV($P=K(fD0h!PG~FA9$4 z@!kvlZjYGaDv$RJ@_XEW;qrY->>a$(<)(PwkHx=_HMm{nzN^6GT!N1TnM(PynA0jf zqy&($U0RxYI7!cD_qCLr$&NM?iImTzcBw+Xj@!6#&K2=_4QR>BRZ13uS_msOO??q7 z`d7$5n#vGT9qyI_qx92kjlxDGZ>-P=#o0=QkUNc1N>1{2DM;YT_P}=W@sEJ!sIXOmL3qKn+zLkS$mk=Y#Oy^?T!`zy&$>7W)C7U z;aYz)b%g93_E&rT`@c`h(wWpbR*&B5?FjcQEP-T zxu@K(m2F$!hK+N&74AhIxLVe;HRx}602@HsX2%0K`WoVbu9L)Tal|i)xHfUufLh8n ziR$`Ezfg(eYjNH~c@%V}+zUcCXF!}ptU5~EmxPCreM)lpp!CaF2j1J_A~w-SruB=i zpYRv+5Ob8_-kspu%)+jjEw~kgYLZ!JwOW;c{p&1c_!fSAoTbHjFKfE1{%-bWL2pF3 zKkH!PQf9UQ(t`6DIc{v&qv^>@ObK$rkH|_s!SV{H$eYS$qbYMs7H{MuD_&LL1m3VS zg%wg|sl}@6EK1Gyu%^2vl%$s`%%OBF9!iA{RgG%l5)8XW{ay6yS)G|vYcK{bswGl} zUnXfw3U`lIhV5jHRII+lI_e{U0u_bH3#{|3 z(OXHvVE&tycuj}StUG;ZxH>Eargrs)yMM8EvaZ)`stDZ7IwmULN!DiXyjTyvbewB8 zCTyE_%4tdZUe;xBZx3to_Ov-^6X^R~qpTw=cl{1I2tV`DYEBGmEh`vw{=x42i2t9; zwmyAJ;OUyQ5{ahD15twNEiCed5on+l<_MraBuNZ!(S|n zx&k=6@nx$-=^xo93X*l)=uk@LQo7d!a5uxc2Tak)|&!=o5`#rtj$4c zuGU50!|K~KfxByx&$T?n>h+U5$QM`#SvN~jCMZbX#p)lPYZ;XH%NbpH(*@hbPO*x8 z^WlZcT_asmx4i54bk<2$acrx1&M&ORtP3q$8h2%L8=YVkM{aR#7O)nvMjF2vl!ddt zV9Cn{N4^I<+vzW>ci`=ORJZc+7ZIm%c0p-30B@jw&>mdL666Y*->QiyePy|L4;K@= z^mqcpyvi-sWUI|Pm_*E%KW_f%Y8mZsLd@!&wZ9y`V44E%osH|r-dSX;ZvIZCJ^h$O zf7|V77;1d>WFVZLZVD!%;kZ`S=mD*{8fP-7Xf=2^{1lbU(b+%_`hCxk;0Y$mq`e@^x-HGww*rj-X z`>ML%@$7~1iMn_q1PhEVo*+l>(L;FhZOW*abA*H@%SC{^ogsXj!7sLM-Hs2TQ56=F zhC=N6WyRFKk7O0m$4`B|jR8y}v@38{dtLbvuC6AgjPJy*KYa?1vo$%4>v$rcGZC-| zo8$Jzz&Ko-Vuztfs#0qUpBrd6D{T287M(HeNSGlY4(gY!FQ%9x)pWoWIZ=lCr~S@-^a9k=OL z+O;6@IkLFkdG1XEgY%fIuNJP~%_^NfdyBD-@pfg^c520Eod^_iTRAyaf2i~1ktEwZ z{w~8;zkVf4ToV*q`~*8u`B5jIU)71+L>;HqAXg;oJsci9-5|X}Au_nxyOLh3lp?br zvr+XLtehn|+RiQJFC;rX+r!9d?6bh#JE;L;a;9)~8u9a?R+R3U$pAGj=jTjvcjSy> zn8bRR^-O9E#k6e0mptYZq5Zx+Fk>%c`MO3ipl@f~EY<&|CDMi|YapIh5c?{s+;Y># z-W3B3FgurlU5(IlZ{Ee$3My|VJu_e9z%qq~ey<6kX6;;3izyP~Hk&lfJ6VY;4Vb-} z^*4MmgFlM%Nf7=dKY1^Ok3+ei4?p)WFqSI{FWRt-UIzu9Ouj}S-?ATG79YeFlg~1$ z%T~cM(8t`uge*^L&T5z&n7w1QO#`*y0&@-Xx_p;<*F)wQ^P*;F!H!4FNwn34+Irt7 z?jPctsUYeUZInqYaOtC~Xfw1;&c^h*%Zv?-USrCbyvUf!_{TM#m;-=Q%w5baj?3yR zb<7p!^dP<7XtfKd-fGhvEPC00>kKcR90vj1cIt_bL!^$Ns!-Hp|IfBDvdWqO$4!jZ z5WN(E#-O4WTuZSsy(`Sy7F0KkIK_%vfQkOki?|$>&LqmQ;VLf-g2H*ca32_!mTqup zbyAX#CY|>GQ3bMFr~XeQ`af0ruSoRokUkxeK^P#!s7Tml&8}zi^Uu3d_hVvQB+NjC zqa>Zh%s{9s))HfiNtk6)*PD5H-@4fQu`wz#vA;rr$N(=p>w<{-koXf8;n|Es1nHZ< z_jim>rG3&?OGIkT@G`bie^49RfyL8i96Z;#_D_3(;maC5J^47Mz8513b$j3%SQos_y%^js}n_Bg%p-yve7q86qveXm1#2FGtRH71_nG!km2~OO-o_qV`k>dY#0-VD7P}+fTOhkde z$JMYP|2P>NaVCrMvvAcv7s>kI*Ko0s!3kta zsK$n~pZsCVdjh_a-rH%nqR@3LeBjs5F&&OGa#sKDyocR|yKi4-Z>m|fGAp$4r)q#SRqR2!O|y~Byn(DEnH~Cp{r5RSTu8s zS*Hil;p~S5RAzW;;(Z}>KRqdAH+!)lIVm(>s+KZYnPR?7#1ZjKu!CDRUPS1qn%GKc zp^Pj;aigFcJ|i{PIW$&Lxn;|>>$%vZeDxCuU< z_h-^as0cJV9Q6qPDW)uwx0U_4^iBV)cRPJ;ryDTcNAG+me5WdI!b};c7q1a142?do zyb)M%wUCf2ti^`Kka}7bpiy{?y|pu?;b0QZmN7qDq3yDFC1=ne&yz~R(UC-Mid2>z z)pxgC8H|$-3Ip%IvCUKHG5_6e0>al-@bQ}?!&V%P4&maLC#V5;X0IF7*rwf8Q>xkB zSmHtZ`R!ihjFS0!!T^vl_UxZC;$Ljzp5uvt7gvFX{(xLK;1luV6x5a=IALW^+@kQg zWy|NJz;Pqqc2ZrziVE3`i=_EC}`@@*VO>#M;V7Hn)HZOyR1ru}vg~6fLDGWFtGe|&BFi8q06D$PY%ply? zjKNg)^G4iwO+*XJVqS6@uT3Zo#-223fHyr(!P2{UQvg}%$=9De0b8aYzs&jaZo%Dd zRX>8i$L*Zk0GD{+z`+9}k`>?}ILP9W9|Vyt8m1eYx*8h0ni{(sHd)lyR;5^jcB*8` zkJn4imYll|<|?UpPO->IyK-+|ek+-K?Rw?zi{m;FJ?)koBb|Gd4dKAWQP9;dbHBV) zaLET=1N?$*5bTj3Glb4jfRaq3f}J>Y7UxW8AYUdgis-9m|*4=ePm z24sA@PYlbu-J^GwWJyFCKF0*hVVmFm2GqqfXOvQrn$I;|cULWocBN=>^ zSm5`3r>SgDxeOzH2BYD@u&6LQuiMRQrLK6s;f=OZm{qAYbfwlf?;lqO3N;SW2GYj1 za`k+-QO(8H$sVNQ{(r+C#~QS@kv2s)2|IhpXm-~#xF35KU!dY%{+?ly08R}N{r+bXHJImu_ zu@%1d_~6usje*z?eBqkuQ%_kXV1I`r;o(Q{%WrK?HOj{1N4Una17#6EZEw#o+gIs# zrAIGvxjjp1l^NxX)2W=vW|q?Q-gWj(9#a?=cBD)P;vMd@0o>1Tm)E9|QmM;dy$w)6 zVFhE&>R+S6y-f0&k86nQD~o!Az)JTyT@_N@WFoNNDIW5x58M*RjEPmv!Nxcq7+#F=+? z<^b#!xVSp*m{`g?ivQO+c;UVstwEMImjW|MRj-SK#rN!c9QJ*-%FVgTHVPa(o?0M) zRW~9q85L0Hz9q{iQ+Soi3{P6F>MU}FNAzy5DX7Y&a=hhbYiffXh2vmUP7*^-4uxrt zB&7E-&3NERI*GuZ1P8VExq1u+8fJc9& zJ}q;3W1>~3_N@oGeharnVcbO1sqPqayZ%+>e{98w?6dPcZ{$3fj2AjtttPD@_Tl%% z%#IPtvqO+g#3U#$p4DwR%;ZrN=KtkeZ*-cvKugQ{q)R~j*YQ^-V8tiUl|C$xosVH0 z?!}OIk?4#nZT6ljAUj!nZx+NrlF9!tp{xVolTqUP?1B410UdeXjdx9;S+wZc#^=h* zC}I@}yYQW^L_+&o@2;raHo&SIr9(7f*4+9u7Y+ z2(fkM@R1u-wi(yz;MEcC<6aTTpD)=qGfB;_3w`-3mPop?5$u1WpB&s5HT_xyX1iE; zmj$CY?mU{7D((6DP6khTMJ#^DRRUIxe?LQ#+0{|fiVpJPkZ7%#N?}o`)+9L!CkTi` z1=_yd`uzd5)W1U}U!=!hCzCH77RuyOiA=$T|42>w3ry|{NmT3?83AZhD(9~F4ue%v z&;xIjc2AK0pNU~+9(wTNy*(kGkk32oFP^F5Zi6@ohzQtb?bV$i`ehsHj=O3w*MnM& z_p;{WNhV`n7U|KV%Dpw1gv)Vc2%xo+FG!MW-xHGX2ZN;}+a!%bp4Z!z1E6r;#eRI1 z^Fowj2J*3yD{yU>N$7Y-*@c;C7;raUhArAC7b17J0UyPFc$G}~#~P*MCD{=g(NRu( z{F6gh=>LXN?nWW!qcHaMSyMY{F%C+DmU^mk^|&6Dr9a~S=`l98n!s!kb$J(lds8Ak z=4fdY7rA~&;Z3aTuPumTDDR7$|FNkZ(Hc3&Z=o+*O!F$X35W>n+mH}U6auR#oYKkZ z1S=V+T}kzvnG%h)Q?Of1(TN4OY#gM%c4jULi^HJ*+5$QcOAbfj?F4F2l3Yd39bh$P zB>ef_Q4C)`_#2I3VWKCz@h*i0J9!uS@YRmmOgeC#)k(cL_w&<7r^{%-boU6;CREJ6zxNRyUAuP8;VHyk%VLLh+^d z=I_roC%3L#ce?;}$=xsN>7?STiP2jq`T$r+G4DVVvx12#Cdq5582gz|2j&pSITCH{ zBJrj7vM}YAXlyl}Rwn8>eJXr!-3m+7Q_tQc<^8+O)?Y`>uyz717sP%_u^G3Paf5>k z3COuWqx$H1&+_#(y>Roe`^N{-Mml2FKK8?zT4#o zq##~!&^SpZT|Zjli~gb?`V%kN>d*fQ=KtPT9W6g(i?yClj+Py9rQgcfyUSD?Nza#p z``uJl!^>;*%xec2!=tzAnjNf#OFMS{UKRqdIswG$XjIN9Xf4*qid*# z7v@M|8#fEQvK3>j2&Mvf4YftPve_~#?|!t9Dy+a^sOZ3=USDT6Dw-B7BP1-g0tZv! zN(jrqHGw#ba?ofs_b%mD5@=}f=kAB-rJ@+BN(pxn%OMTBT5$?aOT6JSdNDd`_ZtTz zuo0$88ID1{d}!ZT4CLODFuql}@%poHLuU?3uF z&!$%#3fq2c~GDW3Yul$@lOyyT81>@nu77r2Lf>PMquxFm*Tj6qZNhi6E0UiORQQm*Wp0Pt-giq1X#|{Y;_? zgSyJD599OHe()ImYa1Q_ov)!qYj57x&`RHv>+^E>*?ynu?A#XC4cRsiU3gyLY*-)C zdo8qqwQ*9+C^MEe1@vAEZDMV>3UE4cq8wNuJqgOe@M`Qtl${}&PmXr&?mxI11h6v+ z`;e!SHKh)H{V%3UM6?*-tYhi&^QUe+T7+;_)~~R4ZoF16^r}*UJ233~Kg3dHtZPGs|!cW5@$Zxz&?C}U%h1*?r!${iOF1afrR{;^|A zfaM+{726ssKZ|gn`$~PKRX5TF+vXz^i^~s2)IbwaHY5W_MY%SN99+#1e#o4o%-|(F z%Ah=V;KALnIIrpi-Syu`WYkYRyBfrdbXm2(CdAylf+LpEwqxJ}b1RjamT;S8VnDCWtx&6*gJH{5pZ=Akp?H^kI5eRXbk)b@BjFJM z9_$_tmt)h*OSDUf2o(OC1XTC#e%f`6baY{1`05hVNnk`SL+L^)VLXi-yK$MDh&Gk2 zK$tKAl57oHsuEyv&%@>x@19Jc{Y1Pb^4xF>g(iJ1Rq8 z(X%{`K%hc?`p<&EoDsLO%ml8Yi#wAA2`0#B_<|P2?s)9mO9?E>1!6v`N$M84%*Jq6 z3Lh2I`L8ut+C38a{JRkiJ4(Rv2t@Tjtp&IF z`mlK$Tauf74)>Ta04~l_&zp~!zp+h3^Vr-&t$sw*>R>Ej?Q6bJQn-zBix@wau9psZ?yqJP4*k@YB%#*_$M{EIWaQD$2_-9$5#HX4|xnJ?yi~D`buM> zm&93?HDC2IX~5bDE$gRE@3V~=HI25?okm?}lh!h*6B?gIdr>X*OJ*|kq7a7hW@?Fp&}J9V+IWB*@uuP4@X z;ES`df2qo}J~#U|t=K}2l)sw7rpsRC1DhEaSL47HJ&8omn?p$!&@HfLvQNn-d%98%GbOzr8N#(^A-uV zCY{W{Rkf$Pwr#2EpGf2vBodlT!uSQ>()M$+39+@L2zrNes`|fS@Gp3AJzj#13^_uw`uVX{U{3b>UVO;gX5bbEUNnXdUlZDB4wTpS@7p@i8?W6 z7LZ_BhkB)rJAR*bJO}wom1{ee{%zz4b(vKhJf;Ydt(T=*H!x>M4z+#(1~W1~eQ-F1 zYXmTP4DT2I`IxHVNwz%5_;iUOwYvB%xDK1SCL~Ys>is8yKfB&mkXT^^;+X{--bihY z{@%T8Hbt{g9}T7b`%I0Hv2;dxpjs1{ZI8)) zX=izYU`d;_1>OlMxS^8Wha=`ao3C#ABB>1W_@It6o319i7moZH%ceScw`9}W)R_G> z3Evmz>5AV@An%V!T|2!Z1)R%B-}_)REztlHETqF%!jwi#-p9JjCO;gOytQC0kwD~Q zrkvMEA|*PZ9@{10ArM!JWy(^=rv^OoJ&*^`^@=^9>D#jS$0BMPR^Der-XoYlCr zz*2sGoyDkZN-R9$%;ALKSVIUD+^8WPFE3&w(JF!LK22)Nb1WMeptod0POxw1+#WyBVzH3=rYldVodo9Ve_XZ_tDyKC-fLg76=37{JQNf{o$4t?~%FA zI(eZQEOAd!!va_3phit>6vU@uk`xszEH0+j5F3TDNA{a>$zzMz> zIhsgon4L#0x-{0^_xp&k$;l&)kKTWB$}${8UZEw?Vg@zb_oc9LwLilpnT!-R+9_4j zTbPAt3y-fzs62rfyspJWxwxReei#N9uEj-yZrx5BVQGAQw548y8Q>7t4GEQmnm`)o zkyBb#zm{AgX!CfT1@cmgohMpP*bQ+i3UuqR;?naTpc219i|AmWjNMPZ$=AOu> zvWFOy3i33WxDj0-l{kEz&}5{pQik6&XqRz z#Dpozl;C-c#W~>@=?pU`#Rgy&q@O)puE9pbl3~}ITLL4`fk689p) z5wg+y>*494K6D;e&Y*2H6!)3M6&7#2x?Yksbj3V#xf-Q34q zC^1#ra&E7(L#ht8g^l9{?Y!EXFBCmpTD7q&-|NqV{%?4owA3(@5Z|rT9R7)?#v_53 zq2d4^N{#1*nZp*Ch27zZ%9jagB~g|W+7k{1B|N)UD@sIyq(i(u^bRp|a3KN{s+o5lAVDcp#RX-hJ-EfwD|n+kEg>uslyab}^o)qKwAF61 zlCU$fbd&Dk=uSZSPJk7TTx18&FB6D_z*C|p@_yy%2?*fj3I)s7vxCo#z*y3EJUuSn zL0Z5&QFP0?RlnAbW#1tYasq#>vX^TPaD*`Mq4b1UTLcja{46ea3?|99{}IqsknXUt z_7nOs>+Qm;@Y)!B8mN60tBHEfCdh$h~k;rSFx?wrVK)eHd44w^~Fx(H( z!OI?}#J;29?e)IP@$qks^=%aDyI9I889iYEuVjqisTG1OAt*tq2uNNW zk7QYB81OS?+>Gj|*zS9rVypGDwyRG&|G&i^9PbwrRyYP6c*-75ccF^B?poU9o9@OA zBaAT$b3wMS`zHZAuH$#T#u7)>o`?dmst$;FYGSv8#M?9GANB8vu+oP-BVldHPq)sN z?w%9*^D$+K69n&%L_I%%)c7z^F8W3c$_jE{A%KhV4HvjdfXJuIv`o_bREur`)d~S6 zJ7V3d5$i^D6ZD?O{j zM*5v7in4VXo|AwDYWjVNvM7hE;2Nt^xxabVpSa0P6Kd!{q-}C@fAJH(`RtR^WRx(* zFP%b=MGl}c>Fex)#+a>9@Z&KWWhg5ZpF9aaRzr_GJ>8GL@d7TORS5^uoF&D%ofr2l zj8O(7C5=yoWt<5ORk3{^L6Y6EHELw|B}Fn$1a+InNgh=~IHg@86gz*>@P7P~c#QsBep{dPl`^iB05A;vokXp zqHRu_)MQoFYMAp?8|;_Zl73K-Ju;Hkhuiz$_hk4PPYFeAS;6b zRMij2j28$*Ra?L+b};_wB$dlJ5nb5u4-6eW$L>nS_4@L7_vcr&`{QQnFDrYmG^@f) zeHt7$TYo0)(bUXx6TAAz7tNdxfDX;eY*KkDti?0_va9Ysl|=Cn_yHdRtj!;>feiut zS6=^>=8k?**kQpCghE^|4jwu<9+Zp3dx2de!LIrCr!v9-`}$!#d9|o)-NP0DNBUOS zToJK)@5Y*SWJQ=|f&@H8gzE?qWBm$bVOTNIK>qDFzqAx4lvZ4`GF*68-Nsew z<0ExIPmjF?wvh+!48p&|9%#U9e?E(&S3JIME}w8bA-3?H;)$kYAmT_uu0vB9lf~%m zm-sC&vLe-rixdWYEn|W)%Bh~B6SzhFVIMbR?H-tMn%?aisIBr`m{$8l`? zK0mcrL2aRawau!_t&(f1Y|+j&3E{*OC{E1Shs7T1e5Ic-?tm@w_}UgXUWaSlQWuS# zc}1dX4!IafjZHn=Ykcx&m##;xwsiDpt4;grwXLdJpg6X?m>4kmnI-P*^P|$s1#qqc zHJNUCl6TW3QDiZ89n@1DIj^R*Jg0u`H#0r?W^%U5+Z7gs z9gf@_1)M`G+B9{H45h-}c(yt!#wo3Le-m4)LiYXPuM(Ks^r!^6GsJx9bSU;TJxA9h z$utJsb-)BMj>a8voC+Ri@8@-zL|#Yr36T)6x!P0SzKXV@6zZzKIS}mqtL}DSmH8zc zZEy(HNi&B-abC41BNmH=3S+?HbLw>>Vce9=&_%zOR=_!KfyAt^Skq3DmZ;0w)vAhq z&GSt66QR||cwugdN4S$?J%)!`?Kwb}$yeX$3mG&^kSzwziOy99D9^H6cPE|NJC64U z&r2A#57^p>JRp2|ZT?ra(cJmeccF6}j~8qH3!W-VvZM0UU!y!8sDa83ep04#;!Cs1 zw}#E%+@LnBUi4&sKv$dXQj8FrByGM(QoE|C$aW`MdV3oL5-SW5lCgo>wTX82F z$4F}gvy39Fu2?|u;@4V#o8F$RC9W9=YgNx|V1 zvDXCm!!`1KJftMkERL87mRRBft$3G8S?N%%gbpuBvAMzeSxRy}7->@M zb3T-0+K$xA5k0`vNl1*uqE4{JpqUk!s?l0&wnw7O4NewHv?C2dVFzGM`TJDlSL1*Y zUcdjVz`Ba|N5t{F*;S|MvAenP7?UBoI)#CE#oc{hQkgsV(XQ0ptm-p#{GK!v#$tH1 zHasOMW$~dTSYcW&7PiXFCZ6KnL_J$*P?(|j3Wz&EoWc`1)bje5fc#(PnX=F2`mQL9 z$Z{c0Q~E2Er;UWe{+P1%i)ftyQSqdKrS{0-Qk^c#;*rEb6!`)kUpS{mljm;4H@_!{v?{>VS__6hVmU}=ko|hHCv!G7%P&(kgx8F&Nz`a& z$9VK5{gdtGsXbMLiY2WpUtOeQ(de3K&xB?+=eyh`iM)xF-My~MIOXBbQRoh`_5dQx%bDkaCSkT(RU#%6LgMMVW4=$L7=;JJW@1jZJ|{<3)d zEB^qQFrlDMOwOnw2QbjT&{horJ`PZa6mJsYzd|!6wn0YD1_5A?5k`cSELTFIti;^^ zYDxBA2nkuR0L04IxUpWvXA{QQ%(xQIGbH?Y(Z+#!Fd+k!AeMn15cgl`bI6CEabTN3 zfe}6wDlkLeSbYpvi480KkUNJB8@h1wzW*cTXO68ANz&^nA7BKilS{;)26>X&uEVSY zQlS}l#uo)`J$Y#Fp#xb%73TU)sQ&z_MV-3ul=RG*u*FxEkPxgag}#S$xVOb6_Y9Qa zh1Z38=*Y|wXin;Y3s~dRDp~@r)*-i}bui$`vS4X9-v7nu_jI$!$+!4wN=zWcJ6ZNi z$)Z~V6(uSZ;9YFTC2;j02?EqBnE866L#@`Bxc`)CwXZtbJKQ3%d05;b-~$V$L9^Ah zAbS(;xRYrS@h!ANwQ9raSZ+R4BBr%{u7_ZmRv8_ewxM|!Ncu-x0%{co?KQDn2}&$K_>#T5t;^1b5M?CAGgH`wXNq%?wqq zmhc692}V(q2-+nwO*=;`($(IBY|&G^uL&e_A)ibCI?37S4eO*C+D^EPPZ= z2+SivT>}7j4MynBg*YEZr2iJ=JIDw{m#T)kgxborgHuUaUx@|{{SSE{0Al1CO>^-7 z0<9-L@+Xi+esN8XhW->;%I2<`)~!X0K8H-uq04}dPp)b)&|i=R8|Yo^jboudAvZLs zx4-DeK^Gx4wD5A`lErfugJ@qjZt2^j&n=PA|Bw#TaHeU!8Ug&cLo!tE#B^vq&S+Siz_CD96pv#aMx1d2-T4Cf}w_ND4Jf6KPP^1_m zGbfsAi{5T*qvK5VaZQZqAx%lL*%&>Li+t+URKHBm&5jK|7ZPZl$C(8elTgM5O&{WB zc~D(C_Owuo!Dqc4IA8LQM{(67o=}q|o&3!)*3Kz*}o|hB{9%Wlc!eLkt zVJ=)~dm-4YxLB#gPhAuj(>ojBIYRPG>Zw;55<(M5DP9Og`AmluItTQw`;U+uWWf@G z(#Wdm(ba8^mRfgHlJo3>@M}yNo6c6dL|VpAvan_;sRWHr6miI7tN)x+O(hbi+0pFk z>aZ=`9XEo>jTy-i(s(-f#Ca9~FZl3W+g9;py|x2dQowj3^a#tmmkeOFsz5 z?a<{gDHW6v=8OJqbJMfaYu1&(q0->YI7csr7)exc13eee=z^N2^dS(wZY}MnRzhr%7i@tIzC{}ieud)Fx)^Lqrt04=A4LOF<$_q>$)70tPN#PQ? zMan0GslC$VTpC+^403w(v z?+kgZ38M8VjY^Op%DlqIbb`5x&ffwjSTFm@2uLi)$*kk`Kb~Q2WVehI!{Rc%M1xnG zo^rGl?gV)v^RyJie4YC6PY`sz=R zuxLG;l@+IG8GKvxc`K2Ld5geCn*x4I+~%q(`7_Zd=cG4O{DmOu;x^Xs4`V3ftlHXl zz2f3!V=?tUqIE@XU)R;;rrn0Em3y^{$W}EW_>836F_Qwn1#q3e@GQ6l;d3^P1X+>I z_CKf#jwrzPVitZHYkq!Ow-THm(%R`$5>#EVO6gj9DdM&ZFCUmf2`-go`Rx z^v-dg<*|Q%jpGAfiG;Hj5mF)pvx8Gfc^?w>K&-6y>~-ZH*8}$BnI|<3TG6 zdPk2chY#c~w5RGXc#Kcq;>~`WKsfOq&FzvrZ$R!HjGqB6CR!* z)!F>Y&i8e4k9*o~Ur42`8``yYi6c;$ZK1J95MN~zfXx4(&B)zq^29s(=VG!XP>nR> z2ysrf{jx+N z<0{QHX6~n+(Vmh$g1D7Hq^}Nl^v{CBZ~qbg2|1y;D+`BhXb7YtSIV#!8^IzgU3q@Q zNhg-?0F0GKv|> ~(+qoiyv%tmM@aVNiWV00TLe8Av@@ZOd(2SZtHFF|DrRatNrC zH|BuG5)(!UsM#lO9sHfWAbeCu4!phMi^hqbkWH^&A=Mtgw2QsR|K zvRxzcAdZXz_l0ImoQ2~>xdnm}oc4g^)K6WISTLNN1=}kfDppwLfxYl4r1}RepiaRF z<7bi77J;*2iY~5+&XVp5uMV^DYedbPd2LQP)9Y5MGWANPSMJn}eU7LB!8g;tUjVbdZBr&H zDz0lrsj|!+?i22Ye^}gQOy&_r+#S~__s`zmN9vBdAY+!3BU1547BwYgWwXj|G$|Zf zF`O&2wS4%Kd&PsG*jbab;-CYN0{=^^|Ki7hYGJ(5V<;4<8Tq4{lxl5C^7!)Fv^t85lxp+PQ4(WM0-a?KCv zp~ad&+K@i8+2dP%*E2AKn%OWRdnb-G;lSu#IjXQotpC;&1@uk1Z|2+R6#sM&SrTer+5&Sn_rTHMAzL=6+RTyD=wsidQ=r& z0IoFykf|c`9I=gZsErlJu}OaeX)2p2cp68lk?Ms4$8>LtD8^aMRSyg}cvUej5hFMq zVR7>{QYn`jOGzLCA|?2f$gx!JHXA)06His(#^Qsr1}JNS zaQ}jLB0}7Gp%*KfcuAT&yBvBbYt0}liu(tFaB8r2MUs+g7U)jUaalFA02cZSGGjwQ zorJ_VnMb3^1=e%5?RO9ee{iE%gKM&mvW%f>@oo&zH&9tPJXmvvzpOX!05he_ZjerH!%4+89=;YPO z@(&hwt|AZ++~}&4^La;wmO1q99}=e$<|-yp!HLXMB>c9^2bDco!pg8VFAh35U*F70 z2X)Amq<5*jal+`l|Hw*4GfDN|Ek0-= zy5J>A)yyC(|NCkWO1Th{bmCY!vNw5+ESZlQ0aAF|*eg1@$171V~#IUrkM1_H#^v-QySPW`P zE|e=BHdF@*1%VFrk_I27f??}}BiUgtkF7ZI==vv5+K>=^8WhWuH zw%x~-7=}dYZ|V?J?6CMb{BP~r;FzP z#T!H5E$P>jJcsr1(XL!c|E(yK;Dw}U^VzVjY*(W8Vk53ykL>B+wK zEpfTUY>B_bdLY^?d_jaV9SU{uvr&#w@5R(NH4m`j=^b2w@%=6;1Nl+FC;aRzreh@I zqW0Ib%dPEPRsBz5fYy{&PZ$Y1w<`n)H?2SODV zgXJVft9a+*x+ZX@Kyxormy2q|@caF?a$q}fdm3?orRqlhq< zst}-e>(Tqc$JnL(n+Ad?kv*)?r76@2;@a1D2%vDt1EHzdd#D+zSoZ-+DwSV#GESZ4 z%QSqJSU)7`_*!UY{M%1gos`mD(W@?9_7FB64Rkt zsqwSJA`mLfh1z;kDYRbeGHC2z`JoXWs*BFp%M44Rf(mRBbuejl1E0qUY11}z-c7Lq zb>Ffa0ZeF}xaxXzJhF5(gS3Zk3M0KpB@ptYny~bc7IvEP!(yJ>PQ+xdb6uNOpU)DZ zoYd`s#B)X$1L&DICQq3ed0K2LYOr+&w=!dF#REt@NnQZ2Kw{`ZC5M%1}_C zQ~_CuiF{3yNUpeE6Dj;7KL`fPOe|2=y?qg_aQz8Yy+NHn=r|8uGc|5S9H1^=q!-8U zK^WbXC)VDay5+!Rsb1tURlUo-oObyag_BSGEXCiY{&BbPQE8k2f! zcKD_598)rP(eTHotNLUvrrUmZ$E@ju^ti{q+4Q|u7*0kT7q zzuHvJg4g3Hj;sEX*l|!oVQ&mzX}ZtOLvzz*T0K2D_ne)3yKl7rQHKKV=+3>an{!+{ zEl(KrAUpV(A$FXLk%f)X-kTm(Tdzy< zItb(B2745Ux#?w2{T5DKZp=8@qd>~Dp1th({^DTsg3@;N)v&JyjoqMe9q|l9A4By) zj3%?y;t)H$9DDC!Z;20lWQ&y_JuT-oZ}he{=Qzg@jB$e{V=XpQM3~u)MS+!}W~0ew zwKzJoD{oC2TCnOh@y5F?xdP{4I3*;(siW9TmSDJfQfa+2o1t22G_}&jdobSl<~l@e zV{a@>UP>@?CzN!WU{c^Gki639OFjtvS#d^LI~3mi6{hTiFk}5|>i!iN7J+NSV9v?v zQRI=%|NnY$J8MrWMe4*+j>I(_OlGUaBeG$z;}~|L6C-gAyYu5|KV*NoY;C}9P#zj3 zd5qQHp;n{GYVnXq9BiKP zlIOgz>*g1oM0tCM3~rzXoGUIq2-1x8yU7|r`Z2P^YI1zyZe=xu>r5~i8LNjj$8eA@ z0VlhRp&b0)vO~8l|0g^AmmRrhN1t^plpX)bE`McL9=NJ&sa(%)JY_e3%UgF<9%|~8 zFC6wGp`+r*!j4~D)>2@^2I;iTSzaid_#EkSV9~LFGLkn@-mud5^}x0|qmQ=C$#kbi zmppdU&-3cxl-}vr`T(`EE^6tDXzNaG#?*Ax#ZP|m+Y771ABwyzkF-2jASg78>HBYJ z%4AUZDQ^ti<+HqUojOT%2S_Ev$xR6RaZtI(I+%PQyHf3B$rJZo+CQBy1 zu1mP9^}$D|$oao3Yh4HcOZDHm8+3THF6e2O_>T?VvZR4oFYA_O&@)}-ei;6IHJ2KLB+4_B=>^rWuYfS5P=Y9ps#(rwO&(geq>}-d_}}+n69drp?df^k7woo8 zjoCIc4AbNGb-0KVda6(r7Xq7rTVk{lGsni6rSPCe z9KB(F7W6*hMl;nFk)28!*k87ZPi(;YgZm_c^ixdI>O%&~8ygfcp*q>35>)DfhfW;$qZ_TNB~3fAqjLR|MK z&s9iVQ~QZB40#67@SGRCi1#F|IdFZWAV4_dfmcc9Nods?}r$SWe_Eb z{vLqye;jCv?tcI>A?0s(VfAbQ+KbUwxegaOhc~TSSPO4~T62Y18UY zVWK|({~3w+P#lE;==PLvZQNeH_|xAcwCKwP-O(YoA0nn+IF3mUd`$M)_mIEg1pou^ ztRq8~vv$VTv(m4y=zBt?aD~z~=!oT2O@unwgxE(NY9#bm3&RkW&^$}07i-r$REH;A z{XW|24tGcDxuGP79x46V`B4I;ZCVZJrh~3BQGI`C7*#b~H7Cf`Vw}T?cL@p-Je1L}n2t1$o)uv$7FpJRN9r*2w)6U&hUL|5tqi|>Kq{P(P$i3N1@40H4j9>8*Uu3lweex{S>() zBCzA2o<%=IkA_7Q!|+fJpCA(OZx%kS}+ejS-OlA z*mpBRwX}B>5@)YVGE&R>p&FEol8x46B5JbLtS17TrZQpO3uy^ELMMGsSatS^oB#CDes zi8*+5^uzc2Nz^GQkFA#u*Iq0+1opl@R4VSwsOOOZx(0;kr^X5O)_4)1^NFav<%VCw zITwzcpbB+|;?Au^w{jTNW5Bgsn1d|(P=HNTV-&4HL<7EYax1+kd#hC#EV>nCK*U8WqvcLkf4 zr-|viME}Sz-N%=9TSmnOuURD*1-rwRwL(lx|Og;6oAuU1ETn z@1J*@N;D_=8d~^@;_0Yop_Er{Miv4Kb|j(I+(oI^aNo*KNgz`Uyhk&h5pE8Ea(osY z_x~^4@{THO%X>41=UxH4rweD8(|UI;roYYXZcPh2iZ{1ZEolz^@%DJ|GP{lkqc(>n% zhP~1H;%bNy_sO#^R{;%7xYhUTUYU5ji2d4){50Bzq;kVn<3{^C zWb+{8Yn)#zqSY856bj(#-iyYKJ3N0~{l4I{7=UgCCLhdErBjchAidp-1j=ZEckNL3 z7Z9F}$~Y8h_hBEls3O^^bf9n7_M}5Mbn9*$Zg|oP5@zYg;uk5OKT#fdo%47`Jp2CN z*J;rEeOlTa^uHWR!3s=57Td0@5>y&nU(2O{Lcju#ldhikd9Ir23T^7-qBZJ}=0SqT zc+5+w^Et0< z+CL?kX{|k=3U>IT@rf$)Jn6sJI|jx4E`kqR9UIz(wD+byW_97 z6&$c)sg*2S1u&dh?~0@UxLBjaOzrSM7=Ck00XIH>T&9=vjduM$p0ZEi6wAPjl4&en zU)QmNO?2{6aBAB7tKP|IUqbUN@m{R0Kk#-Y-s(>=TmrDAbWgpA<=600oeoVb{n`1I zg|Z!{nw0x=(4A)O>oK8Wc(~z;DK(v-@b+Kcn&fkJ#Zdz?>ccg*&R8c~5* zM=lvRfW*sbIG6U8uUm#n%E8df(J{1NT4}XLv(^l(^k0b;tmXzILIr# zl-foKbrz*O*>8z$X(0iW@nDrU=J#qB(~I(ra5|VO?D1G)8K^?c?ORB-PQN^zVb;p+ zNqvA5&6%XR=HFe5?p0z%*2+HK`60DzHH&%1W5v7{^jB@#bp)WK|992#;u*L8e_1Zc zUI5tg56rv!B*aU9o~KK9-nL)%O#lD_U$drV{p!#-=lKwP{D8)RV8WgPyhy3KfT&24 z*|(B=!Yqm<9!Q;`CyjXfDJATF%TjP!qHj~&QafJ%Pykfrf!GYFN+iwKV$^()x&*ar zLeJD^f;xw5X{qFOkeNw8Blvd+VTIu`R?}h*JGg zJpwKPwt%Am(0K{1%$fumutx#yQdwDdu-%I1j89=tVs0`t5CptiBdUe>&>rY7_Sjya z@3Y9}up?#U0|!9Ws7ccZD&R=YBx1}JVBD>FKi7mXGQksJXD?S=ld4>sqR>+PfDl9c-7nYM<^XiNz= z>ETYd1s^1NNUyU#ARGHT2^#W-ssjy6*cHuu+52_Q@p6zxC zy@p%Gf(8$j7z5GpK(*!2fcm2BFCe%5Sn6!Izh`P%MZmWiVU>dY+G_psQpp+w&JjkCP1s#E}9u0k+_g+h-4^C$^jN6NHy6~!5pWp z!g2u^H(JGBO83A-|DwTg;xz8fQh)E<>LI$(9^Vcl&!Jn1;j{?>68PH{vc(+Zq%D7% zICNic+C4PaB}l~a^^T8GR|)2$Nb2Db)D^19n{e_B?i~19e?}Iv_86vU^dSa&kbH_D z8kt4n`0Di-0mnkPe330zqmObG!Za!K<&>1LU4-1FTu*>40SXl%Q{I^xHJI`2S>sD1 zy|Spy%Ou`kk0OL91IW4K5an=vD-op83QZ;xM%d5e)_2=UULUvtkaWqfRmpRtSb^dk z{UDRFBl+f%8R`&Ffh%fJ*CzE%M>kWjcGU#96>`mvSJmg##pe$fWwoiuj0sgvVopLs zc`894SSIfLxC)J*kkt;NIJFD+nkAa^9k+2sBD0gwUQUkbA3$uR@ff(rQl_G}L+~1}ghV z(Cf3DWb1M1h~vbV>6VdJWP zr@gK+HN&?Ju$6qj5!$IWS!o%CdBx2NC>@_Los@}mMPe+d>@LDz1kUd*;ZDebMB^a^ zQvGnjhE!c7mRBWpxr4;bYQIk|I1ERM6Mr!!R8DvUJFtBtlo_|ZyNcnXCiBhv&fkV1 zRDzZmw2a#9o=Rlpwhu}-T>+%3P&iR_BFZX1!J;j`osHWgNsf(yQ_Ika$iMQHUsu(< zKx+D;a!A4+6XgRQi6}VmDy7r7sWv^=8UR(VLQ}k!#);DG-}6UUmKIeqJE>MDSo>TlE2mnsx5>ZXNT`CTs&nSLmI?sy@N%B0IvDhqU9|p8H?AL@uBn$= zpSuJ+l{Qz$DW%eO*T{WENp(18G?q`-=4`bbtRhTY8w=;3+TNQMs7T(>H9B3c`xV3r zOA^U~za6nA%d$~)go@2PG1^%4NcEFimdws-$sy8y>DzhsBtVO9E zIe7wW%0`@kUNyYEUbtJ3YNV`ez8oHXQ}=P4_VmT7CQhL9)gdg8G6 z9Dl_wNl99!BGSB&b{{cg(W1hAtp|mC_+WQWC`qCFf^$J=QP;nVcE##N9!ZAp)dUQ5n|U& zz6SCTsI$IaYP2b*y87>Z-$a>lod6clKni2 z@eV!6WZcv_86Fb3QH|JSBqF+AzcOylx*5yL`)yE97}sJfGu zw=;!qI!oIKwfj@gGi>P!TCYVmSMO*rE``VEtZc-b%J7CEqui#3szAj(HXbIAiFI8h zH(znI>3XKwf{v`KQyoxzFA;uE9&mNlHS~1%(So+Ng2=flJloL5mNXV9%cXuz9#B=a zG&-Em{oVdT_Fj~98q5;5$~i64i{~W8jvG|x8#90U)ZA@=2@;Rfdd9O)R57rQ^$a`< zaYuxf)qU&>nl;i5@C(eS@!2#FmZuw;IF;-2xUIM|;Cj5HqH<6;nSN@|)ZU%r@nH;R_dbMGaVE~WEI+_e zHAZ6pd-wCT{LN1s72GGxS>QlkbSqsVQnI!V&W2#&9);KY3(vPbn5C=4`ubp$tx)8)u-P;cieJYe1nD(Qnc?e z<0ed+0v`BJ(`(I`HD}&}Me8i}QGN;F5+zBNBDFWAN$YD%EP#daKSmSoIn-_7|h1`?J<7 z)4>il1f8wDyN(I)Hm#SG-cY)~h8xzu8)1}@h;dslS+-&o36y3{o}GbF=Ypw_)@uqu zZCZaoMsh$lKQfIm+F0W{a_q#ZGv^qovjht>3%J~R9CQp`?o9`FHBfx<+mk?o_Is63 z;Di%NG_l0fYlPtz+s!Q#$4oGm9(gg3yZC3OGSw0rb1{#&7$2i!B)uJFjU~>wu$h+C zbI6@lyPGKn?6cn zCSh=_$OkT4c~X!ze(fLM3|`-$IRc47W3V_UcneD_Ya0TQM5X{u%*!w>+c^!e0VIQN z?)gC&r4H%;-&tOOvVz}y``!0H{P~B$}2dl5PPIZBDvm~UQdp@vaa?AKp}tavGUHn+lua%w#T!MmNERyc$fcrW zAR#LK2926xV<0IRTCgm}#KgqJ#KgqJu&XB~!Bb6T)IR%v)W*jzASfiPO+-{oTtd=+ z&Ye&pP$LJ+%BIoS2p0|Iv2)poaN=gAy&KVQcu>Kw*0i2-%3B+?xrc>8#5v z--OT*sgw%Utw{w}?QV!6w5;uZqERdM4Qf=mjJb{AW$+OY1HPPmR!7`={&2iBBkqu! zTk_7WtZdbq@ibMD|4|G#Q+klpPTq^Qhjj#I%X^jAeq}13lljagrn5Tfid!P~0ih8k zFZvtLLL)Oq6424G9eu;uhuba0*9X#+Fjq?ZfDQZ3cW zm1^O8@eLL)g-f_rTa>i@ z`>|iwe*IQ;(wbk?Y-(b25;Pm%{@UQ=8`SM`$a4AqW44#q8=md|LE=SrbkJKRGR@5TGHd%Q3E>8zBFd--rV9+vrfkDt<=G#wGoQhdr5%4Oe~&erJ< z(2ew2_zrsgO61)6y!$VFdAi1iU%q>U_Q6TZ?|J*JdHQ8Xru(h&G0K>o|017YwHVQC600{k$SKQq-p9b?Ax<1L$U+-8E8T`8% zz8%uHB4>h^@7cA|Qw98?mJdPWMOoX-5#d71$*fKsuSk9WdY0>wTt&PZ3sq=-qO6#F zf%nKBb0O~^&k4W($ehZ_?z4d@qfChx2O9MV(fCV(0bg`^ksosd0F41CzyMGH5P%xM z0000Ty#~P=j-!p#H^BqT*-^0-m8C$YJ1oM{`IqKYA^zL^WL5JW@~#X=B4 zL=+vOOLU5EK?M;-lwAI0B>-p)Kmi7T0)PP200sa6s6#ys9;t^1I-D6`DnJ$TbCLj{ zF#rV^015yCPy-kM0H6-_G}L>0gx=`{!b&opM4xh`4fky|$-G zQu}=6_W#gJ%Qx3sp~KQ8Qmps=88P#CfSea~*8C*V$i$|(g)Q6lkRA8r>jz+wo%>)T zJDWK%C1+Y$Tx zyHwf3cH!fFr8W0$uP4QCCcNCA`p*vhWt`8 z5aR?n%pJB>4HK$^(IyXK=e4+yp*~}Pm;GH_X(n_R5fup+nG}TR3wOjW3c z^p;s%lf+_p!G|zA_lMtCPr9akYf8M@pF$T<=@MGBW)#rKCQ#^t;D$}0OnIgO4Vyrr z3xXRqfwGLmQy{ahlY=b2{s{~?O&oz;ls5B0uGf1Atz+@HI9NuEoZ^4JICSA82EOz1 zouBVAiBPHYt>1P+?n7ZfB*%&GW7#3fW@|5m+H*G&^C>B6v<7a>;uexDV+To_V44)U z?fKE%%^~}Kq*U{xrH$2)PL8Q7IMqyNRZ}ok8hcdKPcK*aU5)SPn{o6wFs=71^PAgE zx!GNsc>|_=^I{71Ptgll&!kusu}PX_N>rDM(`V<@yL#XCtXsrBDXZ0N<6Oo))VR<3 z;k3a!t)=3O-LXnGCbt{rbHPuuVpii#*jwMfUPeiFAi~6? z%;G{STgQ_FK!k}&nZ<=vwvJ~=X{trZ9T2r*4Y^5 zfCv+lGK&kTY#mQ701+l8Wfm7w**czl0z{aYlv!LzW$V#p3XdX9K+L#=SUM0hi5zG$ zjv03ve$zG87;~bF)`1WAzl6C2t`DETx52B`?t))Ga*+H?L{?PIr5mQ3GldjYbLoaf z|8<9RmotO+N2R;}TaUEkJ>^!1rAfRbM*iSDd;Q|27@eO=aa-SRa|_M?`^&( z((DY1@c7wrP=%M}lBibSVHLF#rw2kWiFe8cz6U*jPEP7|wPYB24S4Td7dSin%zNfA(am6W2B+d8XEB5Y>dKSF5IrDa97HK1Q*S z^~v6=1z(cmht7bxYTXNEzg_I%m&d7O9L&4?-})L@^dlkQAHl zEDivKV1$WcESw-IHr-hq00_Yd6UA6KK~iiQWjx19)S@go5F$!ejHLiVBw{Zm5F#35 zsUYIg1|me`T52LnR_xtF4O_S$i_xlcw+_DPpX33FT@EY6=RBABob+L8M&pv1xk`{B G0RRB5qhxRZ literal 0 HcmV?d00001 diff --git a/ch6-dev/clipboard.svg b/ch6-dev/static.files/clipboard-7571035ce49a181d.svg similarity index 100% rename from ch6-dev/clipboard.svg rename to ch6-dev/static.files/clipboard-7571035ce49a181d.svg diff --git a/ch6-dev/favicon-16x16.png b/ch6-dev/static.files/favicon-16x16-8b506e7a72182f1c.png similarity index 100% rename from ch6-dev/favicon-16x16.png rename to ch6-dev/static.files/favicon-16x16-8b506e7a72182f1c.png diff --git a/ch6-dev/favicon.svg b/ch6-dev/static.files/favicon-2c020d218678b618.svg similarity index 100% rename from ch6-dev/favicon.svg rename to ch6-dev/static.files/favicon-2c020d218678b618.svg diff --git a/ch6-dev/favicon-32x32.png b/ch6-dev/static.files/favicon-32x32-422f7d1d52889060.png similarity index 100% rename from ch6-dev/favicon-32x32.png rename to ch6-dev/static.files/favicon-32x32-422f7d1d52889060.png diff --git a/ch6-dev/static.files/main-c5bd66d33317d69f.js b/ch6-dev/static.files/main-c5bd66d33317d69f.js new file mode 100644 index 00000000..43133d66 --- /dev/null +++ b/ch6-dev/static.files/main-c5bd66d33317d69f.js @@ -0,0 +1,12 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar&&locationTitle){const mobileTitle=document.createElement("h2");mobileTitle.innerHTML=locationTitle.innerHTML;mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

    "+searchState.loadingText+"

    ";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
    "+window.NOTABLE_TRAITS[notable_ty]+"
    "}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
    "+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
    "+x[1]+"
    ").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

    Keyboard Shortcuts

    "+shortcuts+"
    ";const infos=[`For a full list of all search features, take a look here.`,"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, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

    "+x+"

    ").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

    Search Tricks

    "+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/ch6-dev/normalize.css b/ch6-dev/static.files/normalize-76eba96aa4d2e634.css similarity index 100% rename from ch6-dev/normalize.css rename to ch6-dev/static.files/normalize-76eba96aa4d2e634.css diff --git a/ch6-dev/static.files/noscript-5d8b3c7633ad77ba.css b/ch6-dev/static.files/noscript-5d8b3c7633ad77ba.css new file mode 100644 index 00000000..8c63ef06 --- /dev/null +++ b/ch6-dev/static.files/noscript-5d8b3c7633ad77ba.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}@media (prefers-color-scheme:dark){:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}} \ No newline at end of file diff --git a/ch6-dev/rust-logo.svg b/ch6-dev/static.files/rust-logo-151179464ae7ed46.svg similarity index 100% rename from ch6-dev/rust-logo.svg rename to ch6-dev/static.files/rust-logo-151179464ae7ed46.svg diff --git a/ch6-dev/static.files/rustdoc-fa3bb1812debf86c.css b/ch6-dev/static.files/rustdoc-fa3bb1812debf86c.css new file mode 100644 index 00000000..2dd5cebc --- /dev/null +++ b/ch6-dev/static.files/rustdoc-fa3bb1812debf86c.css @@ -0,0 +1,10 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");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-acdfaf1a8af734b1.ttf.woff2") format("woff2");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-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}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:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.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;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.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(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.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;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.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;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"]{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a,:root[data-theme="ayu"] #source-sidebar>.title{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/ch6-dev/static.files/scrape-examples-ef1e698c1d417c0c.js b/ch6-dev/static.files/scrape-examples-ef1e698c1d417c0c.js new file mode 100644 index 00000000..ba830e37 --- /dev/null +++ b/ch6-dev/static.files/scrape-examples-ef1e698c1d417c0c.js @@ -0,0 +1 @@ +"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const wrapper=elt.querySelector(".code-wrapper");const halfHeight=wrapper.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function updateScrapedExample(example,isHidden){const locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");if(locs.length>1){const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};example.querySelector(".prev").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});example.querySelector(".next").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}const expandButton=example.querySelector(".expand");if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}scrollToLoc(example,locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>updateScrapedExample(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>updateScrapedExample(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/ch6-dev/static.files/search-5f5ec5419eadd0c9.js b/ch6-dev/static.files/search-5f5ec5419eadd0c9.js new file mode 100644 index 00000000..e25c1820 --- /dev/null +++ b/ch6-dev/static.files/search-5f5ec5419eadd0c9.js @@ -0,0 +1,5 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const 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","generic",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const TY_GENERIC=itemTypes.indexOf("generic");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:null,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);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)}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});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem,whereClause,mgensInout){return unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgensInout,mgens=>{if(mgensInout){for(const[fid,qid]of mgens.entries()){mgensInout.set(fid,qid)}}return true})}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb){let mgens=new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;let fl=fnTypesIn.length;let fnTypes=fnTypesIn.slice();const backtracking=[];let i=0;let j=0;const backtrack=()=>{while(backtracking.length!==0){const{fnTypesScratch,mgensScratch,queryElemsOffset,fnTypesOffset,unbox,}=backtracking.pop();mgens=new Map(mgensScratch);const fnType=fnTypesScratch[fnTypesOffset];const queryElem=queryElems[queryElemsOffset];if(unbox){if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}mgens.set(fnType.id,0)}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;fnTypes=fnTypesScratch.toSpliced(fnTypesOffset,1,...generics);fl=fnTypes.length;i=queryElemsOffset-1}else{if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}mgens.set(fnType.id,queryElem.id)}fnTypes=fnTypesScratch.slice();fl=fnTypes.length;const tmp=fnTypes[queryElemsOffset];fnTypes[queryElemsOffset]=fnTypes[fnTypesOffset];fnTypes[fnTypesOffset]=tmp;i=queryElemsOffset}return true}return false};for(i=0;i!==ql;++i){const queryElem=queryElems[i];const matchCandidates=[];let fnTypesScratch=null;let mgensScratch=null;for(j=i;j!==fl;++j){const fnType=fnTypes[j];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgens,mgensScratch=>{matchCandidates.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:false,});return false})}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}if(!mgensScratch){mgensScratch=new Map(mgens)}backtracking.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:true,})}}if(matchCandidates.length===0){if(backtrack()){continue}else{return false}}const{fnTypesOffset:candidate,mgensScratch:mgensNew}=matchCandidates.pop();if(fnTypes[candidate].id<0&&queryElems[i].id<0){mgens.set(fnTypes[candidate].id,queryElems[i].id)}for(const[fid,qid]of mgensNew){mgens.set(fid,qid)}const tmp=fnTypes[candidate];fnTypes[candidate]=fnTypes[i];fnTypes[i]=tmp;for(const otherCandidate of matchCandidates){backtracking.push(otherCandidate)}while(i===(ql-1)&&solutionCb&&!solutionCb(mgens)){if(!backtrack()){return false}}}return true}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgens.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(fnType.id!==queryElem.id){return false}if(fnType.generics.length===0&&queryElem.generics.length!==0){return false}const queryElemPathLength=queryElem.pathWithoutLast.length;if(queryElemPathLength>0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i=0){if(!whereClause){return false}if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause)}else if(fnType.generics&&fnType.generics.length>0){return checkIfInList(fnType.generics,queryElem,whereClause)}return false}function checkIfInList(list,elem,whereClause){for(const entry of list){if(checkType(entry,elem,whereClause)){return true}}return false}function checkType(row,elem,whereClause){if(row.id===null){return row.generics.length>0?checkIfInList(row.generics,elem,whereClause):false}if(row.id<0&&elem.id>=0){const gid=(-row.id)-1;return checkIfInList(whereClause[gid],elem,whereClause)}if(row.id<0&&elem.id<0){return true}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem,whereClause,new Map())}return true}return checkIfInList(row.generics,elem,whereClause)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const 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,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens)})){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem){if(typeNameIdMap.has(elem.pathLast)){elem.id=typeNameIdMap.get(elem.pathLast)}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.pathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const 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=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
    \ +${item.alias} - see \ +
    `}resultName.insertAdjacentHTML("beforeend",`
    ${alias}\ +${item.displayPath}${name}\ +
    `);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
    "+"Try on DuckDuckGo?

    "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
    "}let output=`

    Results${crates}

    `;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

    Query parser error: "${error.join("")}".

    `;output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+"
    ";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    "}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
    "+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
    ";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

    "+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

    `}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

    "+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

    `}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.map(type=>buildItemSearchType(type,lowercasePaths))}function buildItemSearchType(type,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}if(pathIndex<0){return{id:pathIndex,ty:TY_GENERIC,path:null,generics,}}if(pathIndex===0){return{id:null,ty:null,path:null,generics,}}const item=lowercasePaths[pathIndex-1];return{id:buildTypeMapIndex(item.name),ty:item.ty,path:item.path,generics,}}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}lowercasePaths.push({ty:ty,name:name.toLowerCase(),path:path});paths[i]={ty:ty,name:name,path:path}}lastPath="";len=itemTypes.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/ch6-dev/static.files/settings-74424d7eec62a23e.js b/ch6-dev/static.files/settings-74424d7eec62a23e.js new file mode 100644 index 00000000..3014f75c --- /dev/null +++ b/ch6-dev/static.files/settings-74424d7eec62a23e.js @@ -0,0 +1,17 @@ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +
    +
    ${setting_name}
    +
    `;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ + `});output+=`\ +
    +
    `}else{const checked=setting["default"]===true?" checked":"";output+=`\ +
    \ + \ +
    `}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
    ${buildSettingsPageSections(settings)}
    `;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/ch6-dev/static.files/src-script-3280b574d94e47b4.js b/ch6-dev/static.files/src-script-3280b574d94e47b4.js new file mode 100644 index 00000000..9ea88921 --- /dev/null +++ b/ch6-dev/static.files/src-script-3280b574d94e47b4.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"src-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"src-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(srcIndex).forEach(key=>{srcIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(srcIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSrcLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSrcLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/ch6-dev/static.files/storage-fec3eaa3851e447d.js b/ch6-dev/static.files/storage-fec3eaa3851e447d.js new file mode 100644 index 00000000..a687118f --- /dev/null +++ b/ch6-dev/static.files/storage-fec3eaa3851e447d.js @@ -0,0 +1 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/ch6-dev/static.files/wheel-7b819b6101059cd0.svg b/ch6-dev/static.files/wheel-7b819b6101059cd0.svg new file mode 100644 index 00000000..83c07f63 --- /dev/null +++ b/ch6-dev/static.files/wheel-7b819b6101059cd0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ch6-dev/storage.js b/ch6-dev/storage.js deleted file mode 100644 index c6d070de..00000000 --- a/ch6-dev/storage.js +++ /dev/null @@ -1 +0,0 @@ -var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue(settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchToSavedTheme()}window.addEventListener("pageshow",function(ev){if(ev.persisted){setTimeout(switchToSavedTheme,0)}}) \ No newline at end of file diff --git a/ch6-dev/toggle-minus.svg b/ch6-dev/toggle-minus.svg deleted file mode 100644 index 73154788..00000000 --- a/ch6-dev/toggle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ch6-dev/toggle-plus.svg b/ch6-dev/toggle-plus.svg deleted file mode 100644 index 08b17033..00000000 --- a/ch6-dev/toggle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ch6-dev/wheel.svg b/ch6-dev/wheel.svg deleted file mode 100644 index 01da3b24..00000000 --- a/ch6-dev/wheel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file