From d025f18ef1ccb9ec9202a517ec69d9574378c734 Mon Sep 17 00:00:00 2001 From: chyyuu Date: Thu, 19 May 2022 04:40:07 +0000 Subject: [PATCH] deploy: 4a62e17755e14e03d05b184a77e998c6ce6eee26 --- ch9-log/ayu.css | 2 +- ch9-log/dark.css | 2 +- .../implementors/core/marker/trait.Freeze.js | 2 +- .../implementors/core/marker/trait.Send.js | 2 +- .../implementors/core/marker/trait.Sync.js | 2 +- .../implementors/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- .../os/board/qemu/trait.QEMUExit.js | 3 + ch9-log/light.css | 2 +- ch9-log/main.js | 2 +- ch9-log/os/all.html | 8 +- ch9-log/os/board/constant.CLOCK_FREQ.html | 10 +- ch9-log/os/board/constant.MMIO.html | 10 +- ch9-log/os/board/constant.VIRT_PLIC.html | 10 +- ch9-log/os/board/constant.VIRT_UART.html | 10 +- ch9-log/os/board/fn.device_init.html | 10 +- ch9-log/os/board/fn.irq_handler.html | 10 +- ch9-log/os/board/index.html | 14 +- .../os/board/qemu/constant.CLOCK_FREQ.html | 8 + .../os/board/qemu/constant.EXIT_FAILURE.html | 8 + .../qemu/constant.EXIT_FAILURE_FLAG.html | 8 + .../os/board/qemu/constant.EXIT_RESET.html | 8 + .../os/board/qemu/constant.EXIT_SUCCESS.html | 8 + ch9-log/os/board/qemu/constant.MMIO.html | 8 + .../board/qemu/constant.QEMU_EXIT_HANDLE.html | 8 + ch9-log/os/board/qemu/constant.VIRT_PLIC.html | 8 + ch9-log/os/board/qemu/constant.VIRT_TEST.html | 8 + ch9-log/os/board/qemu/constant.VIRT_UART.html | 8 + ch9-log/os/board/qemu/fn.device_init.html | 8 + .../os/board/qemu/fn.exit_code_encode.html | 9 + ch9-log/os/board/qemu/fn.irq_handler.html | 8 + ch9-log/os/board/qemu/index.html | 15 + ch9-log/os/board/qemu/sidebar-items.js | 1 + ch9-log/os/board/qemu/struct.RISCV64.html | 27 ++ ch9-log/os/board/qemu/trait.QEMUExit.html | 17 ++ .../os/board/qemu/type.BlockDeviceImpl.html | 8 + .../os/board/qemu/type.CharDeviceImpl.html | 8 + ch9-log/os/board/sidebar-items.js | 2 +- ch9-log/os/board/type.BlockDeviceImpl.html | 10 +- ch9-log/os/board/type.CharDeviceImpl.html | 10 +- .../os/config/constant.KERNEL_HEAP_SIZE.html | 10 +- .../os/config/constant.KERNEL_STACK_SIZE.html | 10 +- ch9-log/os/config/constant.MEMORY_END.html | 10 +- ch9-log/os/config/constant.PAGE_SIZE.html | 10 +- .../os/config/constant.PAGE_SIZE_BITS.html | 10 +- ch9-log/os/config/constant.TRAMPOLINE.html | 10 +- .../os/config/constant.TRAP_CONTEXT_BASE.html | 10 +- .../os/config/constant.USER_STACK_SIZE.html | 10 +- ch9-log/os/config/index.html | 12 +- ch9-log/os/console/fn.kprint.html | 10 +- ch9-log/os/console/fn.print.html | 10 +- ch9-log/os/console/index.html | 14 +- ch9-log/os/console/struct.Kstdout.html | 36 +-- ch9-log/os/console/struct.Stdout.html | 36 +-- .../drivers/block/fn.block_device_test.html | 10 +- ch9-log/os/drivers/block/index.html | 14 +- .../os/drivers/block/struct.BLOCK_DEVICE.html | 36 +-- .../block/virtio_blk/constant.VIRTIO0.html | 10 +- .../block/virtio_blk/fn.virtio_dma_alloc.html | 12 +- .../virtio_blk/fn.virtio_dma_dealloc.html | 12 +- .../virtio_blk/fn.virtio_phys_to_virt.html | 12 +- .../virtio_blk/fn.virtio_virt_to_phys.html | 12 +- .../os/drivers/block/virtio_blk/index.html | 16 +- .../block/virtio_blk/struct.QUEUE_FRAMES.html | 38 +-- .../block/virtio_blk/struct.VirtIOBlock.html | 32 ++- ch9-log/os/drivers/chardev/index.html | 14 +- .../os/drivers/chardev/ns16550a/index.html | 12 +- .../drivers/chardev/ns16550a/struct.IER.html | 154 +++++----- .../drivers/chardev/ns16550a/struct.LSR.html | 154 +++++----- .../drivers/chardev/ns16550a/struct.MCR.html | 154 +++++----- .../chardev/ns16550a/struct.NS16550a.html | 32 ++- .../ns16550a/struct.NS16550aInner.html | 32 ++- .../chardev/ns16550a/struct.NS16550aRaw.html | 32 ++- .../ns16550a/struct.ReadWithoutDLAB.html | 32 ++- .../ns16550a/struct.WriteWithoutDLAB.html | 32 ++- ch9-log/os/drivers/chardev/struct.UART.html | 36 +-- .../os/drivers/chardev/trait.CharDevice.html | 16 +- ch9-log/os/drivers/index.html | 12 +- .../drivers/plic/enum.IntrTargetPriority.html | 42 +-- ch9-log/os/drivers/plic/index.html | 12 +- ch9-log/os/drivers/plic/struct.PLIC.html | 32 ++- ch9-log/os/fn.clear_bss.html | 10 +- ch9-log/os/fn.rust_main.html | 12 +- .../easy_fs/bitmap/constant.BLOCK_BITS.html | 10 +- .../fs/easy_fs/bitmap/fn.decomposition.html | 12 +- ch9-log/os/fs/easy_fs/bitmap/index.html | 16 +- .../os/fs/easy_fs/bitmap/struct.Bitmap.html | 32 ++- .../fs/easy_fs/bitmap/type.BitmapBlock.html | 10 +- .../constant.BLOCK_CACHE_SIZE.html | 10 +- .../block_cache/fn.block_cache_sync_all.html | 10 +- .../block_cache/fn.get_block_cache.html | 10 +- ch9-log/os/fs/easy_fs/block_cache/index.html | 14 +- .../struct.BLOCK_CACHE_MANAGER.html | 50 ++-- .../block_cache/struct.BlockCache.html | 36 +-- .../block_cache/struct.BlockCacheManager.html | 32 ++- ch9-log/os/fs/easy_fs/block_dev/index.html | 12 +- .../easy_fs/block_dev/trait.BlockDevice.html | 16 +- ch9-log/os/fs/easy_fs/constant.BLOCK_SZ.html | 10 +- ch9-log/os/fs/easy_fs/efs/index.html | 12 +- .../fs/easy_fs/efs/struct.EasyFileSystem.html | 34 ++- ch9-log/os/fs/easy_fs/efs/type.DataBlock.html | 10 +- ch9-log/os/fs/easy_fs/index.html | 14 +- .../easy_fs/layout/constant.DIRECT_BOUND.html | 10 +- .../fs/easy_fs/layout/constant.DIRENT_SZ.html | 10 +- .../fs/easy_fs/layout/constant.EFS_MAGIC.html | 10 +- .../layout/constant.INDIRECT1_BOUND.html | 10 +- .../layout/constant.INDIRECT2_BOUND.html | 10 +- .../layout/constant.INODE_DIRECT_COUNT.html | 10 +- .../constant.INODE_INDIRECT1_COUNT.html | 10 +- .../constant.INODE_INDIRECT2_COUNT.html | 10 +- .../layout/constant.NAME_LENGTH_LIMIT.html | 10 +- .../fs/easy_fs/layout/enum.DiskInodeType.html | 36 +-- ch9-log/os/fs/easy_fs/layout/index.html | 14 +- .../os/fs/easy_fs/layout/struct.DirEntry.html | 32 ++- .../fs/easy_fs/layout/struct.DiskInode.html | 42 +-- .../fs/easy_fs/layout/struct.SuperBlock.html | 34 ++- .../os/fs/easy_fs/layout/type.DataBlock.html | 10 +- .../fs/easy_fs/layout/type.IndirectBlock.html | 10 +- ch9-log/os/fs/easy_fs/vfs/index.html | 12 +- ch9-log/os/fs/easy_fs/vfs/struct.Inode.html | 34 ++- ch9-log/os/fs/index.html | 14 +- ch9-log/os/fs/inode/fn.list_apps.html | 10 +- ch9-log/os/fs/inode/fn.open_file.html | 10 +- ch9-log/os/fs/inode/index.html | 12 +- ch9-log/os/fs/inode/struct.OSInode.html | 32 ++- ch9-log/os/fs/inode/struct.OSInodeInner.html | 32 ++- ch9-log/os/fs/inode/struct.OpenFlags.html | 156 +++++----- ch9-log/os/fs/inode/struct.ROOT_INODE.html | 36 +-- .../os/fs/pipe/constant.RING_BUFFER_SIZE.html | 10 +- ch9-log/os/fs/pipe/enum.RingBufferStatus.html | 46 +-- ch9-log/os/fs/pipe/fn.make_pipe.html | 12 +- ch9-log/os/fs/pipe/index.html | 16 +- ch9-log/os/fs/pipe/struct.Pipe.html | 32 ++- ch9-log/os/fs/pipe/struct.PipeRingBuffer.html | 32 ++- ch9-log/os/fs/stdio/index.html | 12 +- ch9-log/os/fs/stdio/struct.Stdin.html | 30 +- ch9-log/os/fs/stdio/struct.Stdout.html | 30 +- ch9-log/os/fs/trait.File.html | 18 +- ch9-log/os/index.html | 14 +- ch9-log/os/lang_items/fn.backtrace.html | 10 +- ch9-log/os/lang_items/fn.panic.html | 10 +- ch9-log/os/lang_items/index.html | 12 +- ch9-log/os/macro.kprint.html | 12 +- ch9-log/os/macro.kprintln.html | 12 +- ch9-log/os/macro.print.html | 12 +- ch9-log/os/macro.println.html | 12 +- .../os/mm/address/constant.PA_WIDTH_SV39.html | 10 +- .../mm/address/constant.PPN_WIDTH_SV39.html | 10 +- .../os/mm/address/constant.VA_WIDTH_SV39.html | 10 +- .../mm/address/constant.VPN_WIDTH_SV39.html | 10 +- ch9-log/os/mm/address/index.html | 14 +- ch9-log/os/mm/address/struct.PhysAddr.html | 76 ++--- ch9-log/os/mm/address/struct.PhysPageNum.html | 72 ++--- ch9-log/os/mm/address/struct.SimpleRange.html | 48 ++-- .../address/struct.SimpleRangeIterator.html | 185 ++++++------ ch9-log/os/mm/address/struct.VirtAddr.html | 74 ++--- ch9-log/os/mm/address/struct.VirtPageNum.html | 72 ++--- ch9-log/os/mm/address/trait.StepByOne.html | 12 +- ch9-log/os/mm/address/type.VPNRange.html | 10 +- ch9-log/os/mm/fn.init.html | 10 +- .../os/mm/frame_allocator/fn.frame_alloc.html | 10 +- .../fn.frame_allocator_test.html | 10 +- .../mm/frame_allocator/fn.frame_dealloc.html | 10 +- .../fn.init_frame_allocator.html | 10 +- ch9-log/os/mm/frame_allocator/index.html | 14 +- .../struct.FRAME_ALLOCATOR.html | 38 +-- .../frame_allocator/struct.FrameTracker.html | 36 +-- .../struct.StackFrameAllocator.html | 32 ++- .../frame_allocator/trait.FrameAllocator.html | 16 +- .../type.FrameAllocatorImpl.html | 10 +- .../heap_allocator/fn.handle_alloc_error.html | 10 +- .../os/mm/heap_allocator/fn.heap_test.html | 10 +- .../os/mm/heap_allocator/fn.init_heap.html | 10 +- ch9-log/os/mm/heap_allocator/index.html | 14 +- .../heap_allocator/static.HEAP_ALLOCATOR.html | 10 +- .../mm/heap_allocator/static.HEAP_SPACE.html | 10 +- ch9-log/os/mm/index.html | 14 +- ch9-log/os/mm/memory_set/enum.MapType.html | 48 ++-- ch9-log/os/mm/memory_set/fn.ebss.html | 10 +- ch9-log/os/mm/memory_set/fn.edata.html | 10 +- ch9-log/os/mm/memory_set/fn.ekernel.html | 10 +- ch9-log/os/mm/memory_set/fn.erodata.html | 10 +- ch9-log/os/mm/memory_set/fn.etext.html | 10 +- ch9-log/os/mm/memory_set/fn.kernel_token.html | 10 +- ch9-log/os/mm/memory_set/fn.remap_test.html | 10 +- .../os/mm/memory_set/fn.sbss_with_stack.html | 10 +- ch9-log/os/mm/memory_set/fn.sdata.html | 10 +- ch9-log/os/mm/memory_set/fn.srodata.html | 10 +- ch9-log/os/mm/memory_set/fn.stext.html | 10 +- ch9-log/os/mm/memory_set/fn.strampoline.html | 10 +- ch9-log/os/mm/memory_set/index.html | 12 +- .../os/mm/memory_set/struct.KERNEL_SPACE.html | 36 +-- ch9-log/os/mm/memory_set/struct.MapArea.html | 34 ++- .../mm/memory_set/struct.MapPermission.html | 154 +++++----- .../os/mm/memory_set/struct.MemorySet.html | 40 +-- .../page_table/fn.translated_byte_buffer.html | 10 +- .../os/mm/page_table/fn.translated_ref.html | 10 +- .../mm/page_table/fn.translated_refmut.html | 10 +- .../os/mm/page_table/fn.translated_str.html | 12 +- ch9-log/os/mm/page_table/index.html | 12 +- ch9-log/os/mm/page_table/struct.PTEFlags.html | 154 +++++----- .../os/mm/page_table/struct.PageTable.html | 36 +-- .../mm/page_table/struct.PageTableEntry.html | 42 +-- .../os/mm/page_table/struct.UserBuffer.html | 38 +-- .../page_table/struct.UserBufferIterator.html | 185 ++++++------ ch9-log/os/sbi/constant.SBI_CLEAR_IPI.html | 10 +- .../os/sbi/constant.SBI_CONSOLE_GETCHAR.html | 10 +- .../os/sbi/constant.SBI_CONSOLE_PUTCHAR.html | 10 +- .../os/sbi/constant.SBI_REMOTE_FENCE_I.html | 10 +- .../sbi/constant.SBI_REMOTE_SFENCE_VMA.html | 10 +- .../constant.SBI_REMOTE_SFENCE_VMA_ASID.html | 10 +- ch9-log/os/sbi/constant.SBI_SEND_IPI.html | 10 +- ch9-log/os/sbi/constant.SBI_SET_TIMER.html | 10 +- ch9-log/os/sbi/constant.SBI_SHUTDOWN.html | 10 +- ch9-log/os/sbi/fn.console_getchar.html | 10 +- ch9-log/os/sbi/fn.console_putchar.html | 10 +- ch9-log/os/sbi/fn.sbi_call.html | 10 +- ch9-log/os/sbi/fn.set_timer.html | 10 +- ch9-log/os/sbi/fn.shutdown.html | 10 +- ch9-log/os/sbi/index.html | 14 +- .../os/struct.DEV_NON_BLOCKING_ACCESS.html | 38 +-- ch9-log/os/sync/condvar/index.html | 12 +- ch9-log/os/sync/condvar/struct.Condvar.html | 32 ++- .../os/sync/condvar/struct.CondvarInner.html | 32 ++- ch9-log/os/sync/index.html | 12 +- ch9-log/os/sync/mutex/index.html | 12 +- .../os/sync/mutex/struct.MutexBlocking.html | 32 ++- .../sync/mutex/struct.MutexBlockingInner.html | 32 ++- ch9-log/os/sync/mutex/struct.MutexSpin.html | 32 ++- ch9-log/os/sync/mutex/trait.Mutex.html | 14 +- ch9-log/os/sync/semaphore/index.html | 12 +- .../os/sync/semaphore/struct.Semaphore.html | 32 ++- .../sync/semaphore/struct.SemaphoreInner.html | 32 ++- ch9-log/os/sync/up/index.html | 12 +- .../os/sync/up/struct.INTR_MASKING_INFO.html | 36 +-- .../os/sync/up/struct.IntrMaskingInfo.html | 32 ++- ch9-log/os/sync/up/struct.UPIntrFreeCell.html | 34 ++- ch9-log/os/sync/up/struct.UPIntrRefMut.html | 38 +-- ch9-log/os/sync/up/struct.UPSafeCellRaw.html | 32 ++- .../os/syscall/constant.SYSCALL_CLOSE.html | 10 +- .../constant.SYSCALL_CONDVAR_CREATE.html | 10 +- .../constant.SYSCALL_CONDVAR_SIGNAL.html | 10 +- .../constant.SYSCALL_CONDVAR_WAIT.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_DUP.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_EXEC.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_EXIT.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_FORK.html | 10 +- .../os/syscall/constant.SYSCALL_GETPID.html | 10 +- .../os/syscall/constant.SYSCALL_GETTID.html | 10 +- .../os/syscall/constant.SYSCALL_GET_TIME.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_KILL.html | 10 +- .../constant.SYSCALL_MUTEX_CREATE.html | 10 +- .../syscall/constant.SYSCALL_MUTEX_LOCK.html | 10 +- .../constant.SYSCALL_MUTEX_UNLOCK.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_OPEN.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_PIPE.html | 10 +- ch9-log/os/syscall/constant.SYSCALL_READ.html | 10 +- .../constant.SYSCALL_SEMAPHORE_CREATE.html | 10 +- .../constant.SYSCALL_SEMAPHORE_DOWN.html | 10 +- .../constant.SYSCALL_SEMAPHORE_UP.html | 10 +- .../os/syscall/constant.SYSCALL_SLEEP.html | 10 +- .../constant.SYSCALL_THREAD_CREATE.html | 10 +- .../os/syscall/constant.SYSCALL_WAITPID.html | 10 +- .../os/syscall/constant.SYSCALL_WAITTID.html | 10 +- .../os/syscall/constant.SYSCALL_WRITE.html | 10 +- .../os/syscall/constant.SYSCALL_YIELD.html | 10 +- ch9-log/os/syscall/fn.sys_id_str.html | 10 +- ch9-log/os/syscall/fn.syscall.html | 10 +- ch9-log/os/syscall/fs/fn.sys_close.html | 10 +- ch9-log/os/syscall/fs/fn.sys_dup.html | 10 +- ch9-log/os/syscall/fs/fn.sys_open.html | 10 +- ch9-log/os/syscall/fs/fn.sys_pipe.html | 10 +- ch9-log/os/syscall/fs/fn.sys_read.html | 10 +- ch9-log/os/syscall/fs/fn.sys_write.html | 10 +- ch9-log/os/syscall/fs/index.html | 12 +- ch9-log/os/syscall/index.html | 16 +- ch9-log/os/syscall/process/fn.sys_exec.html | 10 +- ch9-log/os/syscall/process/fn.sys_exit.html | 10 +- ch9-log/os/syscall/process/fn.sys_fork.html | 10 +- .../os/syscall/process/fn.sys_get_time.html | 10 +- ch9-log/os/syscall/process/fn.sys_getpid.html | 10 +- ch9-log/os/syscall/process/fn.sys_kill.html | 10 +- .../os/syscall/process/fn.sys_waitpid.html | 12 +- ch9-log/os/syscall/process/fn.sys_yield.html | 10 +- ch9-log/os/syscall/process/index.html | 12 +- .../syscall/sync/fn.sys_condvar_create.html | 10 +- .../syscall/sync/fn.sys_condvar_signal.html | 10 +- .../os/syscall/sync/fn.sys_condvar_wait.html | 10 +- .../os/syscall/sync/fn.sys_mutex_create.html | 10 +- .../os/syscall/sync/fn.sys_mutex_lock.html | 10 +- .../os/syscall/sync/fn.sys_mutex_unlock.html | 10 +- .../syscall/sync/fn.sys_semaphore_create.html | 10 +- .../syscall/sync/fn.sys_semaphore_down.html | 10 +- .../os/syscall/sync/fn.sys_semaphore_up.html | 10 +- ch9-log/os/syscall/sync/fn.sys_sleep.html | 10 +- ch9-log/os/syscall/sync/index.html | 12 +- ch9-log/os/syscall/thread/fn.sys_gettid.html | 10 +- .../syscall/thread/fn.sys_thread_create.html | 10 +- ch9-log/os/syscall/thread/fn.sys_waittid.html | 12 +- ch9-log/os/syscall/thread/index.html | 12 +- ch9-log/os/task/context/index.html | 12 +- .../os/task/context/struct.TaskContext.html | 32 ++- ch9-log/os/task/fn.add_initproc.html | 10 +- .../task/fn.block_current_and_run_next.html | 10 +- ch9-log/os/task/fn.block_current_task.html | 12 +- .../os/task/fn.check_signals_of_current.html | 10 +- ch9-log/os/task/fn.current_add_signal.html | 10 +- .../os/task/fn.exit_current_and_run_next.html | 10 +- .../task/fn.suspend_current_and_run_next.html | 10 +- ch9-log/os/task/id/constant.IDLE_PID.html | 8 + .../os/task/id/fn.kernel_stack_position.html | 12 +- ch9-log/os/task/id/fn.kstack_alloc.html | 10 +- ch9-log/os/task/id/fn.pid_alloc.html | 10 +- .../task/id/fn.trap_cx_bottom_from_tid.html | 10 +- .../os/task/id/fn.ustack_bottom_from_tid.html | 10 +- ch9-log/os/task/id/index.html | 15 +- ch9-log/os/task/id/sidebar-items.js | 2 +- .../os/task/id/struct.KSTACK_ALLOCATOR.html | 38 +-- ch9-log/os/task/id/struct.KernelStack.html | 32 ++- ch9-log/os/task/id/struct.PID_ALLOCATOR.html | 38 +-- ch9-log/os/task/id/struct.PidHandle.html | 32 ++- .../os/task/id/struct.RecycleAllocator.html | 32 ++- ch9-log/os/task/id/struct.TaskUserRes.html | 34 ++- ch9-log/os/task/index.html | 16 +- ch9-log/os/task/manager/fn.add_task.html | 10 +- ch9-log/os/task/manager/fn.fetch_task.html | 10 +- .../manager/fn.insert_into_pid2process.html | 10 +- ch9-log/os/task/manager/fn.pid2process.html | 10 +- .../manager/fn.remove_from_pid2process.html | 10 +- ch9-log/os/task/manager/index.html | 12 +- ch9-log/os/task/manager/struct.PID2PCB.html | 38 +-- .../os/task/manager/struct.TASK_MANAGER.html | 38 +-- .../os/task/manager/struct.TaskManager.html | 34 ++- ch9-log/os/task/process/index.html | 12 +- .../process/struct.ProcessControlBlock.html | 36 +-- .../struct.ProcessControlBlockInner.html | 32 ++- .../task/processor/fn.current_kstack_top.html | 10 +- .../os/task/processor/fn.current_process.html | 10 +- .../os/task/processor/fn.current_task.html | 10 +- .../os/task/processor/fn.current_trap_cx.html | 10 +- .../processor/fn.current_trap_cx_user_va.html | 10 +- .../task/processor/fn.current_user_token.html | 10 +- ch9-log/os/task/processor/fn.run_tasks.html | 10 +- ch9-log/os/task/processor/fn.schedule.html | 10 +- .../task/processor/fn.take_current_task.html | 10 +- ch9-log/os/task/processor/index.html | 12 +- .../os/task/processor/struct.PROCESSOR.html | 38 +-- .../os/task/processor/struct.Processor.html | 32 ++- ch9-log/os/task/signal/index.html | 12 +- .../os/task/signal/struct.SignalFlags.html | 154 +++++----- ch9-log/os/task/struct.INITPROC.html | 36 +-- ch9-log/os/task/switch/fn.__switch.html | 10 +- ch9-log/os/task/switch/index.html | 12 +- ch9-log/os/task/task/enum.TaskStatus.html | 46 +-- ch9-log/os/task/task/index.html | 12 +- .../os/task/task/struct.TaskControlBlock.html | 32 ++- .../task/struct.TaskControlBlockInner.html | 32 ++- ch9-log/os/timer/constant.MSEC_PER_SEC.html | 10 +- ch9-log/os/timer/constant.TICKS_PER_SEC.html | 10 +- ch9-log/os/timer/fn.add_timer.html | 10 +- ch9-log/os/timer/fn.check_timer.html | 10 +- ch9-log/os/timer/fn.get_time.html | 10 +- ch9-log/os/timer/fn.get_time_ms.html | 10 +- ch9-log/os/timer/fn.set_next_trigger.html | 10 +- ch9-log/os/timer/index.html | 16 +- ch9-log/os/timer/struct.TIMERS.html | 38 +-- ch9-log/os/timer/struct.TimerCondVar.html | 54 ++-- ch9-log/os/trap/context/index.html | 12 +- .../os/trap/context/struct.TrapContext.html | 34 ++- .../trap/fn.disable_supervisor_interrupt.html | 10 +- .../trap/fn.enable_supervisor_interrupt.html | 10 +- .../os/trap/fn.enable_timer_interrupt.html | 10 +- ch9-log/os/trap/fn.init.html | 10 +- ch9-log/os/trap/fn.set_kernel_trap_entry.html | 10 +- ch9-log/os/trap/fn.set_user_trap_entry.html | 10 +- ch9-log/os/trap/fn.trap_from_kernel.html | 12 +- ch9-log/os/trap/fn.trap_handler.html | 12 +- ch9-log/os/trap/fn.trap_return.html | 12 +- ch9-log/os/trap/index.html | 14 +- ch9-log/rustdoc.css | 2 +- ch9-log/search-index.js | 2 +- ch9-log/search.js | 4 +- ch9-log/settings.css | 2 +- ch9-log/settings.html | 19 +- ch9-log/settings.js | 2 +- ch9-log/source-files.js | 2 +- ch9-log/source-script.js | 2 +- ch9-log/src/os/board/mod.rs.html | 34 ++- ch9-log/src/os/board/qemu.rs.html | 268 +++++++++++++++++ ch9-log/src/os/config.rs.html | 26 +- ch9-log/src/os/console.rs.html | 26 +- ch9-log/src/os/drivers/block/mod.rs.html | 26 +- .../src/os/drivers/block/virtio_blk.rs.html | 206 ++++++------- ch9-log/src/os/drivers/chardev/mod.rs.html | 26 +- .../src/os/drivers/chardev/ns16550a.rs.html | 212 +++++++------- ch9-log/src/os/drivers/mod.rs.html | 10 +- ch9-log/src/os/drivers/plic.rs.html | 206 ++++++------- ch9-log/src/os/fs/easy_fs/bitmap.rs.html | 26 +- ch9-log/src/os/fs/easy_fs/block_cache.rs.html | 206 ++++++------- ch9-log/src/os/fs/easy_fs/block_dev.rs.html | 10 +- ch9-log/src/os/fs/easy_fs/efs.rs.html | 206 ++++++------- ch9-log/src/os/fs/easy_fs/layout.rs.html | 206 ++++++------- ch9-log/src/os/fs/easy_fs/mod.rs.html | 26 +- ch9-log/src/os/fs/easy_fs/vfs.rs.html | 206 ++++++------- ch9-log/src/os/fs/inode.rs.html | 206 ++++++------- ch9-log/src/os/fs/mod.rs.html | 26 +- ch9-log/src/os/fs/pipe.rs.html | 206 ++++++------- ch9-log/src/os/fs/stdio.rs.html | 26 +- ch9-log/src/os/lang_items.rs.html | 28 +- ch9-log/src/os/main.rs.html | 30 +- ch9-log/src/os/mm/address.rs.html | 216 +++++++------- ch9-log/src/os/mm/frame_allocator.rs.html | 206 ++++++------- ch9-log/src/os/mm/heap_allocator.rs.html | 26 +- ch9-log/src/os/mm/memory_set.rs.html | 206 ++++++------- ch9-log/src/os/mm/mod.rs.html | 26 +- ch9-log/src/os/mm/page_table.rs.html | 206 ++++++------- ch9-log/src/os/sbi.rs.html | 36 ++- ch9-log/src/os/sync/condvar.rs.html | 34 ++- ch9-log/src/os/sync/mod.rs.html | 10 +- ch9-log/src/os/sync/mutex.rs.html | 26 +- ch9-log/src/os/sync/semaphore.rs.html | 26 +- ch9-log/src/os/sync/up.rs.html | 230 ++++++++------- ch9-log/src/os/syscall/fs.rs.html | 206 ++++++------- ch9-log/src/os/syscall/mod.rs.html | 206 ++++++------- ch9-log/src/os/syscall/process.rs.html | 206 ++++++------- ch9-log/src/os/syscall/sync.rs.html | 206 ++++++------- ch9-log/src/os/syscall/thread.rs.html | 26 +- ch9-log/src/os/task/context.rs.html | 26 +- ch9-log/src/os/task/id.rs.html | 210 +++++++------- ch9-log/src/os/task/manager.rs.html | 26 +- ch9-log/src/os/task/mod.rs.html | 272 +++++++++++------- ch9-log/src/os/task/process.rs.html | 206 ++++++------- ch9-log/src/os/task/processor.rs.html | 212 +++++++------- ch9-log/src/os/task/signal.rs.html | 26 +- ch9-log/src/os/task/switch.rs.html | 10 +- ch9-log/src/os/task/task.rs.html | 34 ++- ch9-log/src/os/timer.rs.html | 26 +- ch9-log/src/os/trap/context.rs.html | 26 +- ch9-log/src/os/trap/mod.rs.html | 220 +++++++------- ch9-log/storage.js | 2 +- 441 files changed, 7449 insertions(+), 5895 deletions(-) create mode 100644 ch9-log/implementors/os/board/qemu/trait.QEMUExit.js create mode 100644 ch9-log/os/board/qemu/constant.CLOCK_FREQ.html create mode 100644 ch9-log/os/board/qemu/constant.EXIT_FAILURE.html create mode 100644 ch9-log/os/board/qemu/constant.EXIT_FAILURE_FLAG.html create mode 100644 ch9-log/os/board/qemu/constant.EXIT_RESET.html create mode 100644 ch9-log/os/board/qemu/constant.EXIT_SUCCESS.html create mode 100644 ch9-log/os/board/qemu/constant.MMIO.html create mode 100644 ch9-log/os/board/qemu/constant.QEMU_EXIT_HANDLE.html create mode 100644 ch9-log/os/board/qemu/constant.VIRT_PLIC.html create mode 100644 ch9-log/os/board/qemu/constant.VIRT_TEST.html create mode 100644 ch9-log/os/board/qemu/constant.VIRT_UART.html create mode 100644 ch9-log/os/board/qemu/fn.device_init.html create mode 100644 ch9-log/os/board/qemu/fn.exit_code_encode.html create mode 100644 ch9-log/os/board/qemu/fn.irq_handler.html create mode 100644 ch9-log/os/board/qemu/index.html create mode 100644 ch9-log/os/board/qemu/sidebar-items.js create mode 100644 ch9-log/os/board/qemu/struct.RISCV64.html create mode 100644 ch9-log/os/board/qemu/trait.QEMUExit.html create mode 100644 ch9-log/os/board/qemu/type.BlockDeviceImpl.html create mode 100644 ch9-log/os/board/qemu/type.CharDeviceImpl.html create mode 100644 ch9-log/os/task/id/constant.IDLE_PID.html create mode 100644 ch9-log/src/os/board/qemu.rs.html diff --git a/ch9-log/ayu.css b/ch9-log/ayu.css index dea87bf1..50d893e2 100644 --- a/ch9-log/ayu.css +++ b/ch9-log/ayu.css @@ -1 +1 @@ - 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{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{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#14191f;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.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;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}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 a,.in-band a{color:#c5c5c5;}.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{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.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{}@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-color:#c6cbd1;}#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;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.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 + 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/ch9-log/dark.css b/ch9-log/dark.css index 5b8e0f75..a31f453f 100644 --- a/ch9-log/dark.css +++ b/ch9-log/dark.css @@ -1 +1 @@ -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{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{background-color:#333;}.source .sidebar{background-color:#565656;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.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;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}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 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{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.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-color:#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;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.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 +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/ch9-log/implementors/core/marker/trait.Freeze.js b/ch9-log/implementors/core/marker/trait.Freeze.js index 8b6edc29..15703b8b 100644 --- a/ch9-log/implementors/core/marker/trait.Freeze.js +++ b/ch9-log/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Freeze for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Freeze for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Freeze for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Freeze for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Freeze for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Freeze for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Freeze for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !Freeze for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Freeze for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Freeze for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Freeze for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Freeze for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Freeze for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Freeze for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Freeze for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Freeze for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Freeze for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Freeze for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Freeze for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Freeze for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Freeze for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Freeze for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !Freeze for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Freeze for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl !Freeze for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !Freeze for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Freeze for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !Freeze for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Freeze for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> !Freeze for UPSafeCellRaw<T>","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Freeze for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Freeze for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> !Freeze for UPIntrFreeCell<T>","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> Freeze for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Freeze for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Freeze for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Freeze for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Freeze for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Freeze for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Freeze for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Freeze for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !Freeze for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Freeze for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Freeze for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Freeze for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Freeze for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; +implementors["os"] = [{"text":"impl Freeze for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Freeze for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Freeze for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Freeze for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Freeze for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Freeze for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Freeze for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Freeze for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !Freeze for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Freeze for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Freeze for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Freeze for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Freeze for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Freeze for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Freeze for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Freeze for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Freeze for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Freeze for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Freeze for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Freeze for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Freeze for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Freeze for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Freeze for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !Freeze for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Freeze for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl !Freeze for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !Freeze for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Freeze for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !Freeze for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Freeze for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> !Freeze for UPSafeCellRaw<T>","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Freeze for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Freeze for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> !Freeze for UPIntrFreeCell<T>","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> Freeze for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Freeze for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Freeze for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Freeze for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Freeze for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Freeze for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Freeze for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Freeze for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !Freeze for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Freeze for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Freeze for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Freeze for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Freeze for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl Freeze for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/core/marker/trait.Send.js b/ch9-log/implementors/core/marker/trait.Send.js index 623574c9..af1cba6c 100644 --- a/ch9-log/implementors/core/marker/trait.Send.js +++ b/ch9-log/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Send for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Send for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Send for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Send for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Send for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Send for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Send for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Send for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Send for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Send for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Send for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Send for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Send for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Send for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Send for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Send for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Send for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Send for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Send for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Send for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Send for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Send for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Send for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Send for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Send for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Send for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Send for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Send for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Send for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Send for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> Send for UPSafeCellRaw<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Send for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Send for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> Send for UPIntrFreeCell<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !Send for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Send for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Send for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Send for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Send for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Send for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Send for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Send for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Send for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Send for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Send for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Send for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Send for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; +implementors["os"] = [{"text":"impl Send for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Send for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Send for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Send for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Send for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Send for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Send for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Send for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Send for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Send for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Send for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Send for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Send for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Send for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Send for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Send for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Send for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Send for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Send for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Send for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Send for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Send for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Send for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Send for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Send for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Send for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Send for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Send for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Send for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Send for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> Send for UPSafeCellRaw<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Send for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Send for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> Send for UPIntrFreeCell<T> where
    T: Send
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !Send for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Send for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Send for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Send for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Send for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Send for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Send for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Send for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Send for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Send for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Send for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Send for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Send for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl Send for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/core/marker/trait.Sync.js b/ch9-log/implementors/core/marker/trait.Sync.js index 5e16b4e2..6eb04727 100644 --- a/ch9-log/implementors/core/marker/trait.Sync.js +++ b/ch9-log/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Sync for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Sync for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Sync for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Sync for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Sync for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Sync for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Sync for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Sync for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Sync for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Sync for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Sync for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Sync for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Sync for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Sync for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Sync for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Sync for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Sync for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Sync for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Sync for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Sync for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Sync for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Sync for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Sync for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Sync for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Sync for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Sync for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Sync for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Sync for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Sync for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl Sync for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Sync for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<'a, T> !Sync for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Sync for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Sync for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Sync for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Sync for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Sync for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Sync for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Sync for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Sync for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Sync for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Sync for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Sync for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Sync for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]},{"text":"impl<T> Sync for UPSafeCellRaw<T>","synthetic":false,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl<T> Sync for UPIntrFreeCell<T>","synthetic":false,"types":["os::sync::up::UPIntrFreeCell"]}]; +implementors["os"] = [{"text":"impl Sync for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Sync for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Sync for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Sync for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Sync for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Sync for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Sync for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Sync for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Sync for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Sync for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Sync for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Sync for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Sync for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Sync for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Sync for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Sync for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Sync for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Sync for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Sync for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Sync for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Sync for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Sync for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Sync for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Sync for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Sync for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Sync for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Sync for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Sync for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Sync for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl Sync for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Sync for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<'a, T> !Sync for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Sync for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Sync for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Sync for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Sync for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Sync for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Sync for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Sync for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Sync for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Sync for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Sync for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Sync for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Sync for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl Sync for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]},{"text":"impl<T> Sync for UPSafeCellRaw<T>","synthetic":false,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl<T> Sync for UPIntrFreeCell<T>","synthetic":false,"types":["os::sync::up::UPIntrFreeCell"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/core/marker/trait.Unpin.js b/ch9-log/implementors/core/marker/trait.Unpin.js index ae4c9c8c..b3c55e04 100644 --- a/ch9-log/implementors/core/marker/trait.Unpin.js +++ b/ch9-log/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Unpin for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Unpin for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Unpin for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Unpin for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Unpin for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Unpin for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Unpin for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Unpin for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Unpin for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Unpin for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Unpin for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Unpin for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Unpin for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Unpin for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Unpin for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Unpin for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Unpin for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Unpin for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Unpin for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Unpin for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Unpin for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Unpin for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Unpin for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Unpin for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Unpin for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Unpin for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Unpin for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Unpin for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Unpin for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> Unpin for UPSafeCellRaw<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Unpin for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Unpin for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> Unpin for UPIntrFreeCell<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> Unpin for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Unpin for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Unpin for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Unpin for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Unpin for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Unpin for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Unpin for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Unpin for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Unpin for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Unpin for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Unpin for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Unpin for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Unpin for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; +implementors["os"] = [{"text":"impl Unpin for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl Unpin for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl Unpin for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl Unpin for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl Unpin for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl Unpin for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl Unpin for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl Unpin for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> Unpin for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl Unpin for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl Unpin for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl Unpin for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl Unpin for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl Unpin for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl Unpin for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl Unpin for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl Unpin for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl Unpin for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl Unpin for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl Unpin for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl Unpin for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl Unpin for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl Unpin for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 Unpin for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl Unpin for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl Unpin for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl Unpin for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl Unpin for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl Unpin for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl Unpin for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> Unpin for UPSafeCellRaw<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl Unpin for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl Unpin for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> Unpin for UPIntrFreeCell<T> where
    T: Unpin
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> Unpin for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl Unpin for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl Unpin for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl Unpin for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl Unpin for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl Unpin for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl Unpin for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl Unpin for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl Unpin for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl Unpin for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl Unpin for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl Unpin for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl Unpin for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl Unpin for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/ch9-log/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 465d9289..dc2c9a79 100644 --- a/ch9-log/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/ch9-log/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl RefUnwindSafe for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl RefUnwindSafe for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl RefUnwindSafe for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl RefUnwindSafe for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl RefUnwindSafe for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl RefUnwindSafe for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl RefUnwindSafe for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !RefUnwindSafe for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl RefUnwindSafe for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl RefUnwindSafe for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl RefUnwindSafe for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl RefUnwindSafe for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl !RefUnwindSafe for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl !RefUnwindSafe for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl !RefUnwindSafe for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl RefUnwindSafe for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl !RefUnwindSafe for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl RefUnwindSafe for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl RefUnwindSafe for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl RefUnwindSafe for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl RefUnwindSafe for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl !RefUnwindSafe for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !RefUnwindSafe for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl !RefUnwindSafe for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl !RefUnwindSafe for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !RefUnwindSafe for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl !RefUnwindSafe for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !RefUnwindSafe for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl !RefUnwindSafe for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> !RefUnwindSafe for UPSafeCellRaw<T>","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl RefUnwindSafe for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl RefUnwindSafe for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> !RefUnwindSafe for UPIntrFreeCell<T>","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !RefUnwindSafe for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl RefUnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl RefUnwindSafe for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl RefUnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl RefUnwindSafe for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl RefUnwindSafe for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl RefUnwindSafe for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl !RefUnwindSafe for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !RefUnwindSafe for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl !RefUnwindSafe for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl RefUnwindSafe for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl RefUnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl RefUnwindSafe for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; +implementors["os"] = [{"text":"impl RefUnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl RefUnwindSafe for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl RefUnwindSafe for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl RefUnwindSafe for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl RefUnwindSafe for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl RefUnwindSafe for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl RefUnwindSafe for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl RefUnwindSafe for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !RefUnwindSafe for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl RefUnwindSafe for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl RefUnwindSafe for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl RefUnwindSafe for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl RefUnwindSafe for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl !RefUnwindSafe for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl !RefUnwindSafe for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl !RefUnwindSafe for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl RefUnwindSafe for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl !RefUnwindSafe for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl RefUnwindSafe for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl RefUnwindSafe for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl RefUnwindSafe for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl RefUnwindSafe for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl !RefUnwindSafe for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !RefUnwindSafe for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl !RefUnwindSafe for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl !RefUnwindSafe for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !RefUnwindSafe for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl !RefUnwindSafe for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !RefUnwindSafe for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl !RefUnwindSafe for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> !RefUnwindSafe for UPSafeCellRaw<T>","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl RefUnwindSafe for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl RefUnwindSafe for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> !RefUnwindSafe for UPIntrFreeCell<T>","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !RefUnwindSafe for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl RefUnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl RefUnwindSafe for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl RefUnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl RefUnwindSafe for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl RefUnwindSafe for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl RefUnwindSafe for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl !RefUnwindSafe for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !RefUnwindSafe for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl !RefUnwindSafe for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl RefUnwindSafe for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl RefUnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl RefUnwindSafe for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl RefUnwindSafe for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/ch9-log/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 80a27584..0c7eaf85 100644 --- a/ch9-log/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/ch9-log/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["os"] = [{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl UnwindSafe for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl UnwindSafe for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl UnwindSafe for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl UnwindSafe for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl UnwindSafe for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl UnwindSafe for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl UnwindSafe for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !UnwindSafe for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl UnwindSafe for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl UnwindSafe for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl UnwindSafe for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl UnwindSafe for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl !UnwindSafe for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl !UnwindSafe for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl !UnwindSafe for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl UnwindSafe for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl !UnwindSafe for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl UnwindSafe for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl UnwindSafe for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl UnwindSafe for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl UnwindSafe for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl !UnwindSafe for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !UnwindSafe for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl !UnwindSafe for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl UnwindSafe for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !UnwindSafe for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl !UnwindSafe for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !UnwindSafe for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl !UnwindSafe for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> UnwindSafe for UPSafeCellRaw<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl UnwindSafe for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl UnwindSafe for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> UnwindSafe for UPIntrFreeCell<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !UnwindSafe for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl UnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl UnwindSafe for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl UnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl UnwindSafe for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl UnwindSafe for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl UnwindSafe for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl !UnwindSafe for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !UnwindSafe for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl !UnwindSafe for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl UnwindSafe for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl UnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl UnwindSafe for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; +implementors["os"] = [{"text":"impl UnwindSafe for Stdout","synthetic":true,"types":["os::console::Stdout"]},{"text":"impl UnwindSafe for Kstdout","synthetic":true,"types":["os::console::Kstdout"]},{"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 IER","synthetic":true,"types":["os::drivers::chardev::ns16550a::IER"]},{"text":"impl UnwindSafe for LSR","synthetic":true,"types":["os::drivers::chardev::ns16550a::LSR"]},{"text":"impl UnwindSafe for MCR","synthetic":true,"types":["os::drivers::chardev::ns16550a::MCR"]},{"text":"impl UnwindSafe for ReadWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::ReadWithoutDLAB"]},{"text":"impl UnwindSafe for WriteWithoutDLAB","synthetic":true,"types":["os::drivers::chardev::ns16550a::WriteWithoutDLAB"]},{"text":"impl UnwindSafe for NS16550aRaw","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aRaw"]},{"text":"impl UnwindSafe for NS16550aInner","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550aInner"]},{"text":"impl<const BASE_ADDR: usize> !UnwindSafe for NS16550a<BASE_ADDR>","synthetic":true,"types":["os::drivers::chardev::ns16550a::NS16550a"]},{"text":"impl UnwindSafe for UART","synthetic":true,"types":["os::drivers::chardev::UART"]},{"text":"impl UnwindSafe for PLIC","synthetic":true,"types":["os::drivers::plic::PLIC"]},{"text":"impl UnwindSafe for IntrTargetPriority","synthetic":true,"types":["os::drivers::plic::IntrTargetPriority"]},{"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 Pipe","synthetic":true,"types":["os::fs::pipe::Pipe"]},{"text":"impl UnwindSafe for RingBufferStatus","synthetic":true,"types":["os::fs::pipe::RingBufferStatus"]},{"text":"impl !UnwindSafe for PipeRingBuffer","synthetic":true,"types":["os::fs::pipe::PipeRingBuffer"]},{"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 Bitmap","synthetic":true,"types":["os::fs::easy_fs::bitmap::Bitmap"]},{"text":"impl !UnwindSafe for BlockCache","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCache"]},{"text":"impl !UnwindSafe for BlockCacheManager","synthetic":true,"types":["os::fs::easy_fs::block_cache::BlockCacheManager"]},{"text":"impl UnwindSafe for BLOCK_CACHE_MANAGER","synthetic":true,"types":["os::fs::easy_fs::block_cache::BLOCK_CACHE_MANAGER"]},{"text":"impl !UnwindSafe for EasyFileSystem","synthetic":true,"types":["os::fs::easy_fs::efs::EasyFileSystem"]},{"text":"impl UnwindSafe for SuperBlock","synthetic":true,"types":["os::fs::easy_fs::layout::SuperBlock"]},{"text":"impl UnwindSafe for DiskInodeType","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInodeType"]},{"text":"impl UnwindSafe for DiskInode","synthetic":true,"types":["os::fs::easy_fs::layout::DiskInode"]},{"text":"impl UnwindSafe for DirEntry","synthetic":true,"types":["os::fs::easy_fs::layout::DirEntry"]},{"text":"impl !UnwindSafe for Inode","synthetic":true,"types":["os::fs::easy_fs::vfs::Inode"]},{"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 !UnwindSafe for Condvar","synthetic":true,"types":["os::sync::condvar::Condvar"]},{"text":"impl !UnwindSafe for CondvarInner","synthetic":true,"types":["os::sync::condvar::CondvarInner"]},{"text":"impl UnwindSafe for MutexSpin","synthetic":true,"types":["os::sync::mutex::MutexSpin"]},{"text":"impl !UnwindSafe for MutexBlocking","synthetic":true,"types":["os::sync::mutex::MutexBlocking"]},{"text":"impl !UnwindSafe for MutexBlockingInner","synthetic":true,"types":["os::sync::mutex::MutexBlockingInner"]},{"text":"impl !UnwindSafe for Semaphore","synthetic":true,"types":["os::sync::semaphore::Semaphore"]},{"text":"impl !UnwindSafe for SemaphoreInner","synthetic":true,"types":["os::sync::semaphore::SemaphoreInner"]},{"text":"impl<T> UnwindSafe for UPSafeCellRaw<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPSafeCellRaw"]},{"text":"impl UnwindSafe for IntrMaskingInfo","synthetic":true,"types":["os::sync::up::IntrMaskingInfo"]},{"text":"impl UnwindSafe for INTR_MASKING_INFO","synthetic":true,"types":["os::sync::up::INTR_MASKING_INFO"]},{"text":"impl<T> UnwindSafe for UPIntrFreeCell<T> where
    T: UnwindSafe
","synthetic":true,"types":["os::sync::up::UPIntrFreeCell"]},{"text":"impl<'a, T> !UnwindSafe for UPIntrRefMut<'a, T>","synthetic":true,"types":["os::sync::up::UPIntrRefMut"]},{"text":"impl UnwindSafe for TaskContext","synthetic":true,"types":["os::task::context::TaskContext"]},{"text":"impl UnwindSafe for RecycleAllocator","synthetic":true,"types":["os::task::id::RecycleAllocator"]},{"text":"impl UnwindSafe for PID_ALLOCATOR","synthetic":true,"types":["os::task::id::PID_ALLOCATOR"]},{"text":"impl UnwindSafe for KSTACK_ALLOCATOR","synthetic":true,"types":["os::task::id::KSTACK_ALLOCATOR"]},{"text":"impl UnwindSafe for PidHandle","synthetic":true,"types":["os::task::id::PidHandle"]},{"text":"impl UnwindSafe for KernelStack","synthetic":true,"types":["os::task::id::KernelStack"]},{"text":"impl !UnwindSafe for TaskUserRes","synthetic":true,"types":["os::task::id::TaskUserRes"]},{"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 PID2PCB","synthetic":true,"types":["os::task::manager::PID2PCB"]},{"text":"impl !UnwindSafe for ProcessControlBlock","synthetic":true,"types":["os::task::process::ProcessControlBlock"]},{"text":"impl !UnwindSafe for ProcessControlBlockInner","synthetic":true,"types":["os::task::process::ProcessControlBlockInner"]},{"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 SignalFlags","synthetic":true,"types":["os::task::signal::SignalFlags"]},{"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 TimerCondVar","synthetic":true,"types":["os::timer::TimerCondVar"]},{"text":"impl UnwindSafe for TIMERS","synthetic":true,"types":["os::timer::TIMERS"]},{"text":"impl UnwindSafe for TrapContext","synthetic":true,"types":["os::trap::context::TrapContext"]},{"text":"impl UnwindSafe for RISCV64","synthetic":true,"types":["os::board::qemu::RISCV64"]},{"text":"impl UnwindSafe for DEV_NON_BLOCKING_ACCESS","synthetic":true,"types":["os::DEV_NON_BLOCKING_ACCESS"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/ch9-log/implementors/os/board/qemu/trait.QEMUExit.js b/ch9-log/implementors/os/board/qemu/trait.QEMUExit.js new file mode 100644 index 00000000..34fffcbd --- /dev/null +++ b/ch9-log/implementors/os/board/qemu/trait.QEMUExit.js @@ -0,0 +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 diff --git a/ch9-log/light.css b/ch9-log/light.css index e8cf0741..289f10cf 100644 --- a/ch9-log/light.css +++ b/ch9-log/light.css @@ -1 +1 @@ - 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{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{background-color:#fff;}.source .sidebar{background-color:#f1f1f1;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.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;}nav:not(.sidebar){border-bottom-color:#e0e0e0;}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 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{color:#555;background-color:white;border-color:#e0e0e0;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input{color:#555;background-color:white;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input:focus{border-color:#66afe9;}#crate-search+.search-input:focus{box-shadow:0 0 8px #078dd8;}.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-color:#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;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.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 + 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/ch9-log/main.js b/ch9-log/main.js index 3a235b2a..5c0ce8ad 100644 --- a/ch9-log/main.js +++ b/ch9-log/main.js @@ -1,4 +1,4 @@ -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,}}}());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("",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},putBackSearch:function(search_input){var search=searchState.outputElement();if(search_input.value!==""&&hasClass(search,"hidden")){searchState.showResults(search);if(searchState.browserSupportsHistoryApi()){var extra="?search="+encodeURIComponent(search_input.value);history.replaceState(search_input.value,"",getNakedUrl()+extra+window.location.hash)}document.title=searchState.title}},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(){searchState.putBackSearch(this);search_input.origPlaceholder=searchState.input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});search_input.addEventListener("blur",function(){search_input.placeholder=searchState.input.origPlaceholder});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}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];if(sidebar){addClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div)}}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(filler){filler.remove()}document.getElementsByTagName("body")[0].style.marginTop=""}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(hash,"",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){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 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 .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=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(hasClass(sidebar,"mobile")){hideSidebar()}else{showSidebar()}}}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 \ +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, \ diff --git a/ch9-log/os/all.html b/ch9-log/os/all.html index 2d06df2d..0e713030 100644 --- a/ch9-log/os/all.html +++ b/ch9-log/os/all.html @@ -1,5 +1,7 @@ List of all items in this crate -

List of all items

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

+ +

List of all items

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

\ No newline at end of file diff --git a/ch9-log/os/board/constant.CLOCK_FREQ.html b/ch9-log/os/board/constant.CLOCK_FREQ.html index 631f6595..c04d3fb6 100644 --- a/ch9-log/os/board/constant.CLOCK_FREQ.html +++ b/ch9-log/os/board/constant.CLOCK_FREQ.html @@ -1,6 +1,8 @@ CLOCK_FREQ in os::board - Rust -
-

Constant os::board::CLOCK_FREQ

source · []
pub const CLOCK_FREQ: usize = 12500000;
+ +
+

Constant os::board::CLOCK_FREQ

source · []
pub const CLOCK_FREQ: usize = 12500000;
\ No newline at end of file diff --git a/ch9-log/os/board/constant.MMIO.html b/ch9-log/os/board/constant.MMIO.html index 51f39f8b..e57f5a2a 100644 --- a/ch9-log/os/board/constant.MMIO.html +++ b/ch9-log/os/board/constant.MMIO.html @@ -1,6 +1,8 @@ MMIO in os::board - Rust -
-

Constant os::board::MMIO

source · []
pub const MMIO: &[(usize, usize)];
+ +
+

Constant os::board::MMIO

source · []
pub const MMIO: &[(usize, usize)];
\ No newline at end of file diff --git a/ch9-log/os/board/constant.VIRT_PLIC.html b/ch9-log/os/board/constant.VIRT_PLIC.html index 152e2c1b..5c1df1c0 100644 --- a/ch9-log/os/board/constant.VIRT_PLIC.html +++ b/ch9-log/os/board/constant.VIRT_PLIC.html @@ -1,6 +1,8 @@ VIRT_PLIC in os::board - Rust -
-

Constant os::board::VIRT_PLIC

source · []
pub const VIRT_PLIC: usize = 0xC00_0000;
+ +
+

Constant os::board::VIRT_PLIC

source · []
pub const VIRT_PLIC: usize = 0xC00_0000;
\ No newline at end of file diff --git a/ch9-log/os/board/constant.VIRT_UART.html b/ch9-log/os/board/constant.VIRT_UART.html index bd9e5456..90c09d97 100644 --- a/ch9-log/os/board/constant.VIRT_UART.html +++ b/ch9-log/os/board/constant.VIRT_UART.html @@ -1,6 +1,8 @@ VIRT_UART in os::board - Rust -
-

Constant os::board::VIRT_UART

source · []
pub const VIRT_UART: usize = 0x1000_0000;
+ +
+

Constant os::board::VIRT_UART

source · []
pub const VIRT_UART: usize = 0x1000_0000;
\ No newline at end of file diff --git a/ch9-log/os/board/fn.device_init.html b/ch9-log/os/board/fn.device_init.html index 17171971..8fc688f4 100644 --- a/ch9-log/os/board/fn.device_init.html +++ b/ch9-log/os/board/fn.device_init.html @@ -1,6 +1,8 @@ device_init in os::board - Rust -
-

Function os::board::device_init

source · []
pub fn device_init()
+ +
+

Function os::board::device_init

source · []
pub fn device_init()
\ No newline at end of file diff --git a/ch9-log/os/board/fn.irq_handler.html b/ch9-log/os/board/fn.irq_handler.html index 2a519e46..ac90b44e 100644 --- a/ch9-log/os/board/fn.irq_handler.html +++ b/ch9-log/os/board/fn.irq_handler.html @@ -1,6 +1,8 @@ irq_handler in os::board - Rust -
-

Function os::board::irq_handler

source · []
pub fn irq_handler()
+ +
+

Function os::board::irq_handler

source · []
pub fn irq_handler()
\ No newline at end of file diff --git a/ch9-log/os/board/index.html b/ch9-log/os/board/index.html index ad242f82..6eb5114d 100644 --- a/ch9-log/os/board/index.html +++ b/ch9-log/os/board/index.html @@ -1,9 +1,13 @@ os::board - Rust -
\ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.CLOCK_FREQ.html b/ch9-log/os/board/qemu/constant.CLOCK_FREQ.html new file mode 100644 index 00000000..e9f751fe --- /dev/null +++ b/ch9-log/os/board/qemu/constant.CLOCK_FREQ.html @@ -0,0 +1,8 @@ +CLOCK_FREQ in os::board::qemu - Rust + +
+

Constant os::board::qemu::CLOCK_FREQ

source · []
pub const CLOCK_FREQ: usize = 12500000;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.EXIT_FAILURE.html b/ch9-log/os/board/qemu/constant.EXIT_FAILURE.html new file mode 100644 index 00000000..369d306f --- /dev/null +++ b/ch9-log/os/board/qemu/constant.EXIT_FAILURE.html @@ -0,0 +1,8 @@ +EXIT_FAILURE in os::board::qemu - Rust + +
const EXIT_FAILURE: u32 = exit_code_encode(1); // 78_643u32
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.EXIT_FAILURE_FLAG.html b/ch9-log/os/board/qemu/constant.EXIT_FAILURE_FLAG.html new file mode 100644 index 00000000..7dca1731 --- /dev/null +++ b/ch9-log/os/board/qemu/constant.EXIT_FAILURE_FLAG.html @@ -0,0 +1,8 @@ +EXIT_FAILURE_FLAG in os::board::qemu - Rust + +
const EXIT_FAILURE_FLAG: u32 = 0x3333;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.EXIT_RESET.html b/ch9-log/os/board/qemu/constant.EXIT_RESET.html new file mode 100644 index 00000000..e53cfed0 --- /dev/null +++ b/ch9-log/os/board/qemu/constant.EXIT_RESET.html @@ -0,0 +1,8 @@ +EXIT_RESET in os::board::qemu - Rust + +
+

Constant os::board::qemu::EXIT_RESET

source · []
const EXIT_RESET: u32 = 0x7777;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.EXIT_SUCCESS.html b/ch9-log/os/board/qemu/constant.EXIT_SUCCESS.html new file mode 100644 index 00000000..976a8778 --- /dev/null +++ b/ch9-log/os/board/qemu/constant.EXIT_SUCCESS.html @@ -0,0 +1,8 @@ +EXIT_SUCCESS in os::board::qemu - Rust + +
const EXIT_SUCCESS: u32 = 0x5555;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.MMIO.html b/ch9-log/os/board/qemu/constant.MMIO.html new file mode 100644 index 00000000..25988874 --- /dev/null +++ b/ch9-log/os/board/qemu/constant.MMIO.html @@ -0,0 +1,8 @@ +MMIO in os::board::qemu - Rust + +
+

Constant os::board::qemu::MMIO

source · []
pub const MMIO: &[(usize, usize)];
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.QEMU_EXIT_HANDLE.html b/ch9-log/os/board/qemu/constant.QEMU_EXIT_HANDLE.html new file mode 100644 index 00000000..a5ce6339 --- /dev/null +++ b/ch9-log/os/board/qemu/constant.QEMU_EXIT_HANDLE.html @@ -0,0 +1,8 @@ +QEMU_EXIT_HANDLE in os::board::qemu - Rust + +
pub const QEMU_EXIT_HANDLE: RISCV64;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.VIRT_PLIC.html b/ch9-log/os/board/qemu/constant.VIRT_PLIC.html new file mode 100644 index 00000000..a023001e --- /dev/null +++ b/ch9-log/os/board/qemu/constant.VIRT_PLIC.html @@ -0,0 +1,8 @@ +VIRT_PLIC in os::board::qemu - Rust + +
+

Constant os::board::qemu::VIRT_PLIC

source · []
pub const VIRT_PLIC: usize = 0xC00_0000;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.VIRT_TEST.html b/ch9-log/os/board/qemu/constant.VIRT_TEST.html new file mode 100644 index 00000000..8cd3397a --- /dev/null +++ b/ch9-log/os/board/qemu/constant.VIRT_TEST.html @@ -0,0 +1,8 @@ +VIRT_TEST in os::board::qemu - Rust + +
+

Constant os::board::qemu::VIRT_TEST

source · []
const VIRT_TEST: u64 = 0x100000;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/constant.VIRT_UART.html b/ch9-log/os/board/qemu/constant.VIRT_UART.html new file mode 100644 index 00000000..66bf955c --- /dev/null +++ b/ch9-log/os/board/qemu/constant.VIRT_UART.html @@ -0,0 +1,8 @@ +VIRT_UART in os::board::qemu - Rust + +
+

Constant os::board::qemu::VIRT_UART

source · []
pub const VIRT_UART: usize = 0x1000_0000;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/fn.device_init.html b/ch9-log/os/board/qemu/fn.device_init.html new file mode 100644 index 00000000..e9a0f057 --- /dev/null +++ b/ch9-log/os/board/qemu/fn.device_init.html @@ -0,0 +1,8 @@ +device_init in os::board::qemu - Rust + +
+

Function os::board::qemu::device_init

source · []
pub fn device_init()
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/fn.exit_code_encode.html b/ch9-log/os/board/qemu/fn.exit_code_encode.html new file mode 100644 index 00000000..0ed8bd6e --- /dev/null +++ b/ch9-log/os/board/qemu/fn.exit_code_encode.html @@ -0,0 +1,9 @@ +exit_code_encode in os::board::qemu - 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/ch9-log/os/board/qemu/fn.irq_handler.html b/ch9-log/os/board/qemu/fn.irq_handler.html new file mode 100644 index 00000000..763593df --- /dev/null +++ b/ch9-log/os/board/qemu/fn.irq_handler.html @@ -0,0 +1,8 @@ +irq_handler in os::board::qemu - Rust + +
+

Function os::board::qemu::irq_handler

source · []
pub fn irq_handler()
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/index.html b/ch9-log/os/board/qemu/index.html new file mode 100644 index 00000000..fe803b87 --- /dev/null +++ b/ch9-log/os/board/qemu/index.html @@ -0,0 +1,15 @@ +os::board::qemu - Rust + +
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/sidebar-items.js b/ch9-log/os/board/qemu/sidebar-items.js new file mode 100644 index 00000000..b89e82a8 --- /dev/null +++ b/ch9-log/os/board/qemu/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"constant":[["CLOCK_FREQ",""],["EXIT_FAILURE",""],["EXIT_FAILURE_FLAG",""],["EXIT_RESET",""],["EXIT_SUCCESS",""],["MMIO",""],["QEMU_EXIT_HANDLE",""],["VIRT_PLIC",""],["VIRT_TEST",""],["VIRT_UART",""]],"fn":[["device_init",""],["exit_code_encode","Encode the exit code using EXIT_FAILURE_FLAG."],["irq_handler",""]],"struct":[["RISCV64","RISCV64 configuration"]],"trait":[["QEMUExit",""]],"type":[["BlockDeviceImpl",""],["CharDeviceImpl",""]]}); \ No newline at end of file diff --git a/ch9-log/os/board/qemu/struct.RISCV64.html b/ch9-log/os/board/qemu/struct.RISCV64.html new file mode 100644 index 00000000..65d12479 --- /dev/null +++ b/ch9-log/os/board/qemu/struct.RISCV64.html @@ -0,0 +1,27 @@ +RISCV64 in os::board::qemu - Rust + +
+

Struct os::board::qemu::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/ch9-log/os/board/qemu/trait.QEMUExit.html b/ch9-log/os/board/qemu/trait.QEMUExit.html new file mode 100644 index 00000000..4097d32f --- /dev/null +++ b/ch9-log/os/board/qemu/trait.QEMUExit.html @@ -0,0 +1,17 @@ +QEMUExit in os::board::qemu - 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/ch9-log/os/board/qemu/type.BlockDeviceImpl.html b/ch9-log/os/board/qemu/type.BlockDeviceImpl.html new file mode 100644 index 00000000..cb520a0f --- /dev/null +++ b/ch9-log/os/board/qemu/type.BlockDeviceImpl.html @@ -0,0 +1,8 @@ +BlockDeviceImpl in os::board::qemu - Rust + +
+

Type Definition os::board::qemu::BlockDeviceImpl

source · []
pub type BlockDeviceImpl = VirtIOBlock;
+ \ No newline at end of file diff --git a/ch9-log/os/board/qemu/type.CharDeviceImpl.html b/ch9-log/os/board/qemu/type.CharDeviceImpl.html new file mode 100644 index 00000000..848cfe5b --- /dev/null +++ b/ch9-log/os/board/qemu/type.CharDeviceImpl.html @@ -0,0 +1,8 @@ +CharDeviceImpl in os::board::qemu - Rust + +
+

Type Definition os::board::qemu::CharDeviceImpl

source · []
pub type CharDeviceImpl = NS16550a<VIRT_UART>;
+ \ No newline at end of file diff --git a/ch9-log/os/board/sidebar-items.js b/ch9-log/os/board/sidebar-items.js index 72111b17..bc8b467b 100644 --- a/ch9-log/os/board/sidebar-items.js +++ b/ch9-log/os/board/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["CLOCK_FREQ",""],["MMIO",""],["VIRT_PLIC",""],["VIRT_UART",""]],"fn":[["device_init",""],["irq_handler",""]],"type":[["BlockDeviceImpl",""],["CharDeviceImpl",""]]}); \ No newline at end of file +initSidebarItems({"constant":[["CLOCK_FREQ",""],["MMIO",""],["VIRT_PLIC",""],["VIRT_UART",""]],"fn":[["device_init",""],["irq_handler",""]],"mod":[["qemu",""]],"type":[["BlockDeviceImpl",""],["CharDeviceImpl",""]]}); \ No newline at end of file diff --git a/ch9-log/os/board/type.BlockDeviceImpl.html b/ch9-log/os/board/type.BlockDeviceImpl.html index 59b6390d..eea9d473 100644 --- a/ch9-log/os/board/type.BlockDeviceImpl.html +++ b/ch9-log/os/board/type.BlockDeviceImpl.html @@ -1,6 +1,8 @@ BlockDeviceImpl in os::board - Rust -
-

Type Definition os::board::BlockDeviceImpl

source · []
pub type BlockDeviceImpl = VirtIOBlock;
+ +
+

Type Definition os::board::BlockDeviceImpl

source · []
pub type BlockDeviceImpl = VirtIOBlock;
\ No newline at end of file diff --git a/ch9-log/os/board/type.CharDeviceImpl.html b/ch9-log/os/board/type.CharDeviceImpl.html index 6c541364..403aeda3 100644 --- a/ch9-log/os/board/type.CharDeviceImpl.html +++ b/ch9-log/os/board/type.CharDeviceImpl.html @@ -1,6 +1,8 @@ CharDeviceImpl in os::board - Rust -
-

Type Definition os::board::CharDeviceImpl

source · []
pub type CharDeviceImpl = NS16550a<VIRT_UART>;
+ +
+

Type Definition os::board::CharDeviceImpl

source · []
pub type CharDeviceImpl = NS16550a<VIRT_UART>;
\ No newline at end of file diff --git a/ch9-log/os/config/constant.KERNEL_HEAP_SIZE.html b/ch9-log/os/config/constant.KERNEL_HEAP_SIZE.html index 37fbf1ef..c5fc811a 100644 --- a/ch9-log/os/config/constant.KERNEL_HEAP_SIZE.html +++ b/ch9-log/os/config/constant.KERNEL_HEAP_SIZE.html @@ -1,6 +1,8 @@ KERNEL_HEAP_SIZE in os::config - Rust -
pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
+ +
pub const KERNEL_HEAP_SIZE: usize = 0x20_0000;
\ No newline at end of file diff --git a/ch9-log/os/config/constant.KERNEL_STACK_SIZE.html b/ch9-log/os/config/constant.KERNEL_STACK_SIZE.html index 0870895a..1e547346 100644 --- a/ch9-log/os/config/constant.KERNEL_STACK_SIZE.html +++ b/ch9-log/os/config/constant.KERNEL_STACK_SIZE.html @@ -1,6 +1,8 @@ KERNEL_STACK_SIZE in os::config - Rust -
pub const KERNEL_STACK_SIZE: usize = 4096 * 2; // 0x0000_0000_0000_2000usize
+ +
pub const KERNEL_STACK_SIZE: usize = 4096 * 2; // 8_192usize
\ No newline at end of file diff --git a/ch9-log/os/config/constant.MEMORY_END.html b/ch9-log/os/config/constant.MEMORY_END.html index 50a51128..5ab07242 100644 --- a/ch9-log/os/config/constant.MEMORY_END.html +++ b/ch9-log/os/config/constant.MEMORY_END.html @@ -1,6 +1,8 @@ MEMORY_END in os::config - Rust -
-

Constant os::config::MEMORY_END

source · []
pub const MEMORY_END: usize = 0x80800000;
+ +
+

Constant os::config::MEMORY_END

source · []
pub const MEMORY_END: usize = 0x80800000;
\ No newline at end of file diff --git a/ch9-log/os/config/constant.PAGE_SIZE.html b/ch9-log/os/config/constant.PAGE_SIZE.html index 6a65de1f..91a51506 100644 --- a/ch9-log/os/config/constant.PAGE_SIZE.html +++ b/ch9-log/os/config/constant.PAGE_SIZE.html @@ -1,6 +1,8 @@ PAGE_SIZE in os::config - Rust -
-

Constant os::config::PAGE_SIZE

source · []
pub const PAGE_SIZE: usize = 0x1000;
+ +
+

Constant os::config::PAGE_SIZE

source · []
pub const PAGE_SIZE: usize = 0x1000;
\ No newline at end of file diff --git a/ch9-log/os/config/constant.PAGE_SIZE_BITS.html b/ch9-log/os/config/constant.PAGE_SIZE_BITS.html index 5356ad2d..0a0d83fd 100644 --- a/ch9-log/os/config/constant.PAGE_SIZE_BITS.html +++ b/ch9-log/os/config/constant.PAGE_SIZE_BITS.html @@ -1,6 +1,8 @@ PAGE_SIZE_BITS in os::config - Rust -
pub const PAGE_SIZE_BITS: usize = 0xc;
+ +
pub const PAGE_SIZE_BITS: usize = 0xc;
\ No newline at end of file diff --git a/ch9-log/os/config/constant.TRAMPOLINE.html b/ch9-log/os/config/constant.TRAMPOLINE.html index 306d3252..420fd50c 100644 --- a/ch9-log/os/config/constant.TRAMPOLINE.html +++ b/ch9-log/os/config/constant.TRAMPOLINE.html @@ -1,6 +1,8 @@ TRAMPOLINE in os::config - Rust -
-

Constant os::config::TRAMPOLINE

source · []
pub const TRAMPOLINE: usize = usize::MAX - PAGE_SIZE + 1; // 0xffff_ffff_ffff_f000usize
+ +
+

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 diff --git a/ch9-log/os/config/constant.TRAP_CONTEXT_BASE.html b/ch9-log/os/config/constant.TRAP_CONTEXT_BASE.html index a7375a83..9b319503 100644 --- a/ch9-log/os/config/constant.TRAP_CONTEXT_BASE.html +++ b/ch9-log/os/config/constant.TRAP_CONTEXT_BASE.html @@ -1,6 +1,8 @@ TRAP_CONTEXT_BASE in os::config - Rust -
pub const TRAP_CONTEXT_BASE: usize = TRAMPOLINE - PAGE_SIZE; // 0xffff_ffff_ffff_e000usize
+ +
pub const TRAP_CONTEXT_BASE: usize = TRAMPOLINE - PAGE_SIZE; // 18_446_744_073_709_543_424usize
\ No newline at end of file diff --git a/ch9-log/os/config/constant.USER_STACK_SIZE.html b/ch9-log/os/config/constant.USER_STACK_SIZE.html index 7b13b4aa..2c8a959e 100644 --- a/ch9-log/os/config/constant.USER_STACK_SIZE.html +++ b/ch9-log/os/config/constant.USER_STACK_SIZE.html @@ -1,6 +1,8 @@ USER_STACK_SIZE in os::config - Rust -
pub const USER_STACK_SIZE: usize = 4096 * 2; // 0x0000_0000_0000_2000usize
+ +
pub const USER_STACK_SIZE: usize = 4096 * 2; // 8_192usize
\ No newline at end of file diff --git a/ch9-log/os/config/index.html b/ch9-log/os/config/index.html index d16899fd..b29e1783 100644 --- a/ch9-log/os/config/index.html +++ b/ch9-log/os/config/index.html @@ -1,8 +1,10 @@ os::config - Rust -
\ No newline at end of file diff --git a/ch9-log/os/console/fn.kprint.html b/ch9-log/os/console/fn.kprint.html index eb795cc0..4202517d 100644 --- a/ch9-log/os/console/fn.kprint.html +++ b/ch9-log/os/console/fn.kprint.html @@ -1,6 +1,8 @@ kprint in os::console - Rust -
-

Function os::console::kprint

source · []
pub fn kprint(args: Arguments<'_>)
+ +
+

Function os::console::kprint

source · []
pub fn kprint(args: Arguments<'_>)
\ No newline at end of file diff --git a/ch9-log/os/console/fn.print.html b/ch9-log/os/console/fn.print.html index 11eb46a6..f8119bcb 100644 --- a/ch9-log/os/console/fn.print.html +++ b/ch9-log/os/console/fn.print.html @@ -1,6 +1,8 @@ print in os::console - Rust -
-

Function os::console::print

source · []
pub fn print(args: Arguments<'_>)
+ +
+

Function os::console::print

source · []
pub fn print(args: Arguments<'_>)
\ No newline at end of file diff --git a/ch9-log/os/console/index.html b/ch9-log/os/console/index.html index 132af462..0dcad501 100644 --- a/ch9-log/os/console/index.html +++ b/ch9-log/os/console/index.html @@ -1,8 +1,10 @@ os::console - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/console/struct.Kstdout.html b/ch9-log/os/console/struct.Kstdout.html index 585add39..749459ab 100644 --- a/ch9-log/os/console/struct.Kstdout.html +++ b/ch9-log/os/console/struct.Kstdout.html @@ -1,19 +1,23 @@ Kstdout in os::console - Rust -
-

Struct os::console::Kstdout

source · []
struct Kstdout;

Trait Implementations

Writes a string slice into this writer, returning whether the write +

+
+

Struct os::console::Kstdout

source · []
struct Kstdout;

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/console/struct.Stdout.html b/ch9-log/os/console/struct.Stdout.html index aacab1d0..1f956495 100644 --- a/ch9-log/os/console/struct.Stdout.html +++ b/ch9-log/os/console/struct.Stdout.html @@ -1,19 +1,23 @@ 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 +

+
+

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/drivers/block/fn.block_device_test.html b/ch9-log/os/drivers/block/fn.block_device_test.html index f08cd112..911341f2 100644 --- a/ch9-log/os/drivers/block/fn.block_device_test.html +++ b/ch9-log/os/drivers/block/fn.block_device_test.html @@ -1,6 +1,8 @@ block_device_test in os::drivers::block - Rust -
pub fn block_device_test()
+ +
pub fn block_device_test()
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/index.html b/ch9-log/os/drivers/block/index.html index 0a65b485..777b74ac 100644 --- a/ch9-log/os/drivers/block/index.html +++ b/ch9-log/os/drivers/block/index.html @@ -1,10 +1,12 @@ os::drivers::block - Rust -
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/struct.BLOCK_DEVICE.html b/ch9-log/os/drivers/block/struct.BLOCK_DEVICE.html index 085edeae..07fc74ac 100644 --- a/ch9-log/os/drivers/block/struct.BLOCK_DEVICE.html +++ b/ch9-log/os/drivers/block/struct.BLOCK_DEVICE.html @@ -1,19 +1,23 @@ BLOCK_DEVICE in os::drivers::block - Rust -
pub struct BLOCK_DEVICE {
+    
+    
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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/drivers/block/virtio_blk/constant.VIRTIO0.html b/ch9-log/os/drivers/block/virtio_blk/constant.VIRTIO0.html index 6247ce49..123d5789 100644 --- a/ch9-log/os/drivers/block/virtio_blk/constant.VIRTIO0.html +++ b/ch9-log/os/drivers/block/virtio_blk/constant.VIRTIO0.html @@ -1,6 +1,8 @@ VIRTIO0 in os::drivers::block::virtio_blk - Rust -
const VIRTIO0: usize = 0x10001000;
+ +
const VIRTIO0: usize = 0x10001000;
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html index cb45fece..092eb6dd 100644 --- a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html +++ b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_alloc.html @@ -1,7 +1,9 @@ virtio_dma_alloc in os::drivers::block::virtio_blk - Rust -
#[no_mangle]
-pub extern "C" fn virtio_dma_alloc(pages: usize) -> PhysAddr
+ +
#[no_mangle]
+pub extern "C" fn virtio_dma_alloc(pages: usize) -> PhysAddr
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html index 1a27dc6a..f690f49b 100644 --- a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html +++ b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_dma_dealloc.html @@ -1,7 +1,9 @@ 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_mangle]
+pub extern "C" fn virtio_dma_dealloc(
    pa: PhysAddr,
    pages: usize
) -> i32
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html index 76c48305..9ce8dc72 100644 --- a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html +++ b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_phys_to_virt.html @@ -1,7 +1,9 @@ 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_mangle]
+pub extern "C" fn virtio_phys_to_virt(paddr: PhysAddr) -> VirtAddr
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html index f5dd40eb..e447f260 100644 --- a/ch9-log/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html +++ b/ch9-log/os/drivers/block/virtio_blk/fn.virtio_virt_to_phys.html @@ -1,7 +1,9 @@ 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_mangle]
+pub extern "C" fn virtio_virt_to_phys(vaddr: VirtAddr) -> PhysAddr
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/index.html b/ch9-log/os/drivers/block/virtio_blk/index.html index da14e0dd..83ced8ff 100644 --- a/ch9-log/os/drivers/block/virtio_blk/index.html +++ b/ch9-log/os/drivers/block/virtio_blk/index.html @@ -1,9 +1,11 @@ os::drivers::block::virtio_blk - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html b/ch9-log/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html index 1aa7544f..22ac2194 100644 --- a/ch9-log/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html +++ b/ch9-log/os/drivers/block/virtio_blk/struct.QUEUE_FRAMES.html @@ -1,20 +1,24 @@ QUEUE_FRAMES in os::drivers::block::virtio_blk - Rust -
struct QUEUE_FRAMES {
+    
+    
struct QUEUE_FRAMES {
     __private_field: (),
-}

Fields

__private_field: ()

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

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

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

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/ch9-log/os/drivers/block/virtio_blk/struct.VirtIOBlock.html b/ch9-log/os/drivers/block/virtio_blk/struct.VirtIOBlock.html index 7b4c8ff8..596606ab 100644 --- a/ch9-log/os/drivers/block/virtio_blk/struct.VirtIOBlock.html +++ b/ch9-log/os/drivers/block/virtio_blk/struct.VirtIOBlock.html @@ -1,18 +1,22 @@ VirtIOBlock in os::drivers::block::virtio_blk - Rust -
pub struct VirtIOBlock {
+    
+    
pub struct VirtIOBlock {
     virtio_blk: UPIntrFreeCell<VirtIOBlk<'static>>,
     condvars: BTreeMap<u16, Condvar>,
-}

Fields

virtio_blk: UPIntrFreeCell<VirtIOBlk<'static>>condvars: BTreeMap<u16, Condvar>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

virtio_blk: UPIntrFreeCell<VirtIOBlk<'static>>condvars: BTreeMap<u16, Condvar>

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).

+

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/ch9-log/os/drivers/chardev/index.html b/ch9-log/os/drivers/chardev/index.html index 2ca6de46..871d5450 100644 --- a/ch9-log/os/drivers/chardev/index.html +++ b/ch9-log/os/drivers/chardev/index.html @@ -1,10 +1,12 @@ os::drivers::chardev - Rust -
\ No newline at end of file diff --git a/ch9-log/os/drivers/chardev/ns16550a/index.html b/ch9-log/os/drivers/chardev/ns16550a/index.html index b25fb58d..a85427b7 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/index.html +++ b/ch9-log/os/drivers/chardev/ns16550a/index.html @@ -1,10 +1,12 @@ os::drivers::chardev::ns16550a - Rust -

Structs

+ +

Structs

InterruptEnableRegister

LineStatusRegister

Model Control Register

-
+
\ No newline at end of file diff --git a/ch9-log/os/drivers/chardev/ns16550a/struct.IER.html b/ch9-log/os/drivers/chardev/ns16550a/struct.IER.html index a983e4d0..2c711499 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.IER.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.IER.html @@ -1,54 +1,56 @@ IER in os::drivers::chardev::ns16550a - Rust -
pub struct IER {
+    
+    
pub struct IER {
     bits: u8,
 }
Expand description

InterruptEnableRegister

-

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

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -56,65 +58,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/drivers/chardev/ns16550a/struct.LSR.html b/ch9-log/os/drivers/chardev/ns16550a/struct.LSR.html index 814c861a..2b9d5de0 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.LSR.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.LSR.html @@ -1,54 +1,56 @@ LSR in os::drivers::chardev::ns16550a - Rust -
pub struct LSR {
+    
+    
pub struct LSR {
     bits: u8,
 }
Expand description

LineStatusRegister

-

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

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -56,65 +58,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/drivers/chardev/ns16550a/struct.MCR.html b/ch9-log/os/drivers/chardev/ns16550a/struct.MCR.html index 752a2a19..d3ec7f5a 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.MCR.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.MCR.html @@ -1,54 +1,56 @@ MCR in os::drivers::chardev::ns16550a - Rust -
pub struct MCR {
+    
+    
pub struct MCR {
     bits: u8,
 }
Expand description

Model Control Register

-

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

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -56,65 +58,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550a.html b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550a.html index b5297a0a..3a8b9285 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550a.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550a.html @@ -1,18 +1,22 @@ NS16550a in os::drivers::chardev::ns16550a - Rust -
pub struct NS16550a<const BASE_ADDR: usize> {
+    
+    
pub struct NS16550a<const BASE_ADDR: usize> {
     inner: UPIntrFreeCell<NS16550aInner>,
     condvar: Condvar,
-}

Fields

inner: UPIntrFreeCell<NS16550aInner>condvar: Condvar

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

inner: UPIntrFreeCell<NS16550aInner>condvar: Condvar

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).

+

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/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aInner.html b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aInner.html index 6ee2f418..9180237b 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aInner.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aInner.html @@ -1,18 +1,22 @@ NS16550aInner in os::drivers::chardev::ns16550a - Rust -
struct NS16550aInner {
+    
+    
struct NS16550aInner {
     ns16550a: NS16550aRaw,
     read_buffer: VecDeque<u8>,
-}

Fields

ns16550a: NS16550aRawread_buffer: VecDeque<u8>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

ns16550a: NS16550aRawread_buffer: VecDeque<u8>

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/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aRaw.html b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aRaw.html index 4c3ad1d7..6edd6e3d 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aRaw.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.NS16550aRaw.html @@ -1,17 +1,21 @@ NS16550aRaw in os::drivers::chardev::ns16550a - Rust -
pub struct NS16550aRaw {
+    
+    
pub struct NS16550aRaw {
     base_addr: usize,
-}

Fields

base_addr: usize

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

base_addr: usize

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/ch9-log/os/drivers/chardev/ns16550a/struct.ReadWithoutDLAB.html b/ch9-log/os/drivers/chardev/ns16550a/struct.ReadWithoutDLAB.html index a6c55c34..3d9a3d79 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.ReadWithoutDLAB.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.ReadWithoutDLAB.html @@ -1,8 +1,10 @@ ReadWithoutDLAB in os::drivers::chardev::ns16550a - Rust -
#[repr(C)]
struct ReadWithoutDLAB { + +
#[repr(C)]
struct ReadWithoutDLAB { pub rbr: ReadOnly<u8>, pub ier: Volatile<IER>, pub iir: ReadOnly<u8>, @@ -19,14 +21,16 @@
lsr: ReadOnly<LSR>

line status register

_padding1: ReadOnly<u8>

ignore MSR

_padding2: ReadOnly<u8>

ignore SCR

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/drivers/chardev/ns16550a/struct.WriteWithoutDLAB.html b/ch9-log/os/drivers/chardev/ns16550a/struct.WriteWithoutDLAB.html index 339bea30..ef771402 100644 --- a/ch9-log/os/drivers/chardev/ns16550a/struct.WriteWithoutDLAB.html +++ b/ch9-log/os/drivers/chardev/ns16550a/struct.WriteWithoutDLAB.html @@ -1,8 +1,10 @@ WriteWithoutDLAB in os::drivers::chardev::ns16550a - Rust -
#[repr(C)]
struct WriteWithoutDLAB { + +
#[repr(C)]
struct WriteWithoutDLAB { pub thr: WriteOnly<u8>, pub ier: Volatile<IER>, _padding0: ReadOnly<u8>, @@ -17,14 +19,16 @@
mcr: Volatile<MCR>

modem control register

lsr: ReadOnly<LSR>

line status register

_padding1: ReadOnly<u16>

ignore other registers

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/drivers/chardev/struct.UART.html b/ch9-log/os/drivers/chardev/struct.UART.html index 8ff43c37..9fd34e71 100644 --- a/ch9-log/os/drivers/chardev/struct.UART.html +++ b/ch9-log/os/drivers/chardev/struct.UART.html @@ -1,19 +1,23 @@ UART in os::drivers::chardev - Rust -
pub struct UART {
+    
+    
pub struct UART {
     __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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/drivers/chardev/trait.CharDevice.html b/ch9-log/os/drivers/chardev/trait.CharDevice.html index bb9f6150..b7872958 100644 --- a/ch9-log/os/drivers/chardev/trait.CharDevice.html +++ b/ch9-log/os/drivers/chardev/trait.CharDevice.html @@ -1,10 +1,12 @@ CharDevice in os::drivers::chardev - Rust -
pub trait CharDevice {
+    
+    
pub trait CharDevice {
     fn read(&self) -> u8;
-
fn write(&self, ch: u8); -
fn handle_irq(&self); -}

Required methods

Implementors

+ fn write(&self, ch: u8); + fn handle_irq(&self); +}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/drivers/index.html b/ch9-log/os/drivers/index.html index 23b95870..db3ae554 100644 --- a/ch9-log/os/drivers/index.html +++ b/ch9-log/os/drivers/index.html @@ -1,8 +1,10 @@ os::drivers - Rust -
-

Module os::drivers

source · []

Re-exports

+ +
+

Module os::drivers

source · []

Re-exports

pub use block::BLOCK_DEVICE;
pub use block::BLOCK_DEVICE;
pub use chardev::UART;
pub use chardev::UART;

Modules

-
+
\ No newline at end of file diff --git a/ch9-log/os/drivers/plic/enum.IntrTargetPriority.html b/ch9-log/os/drivers/plic/enum.IntrTargetPriority.html index 019f01b6..e342821d 100644 --- a/ch9-log/os/drivers/plic/enum.IntrTargetPriority.html +++ b/ch9-log/os/drivers/plic/enum.IntrTargetPriority.html @@ -1,23 +1,27 @@ IntrTargetPriority in os::drivers::plic - Rust -
pub enum IntrTargetPriority {
+    
+    
pub enum IntrTargetPriority {
     Machine,
     Supervisor,
-}

Variants

Machine

Supervisor

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Variants

Machine

Supervisor

Implementations

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).

+

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/ch9-log/os/drivers/plic/index.html b/ch9-log/os/drivers/plic/index.html index 4a9481fa..e25ba1dd 100644 --- a/ch9-log/os/drivers/plic/index.html +++ b/ch9-log/os/drivers/plic/index.html @@ -1,8 +1,10 @@ os::drivers::plic - Rust -
\ No newline at end of file diff --git a/ch9-log/os/drivers/plic/struct.PLIC.html b/ch9-log/os/drivers/plic/struct.PLIC.html index 55a61609..feb531b7 100644 --- a/ch9-log/os/drivers/plic/struct.PLIC.html +++ b/ch9-log/os/drivers/plic/struct.PLIC.html @@ -1,17 +1,21 @@ PLIC in os::drivers::plic - Rust -
-

Struct os::drivers::plic::PLIC

source · []
pub struct PLIC {
+    
+    
+

Struct os::drivers::plic::PLIC

source · []
pub struct PLIC {
     base_addr: usize,
-}

Fields

base_addr: usize

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

base_addr: usize

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/ch9-log/os/fn.clear_bss.html b/ch9-log/os/fn.clear_bss.html index b5e1709b..ed757e8f 100644 --- a/ch9-log/os/fn.clear_bss.html +++ b/ch9-log/os/fn.clear_bss.html @@ -1,6 +1,8 @@ clear_bss in os - Rust -
-

Function os::clear_bss

source · []
pub(crate) fn clear_bss()
+ +
+

Function os::clear_bss

source · []
pub(crate) fn clear_bss()
\ No newline at end of file diff --git a/ch9-log/os/fn.rust_main.html b/ch9-log/os/fn.rust_main.html index 05caa162..697a4e69 100644 --- a/ch9-log/os/fn.rust_main.html +++ b/ch9-log/os/fn.rust_main.html @@ -1,7 +1,9 @@ rust_main in os - Rust -
-

Function os::rust_main

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

Function os::rust_main

source · []
#[no_mangle]
+pub fn rust_main() -> !
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/bitmap/constant.BLOCK_BITS.html b/ch9-log/os/fs/easy_fs/bitmap/constant.BLOCK_BITS.html index 20c54462..0b1cea8e 100644 --- a/ch9-log/os/fs/easy_fs/bitmap/constant.BLOCK_BITS.html +++ b/ch9-log/os/fs/easy_fs/bitmap/constant.BLOCK_BITS.html @@ -1,6 +1,8 @@ BLOCK_BITS in os::fs::easy_fs::bitmap - Rust -
const BLOCK_BITS: usize = BLOCK_SZ * 8; // 0x0000_0000_0000_1000usize
+ +
const BLOCK_BITS: usize = BLOCK_SZ * 8; // 4_096usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/bitmap/fn.decomposition.html b/ch9-log/os/fs/easy_fs/bitmap/fn.decomposition.html index 0771a9bf..5a0af1b8 100644 --- a/ch9-log/os/fs/easy_fs/bitmap/fn.decomposition.html +++ b/ch9-log/os/fs/easy_fs/bitmap/fn.decomposition.html @@ -1,7 +1,9 @@ decomposition in os::fs::easy_fs::bitmap - Rust -
fn decomposition(bit: usize) -> (usize, usize, usize)
Expand description

Return (block_pos, bits64_pos, inner_pos)

-
+ +
fn decomposition(bit: usize) -> (usize, usize, usize)
Expand description

Return (block_pos, bits64_pos, inner_pos)

+
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/bitmap/index.html b/ch9-log/os/fs/easy_fs/bitmap/index.html index 411a415d..aa442dc7 100644 --- a/ch9-log/os/fs/easy_fs/bitmap/index.html +++ b/ch9-log/os/fs/easy_fs/bitmap/index.html @@ -1,11 +1,13 @@ os::fs::easy_fs::bitmap - Rust -
-

Module os::fs::easy_fs::bitmap

source · []

Structs

+ +
+

Module os::fs::easy_fs::bitmap

source · []

Structs

Constants

-

Functions

-

Return (block_pos, bits64_pos, inner_pos)

+
BLOCK_BITS 🔒

Functions

+

Return (block_pos, bits64_pos, inner_pos)

Type Definitions

-
+
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/bitmap/struct.Bitmap.html b/ch9-log/os/fs/easy_fs/bitmap/struct.Bitmap.html index 81f3d450..c4a3fbd2 100644 --- a/ch9-log/os/fs/easy_fs/bitmap/struct.Bitmap.html +++ b/ch9-log/os/fs/easy_fs/bitmap/struct.Bitmap.html @@ -1,18 +1,22 @@ Bitmap in os::fs::easy_fs::bitmap - Rust -
pub struct Bitmap {
+    
+    
pub struct Bitmap {
     start_block_id: usize,
     blocks: usize,
-}

Fields

start_block_id: usizeblocks: usize

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

start_block_id: usizeblocks: usize

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/ch9-log/os/fs/easy_fs/bitmap/type.BitmapBlock.html b/ch9-log/os/fs/easy_fs/bitmap/type.BitmapBlock.html index 459fda22..dd6a06b0 100644 --- a/ch9-log/os/fs/easy_fs/bitmap/type.BitmapBlock.html +++ b/ch9-log/os/fs/easy_fs/bitmap/type.BitmapBlock.html @@ -1,6 +1,8 @@ BitmapBlock in os::fs::easy_fs::bitmap - Rust -
-

Type Definition os::fs::easy_fs::bitmap::BitmapBlock

source · []
type BitmapBlock = [u64; 64];
+ +
+

Type Definition os::fs::easy_fs::bitmap::BitmapBlock

source · []
type BitmapBlock = [u64; 64];
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_cache/constant.BLOCK_CACHE_SIZE.html b/ch9-log/os/fs/easy_fs/block_cache/constant.BLOCK_CACHE_SIZE.html index e8403568..7240f1b3 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/constant.BLOCK_CACHE_SIZE.html +++ b/ch9-log/os/fs/easy_fs/block_cache/constant.BLOCK_CACHE_SIZE.html @@ -1,6 +1,8 @@ BLOCK_CACHE_SIZE in os::fs::easy_fs::block_cache - Rust -
const BLOCK_CACHE_SIZE: usize = 16;
+ +
const BLOCK_CACHE_SIZE: usize = 16;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_cache/fn.block_cache_sync_all.html b/ch9-log/os/fs/easy_fs/block_cache/fn.block_cache_sync_all.html index 93fe80eb..4daa9c5f 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/fn.block_cache_sync_all.html +++ b/ch9-log/os/fs/easy_fs/block_cache/fn.block_cache_sync_all.html @@ -1,6 +1,8 @@ block_cache_sync_all in os::fs::easy_fs::block_cache - Rust -
pub fn block_cache_sync_all()
+ +
pub fn block_cache_sync_all()
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_cache/fn.get_block_cache.html b/ch9-log/os/fs/easy_fs/block_cache/fn.get_block_cache.html index 9b34b467..4c672fa1 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/fn.get_block_cache.html +++ b/ch9-log/os/fs/easy_fs/block_cache/fn.get_block_cache.html @@ -1,6 +1,8 @@ get_block_cache in os::fs::easy_fs::block_cache - Rust -
pub fn get_block_cache(
    block_id: usize,
    block_device: Arc<dyn BlockDevice>
) -> Arc<Mutex<BlockCache>>
+ +
pub fn get_block_cache(
    block_id: usize,
    block_device: Arc<dyn BlockDevice>
) -> Arc<Mutex<BlockCache>>
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_cache/index.html b/ch9-log/os/fs/easy_fs/block_cache/index.html index 4f6b7b28..2d11aa18 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/index.html +++ b/ch9-log/os/fs/easy_fs/block_cache/index.html @@ -1,9 +1,11 @@ os::fs::easy_fs::block_cache - Rust -
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_cache/struct.BLOCK_CACHE_MANAGER.html b/ch9-log/os/fs/easy_fs/block_cache/struct.BLOCK_CACHE_MANAGER.html index d0428123..658edf90 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/struct.BLOCK_CACHE_MANAGER.html +++ b/ch9-log/os/fs/easy_fs/block_cache/struct.BLOCK_CACHE_MANAGER.html @@ -1,14 +1,16 @@ BLOCK_CACHE_MANAGER in os::fs::easy_fs::block_cache - Rust -

Fields

__private_field: ()

Methods from Deref<Target = Mutex<BlockCacheManager>>

Returns true if the lock is currently held.

+
Safety

This function provides no synchronization guarantees and so its result should be considered ‘out of date’ the instant it is called. Do not use it for synchronization purposes. However, it may be useful as a heuristic.

-

Locks the [Mutex] and returns a guard that permits access to the inner data.

+

Locks the [Mutex] and returns a guard that permits access to the inner data.

The returned value may be dereferenced for data access and the lock will be dropped when the guard falls out of scope.

@@ -19,13 +21,13 @@ and the lock will be dropped when the guard falls out of scope.

*data += 1; // The lock is implicitly dropped at the end of the scope }
-

Force unlock this [Mutex].

-
Safety
+

Force unlock this [Mutex].

+
Safety

This is extremely unsafe if the lock is not held by the current thread. However, this can be useful in some instances for exposing the lock to FFI that doesn’t know how to deal with RAII.

-

Try to lock this [Mutex], returning a lock guard if successful.

-
Example
+

Try to lock this [Mutex], returning a lock guard if successful.

+
Example
let lock = spin::Mutex::new(42);
 
 let maybe_guard = lock.try_lock();
@@ -34,16 +36,18 @@ lock to FFI that doesn’t know how to deal with RAII.

// `maybe_guard` is still held, so the second call fails let maybe_guard2 = lock.try_lock(); assert!(maybe_guard2.is_none());
-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCache.html b/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCache.html index 24536e16..f1933d34 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCache.html +++ b/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCache.html @@ -1,22 +1,26 @@ BlockCache in os::fs::easy_fs::block_cache - Rust -
pub struct BlockCache {
+    
+    
pub struct BlockCache {
     cache: [u8; 512],
     block_id: usize,
     block_device: Arc<dyn BlockDevice>,
     modified: bool,
-}

Fields

cache: [u8; 512]block_id: usizeblock_device: Arc<dyn BlockDevice>modified: bool

Implementations

Load a new BlockCache from disk.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

cache: [u8; 512]block_id: usizeblock_device: Arc<dyn BlockDevice>modified: bool

Implementations

Load a new BlockCache from disk.

+

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).

+

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/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCacheManager.html b/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCacheManager.html index 8f8a98d9..1623765a 100644 --- a/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCacheManager.html +++ b/ch9-log/os/fs/easy_fs/block_cache/struct.BlockCacheManager.html @@ -1,17 +1,21 @@ BlockCacheManager in os::fs::easy_fs::block_cache - Rust -
pub struct BlockCacheManager {
+    
+    
pub struct BlockCacheManager {
     queue: VecDeque<(usize, Arc<Mutex<BlockCache>>)>,
-}

Fields

queue: VecDeque<(usize, Arc<Mutex<BlockCache>>)>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

queue: VecDeque<(usize, Arc<Mutex<BlockCache>>)>

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/ch9-log/os/fs/easy_fs/block_dev/index.html b/ch9-log/os/fs/easy_fs/block_dev/index.html index 38662d84..9bd8e42f 100644 --- a/ch9-log/os/fs/easy_fs/block_dev/index.html +++ b/ch9-log/os/fs/easy_fs/block_dev/index.html @@ -1,7 +1,9 @@ os::fs::easy_fs::block_dev - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/block_dev/trait.BlockDevice.html b/ch9-log/os/fs/easy_fs/block_dev/trait.BlockDevice.html index 8b0fa92b..856fd087 100644 --- a/ch9-log/os/fs/easy_fs/block_dev/trait.BlockDevice.html +++ b/ch9-log/os/fs/easy_fs/block_dev/trait.BlockDevice.html @@ -1,10 +1,12 @@ BlockDevice in os::fs::easy_fs::block_dev - Rust -
pub trait BlockDevice: Send + Sync + Any {
+    
+    
pub trait BlockDevice: Send + Sync + Any {
     fn read_block(&self, block_id: usize, buf: &mut [u8]);
-
fn write_block(&self, block_id: usize, buf: &[u8]); -
fn handle_irq(&self); -}

Required methods

Implementors

+ fn write_block(&self, block_id: usize, buf: &[u8]); + fn handle_irq(&self); +}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/constant.BLOCK_SZ.html b/ch9-log/os/fs/easy_fs/constant.BLOCK_SZ.html index 7335d672..d9c5b717 100644 --- a/ch9-log/os/fs/easy_fs/constant.BLOCK_SZ.html +++ b/ch9-log/os/fs/easy_fs/constant.BLOCK_SZ.html @@ -1,6 +1,8 @@ BLOCK_SZ in os::fs::easy_fs - Rust -
-

Constant os::fs::easy_fs::BLOCK_SZ

source · []
pub const BLOCK_SZ: usize = 512;
+ +
+

Constant os::fs::easy_fs::BLOCK_SZ

source · []
pub const BLOCK_SZ: usize = 512;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/efs/index.html b/ch9-log/os/fs/easy_fs/efs/index.html index 3c237bbb..daed683c 100644 --- a/ch9-log/os/fs/easy_fs/efs/index.html +++ b/ch9-log/os/fs/easy_fs/efs/index.html @@ -1,8 +1,10 @@ os::fs::easy_fs::efs - Rust -
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/efs/struct.EasyFileSystem.html b/ch9-log/os/fs/easy_fs/efs/struct.EasyFileSystem.html index 4120e451..b4b1da78 100644 --- a/ch9-log/os/fs/easy_fs/efs/struct.EasyFileSystem.html +++ b/ch9-log/os/fs/easy_fs/efs/struct.EasyFileSystem.html @@ -1,22 +1,26 @@ EasyFileSystem in os::fs::easy_fs::efs - Rust -
pub struct EasyFileSystem {
+    
+    
pub struct EasyFileSystem {
     pub block_device: Arc<dyn BlockDevice>,
     pub inode_bitmap: Bitmap,
     pub data_bitmap: Bitmap,
     inode_area_start_block: u32,
     data_area_start_block: u32,
-}

Fields

block_device: Arc<dyn BlockDevice>inode_bitmap: Bitmapdata_bitmap: Bitmapinode_area_start_block: u32data_area_start_block: u32

Implementations

Return a block ID not ID in the data area.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

block_device: Arc<dyn BlockDevice>inode_bitmap: Bitmapdata_bitmap: Bitmapinode_area_start_block: u32data_area_start_block: u32

Implementations

Return a block ID not ID in the data area.

+

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/ch9-log/os/fs/easy_fs/efs/type.DataBlock.html b/ch9-log/os/fs/easy_fs/efs/type.DataBlock.html index 36c379d8..522929ba 100644 --- a/ch9-log/os/fs/easy_fs/efs/type.DataBlock.html +++ b/ch9-log/os/fs/easy_fs/efs/type.DataBlock.html @@ -1,6 +1,8 @@ DataBlock in os::fs::easy_fs::efs - Rust -
-

Type Definition os::fs::easy_fs::efs::DataBlock

source · []
type DataBlock = [u8; 512];
+ +
+

Type Definition os::fs::easy_fs::efs::DataBlock

source · []
type DataBlock = [u8; 512];
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/index.html b/ch9-log/os/fs/easy_fs/index.html index 87f7db1f..e5572c3f 100644 --- a/ch9-log/os/fs/easy_fs/index.html +++ b/ch9-log/os/fs/easy_fs/index.html @@ -1,9 +1,11 @@ os::fs::easy_fs - Rust -
-

Module os::fs::easy_fs

source · []

Re-exports

+ +
+

Module os::fs::easy_fs

source · []

Re-exports

pub use bitmap::Bitmap;
pub use block_cache::block_cache_sync_all;
pub use block_cache::get_block_cache;
pub use block_dev::BlockDevice;
pub use efs::EasyFileSystem;
pub use layout::*;
pub use vfs::Inode;

Modules

-

Constants

-
+
bitmap 🔒
block_dev 🔒
efs 🔒
layout 🔒
vfs 🔒

Constants

+
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.DIRECT_BOUND.html b/ch9-log/os/fs/easy_fs/layout/constant.DIRECT_BOUND.html index 4a8ae4da..f1189b19 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.DIRECT_BOUND.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.DIRECT_BOUND.html @@ -1,6 +1,8 @@ DIRECT_BOUND in os::fs::easy_fs::layout - Rust -
const DIRECT_BOUND: usize = INODE_DIRECT_COUNT; // 0x0000_0000_0000_001cusize
+ +
const DIRECT_BOUND: usize = INODE_DIRECT_COUNT; // 28usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.DIRENT_SZ.html b/ch9-log/os/fs/easy_fs/layout/constant.DIRENT_SZ.html index da659ecf..5c700281 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.DIRENT_SZ.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.DIRENT_SZ.html @@ -1,6 +1,8 @@ DIRENT_SZ in os::fs::easy_fs::layout - Rust -
pub const DIRENT_SZ: usize = 32;
+ +
pub const DIRENT_SZ: usize = 32;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.EFS_MAGIC.html b/ch9-log/os/fs/easy_fs/layout/constant.EFS_MAGIC.html index fb7b475a..618b77d5 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.EFS_MAGIC.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.EFS_MAGIC.html @@ -1,6 +1,8 @@ EFS_MAGIC in os::fs::easy_fs::layout - Rust -
const EFS_MAGIC: u32 = 0x3b800001;
+ +
const EFS_MAGIC: u32 = 0x3b800001;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT1_BOUND.html b/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT1_BOUND.html index 4a41d8d6..92d59670 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT1_BOUND.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT1_BOUND.html @@ -1,6 +1,8 @@ INDIRECT1_BOUND in os::fs::easy_fs::layout - Rust -
const INDIRECT1_BOUND: usize = DIRECT_BOUND + INODE_INDIRECT1_COUNT; // 0x0000_0000_0000_009cusize
+ +
const INDIRECT1_BOUND: usize = DIRECT_BOUND + INODE_INDIRECT1_COUNT; // 156usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT2_BOUND.html b/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT2_BOUND.html index fdf26c09..466baa53 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT2_BOUND.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.INDIRECT2_BOUND.html @@ -1,6 +1,8 @@ INDIRECT2_BOUND in os::fs::easy_fs::layout - Rust -
const INDIRECT2_BOUND: usize = INDIRECT1_BOUND + INODE_INDIRECT2_COUNT; // 0x0000_0000_0000_409cusize
+ +
const INDIRECT2_BOUND: usize = INDIRECT1_BOUND + INODE_INDIRECT2_COUNT; // 16_540usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.INODE_DIRECT_COUNT.html b/ch9-log/os/fs/easy_fs/layout/constant.INODE_DIRECT_COUNT.html index 7b774e14..863b1c75 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.INODE_DIRECT_COUNT.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.INODE_DIRECT_COUNT.html @@ -1,6 +1,8 @@ INODE_DIRECT_COUNT in os::fs::easy_fs::layout - Rust -
const INODE_DIRECT_COUNT: usize = 28;
+ +
const INODE_DIRECT_COUNT: usize = 28;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT1_COUNT.html b/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT1_COUNT.html index a73c9f5f..955c4d47 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT1_COUNT.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT1_COUNT.html @@ -1,6 +1,8 @@ INODE_INDIRECT1_COUNT in os::fs::easy_fs::layout - Rust -
const INODE_INDIRECT1_COUNT: usize = BLOCK_SZ / 4; // 0x0000_0000_0000_0080usize
+ +
const INODE_INDIRECT1_COUNT: usize = BLOCK_SZ / 4; // 128usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT2_COUNT.html b/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT2_COUNT.html index 1d8090e8..ce2ba67a 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT2_COUNT.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.INODE_INDIRECT2_COUNT.html @@ -1,6 +1,8 @@ INODE_INDIRECT2_COUNT in os::fs::easy_fs::layout - Rust -
const INODE_INDIRECT2_COUNT: usize = INODE_INDIRECT1_COUNT * INODE_INDIRECT1_COUNT; // 0x0000_0000_0000_4000usize
+ +
const INODE_INDIRECT2_COUNT: usize = INODE_INDIRECT1_COUNT * INODE_INDIRECT1_COUNT; // 16_384usize
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/constant.NAME_LENGTH_LIMIT.html b/ch9-log/os/fs/easy_fs/layout/constant.NAME_LENGTH_LIMIT.html index b606addd..5be04fca 100644 --- a/ch9-log/os/fs/easy_fs/layout/constant.NAME_LENGTH_LIMIT.html +++ b/ch9-log/os/fs/easy_fs/layout/constant.NAME_LENGTH_LIMIT.html @@ -1,6 +1,8 @@ NAME_LENGTH_LIMIT in os::fs::easy_fs::layout - Rust -
const NAME_LENGTH_LIMIT: usize = 27;
+ +
const NAME_LENGTH_LIMIT: usize = 27;
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/enum.DiskInodeType.html b/ch9-log/os/fs/easy_fs/layout/enum.DiskInodeType.html index f9e406bb..28df64fd 100644 --- a/ch9-log/os/fs/easy_fs/layout/enum.DiskInodeType.html +++ b/ch9-log/os/fs/easy_fs/layout/enum.DiskInodeType.html @@ -1,21 +1,25 @@ DiskInodeType in os::fs::easy_fs::layout - Rust -

Variants

File

Directory

Trait Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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 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/ch9-log/os/fs/easy_fs/layout/index.html b/ch9-log/os/fs/easy_fs/layout/index.html index b0e38cad..d5133d96 100644 --- a/ch9-log/os/fs/easy_fs/layout/index.html +++ b/ch9-log/os/fs/easy_fs/layout/index.html @@ -1,10 +1,12 @@ os::fs::easy_fs::layout - Rust -
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/struct.DirEntry.html b/ch9-log/os/fs/easy_fs/layout/struct.DirEntry.html index 485b2f3b..ffe482ae 100644 --- a/ch9-log/os/fs/easy_fs/layout/struct.DirEntry.html +++ b/ch9-log/os/fs/easy_fs/layout/struct.DirEntry.html @@ -1,18 +1,22 @@ DirEntry in os::fs::easy_fs::layout - Rust -
#[repr(C)]
pub struct DirEntry { + +
#[repr(C)]
pub struct DirEntry { name: [u8; 28], inode_number: u32, -}

Fields

name: [u8; 28]inode_number: u32

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

name: [u8; 28]inode_number: u32

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/ch9-log/os/fs/easy_fs/layout/struct.DiskInode.html b/ch9-log/os/fs/easy_fs/layout/struct.DiskInode.html index fa73780c..22a7d59e 100644 --- a/ch9-log/os/fs/easy_fs/layout/struct.DiskInode.html +++ b/ch9-log/os/fs/easy_fs/layout/struct.DiskInode.html @@ -1,27 +1,31 @@ DiskInode in os::fs::easy_fs::layout - Rust -
#[repr(C)]
pub struct DiskInode { + +
#[repr(C)]
pub struct DiskInode { pub size: u32, pub direct: [u32; 28], pub indirect1: u32, pub indirect2: u32, type_: DiskInodeType, -}

Fields

size: u32direct: [u32; 28]indirect1: u32indirect2: u32type_: DiskInodeType

Implementations

indirect1 and indirect2 block are allocated only when they are needed.

-

Return block number correspond to size.

-

Return number of blocks needed include indirect1/2.

-

Clear size to zero and return blocks that should be deallocated.

+}

Fields

size: u32direct: [u32; 28]indirect1: u32indirect2: u32type_: DiskInodeType

Implementations

indirect1 and indirect2 block are allocated only when they are needed.

+

Return block number correspond to size.

+

Return number of blocks needed include indirect1/2.

+

Clear size to zero and return blocks that should be deallocated.

We will clear the block contents to zero later.

-

File size must be adjusted 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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

File size must be adjusted 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).

+

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/ch9-log/os/fs/easy_fs/layout/struct.SuperBlock.html b/ch9-log/os/fs/easy_fs/layout/struct.SuperBlock.html index dc8ac0b3..46184904 100644 --- a/ch9-log/os/fs/easy_fs/layout/struct.SuperBlock.html +++ b/ch9-log/os/fs/easy_fs/layout/struct.SuperBlock.html @@ -1,23 +1,27 @@ SuperBlock in os::fs::easy_fs::layout - Rust -
#[repr(C)]
pub struct SuperBlock { + +
#[repr(C)]
pub struct SuperBlock { magic: u32, pub total_blocks: u32, pub inode_bitmap_blocks: u32, pub inode_area_blocks: u32, pub data_bitmap_blocks: u32, pub data_area_blocks: u32, -}

Fields

magic: u32total_blocks: u32inode_bitmap_blocks: u32inode_area_blocks: u32data_bitmap_blocks: u32data_area_blocks: u32

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

magic: u32total_blocks: u32inode_bitmap_blocks: u32inode_area_blocks: u32data_bitmap_blocks: u32data_area_blocks: u32

Implementations

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).

+

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/ch9-log/os/fs/easy_fs/layout/type.DataBlock.html b/ch9-log/os/fs/easy_fs/layout/type.DataBlock.html index 520df0ad..223f4cd5 100644 --- a/ch9-log/os/fs/easy_fs/layout/type.DataBlock.html +++ b/ch9-log/os/fs/easy_fs/layout/type.DataBlock.html @@ -1,6 +1,8 @@ DataBlock in os::fs::easy_fs::layout - Rust -
-

Type Definition os::fs::easy_fs::layout::DataBlock

source · []
type DataBlock = [u8; 512];
+ +
+

Type Definition os::fs::easy_fs::layout::DataBlock

source · []
type DataBlock = [u8; 512];
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/layout/type.IndirectBlock.html b/ch9-log/os/fs/easy_fs/layout/type.IndirectBlock.html index ea54a841..8366b0bd 100644 --- a/ch9-log/os/fs/easy_fs/layout/type.IndirectBlock.html +++ b/ch9-log/os/fs/easy_fs/layout/type.IndirectBlock.html @@ -1,6 +1,8 @@ IndirectBlock in os::fs::easy_fs::layout - Rust -
-

Type Definition os::fs::easy_fs::layout::IndirectBlock

source · []
type IndirectBlock = [u32; 128];
+ +
+

Type Definition os::fs::easy_fs::layout::IndirectBlock

source · []
type IndirectBlock = [u32; 128];
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/vfs/index.html b/ch9-log/os/fs/easy_fs/vfs/index.html index 38970a6d..3ba4cba2 100644 --- a/ch9-log/os/fs/easy_fs/vfs/index.html +++ b/ch9-log/os/fs/easy_fs/vfs/index.html @@ -1,7 +1,9 @@ os::fs::easy_fs::vfs - Rust -
-

Module os::fs::easy_fs::vfs

source · []

Structs

-
+ +
\ No newline at end of file diff --git a/ch9-log/os/fs/easy_fs/vfs/struct.Inode.html b/ch9-log/os/fs/easy_fs/vfs/struct.Inode.html index f495fb96..8c7cabc6 100644 --- a/ch9-log/os/fs/easy_fs/vfs/struct.Inode.html +++ b/ch9-log/os/fs/easy_fs/vfs/struct.Inode.html @@ -1,21 +1,25 @@ Inode in os::fs::easy_fs::vfs - Rust -
-

Struct os::fs::easy_fs::vfs::Inode

source · []
pub struct Inode {
+    
+    
+

Struct os::fs::easy_fs::vfs::Inode

source · []
pub struct Inode {
     block_id: usize,
     block_offset: usize,
     fs: Arc<Mutex<EasyFileSystem>>,
     block_device: Arc<dyn BlockDevice>,
-}

Fields

block_id: usizeblock_offset: usizefs: Arc<Mutex<EasyFileSystem>>block_device: Arc<dyn BlockDevice>

Implementations

We should not acquire efs lock here.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

block_id: usizeblock_offset: usizefs: Arc<Mutex<EasyFileSystem>>block_device: Arc<dyn BlockDevice>

Implementations

We should not acquire efs lock here.

+

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/ch9-log/os/fs/index.html b/ch9-log/os/fs/index.html index 4b0135f8..20191cc9 100644 --- a/ch9-log/os/fs/index.html +++ b/ch9-log/os/fs/index.html @@ -1,9 +1,11 @@ os::fs - Rust -
-

Module os::fs

source · []

Re-exports

+ +
+

Module os::fs

source · []

Re-exports

pub use inode::list_apps;
pub use inode::open_file;
pub use inode::OSInode;
pub use inode::OpenFlags;
pub use pipe::make_pipe;
pub use pipe::Pipe;
pub use stdio::Stdin;
pub use stdio::Stdout;
pub use easy_fs::*;

Modules

-

Traits

-
+
inode 🔒
pipe 🔒
stdio 🔒

Traits

+
\ No newline at end of file diff --git a/ch9-log/os/fs/inode/fn.list_apps.html b/ch9-log/os/fs/inode/fn.list_apps.html index 356f57c7..c729f998 100644 --- a/ch9-log/os/fs/inode/fn.list_apps.html +++ b/ch9-log/os/fs/inode/fn.list_apps.html @@ -1,6 +1,8 @@ list_apps in os::fs::inode - Rust -
-

Function os::fs::inode::list_apps

source · []
pub fn list_apps()
+ +
+

Function os::fs::inode::list_apps

source · []
pub fn list_apps()
\ No newline at end of file diff --git a/ch9-log/os/fs/inode/fn.open_file.html b/ch9-log/os/fs/inode/fn.open_file.html index 68f34b8f..b927fc7b 100644 --- a/ch9-log/os/fs/inode/fn.open_file.html +++ b/ch9-log/os/fs/inode/fn.open_file.html @@ -1,6 +1,8 @@ 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>>
+ +
+

Function os::fs::inode::open_file

source · []
pub fn open_file(name: &str, flags: OpenFlags) -> Option<Arc<OSInode>>
\ No newline at end of file diff --git a/ch9-log/os/fs/inode/index.html b/ch9-log/os/fs/inode/index.html index b75d2124..d260f504 100644 --- a/ch9-log/os/fs/inode/index.html +++ b/ch9-log/os/fs/inode/index.html @@ -1,8 +1,10 @@ os::fs::inode - Rust -
\ No newline at end of file diff --git a/ch9-log/os/fs/inode/struct.OSInode.html b/ch9-log/os/fs/inode/struct.OSInode.html index 2afde5de..245989d5 100644 --- a/ch9-log/os/fs/inode/struct.OSInode.html +++ b/ch9-log/os/fs/inode/struct.OSInode.html @@ -1,19 +1,23 @@ OSInode in os::fs::inode - Rust -
-

Struct os::fs::inode::OSInode

source · []
pub struct OSInode {
+    
+    
+

Struct os::fs::inode::OSInode

source · []
pub struct OSInode {
     readable: bool,
     writable: bool,
     inner: UPIntrFreeCell<OSInodeInner>,
-}

Fields

readable: boolwritable: boolinner: UPIntrFreeCell<OSInodeInner>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

readable: boolwritable: boolinner: UPIntrFreeCell<OSInodeInner>

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).

+

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/ch9-log/os/fs/inode/struct.OSInodeInner.html b/ch9-log/os/fs/inode/struct.OSInodeInner.html index 13cbbaf3..66b77fd9 100644 --- a/ch9-log/os/fs/inode/struct.OSInodeInner.html +++ b/ch9-log/os/fs/inode/struct.OSInodeInner.html @@ -1,18 +1,22 @@ OSInodeInner in os::fs::inode - Rust -
pub struct OSInodeInner {
+    
+    
pub struct OSInodeInner {
     offset: usize,
     inode: Arc<Inode>,
-}

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/fs/inode/struct.OpenFlags.html b/ch9-log/os/fs/inode/struct.OpenFlags.html index eb0d7778..d7b78774 100644 --- a/ch9-log/os/fs/inode/struct.OpenFlags.html +++ b/ch9-log/os/fs/inode/struct.OpenFlags.html @@ -1,53 +1,55 @@ OpenFlags in os::fs::inode - Rust -
-

Struct os::fs::inode::OpenFlags

source · []

Fields

bits: u32

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -55,67 +57,69 @@ 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.

+

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)

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

-

Do not check validity for simplicity +

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/fs/inode/struct.ROOT_INODE.html b/ch9-log/os/fs/inode/struct.ROOT_INODE.html index aa9fd33a..67184bf8 100644 --- a/ch9-log/os/fs/inode/struct.ROOT_INODE.html +++ b/ch9-log/os/fs/inode/struct.ROOT_INODE.html @@ -1,19 +1,23 @@ ROOT_INODE in os::fs::inode - Rust -
-

Struct os::fs::inode::ROOT_INODE

source · []
pub struct ROOT_INODE {
+    
+    
+

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/fs/pipe/constant.RING_BUFFER_SIZE.html b/ch9-log/os/fs/pipe/constant.RING_BUFFER_SIZE.html index 9300f28c..31a764da 100644 --- a/ch9-log/os/fs/pipe/constant.RING_BUFFER_SIZE.html +++ b/ch9-log/os/fs/pipe/constant.RING_BUFFER_SIZE.html @@ -1,6 +1,8 @@ RING_BUFFER_SIZE in os::fs::pipe - Rust -
const RING_BUFFER_SIZE: usize = 32;
+ +
const RING_BUFFER_SIZE: usize = 32;
\ No newline at end of file diff --git a/ch9-log/os/fs/pipe/enum.RingBufferStatus.html b/ch9-log/os/fs/pipe/enum.RingBufferStatus.html index 93b37d92..1dfc770f 100644 --- a/ch9-log/os/fs/pipe/enum.RingBufferStatus.html +++ b/ch9-log/os/fs/pipe/enum.RingBufferStatus.html @@ -1,27 +1,31 @@ RingBufferStatus in os::fs::pipe - Rust -
enum RingBufferStatus {
+    
+    
enum RingBufferStatus {
     Full,
     Empty,
     Normal,
-}

Variants

Full

Empty

Normal

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 +}

Variants

Full

Empty

Normal

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/fs/pipe/fn.make_pipe.html b/ch9-log/os/fs/pipe/fn.make_pipe.html index b74a8220..cbf68237 100644 --- a/ch9-log/os/fs/pipe/fn.make_pipe.html +++ b/ch9-log/os/fs/pipe/fn.make_pipe.html @@ -1,7 +1,9 @@ make_pipe in os::fs::pipe - Rust -
-

Function os::fs::pipe::make_pipe

source · []
pub fn make_pipe() -> (Arc<Pipe>, Arc<Pipe>)
Expand description

Return (read_end, write_end)

-
+ +
+

Function os::fs::pipe::make_pipe

source · []
pub fn make_pipe() -> (Arc<Pipe>, Arc<Pipe>)
Expand description

Return (read_end, write_end)

+
\ No newline at end of file diff --git a/ch9-log/os/fs/pipe/index.html b/ch9-log/os/fs/pipe/index.html index 0bd647c3..660fcdfd 100644 --- a/ch9-log/os/fs/pipe/index.html +++ b/ch9-log/os/fs/pipe/index.html @@ -1,11 +1,13 @@ os::fs::pipe - Rust -
\ No newline at end of file diff --git a/ch9-log/os/fs/pipe/struct.Pipe.html b/ch9-log/os/fs/pipe/struct.Pipe.html index cb98bd20..d3639a85 100644 --- a/ch9-log/os/fs/pipe/struct.Pipe.html +++ b/ch9-log/os/fs/pipe/struct.Pipe.html @@ -1,19 +1,23 @@ Pipe in os::fs::pipe - Rust -
-

Struct os::fs::pipe::Pipe

source · []
pub struct Pipe {
+    
+    
+

Struct os::fs::pipe::Pipe

source · []
pub struct Pipe {
     readable: bool,
     writable: bool,
     buffer: Arc<UPIntrFreeCell<PipeRingBuffer>>,
-}

Fields

readable: boolwritable: boolbuffer: Arc<UPIntrFreeCell<PipeRingBuffer>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

readable: boolwritable: boolbuffer: Arc<UPIntrFreeCell<PipeRingBuffer>>

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).

+

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/ch9-log/os/fs/pipe/struct.PipeRingBuffer.html b/ch9-log/os/fs/pipe/struct.PipeRingBuffer.html index 2aa49c2f..6dcf6b08 100644 --- a/ch9-log/os/fs/pipe/struct.PipeRingBuffer.html +++ b/ch9-log/os/fs/pipe/struct.PipeRingBuffer.html @@ -1,21 +1,25 @@ PipeRingBuffer in os::fs::pipe - Rust -
pub struct PipeRingBuffer {
+    
+    
pub struct PipeRingBuffer {
     arr: [u8; 32],
     head: usize,
     tail: usize,
     status: RingBufferStatus,
     write_end: Option<Weak<Pipe>>,
-}

Fields

arr: [u8; 32]head: usizetail: usizestatus: RingBufferStatuswrite_end: Option<Weak<Pipe>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

arr: [u8; 32]head: usizetail: usizestatus: RingBufferStatuswrite_end: Option<Weak<Pipe>>

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/ch9-log/os/fs/stdio/index.html b/ch9-log/os/fs/stdio/index.html index 56bfdc0e..c5acdf6f 100644 --- a/ch9-log/os/fs/stdio/index.html +++ b/ch9-log/os/fs/stdio/index.html @@ -1,7 +1,9 @@ os::fs::stdio - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/fs/stdio/struct.Stdin.html b/ch9-log/os/fs/stdio/struct.Stdin.html index 105fbb1b..ae81b927 100644 --- a/ch9-log/os/fs/stdio/struct.Stdin.html +++ b/ch9-log/os/fs/stdio/struct.Stdin.html @@ -1,15 +1,19 @@ Stdin in os::fs::stdio - Rust -
-

Struct os::fs::stdio::Stdin

source · []
pub struct Stdin;

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+ +
+

Struct os::fs::stdio::Stdin

source · []
pub struct Stdin;

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).

+

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/ch9-log/os/fs/stdio/struct.Stdout.html b/ch9-log/os/fs/stdio/struct.Stdout.html index 7c0e10b8..7371d694 100644 --- a/ch9-log/os/fs/stdio/struct.Stdout.html +++ b/ch9-log/os/fs/stdio/struct.Stdout.html @@ -1,15 +1,19 @@ Stdout in os::fs::stdio - Rust -
-

Struct os::fs::stdio::Stdout

source · []
pub struct Stdout;

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+ +
+

Struct os::fs::stdio::Stdout

source · []
pub struct Stdout;

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).

+

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/ch9-log/os/fs/trait.File.html b/ch9-log/os/fs/trait.File.html index 481efa1a..b90fc8a7 100644 --- a/ch9-log/os/fs/trait.File.html +++ b/ch9-log/os/fs/trait.File.html @@ -1,11 +1,13 @@ File in os::fs - Rust -
-

Trait os::fs::File

source · []
pub trait File: Send + Sync {
+    
+    
+

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; -}

Required methods

Implementors

+ fn writable(&self) -> bool; + fn read(&self, buf: UserBuffer) -> usize; + fn write(&self, buf: UserBuffer) -> usize; +}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/index.html b/ch9-log/os/index.html index 217205c7..7b21878d 100644 --- a/ch9-log/os/index.html +++ b/ch9-log/os/index.html @@ -1,10 +1,12 @@ os - Rust -
\ No newline at end of file diff --git a/ch9-log/os/lang_items/fn.backtrace.html b/ch9-log/os/lang_items/fn.backtrace.html index 39864fc1..1a725d71 100644 --- a/ch9-log/os/lang_items/fn.backtrace.html +++ b/ch9-log/os/lang_items/fn.backtrace.html @@ -1,6 +1,8 @@ backtrace in os::lang_items - Rust -
unsafe fn backtrace()
+ +
unsafe fn backtrace()
\ No newline at end of file diff --git a/ch9-log/os/lang_items/fn.panic.html b/ch9-log/os/lang_items/fn.panic.html index 70a8c97f..1dea5955 100644 --- a/ch9-log/os/lang_items/fn.panic.html +++ b/ch9-log/os/lang_items/fn.panic.html @@ -1,6 +1,8 @@ panic in os::lang_items - Rust -
-

Function os::lang_items::panic

source · []
fn panic(info: &PanicInfo<'_>) -> !
+ +
+

Function os::lang_items::panic

source · []
fn panic(info: &PanicInfo<'_>) -> !
\ No newline at end of file diff --git a/ch9-log/os/lang_items/index.html b/ch9-log/os/lang_items/index.html index 47387d15..87774e08 100644 --- a/ch9-log/os/lang_items/index.html +++ b/ch9-log/os/lang_items/index.html @@ -1,7 +1,9 @@ os::lang_items - Rust -
+ +
+

Module os::lang_items

source · []

Functions

+
panic 🔒
\ No newline at end of file diff --git a/ch9-log/os/macro.kprint.html b/ch9-log/os/macro.kprint.html index 080fb161..84b74eb0 100644 --- a/ch9-log/os/macro.kprint.html +++ b/ch9-log/os/macro.kprint.html @@ -1,9 +1,11 @@ kprint in os - Rust -
-

Macro os::kprint

source · []
macro_rules! kprint {
+    
+    
+

Macro os::kprint

source · []
macro_rules! kprint {
     ($fmt: literal $(, $($arg: tt)+)?) => { ... };
 }
-
+
\ No newline at end of file diff --git a/ch9-log/os/macro.kprintln.html b/ch9-log/os/macro.kprintln.html index 9631070a..63e0bed2 100644 --- a/ch9-log/os/macro.kprintln.html +++ b/ch9-log/os/macro.kprintln.html @@ -1,9 +1,11 @@ kprintln in os - Rust -
-

Macro os::kprintln

source · []
macro_rules! kprintln {
+    
+    
+

Macro os::kprintln

source · []
macro_rules! kprintln {
     ($fmt: literal $(, $($arg: tt)+)?) => { ... };
 }
-
+
\ No newline at end of file diff --git a/ch9-log/os/macro.print.html b/ch9-log/os/macro.print.html index 17d519f7..df49b790 100644 --- a/ch9-log/os/macro.print.html +++ b/ch9-log/os/macro.print.html @@ -1,9 +1,11 @@ print in os - Rust -
-

Macro os::print

source · []
macro_rules! print {
+    
+    
+

Macro os::print

source · []
macro_rules! print {
     ($fmt: literal $(, $($arg: tt)+)?) => { ... };
 }
-
+
\ No newline at end of file diff --git a/ch9-log/os/macro.println.html b/ch9-log/os/macro.println.html index 6f58012d..40626a4a 100644 --- a/ch9-log/os/macro.println.html +++ b/ch9-log/os/macro.println.html @@ -1,9 +1,11 @@ println in os - Rust -
-

Macro os::println

source · []
macro_rules! println {
+    
+    
+

Macro os::println

source · []
macro_rules! println {
     ($fmt: literal $(, $($arg: tt)+)?) => { ... };
 }
-
+
\ No newline at end of file diff --git a/ch9-log/os/mm/address/constant.PA_WIDTH_SV39.html b/ch9-log/os/mm/address/constant.PA_WIDTH_SV39.html index d7ded0db..581afc43 100644 --- a/ch9-log/os/mm/address/constant.PA_WIDTH_SV39.html +++ b/ch9-log/os/mm/address/constant.PA_WIDTH_SV39.html @@ -1,6 +1,8 @@ PA_WIDTH_SV39 in os::mm::address - Rust -
const PA_WIDTH_SV39: usize = 56;
+ +
const PA_WIDTH_SV39: usize = 56;
\ No newline at end of file diff --git a/ch9-log/os/mm/address/constant.PPN_WIDTH_SV39.html b/ch9-log/os/mm/address/constant.PPN_WIDTH_SV39.html index 07bf60dc..9d5254cb 100644 --- a/ch9-log/os/mm/address/constant.PPN_WIDTH_SV39.html +++ b/ch9-log/os/mm/address/constant.PPN_WIDTH_SV39.html @@ -1,6 +1,8 @@ PPN_WIDTH_SV39 in os::mm::address - Rust -
const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS; // 0x0000_0000_0000_002cusize
+ +
const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS; // 44usize
\ No newline at end of file diff --git a/ch9-log/os/mm/address/constant.VA_WIDTH_SV39.html b/ch9-log/os/mm/address/constant.VA_WIDTH_SV39.html index 1f0e06d1..c8821bd0 100644 --- a/ch9-log/os/mm/address/constant.VA_WIDTH_SV39.html +++ b/ch9-log/os/mm/address/constant.VA_WIDTH_SV39.html @@ -1,6 +1,8 @@ VA_WIDTH_SV39 in os::mm::address - Rust -
const VA_WIDTH_SV39: usize = 39;
+ +
const VA_WIDTH_SV39: usize = 39;
\ No newline at end of file diff --git a/ch9-log/os/mm/address/constant.VPN_WIDTH_SV39.html b/ch9-log/os/mm/address/constant.VPN_WIDTH_SV39.html index 124aa845..c4e11101 100644 --- a/ch9-log/os/mm/address/constant.VPN_WIDTH_SV39.html +++ b/ch9-log/os/mm/address/constant.VPN_WIDTH_SV39.html @@ -1,6 +1,8 @@ VPN_WIDTH_SV39 in os::mm::address - Rust -
const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS; // 0x0000_0000_0000_001busize
+ +
const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS; // 27usize
\ No newline at end of file diff --git a/ch9-log/os/mm/address/index.html b/ch9-log/os/mm/address/index.html index cf1a589b..0e952582 100644 --- a/ch9-log/os/mm/address/index.html +++ b/ch9-log/os/mm/address/index.html @@ -1,11 +1,13 @@ os::mm::address - Rust -
\ No newline at end of file diff --git a/ch9-log/os/mm/address/struct.PhysAddr.html b/ch9-log/os/mm/address/struct.PhysAddr.html index dd88701f..77d94f1a 100644 --- a/ch9-log/os/mm/address/struct.PhysAddr.html +++ b/ch9-log/os/mm/address/struct.PhysAddr.html @@ -1,43 +1,47 @@ 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

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

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

T: {PhysAddr, VirtAddr, PhysPageNum, VirtPageNum} +

+
+

Struct os::mm::address::PhysAddr

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

Definitions

+

Tuple Fields

0: usize

Implementations

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} T -> usize: T.0 usize -> T: usize.into()

-

Performs the conversion.

-

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/address/struct.PhysPageNum.html b/ch9-log/os/mm/address/struct.PhysPageNum.html index b8b8d1ee..7e99effe 100644 --- a/ch9-log/os/mm/address/struct.PhysPageNum.html +++ b/ch9-log/os/mm/address/struct.PhysPageNum.html @@ -1,39 +1,43 @@ PhysPageNum in os::mm::address - Rust -
#[repr(C)]
pub struct PhysPageNum(pub usize);

Tuple Fields

0: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

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 +

+
#[repr(C)]
pub struct PhysPageNum(pub usize);

Tuple Fields

0: usize

Implementations

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/address/struct.SimpleRange.html b/ch9-log/os/mm/address/struct.SimpleRange.html index 163d0da6..64873661 100644 --- a/ch9-log/os/mm/address/struct.SimpleRange.html +++ b/ch9-log/os/mm/address/struct.SimpleRange.html @@ -1,26 +1,30 @@ SimpleRange in os::mm::address - Rust -
pub struct SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
{ + +
pub struct SimpleRange<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
{ l: T, r: 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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/mm/address/struct.SimpleRangeIterator.html b/ch9-log/os/mm/address/struct.SimpleRangeIterator.html index 988ccfa1..3449b108 100644 --- a/ch9-log/os/mm/address/struct.SimpleRangeIterator.html +++ b/ch9-log/os/mm/address/struct.SimpleRangeIterator.html @@ -1,130 +1,137 @@ SimpleRangeIterator in os::mm::address - Rust -
pub struct SimpleRangeIterator<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
{ + +
pub struct SimpleRangeIterator<T> where
    T: StepByOne + Copy + PartialEq + PartialOrd + Debug
{ current: T, end: T, -}

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 +}

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 +

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 +

🔬 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 +

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 +

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 +

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 +

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 +

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 +

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

-

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, +

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, +

🔬 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 +

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 +

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, +

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 +

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 +

🔬 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 +

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 +

🔬 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 +

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 +

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 +

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 +

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 +

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 +

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 +

🔬 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 +

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 +

🔬 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 +

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 +

🔬 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 +

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically +

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 +

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 +

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 +

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 +

🔬 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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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 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 diff --git a/ch9-log/os/mm/address/struct.VirtAddr.html b/ch9-log/os/mm/address/struct.VirtAddr.html index fff94adf..49d2c944 100644 --- a/ch9-log/os/mm/address/struct.VirtAddr.html +++ b/ch9-log/os/mm/address/struct.VirtAddr.html @@ -1,40 +1,44 @@ VirtAddr in os::mm::address - Rust -
-

Struct os::mm::address::VirtAddr

source · []
#[repr(C)]
pub struct VirtAddr(pub usize);

Tuple Fields

0: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

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 +

+
+

Struct os::mm::address::VirtAddr

source · []
#[repr(C)]
pub struct VirtAddr(pub usize);

Tuple Fields

0: usize

Implementations

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/address/struct.VirtPageNum.html b/ch9-log/os/mm/address/struct.VirtPageNum.html index 7f222ee9..e609f51f 100644 --- a/ch9-log/os/mm/address/struct.VirtPageNum.html +++ b/ch9-log/os/mm/address/struct.VirtPageNum.html @@ -1,39 +1,43 @@ VirtPageNum in os::mm::address - Rust -
#[repr(C)]
pub struct VirtPageNum(pub usize);

Tuple Fields

0: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

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 +

+
#[repr(C)]
pub struct VirtPageNum(pub usize);

Tuple Fields

0: usize

Implementations

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/address/trait.StepByOne.html b/ch9-log/os/mm/address/trait.StepByOne.html index 63b7ba1c..91ad1511 100644 --- a/ch9-log/os/mm/address/trait.StepByOne.html +++ b/ch9-log/os/mm/address/trait.StepByOne.html @@ -1,8 +1,10 @@ StepByOne in os::mm::address - Rust -
pub trait StepByOne {
+    
+    
pub trait StepByOne {
     fn step(&mut self);
-}

Required methods

Implementors

+}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/mm/address/type.VPNRange.html b/ch9-log/os/mm/address/type.VPNRange.html index c1fbb02e..30f6164b 100644 --- a/ch9-log/os/mm/address/type.VPNRange.html +++ b/ch9-log/os/mm/address/type.VPNRange.html @@ -1,6 +1,8 @@ VPNRange in os::mm::address - Rust -
-

Type Definition os::mm::address::VPNRange

source · []
pub type VPNRange = SimpleRange<VirtPageNum>;
+ +
+

Type Definition os::mm::address::VPNRange

source · []
pub type VPNRange = SimpleRange<VirtPageNum>;
\ No newline at end of file diff --git a/ch9-log/os/mm/fn.init.html b/ch9-log/os/mm/fn.init.html index 21af91c8..cc665251 100644 --- a/ch9-log/os/mm/fn.init.html +++ b/ch9-log/os/mm/fn.init.html @@ -1,6 +1,8 @@ init in os::mm - Rust -
-

Function os::mm::init

source · []
pub fn init()
+ +
+

Function os::mm::init

source · []
pub fn init()
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/fn.frame_alloc.html b/ch9-log/os/mm/frame_allocator/fn.frame_alloc.html index edeef209..5bbd68e0 100644 --- a/ch9-log/os/mm/frame_allocator/fn.frame_alloc.html +++ b/ch9-log/os/mm/frame_allocator/fn.frame_alloc.html @@ -1,6 +1,8 @@ frame_alloc in os::mm::frame_allocator - Rust -
pub fn frame_alloc() -> Option<FrameTracker>
+ +
pub fn frame_alloc() -> Option<FrameTracker>
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/fn.frame_allocator_test.html b/ch9-log/os/mm/frame_allocator/fn.frame_allocator_test.html index 9be1e55c..91bccc90 100644 --- a/ch9-log/os/mm/frame_allocator/fn.frame_allocator_test.html +++ b/ch9-log/os/mm/frame_allocator/fn.frame_allocator_test.html @@ -1,6 +1,8 @@ frame_allocator_test in os::mm::frame_allocator - Rust -
pub fn frame_allocator_test()
+ +
pub fn frame_allocator_test()
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/fn.frame_dealloc.html b/ch9-log/os/mm/frame_allocator/fn.frame_dealloc.html index ed1bb4b8..c658010f 100644 --- a/ch9-log/os/mm/frame_allocator/fn.frame_dealloc.html +++ b/ch9-log/os/mm/frame_allocator/fn.frame_dealloc.html @@ -1,6 +1,8 @@ frame_dealloc in os::mm::frame_allocator - Rust -
pub fn frame_dealloc(ppn: PhysPageNum)
+ +
pub fn frame_dealloc(ppn: PhysPageNum)
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/fn.init_frame_allocator.html b/ch9-log/os/mm/frame_allocator/fn.init_frame_allocator.html index 4d7a843b..0ee51bba 100644 --- a/ch9-log/os/mm/frame_allocator/fn.init_frame_allocator.html +++ b/ch9-log/os/mm/frame_allocator/fn.init_frame_allocator.html @@ -1,6 +1,8 @@ init_frame_allocator in os::mm::frame_allocator - Rust -
pub fn init_frame_allocator()
+ +
pub fn init_frame_allocator()
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/index.html b/ch9-log/os/mm/frame_allocator/index.html index 2858d2c0..792392b9 100644 --- a/ch9-log/os/mm/frame_allocator/index.html +++ b/ch9-log/os/mm/frame_allocator/index.html @@ -1,10 +1,12 @@ os::mm::frame_allocator - Rust -
\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html b/ch9-log/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html index 12002c85..299d74a3 100644 --- a/ch9-log/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html +++ b/ch9-log/os/mm/frame_allocator/struct.FRAME_ALLOCATOR.html @@ -1,20 +1,24 @@ FRAME_ALLOCATOR in os::mm::frame_allocator - Rust -
pub struct FRAME_ALLOCATOR {
+    
+    
pub struct FRAME_ALLOCATOR {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<StackFrameAllocator>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<StackFrameAllocator>>

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/ch9-log/os/mm/frame_allocator/struct.FrameTracker.html b/ch9-log/os/mm/frame_allocator/struct.FrameTracker.html index 68b6f751..9051a0b1 100644 --- a/ch9-log/os/mm/frame_allocator/struct.FrameTracker.html +++ b/ch9-log/os/mm/frame_allocator/struct.FrameTracker.html @@ -1,19 +1,23 @@ FrameTracker in os::mm::frame_allocator - Rust -
pub struct FrameTracker {
+    
+    
pub struct FrameTracker {
     pub ppn: PhysPageNum,
-}

Fields

ppn: PhysPageNum

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

ppn: PhysPageNum

Implementations

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).

+

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/ch9-log/os/mm/frame_allocator/struct.StackFrameAllocator.html b/ch9-log/os/mm/frame_allocator/struct.StackFrameAllocator.html index b77a3686..f97ac981 100644 --- a/ch9-log/os/mm/frame_allocator/struct.StackFrameAllocator.html +++ b/ch9-log/os/mm/frame_allocator/struct.StackFrameAllocator.html @@ -1,19 +1,23 @@ StackFrameAllocator in os::mm::frame_allocator - Rust -
pub struct StackFrameAllocator {
+    
+    
pub struct StackFrameAllocator {
     current: usize,
     end: usize,
     recycled: Vec<usize>,
-}

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/mm/frame_allocator/trait.FrameAllocator.html b/ch9-log/os/mm/frame_allocator/trait.FrameAllocator.html index 092d55c2..ee19042b 100644 --- a/ch9-log/os/mm/frame_allocator/trait.FrameAllocator.html +++ b/ch9-log/os/mm/frame_allocator/trait.FrameAllocator.html @@ -1,10 +1,12 @@ FrameAllocator in os::mm::frame_allocator - Rust -
trait FrameAllocator {
+    
+    
trait FrameAllocator {
     fn new() -> Self;
-
fn alloc(&mut self) -> Option<PhysPageNum>; -
fn dealloc(&mut self, ppn: PhysPageNum); -}

Required methods

Implementors

+ fn alloc(&mut self) -> Option<PhysPageNum>; + fn dealloc(&mut self, ppn: PhysPageNum); +}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/mm/frame_allocator/type.FrameAllocatorImpl.html b/ch9-log/os/mm/frame_allocator/type.FrameAllocatorImpl.html index f815ee1d..3445507f 100644 --- a/ch9-log/os/mm/frame_allocator/type.FrameAllocatorImpl.html +++ b/ch9-log/os/mm/frame_allocator/type.FrameAllocatorImpl.html @@ -1,6 +1,8 @@ FrameAllocatorImpl in os::mm::frame_allocator - Rust -
type FrameAllocatorImpl = StackFrameAllocator;
+ +
type FrameAllocatorImpl = StackFrameAllocator;
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/fn.handle_alloc_error.html b/ch9-log/os/mm/heap_allocator/fn.handle_alloc_error.html index f85900a1..2530c916 100644 --- a/ch9-log/os/mm/heap_allocator/fn.handle_alloc_error.html +++ b/ch9-log/os/mm/heap_allocator/fn.handle_alloc_error.html @@ -1,6 +1,8 @@ handle_alloc_error in os::mm::heap_allocator - Rust -
pub fn handle_alloc_error(layout: Layout) -> !
+ +
pub fn handle_alloc_error(layout: Layout) -> !
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/fn.heap_test.html b/ch9-log/os/mm/heap_allocator/fn.heap_test.html index 91ee139b..8b299060 100644 --- a/ch9-log/os/mm/heap_allocator/fn.heap_test.html +++ b/ch9-log/os/mm/heap_allocator/fn.heap_test.html @@ -1,6 +1,8 @@ heap_test in os::mm::heap_allocator - Rust -
pub fn heap_test()
+ +
pub fn heap_test()
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/fn.init_heap.html b/ch9-log/os/mm/heap_allocator/fn.init_heap.html index aa158869..3ad85f2b 100644 --- a/ch9-log/os/mm/heap_allocator/fn.init_heap.html +++ b/ch9-log/os/mm/heap_allocator/fn.init_heap.html @@ -1,6 +1,8 @@ init_heap in os::mm::heap_allocator - Rust -
pub fn init_heap()
+ +
pub fn init_heap()
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/index.html b/ch9-log/os/mm/heap_allocator/index.html index dd360e18..7bcc8817 100644 --- a/ch9-log/os/mm/heap_allocator/index.html +++ b/ch9-log/os/mm/heap_allocator/index.html @@ -1,8 +1,10 @@ os::mm::heap_allocator - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html b/ch9-log/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html index 80e8d72a..bf4b1785 100644 --- a/ch9-log/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html +++ b/ch9-log/os/mm/heap_allocator/static.HEAP_ALLOCATOR.html @@ -1,6 +1,8 @@ HEAP_ALLOCATOR in os::mm::heap_allocator - Rust -
static HEAP_ALLOCATOR: LockedHeap
+ +
static HEAP_ALLOCATOR: LockedHeap
\ No newline at end of file diff --git a/ch9-log/os/mm/heap_allocator/static.HEAP_SPACE.html b/ch9-log/os/mm/heap_allocator/static.HEAP_SPACE.html index 16025214..10553534 100644 --- a/ch9-log/os/mm/heap_allocator/static.HEAP_SPACE.html +++ b/ch9-log/os/mm/heap_allocator/static.HEAP_SPACE.html @@ -1,6 +1,8 @@ HEAP_SPACE in os::mm::heap_allocator - Rust -
static mut HEAP_SPACE: [u8; 2097152]
+ +
static mut HEAP_SPACE: [u8; 2097152]
\ No newline at end of file diff --git a/ch9-log/os/mm/index.html b/ch9-log/os/mm/index.html index c1d17fb7..c16a588f 100644 --- a/ch9-log/os/mm/index.html +++ b/ch9-log/os/mm/index.html @@ -1,9 +1,11 @@ os::mm - Rust -
-

Module os::mm

source · []

Re-exports

+ +
+

Module os::mm

source · []

Re-exports

pub use address::PhysAddr;
pub use address::PhysPageNum;
pub use address::StepByOne;
pub use address::VirtAddr;
pub use address::VirtPageNum;
pub use frame_allocator::frame_alloc;
pub use frame_allocator::frame_dealloc;
pub use frame_allocator::FrameTracker;
pub use memory_set::remap_test;
pub use memory_set::kernel_token;
pub use memory_set::MapPermission;
pub use memory_set::MemorySet;
pub use memory_set::KERNEL_SPACE;
pub use memory_set::KERNEL_SPACE;
pub use page_table::translated_byte_buffer;
pub use page_table::translated_ref;
pub use page_table::translated_refmut;
pub use page_table::translated_str;
pub use page_table::PageTable;
pub use page_table::PageTableEntry;
pub use page_table::UserBuffer;
pub use page_table::UserBufferIterator;

Modules

-

Functions

-
+

Functions

+
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/enum.MapType.html b/ch9-log/os/mm/memory_set/enum.MapType.html index 933b0dee..835fc3fd 100644 --- a/ch9-log/os/mm/memory_set/enum.MapType.html +++ b/ch9-log/os/mm/memory_set/enum.MapType.html @@ -1,27 +1,31 @@ MapType in os::mm::memory_set - Rust -
pub enum MapType {
+    
+    
pub enum MapType {
     Identical,
     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 +}

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/memory_set/fn.ebss.html b/ch9-log/os/mm/memory_set/fn.ebss.html index 3bd8584f..abf3a54a 100644 --- a/ch9-log/os/mm/memory_set/fn.ebss.html +++ b/ch9-log/os/mm/memory_set/fn.ebss.html @@ -1,6 +1,8 @@ ebss in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::ebss

source · []
unsafe extern "C" fn ebss()
+ +
+

Function os::mm::memory_set::ebss

source · []
unsafe extern "C" fn ebss()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.edata.html b/ch9-log/os/mm/memory_set/fn.edata.html index b9f4cc53..e300398a 100644 --- a/ch9-log/os/mm/memory_set/fn.edata.html +++ b/ch9-log/os/mm/memory_set/fn.edata.html @@ -1,6 +1,8 @@ edata in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::edata

source · []
unsafe extern "C" fn edata()
+ +
+

Function os::mm::memory_set::edata

source · []
unsafe extern "C" fn edata()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.ekernel.html b/ch9-log/os/mm/memory_set/fn.ekernel.html index a68105d6..4104c50a 100644 --- a/ch9-log/os/mm/memory_set/fn.ekernel.html +++ b/ch9-log/os/mm/memory_set/fn.ekernel.html @@ -1,6 +1,8 @@ ekernel in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::ekernel

source · []
unsafe extern "C" fn ekernel()
+ +
+

Function os::mm::memory_set::ekernel

source · []
unsafe extern "C" fn ekernel()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.erodata.html b/ch9-log/os/mm/memory_set/fn.erodata.html index 7a42fc8f..ea14c701 100644 --- a/ch9-log/os/mm/memory_set/fn.erodata.html +++ b/ch9-log/os/mm/memory_set/fn.erodata.html @@ -1,6 +1,8 @@ erodata in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::erodata

source · []
unsafe extern "C" fn erodata()
+ +
+

Function os::mm::memory_set::erodata

source · []
unsafe extern "C" fn erodata()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.etext.html b/ch9-log/os/mm/memory_set/fn.etext.html index dfa43cfd..37af16a3 100644 --- a/ch9-log/os/mm/memory_set/fn.etext.html +++ b/ch9-log/os/mm/memory_set/fn.etext.html @@ -1,6 +1,8 @@ etext in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::etext

source · []
unsafe extern "C" fn etext()
+ +
+

Function os::mm::memory_set::etext

source · []
unsafe extern "C" fn etext()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.kernel_token.html b/ch9-log/os/mm/memory_set/fn.kernel_token.html index bab9694c..81aacc5f 100644 --- a/ch9-log/os/mm/memory_set/fn.kernel_token.html +++ b/ch9-log/os/mm/memory_set/fn.kernel_token.html @@ -1,6 +1,8 @@ kernel_token in os::mm::memory_set - Rust -
pub fn kernel_token() -> usize
+ +
pub fn kernel_token() -> usize
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.remap_test.html b/ch9-log/os/mm/memory_set/fn.remap_test.html index 1eee4a09..cfc09fea 100644 --- a/ch9-log/os/mm/memory_set/fn.remap_test.html +++ b/ch9-log/os/mm/memory_set/fn.remap_test.html @@ -1,6 +1,8 @@ remap_test in os::mm::memory_set - Rust -
pub fn remap_test()
+ +
pub fn remap_test()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.sbss_with_stack.html b/ch9-log/os/mm/memory_set/fn.sbss_with_stack.html index ecbf7b8a..6b2051e1 100644 --- a/ch9-log/os/mm/memory_set/fn.sbss_with_stack.html +++ b/ch9-log/os/mm/memory_set/fn.sbss_with_stack.html @@ -1,6 +1,8 @@ sbss_with_stack in os::mm::memory_set - Rust -
unsafe extern "C" fn sbss_with_stack()
+ +
unsafe extern "C" fn sbss_with_stack()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.sdata.html b/ch9-log/os/mm/memory_set/fn.sdata.html index 21790d43..f9c26016 100644 --- a/ch9-log/os/mm/memory_set/fn.sdata.html +++ b/ch9-log/os/mm/memory_set/fn.sdata.html @@ -1,6 +1,8 @@ sdata in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::sdata

source · []
unsafe extern "C" fn sdata()
+ +
+

Function os::mm::memory_set::sdata

source · []
unsafe extern "C" fn sdata()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.srodata.html b/ch9-log/os/mm/memory_set/fn.srodata.html index 12becf5b..04e306e2 100644 --- a/ch9-log/os/mm/memory_set/fn.srodata.html +++ b/ch9-log/os/mm/memory_set/fn.srodata.html @@ -1,6 +1,8 @@ srodata in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::srodata

source · []
unsafe extern "C" fn srodata()
+ +
+

Function os::mm::memory_set::srodata

source · []
unsafe extern "C" fn srodata()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.stext.html b/ch9-log/os/mm/memory_set/fn.stext.html index f462b9fc..054f5de6 100644 --- a/ch9-log/os/mm/memory_set/fn.stext.html +++ b/ch9-log/os/mm/memory_set/fn.stext.html @@ -1,6 +1,8 @@ stext in os::mm::memory_set - Rust -
-

Function os::mm::memory_set::stext

source · []
unsafe extern "C" fn stext()
+ +
+

Function os::mm::memory_set::stext

source · []
unsafe extern "C" fn stext()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/fn.strampoline.html b/ch9-log/os/mm/memory_set/fn.strampoline.html index 6dd5b9da..d4c09c0c 100644 --- a/ch9-log/os/mm/memory_set/fn.strampoline.html +++ b/ch9-log/os/mm/memory_set/fn.strampoline.html @@ -1,6 +1,8 @@ strampoline in os::mm::memory_set - Rust -
unsafe extern "C" fn strampoline()
+ +
unsafe extern "C" fn strampoline()
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/index.html b/ch9-log/os/mm/memory_set/index.html index e9d27406..267c69e6 100644 --- a/ch9-log/os/mm/memory_set/index.html +++ b/ch9-log/os/mm/memory_set/index.html @@ -1,9 +1,11 @@ os::mm::memory_set - Rust -
\ No newline at end of file diff --git a/ch9-log/os/mm/memory_set/struct.KERNEL_SPACE.html b/ch9-log/os/mm/memory_set/struct.KERNEL_SPACE.html index e8719d56..dbaa20d7 100644 --- a/ch9-log/os/mm/memory_set/struct.KERNEL_SPACE.html +++ b/ch9-log/os/mm/memory_set/struct.KERNEL_SPACE.html @@ -1,19 +1,23 @@ KERNEL_SPACE in os::mm::memory_set - Rust -
pub struct KERNEL_SPACE {
+    
+    
pub struct KERNEL_SPACE {
     __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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/mm/memory_set/struct.MapArea.html b/ch9-log/os/mm/memory_set/struct.MapArea.html index efefd9a2..121fc4c6 100644 --- a/ch9-log/os/mm/memory_set/struct.MapArea.html +++ b/ch9-log/os/mm/memory_set/struct.MapArea.html @@ -1,22 +1,26 @@ MapArea in os::mm::memory_set - Rust -
pub struct MapArea {
+    
+    
pub struct MapArea {
     vpn_range: SimpleRange<VirtPageNum>,
     data_frames: BTreeMap<VirtPageNum, FrameTracker>,
     map_type: MapType,
     map_perm: MapPermission,
-}

Fields

vpn_range: SimpleRange<VirtPageNum>data_frames: BTreeMap<VirtPageNum, FrameTracker>map_type: MapTypemap_perm: MapPermission

Implementations

data: start-aligned but maybe with shorter length +}

Fields

vpn_range: SimpleRange<VirtPageNum>data_frames: BTreeMap<VirtPageNum, FrameTracker>map_type: MapTypemap_perm: MapPermission

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/memory_set/struct.MapPermission.html b/ch9-log/os/mm/memory_set/struct.MapPermission.html index 1491f893..3dccea97 100644 --- a/ch9-log/os/mm/memory_set/struct.MapPermission.html +++ b/ch9-log/os/mm/memory_set/struct.MapPermission.html @@ -1,53 +1,55 @@ MapPermission in os::mm::memory_set - Rust -

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -55,65 +57,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/mm/memory_set/struct.MemorySet.html b/ch9-log/os/mm/memory_set/struct.MemorySet.html index 8c039e74..4bd2014f 100644 --- a/ch9-log/os/mm/memory_set/struct.MemorySet.html +++ b/ch9-log/os/mm/memory_set/struct.MemorySet.html @@ -1,23 +1,27 @@ MemorySet in os::mm::memory_set - Rust -
pub struct MemorySet {
+    
+    
pub struct MemorySet {
     page_table: PageTable,
     areas: Vec<MapArea>,
-}

Fields

page_table: PageTableareas: Vec<MapArea>

Implementations

Assume that no conflicts.

-

Mention that trampoline is not collected by areas.

-

Without kernel stacks.

-

Include sections in elf and trampoline, +}

Fields

page_table: PageTableareas: Vec<MapArea>

Implementations

Assume that no conflicts.

+

Mention that trampoline is not collected by areas.

+

Without kernel stacks.

+

Include sections in elf and trampoline, also returns user_sp_base and entry point.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/mm/page_table/fn.translated_byte_buffer.html b/ch9-log/os/mm/page_table/fn.translated_byte_buffer.html index 0a78b767..8cd4e849 100644 --- a/ch9-log/os/mm/page_table/fn.translated_byte_buffer.html +++ b/ch9-log/os/mm/page_table/fn.translated_byte_buffer.html @@ -1,6 +1,8 @@ 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]>
+ +
pub fn translated_byte_buffer(
    token: usize,
    ptr: *const u8,
    len: usize
) -> Vec<&'static mut [u8]>
\ No newline at end of file diff --git a/ch9-log/os/mm/page_table/fn.translated_ref.html b/ch9-log/os/mm/page_table/fn.translated_ref.html index ec3d9511..9023b1e0 100644 --- a/ch9-log/os/mm/page_table/fn.translated_ref.html +++ b/ch9-log/os/mm/page_table/fn.translated_ref.html @@ -1,6 +1,8 @@ translated_ref in os::mm::page_table - Rust -
pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
+ +
pub fn translated_ref<T>(token: usize, ptr: *const T) -> &'static T
\ No newline at end of file diff --git a/ch9-log/os/mm/page_table/fn.translated_refmut.html b/ch9-log/os/mm/page_table/fn.translated_refmut.html index 2c696d79..d4bf929c 100644 --- a/ch9-log/os/mm/page_table/fn.translated_refmut.html +++ b/ch9-log/os/mm/page_table/fn.translated_refmut.html @@ -1,6 +1,8 @@ translated_refmut in os::mm::page_table - Rust -
pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
+ +
pub fn translated_refmut<T>(token: usize, ptr: *mut T) -> &'static mut T
\ No newline at end of file diff --git a/ch9-log/os/mm/page_table/fn.translated_str.html b/ch9-log/os/mm/page_table/fn.translated_str.html index 9660da3e..052e1ab9 100644 --- a/ch9-log/os/mm/page_table/fn.translated_str.html +++ b/ch9-log/os/mm/page_table/fn.translated_str.html @@ -1,7 +1,9 @@ translated_str in os::mm::page_table - Rust -
pub fn translated_str(token: usize, ptr: *const u8) -> String
Expand description

Load a string from other address spaces into kernel space without an end \0.

-
+ +
pub fn translated_str(token: usize, ptr: *const u8) -> String
Expand description

Load a string from other address spaces into kernel space without an end \0.

+
\ No newline at end of file diff --git a/ch9-log/os/mm/page_table/index.html b/ch9-log/os/mm/page_table/index.html index 8e6224e4..7467ec2b 100644 --- a/ch9-log/os/mm/page_table/index.html +++ b/ch9-log/os/mm/page_table/index.html @@ -1,9 +1,11 @@ os::mm::page_table - Rust -
\ No newline at end of file diff --git a/ch9-log/os/mm/page_table/struct.PTEFlags.html b/ch9-log/os/mm/page_table/struct.PTEFlags.html index f73ea52f..569d8117 100644 --- a/ch9-log/os/mm/page_table/struct.PTEFlags.html +++ b/ch9-log/os/mm/page_table/struct.PTEFlags.html @@ -1,53 +1,55 @@ PTEFlags in os::mm::page_table - Rust -

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -55,65 +57,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/mm/page_table/struct.PageTable.html b/ch9-log/os/mm/page_table/struct.PageTable.html index 07010acc..856767ba 100644 --- a/ch9-log/os/mm/page_table/struct.PageTable.html +++ b/ch9-log/os/mm/page_table/struct.PageTable.html @@ -1,20 +1,24 @@ PageTable in os::mm::page_table - Rust -
pub struct PageTable {
+    
+    
pub struct PageTable {
     root_ppn: PhysPageNum,
     frames: Vec<FrameTracker>,
-}

Fields

root_ppn: PhysPageNumframes: Vec<FrameTracker>

Implementations

Assume that it won’t oom when creating/mapping.

-

Temporarily used to get arguments from user space.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

root_ppn: PhysPageNumframes: Vec<FrameTracker>

Implementations

Assume that it won’t oom when creating/mapping.

+

Temporarily used to get arguments from user space.

+

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/ch9-log/os/mm/page_table/struct.PageTableEntry.html b/ch9-log/os/mm/page_table/struct.PageTableEntry.html index cc67b5da..a22fe547 100644 --- a/ch9-log/os/mm/page_table/struct.PageTableEntry.html +++ b/ch9-log/os/mm/page_table/struct.PageTableEntry.html @@ -1,22 +1,26 @@ PageTableEntry in os::mm::page_table - Rust -
#[repr(C)]
pub struct PageTableEntry { + +
#[repr(C)]
pub struct PageTableEntry { pub bits: usize, -}

Fields

bits: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

bits: usize

Implementations

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).

+

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/ch9-log/os/mm/page_table/struct.UserBuffer.html b/ch9-log/os/mm/page_table/struct.UserBuffer.html index 933e4bcb..00e81d2b 100644 --- a/ch9-log/os/mm/page_table/struct.UserBuffer.html +++ b/ch9-log/os/mm/page_table/struct.UserBuffer.html @@ -1,20 +1,24 @@ UserBuffer in os::mm::page_table - Rust -
pub struct UserBuffer {
+    
+    
pub struct UserBuffer {
     pub buffers: Vec<&'static mut [u8]>,
-}

Fields

buffers: Vec<&'static mut [u8]>

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

buffers: Vec<&'static mut [u8]>

Implementations

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).

+

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/ch9-log/os/mm/page_table/struct.UserBufferIterator.html b/ch9-log/os/mm/page_table/struct.UserBufferIterator.html index c4f95bb8..318948d9 100644 --- a/ch9-log/os/mm/page_table/struct.UserBufferIterator.html +++ b/ch9-log/os/mm/page_table/struct.UserBufferIterator.html @@ -1,131 +1,138 @@ UserBufferIterator in os::mm::page_table - Rust -
pub struct UserBufferIterator {
+    
+    
pub struct UserBufferIterator {
     buffers: Vec<&'static mut [u8]>,
     current_buffer: usize,
     current_idx: usize,
-}

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 +}

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 +

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 +

🔬 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 +

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 +

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 +

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 +

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 +

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 +

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

-

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, +

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, +

🔬 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 +

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 +

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, +

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 +

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 +

🔬 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 +

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 +

🔬 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 +

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 +

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 +

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 +

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 +

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 +

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 +

🔬 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 +

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 +

🔬 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 +

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 +

🔬 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 +

Determines if the elements of this Iterator are unequal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically +

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 +

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 +

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 +

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 +

🔬 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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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 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 diff --git a/ch9-log/os/sbi/constant.SBI_CLEAR_IPI.html b/ch9-log/os/sbi/constant.SBI_CLEAR_IPI.html index c191974c..f5d56dfa 100644 --- a/ch9-log/os/sbi/constant.SBI_CLEAR_IPI.html +++ b/ch9-log/os/sbi/constant.SBI_CLEAR_IPI.html @@ -1,6 +1,8 @@ SBI_CLEAR_IPI in os::sbi - Rust -
-

Constant os::sbi::SBI_CLEAR_IPI

source · []
const SBI_CLEAR_IPI: usize = 3;
+ +
+

Constant os::sbi::SBI_CLEAR_IPI

source · []
const SBI_CLEAR_IPI: usize = 3;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_CONSOLE_GETCHAR.html b/ch9-log/os/sbi/constant.SBI_CONSOLE_GETCHAR.html index 12640c16..042f0251 100644 --- a/ch9-log/os/sbi/constant.SBI_CONSOLE_GETCHAR.html +++ b/ch9-log/os/sbi/constant.SBI_CONSOLE_GETCHAR.html @@ -1,6 +1,8 @@ SBI_CONSOLE_GETCHAR in os::sbi - Rust -
const SBI_CONSOLE_GETCHAR: usize = 2;
+ +
const SBI_CONSOLE_GETCHAR: usize = 2;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html b/ch9-log/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html index 11240f3f..fca7335b 100644 --- a/ch9-log/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html +++ b/ch9-log/os/sbi/constant.SBI_CONSOLE_PUTCHAR.html @@ -1,6 +1,8 @@ SBI_CONSOLE_PUTCHAR in os::sbi - Rust -
const SBI_CONSOLE_PUTCHAR: usize = 1;
+ +
const SBI_CONSOLE_PUTCHAR: usize = 1;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_REMOTE_FENCE_I.html b/ch9-log/os/sbi/constant.SBI_REMOTE_FENCE_I.html index 35e0c19e..cb9d263a 100644 --- a/ch9-log/os/sbi/constant.SBI_REMOTE_FENCE_I.html +++ b/ch9-log/os/sbi/constant.SBI_REMOTE_FENCE_I.html @@ -1,6 +1,8 @@ SBI_REMOTE_FENCE_I in os::sbi - Rust -
const SBI_REMOTE_FENCE_I: usize = 5;
+ +
const SBI_REMOTE_FENCE_I: usize = 5;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html b/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html index 4bedd2b5..4a7078eb 100644 --- a/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html +++ b/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA.html @@ -1,6 +1,8 @@ SBI_REMOTE_SFENCE_VMA in os::sbi - Rust -
const SBI_REMOTE_SFENCE_VMA: usize = 6;
+ +
const SBI_REMOTE_SFENCE_VMA: usize = 6;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html b/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html index 06c69ce2..3c7e411b 100644 --- a/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html +++ b/ch9-log/os/sbi/constant.SBI_REMOTE_SFENCE_VMA_ASID.html @@ -1,6 +1,8 @@ SBI_REMOTE_SFENCE_VMA_ASID in os::sbi - Rust -
const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7;
+ +
const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_SEND_IPI.html b/ch9-log/os/sbi/constant.SBI_SEND_IPI.html index a3da3df2..07195820 100644 --- a/ch9-log/os/sbi/constant.SBI_SEND_IPI.html +++ b/ch9-log/os/sbi/constant.SBI_SEND_IPI.html @@ -1,6 +1,8 @@ SBI_SEND_IPI in os::sbi - Rust -
-

Constant os::sbi::SBI_SEND_IPI

source · []
const SBI_SEND_IPI: usize = 4;
+ +
+

Constant os::sbi::SBI_SEND_IPI

source · []
const SBI_SEND_IPI: usize = 4;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_SET_TIMER.html b/ch9-log/os/sbi/constant.SBI_SET_TIMER.html index b8c22ab8..5fcd7bc4 100644 --- a/ch9-log/os/sbi/constant.SBI_SET_TIMER.html +++ b/ch9-log/os/sbi/constant.SBI_SET_TIMER.html @@ -1,6 +1,8 @@ SBI_SET_TIMER in os::sbi - Rust -
-

Constant os::sbi::SBI_SET_TIMER

source · []
const SBI_SET_TIMER: usize = 0;
+ +
+

Constant os::sbi::SBI_SET_TIMER

source · []
const SBI_SET_TIMER: usize = 0;
\ No newline at end of file diff --git a/ch9-log/os/sbi/constant.SBI_SHUTDOWN.html b/ch9-log/os/sbi/constant.SBI_SHUTDOWN.html index 1019984f..bfed6936 100644 --- a/ch9-log/os/sbi/constant.SBI_SHUTDOWN.html +++ b/ch9-log/os/sbi/constant.SBI_SHUTDOWN.html @@ -1,6 +1,8 @@ SBI_SHUTDOWN in os::sbi - Rust -
-

Constant os::sbi::SBI_SHUTDOWN

source · []
const SBI_SHUTDOWN: usize = 8;
+ +
+

Constant os::sbi::SBI_SHUTDOWN

source · []
const SBI_SHUTDOWN: usize = 8;
\ No newline at end of file diff --git a/ch9-log/os/sbi/fn.console_getchar.html b/ch9-log/os/sbi/fn.console_getchar.html index 877c7578..1223ca43 100644 --- a/ch9-log/os/sbi/fn.console_getchar.html +++ b/ch9-log/os/sbi/fn.console_getchar.html @@ -1,6 +1,8 @@ console_getchar in os::sbi - Rust -
pub fn console_getchar() -> usize
+ +
pub fn console_getchar() -> usize
\ No newline at end of file diff --git a/ch9-log/os/sbi/fn.console_putchar.html b/ch9-log/os/sbi/fn.console_putchar.html index d1f365ff..f65a2732 100644 --- a/ch9-log/os/sbi/fn.console_putchar.html +++ b/ch9-log/os/sbi/fn.console_putchar.html @@ -1,6 +1,8 @@ console_putchar in os::sbi - Rust -
pub fn console_putchar(c: usize)
+ +
pub fn console_putchar(c: usize)
\ No newline at end of file diff --git a/ch9-log/os/sbi/fn.sbi_call.html b/ch9-log/os/sbi/fn.sbi_call.html index 00731305..7555efc9 100644 --- a/ch9-log/os/sbi/fn.sbi_call.html +++ b/ch9-log/os/sbi/fn.sbi_call.html @@ -1,6 +1,8 @@ sbi_call in os::sbi - Rust -
-

Function os::sbi::sbi_call

source · []
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize
+ +
+

Function os::sbi::sbi_call

source · []
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize
\ No newline at end of file diff --git a/ch9-log/os/sbi/fn.set_timer.html b/ch9-log/os/sbi/fn.set_timer.html index baa87c5b..a189954c 100644 --- a/ch9-log/os/sbi/fn.set_timer.html +++ b/ch9-log/os/sbi/fn.set_timer.html @@ -1,6 +1,8 @@ set_timer in os::sbi - Rust -
-

Function os::sbi::set_timer

source · []
pub fn set_timer(timer: usize)
+ +
+

Function os::sbi::set_timer

source · []
pub fn set_timer(timer: usize)
\ No newline at end of file diff --git a/ch9-log/os/sbi/fn.shutdown.html b/ch9-log/os/sbi/fn.shutdown.html index 14b7a2d8..dc79155f 100644 --- a/ch9-log/os/sbi/fn.shutdown.html +++ b/ch9-log/os/sbi/fn.shutdown.html @@ -1,6 +1,8 @@ shutdown in os::sbi - Rust -
-

Function os::sbi::shutdown

source · []
pub fn shutdown() -> !
+ +
+

Function os::sbi::shutdown

source · []
pub fn shutdown(exit_code: usize) -> !
\ No newline at end of file diff --git a/ch9-log/os/sbi/index.html b/ch9-log/os/sbi/index.html index 8c090e8c..19d7a303 100644 --- a/ch9-log/os/sbi/index.html +++ b/ch9-log/os/sbi/index.html @@ -1,8 +1,10 @@ os::sbi - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/struct.DEV_NON_BLOCKING_ACCESS.html b/ch9-log/os/struct.DEV_NON_BLOCKING_ACCESS.html index 9d123c39..bb173e16 100644 --- a/ch9-log/os/struct.DEV_NON_BLOCKING_ACCESS.html +++ b/ch9-log/os/struct.DEV_NON_BLOCKING_ACCESS.html @@ -1,20 +1,24 @@ DEV_NON_BLOCKING_ACCESS in os - Rust -
pub struct DEV_NON_BLOCKING_ACCESS {
+    
+    
pub struct DEV_NON_BLOCKING_ACCESS {
     pub(crate) __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<bool>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<bool>>

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/ch9-log/os/sync/condvar/index.html b/ch9-log/os/sync/condvar/index.html index af3076d6..97a47761 100644 --- a/ch9-log/os/sync/condvar/index.html +++ b/ch9-log/os/sync/condvar/index.html @@ -1,7 +1,9 @@ os::sync::condvar - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/sync/condvar/struct.Condvar.html b/ch9-log/os/sync/condvar/struct.Condvar.html index 3cc63d77..c576eabd 100644 --- a/ch9-log/os/sync/condvar/struct.Condvar.html +++ b/ch9-log/os/sync/condvar/struct.Condvar.html @@ -1,17 +1,21 @@ Condvar in os::sync::condvar - Rust -
pub struct Condvar {
+    
+    
pub struct Condvar {
     pub inner: UPIntrFreeCell<CondvarInner>,
-}

Fields

inner: UPIntrFreeCell<CondvarInner>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

inner: UPIntrFreeCell<CondvarInner>

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/ch9-log/os/sync/condvar/struct.CondvarInner.html b/ch9-log/os/sync/condvar/struct.CondvarInner.html index f1dd3996..e2766b9c 100644 --- a/ch9-log/os/sync/condvar/struct.CondvarInner.html +++ b/ch9-log/os/sync/condvar/struct.CondvarInner.html @@ -1,17 +1,21 @@ CondvarInner in os::sync::condvar - Rust -
pub struct CondvarInner {
+    
+    
pub struct CondvarInner {
     pub wait_queue: VecDeque<Arc<TaskControlBlock>>,
-}

Fields

wait_queue: VecDeque<Arc<TaskControlBlock>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

wait_queue: VecDeque<Arc<TaskControlBlock>>

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/ch9-log/os/sync/index.html b/ch9-log/os/sync/index.html index 3d630dd9..446e5a11 100644 --- a/ch9-log/os/sync/index.html +++ b/ch9-log/os/sync/index.html @@ -1,8 +1,10 @@ os::sync - Rust -
-

Module os::sync

source · []

Re-exports

+ +
+

Module os::sync

source · []

Re-exports

pub use condvar::Condvar;
pub use mutex::Mutex;
pub use mutex::MutexBlocking;
pub use mutex::MutexSpin;
pub use semaphore::Semaphore;
pub use up::UPIntrFreeCell;
pub use up::UPIntrRefMut;

Modules

-
+
condvar 🔒
mutex 🔒
semaphore 🔒
up 🔒
\ No newline at end of file diff --git a/ch9-log/os/sync/mutex/index.html b/ch9-log/os/sync/mutex/index.html index 5a6bd965..e23e91d4 100644 --- a/ch9-log/os/sync/mutex/index.html +++ b/ch9-log/os/sync/mutex/index.html @@ -1,8 +1,10 @@ os::sync::mutex - Rust -
\ No newline at end of file diff --git a/ch9-log/os/sync/mutex/struct.MutexBlocking.html b/ch9-log/os/sync/mutex/struct.MutexBlocking.html index b2718350..534d5a35 100644 --- a/ch9-log/os/sync/mutex/struct.MutexBlocking.html +++ b/ch9-log/os/sync/mutex/struct.MutexBlocking.html @@ -1,17 +1,21 @@ MutexBlocking in os::sync::mutex - Rust -
pub struct MutexBlocking {
+    
+    
pub struct MutexBlocking {
     inner: UPIntrFreeCell<MutexBlockingInner>,
-}

Fields

inner: UPIntrFreeCell<MutexBlockingInner>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

inner: UPIntrFreeCell<MutexBlockingInner>

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).

+

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/ch9-log/os/sync/mutex/struct.MutexBlockingInner.html b/ch9-log/os/sync/mutex/struct.MutexBlockingInner.html index 374cd9d3..8247043b 100644 --- a/ch9-log/os/sync/mutex/struct.MutexBlockingInner.html +++ b/ch9-log/os/sync/mutex/struct.MutexBlockingInner.html @@ -1,18 +1,22 @@ MutexBlockingInner in os::sync::mutex - Rust -
pub struct MutexBlockingInner {
+    
+    
pub struct MutexBlockingInner {
     locked: bool,
     wait_queue: VecDeque<Arc<TaskControlBlock>>,
-}

Fields

locked: boolwait_queue: VecDeque<Arc<TaskControlBlock>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

locked: boolwait_queue: VecDeque<Arc<TaskControlBlock>>

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/ch9-log/os/sync/mutex/struct.MutexSpin.html b/ch9-log/os/sync/mutex/struct.MutexSpin.html index 38c6d73d..43eec35a 100644 --- a/ch9-log/os/sync/mutex/struct.MutexSpin.html +++ b/ch9-log/os/sync/mutex/struct.MutexSpin.html @@ -1,17 +1,21 @@ MutexSpin in os::sync::mutex - Rust -
pub struct MutexSpin {
+    
+    
pub struct MutexSpin {
     locked: UPIntrFreeCell<bool>,
-}

Fields

locked: UPIntrFreeCell<bool>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

locked: UPIntrFreeCell<bool>

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).

+

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/ch9-log/os/sync/mutex/trait.Mutex.html b/ch9-log/os/sync/mutex/trait.Mutex.html index dfd4727c..e8e6685b 100644 --- a/ch9-log/os/sync/mutex/trait.Mutex.html +++ b/ch9-log/os/sync/mutex/trait.Mutex.html @@ -1,9 +1,11 @@ Mutex in os::sync::mutex - Rust -
-

Trait os::sync::mutex::Mutex

source · []
pub trait Mutex: Sync + Send {
+    
+    
+

Trait os::sync::mutex::Mutex

source · []
pub trait Mutex: Sync + Send {
     fn lock(&self);
-
fn unlock(&self); -}

Required methods

Implementors

+ fn unlock(&self); +}

Required methods

Implementors

\ No newline at end of file diff --git a/ch9-log/os/sync/semaphore/index.html b/ch9-log/os/sync/semaphore/index.html index ca290fe6..51800f80 100644 --- a/ch9-log/os/sync/semaphore/index.html +++ b/ch9-log/os/sync/semaphore/index.html @@ -1,7 +1,9 @@ os::sync::semaphore - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/sync/semaphore/struct.Semaphore.html b/ch9-log/os/sync/semaphore/struct.Semaphore.html index 3b6d387c..395e2784 100644 --- a/ch9-log/os/sync/semaphore/struct.Semaphore.html +++ b/ch9-log/os/sync/semaphore/struct.Semaphore.html @@ -1,17 +1,21 @@ Semaphore in os::sync::semaphore - Rust -
pub struct Semaphore {
+    
+    
pub struct Semaphore {
     pub inner: UPIntrFreeCell<SemaphoreInner>,
-}

Fields

inner: UPIntrFreeCell<SemaphoreInner>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

inner: UPIntrFreeCell<SemaphoreInner>

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/ch9-log/os/sync/semaphore/struct.SemaphoreInner.html b/ch9-log/os/sync/semaphore/struct.SemaphoreInner.html index b8fcc22b..f66c0a4c 100644 --- a/ch9-log/os/sync/semaphore/struct.SemaphoreInner.html +++ b/ch9-log/os/sync/semaphore/struct.SemaphoreInner.html @@ -1,18 +1,22 @@ SemaphoreInner in os::sync::semaphore - Rust -
pub struct SemaphoreInner {
+    
+    
pub struct SemaphoreInner {
     pub count: isize,
     pub wait_queue: VecDeque<Arc<TaskControlBlock>>,
-}

Fields

count: isizewait_queue: VecDeque<Arc<TaskControlBlock>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

count: isizewait_queue: VecDeque<Arc<TaskControlBlock>>

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/ch9-log/os/sync/up/index.html b/ch9-log/os/sync/up/index.html index 09fb0de6..c40c1f7e 100644 --- a/ch9-log/os/sync/up/index.html +++ b/ch9-log/os/sync/up/index.html @@ -1,7 +1,9 @@ os::sync::up - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/sync/up/struct.INTR_MASKING_INFO.html b/ch9-log/os/sync/up/struct.INTR_MASKING_INFO.html index ca887d56..aa0e334f 100644 --- a/ch9-log/os/sync/up/struct.INTR_MASKING_INFO.html +++ b/ch9-log/os/sync/up/struct.INTR_MASKING_INFO.html @@ -1,19 +1,23 @@ INTR_MASKING_INFO in os::sync::up - Rust -
struct INTR_MASKING_INFO {
+    
+    
struct INTR_MASKING_INFO {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPSafeCellRaw<IntrMaskingInfo>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPSafeCellRaw<IntrMaskingInfo>>

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/ch9-log/os/sync/up/struct.IntrMaskingInfo.html b/ch9-log/os/sync/up/struct.IntrMaskingInfo.html index 20c9135b..3a63a5fe 100644 --- a/ch9-log/os/sync/up/struct.IntrMaskingInfo.html +++ b/ch9-log/os/sync/up/struct.IntrMaskingInfo.html @@ -1,18 +1,22 @@ IntrMaskingInfo in os::sync::up - Rust -
pub struct IntrMaskingInfo {
+    
+    
pub struct IntrMaskingInfo {
     nested_level: usize,
     sie_before_masking: bool,
-}

Fields

nested_level: usizesie_before_masking: bool

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

nested_level: usizesie_before_masking: bool

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/ch9-log/os/sync/up/struct.UPIntrFreeCell.html b/ch9-log/os/sync/up/struct.UPIntrFreeCell.html index 6921be7c..787ad3e3 100644 --- a/ch9-log/os/sync/up/struct.UPIntrFreeCell.html +++ b/ch9-log/os/sync/up/struct.UPIntrFreeCell.html @@ -1,19 +1,23 @@ UPIntrFreeCell in os::sync::up - Rust -
pub struct UPIntrFreeCell<T> {
+    
+    
pub struct UPIntrFreeCell<T> {
     inner: RefCell<T>,
 }

Fields

inner: RefCell<T>

inner data

-

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

Implementations

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).

+

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/ch9-log/os/sync/up/struct.UPIntrRefMut.html b/ch9-log/os/sync/up/struct.UPIntrRefMut.html index a98a1dba..33476235 100644 --- a/ch9-log/os/sync/up/struct.UPIntrRefMut.html +++ b/ch9-log/os/sync/up/struct.UPIntrRefMut.html @@ -1,19 +1,23 @@ UPIntrRefMut in os::sync::up - Rust -
pub struct UPIntrRefMut<'a, T>(Option<RefMut<'a, T>>);

Tuple Fields

0: Option<RefMut<'a, T>>

Trait Implementations

The resulting type after dereferencing.

-

Dereferences the value.

-

Mutably dereferences the value.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+ +
pub struct UPIntrRefMut<'a, T>(Option<RefMut<'a, T>>);

Tuple Fields

0: Option<RefMut<'a, T>>

Trait Implementations

The resulting type after dereferencing.

+

Dereferences the value.

+

Mutably dereferences the value.

+

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).

+

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/ch9-log/os/sync/up/struct.UPSafeCellRaw.html b/ch9-log/os/sync/up/struct.UPSafeCellRaw.html index 1b75faa6..30b16340 100644 --- a/ch9-log/os/sync/up/struct.UPSafeCellRaw.html +++ b/ch9-log/os/sync/up/struct.UPSafeCellRaw.html @@ -1,17 +1,21 @@ UPSafeCellRaw in os::sync::up - Rust -
pub struct UPSafeCellRaw<T> {
+    
+    
pub struct UPSafeCellRaw<T> {
     inner: UnsafeCell<T>,
-}

Fields

inner: UnsafeCell<T>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

inner: UnsafeCell<T>

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).

+

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/ch9-log/os/syscall/constant.SYSCALL_CLOSE.html b/ch9-log/os/syscall/constant.SYSCALL_CLOSE.html index c189a9c2..e0d288be 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_CLOSE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_CLOSE.html @@ -1,6 +1,8 @@ SYSCALL_CLOSE in os::syscall - Rust -
const SYSCALL_CLOSE: usize = 57;
+ +
const SYSCALL_CLOSE: usize = 57;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_CREATE.html b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_CREATE.html index 81a37d17..a43d1795 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_CREATE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_CREATE.html @@ -1,6 +1,8 @@ SYSCALL_CONDVAR_CREATE in os::syscall - Rust -
const SYSCALL_CONDVAR_CREATE: usize = 1030;
+ +
const SYSCALL_CONDVAR_CREATE: usize = 1030;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_SIGNAL.html b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_SIGNAL.html index de1ca4a3..bd45f526 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_SIGNAL.html +++ b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_SIGNAL.html @@ -1,6 +1,8 @@ SYSCALL_CONDVAR_SIGNAL in os::syscall - Rust -
const SYSCALL_CONDVAR_SIGNAL: usize = 1031;
+ +
const SYSCALL_CONDVAR_SIGNAL: usize = 1031;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_WAIT.html b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_WAIT.html index 95304d26..23bcbc75 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_WAIT.html +++ b/ch9-log/os/syscall/constant.SYSCALL_CONDVAR_WAIT.html @@ -1,6 +1,8 @@ SYSCALL_CONDVAR_WAIT in os::syscall - Rust -
const SYSCALL_CONDVAR_WAIT: usize = 1032;
+ +
const SYSCALL_CONDVAR_WAIT: usize = 1032;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_DUP.html b/ch9-log/os/syscall/constant.SYSCALL_DUP.html index 4a3ed056..abb0e748 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_DUP.html +++ b/ch9-log/os/syscall/constant.SYSCALL_DUP.html @@ -1,6 +1,8 @@ SYSCALL_DUP in os::syscall - Rust -
const SYSCALL_DUP: usize = 24;
+ +
const SYSCALL_DUP: usize = 24;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_EXEC.html b/ch9-log/os/syscall/constant.SYSCALL_EXEC.html index ca11f1f5..20ddef91 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_EXEC.html +++ b/ch9-log/os/syscall/constant.SYSCALL_EXEC.html @@ -1,6 +1,8 @@ SYSCALL_EXEC in os::syscall - Rust -
const SYSCALL_EXEC: usize = 221;
+ +
const SYSCALL_EXEC: usize = 221;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_EXIT.html b/ch9-log/os/syscall/constant.SYSCALL_EXIT.html index 4ab8b379..e4a6afb6 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_EXIT.html +++ b/ch9-log/os/syscall/constant.SYSCALL_EXIT.html @@ -1,6 +1,8 @@ SYSCALL_EXIT in os::syscall - Rust -
const SYSCALL_EXIT: usize = 93;
+ +
const SYSCALL_EXIT: usize = 93;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_FORK.html b/ch9-log/os/syscall/constant.SYSCALL_FORK.html index a60495ae..af17f5eb 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_FORK.html +++ b/ch9-log/os/syscall/constant.SYSCALL_FORK.html @@ -1,6 +1,8 @@ SYSCALL_FORK in os::syscall - Rust -
const SYSCALL_FORK: usize = 220;
+ +
const SYSCALL_FORK: usize = 220;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_GETPID.html b/ch9-log/os/syscall/constant.SYSCALL_GETPID.html index 3b32faa9..7792b40b 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_GETPID.html +++ b/ch9-log/os/syscall/constant.SYSCALL_GETPID.html @@ -1,6 +1,8 @@ SYSCALL_GETPID in os::syscall - Rust -
const SYSCALL_GETPID: usize = 172;
+ +
const SYSCALL_GETPID: usize = 172;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_GETTID.html b/ch9-log/os/syscall/constant.SYSCALL_GETTID.html index ca733626..5c8c3f51 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_GETTID.html +++ b/ch9-log/os/syscall/constant.SYSCALL_GETTID.html @@ -1,6 +1,8 @@ SYSCALL_GETTID in os::syscall - Rust -
const SYSCALL_GETTID: usize = 1001;
+ +
const SYSCALL_GETTID: usize = 1001;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_GET_TIME.html b/ch9-log/os/syscall/constant.SYSCALL_GET_TIME.html index 343a08f8..7ef5f3a5 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_GET_TIME.html +++ b/ch9-log/os/syscall/constant.SYSCALL_GET_TIME.html @@ -1,6 +1,8 @@ SYSCALL_GET_TIME in os::syscall - Rust -
const SYSCALL_GET_TIME: usize = 169;
+ +
const SYSCALL_GET_TIME: usize = 169;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_KILL.html b/ch9-log/os/syscall/constant.SYSCALL_KILL.html index bf5ec3eb..ebe9dcd8 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_KILL.html +++ b/ch9-log/os/syscall/constant.SYSCALL_KILL.html @@ -1,6 +1,8 @@ SYSCALL_KILL in os::syscall - Rust -
const SYSCALL_KILL: usize = 129;
+ +
const SYSCALL_KILL: usize = 129;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_CREATE.html b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_CREATE.html index 6ed93ace..5839dacd 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_CREATE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_CREATE.html @@ -1,6 +1,8 @@ SYSCALL_MUTEX_CREATE in os::syscall - Rust -
const SYSCALL_MUTEX_CREATE: usize = 1010;
+ +
const SYSCALL_MUTEX_CREATE: usize = 1010;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_LOCK.html b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_LOCK.html index 3f352e9d..5f5373a7 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_LOCK.html +++ b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_LOCK.html @@ -1,6 +1,8 @@ SYSCALL_MUTEX_LOCK in os::syscall - Rust -
const SYSCALL_MUTEX_LOCK: usize = 1011;
+ +
const SYSCALL_MUTEX_LOCK: usize = 1011;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_UNLOCK.html b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_UNLOCK.html index 074de3fe..f209704a 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_MUTEX_UNLOCK.html +++ b/ch9-log/os/syscall/constant.SYSCALL_MUTEX_UNLOCK.html @@ -1,6 +1,8 @@ SYSCALL_MUTEX_UNLOCK in os::syscall - Rust -
const SYSCALL_MUTEX_UNLOCK: usize = 1012;
+ +
const SYSCALL_MUTEX_UNLOCK: usize = 1012;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_OPEN.html b/ch9-log/os/syscall/constant.SYSCALL_OPEN.html index 6db5ddbd..e10e6a42 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_OPEN.html +++ b/ch9-log/os/syscall/constant.SYSCALL_OPEN.html @@ -1,6 +1,8 @@ SYSCALL_OPEN in os::syscall - Rust -
const SYSCALL_OPEN: usize = 56;
+ +
const SYSCALL_OPEN: usize = 56;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_PIPE.html b/ch9-log/os/syscall/constant.SYSCALL_PIPE.html index e92c2618..414cc34f 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_PIPE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_PIPE.html @@ -1,6 +1,8 @@ SYSCALL_PIPE in os::syscall - Rust -
const SYSCALL_PIPE: usize = 59;
+ +
const SYSCALL_PIPE: usize = 59;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_READ.html b/ch9-log/os/syscall/constant.SYSCALL_READ.html index 028c955f..cf445b3b 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_READ.html +++ b/ch9-log/os/syscall/constant.SYSCALL_READ.html @@ -1,6 +1,8 @@ SYSCALL_READ in os::syscall - Rust -
const SYSCALL_READ: usize = 63;
+ +
const SYSCALL_READ: usize = 63;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_CREATE.html b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_CREATE.html index 42485644..90be423c 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_CREATE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_CREATE.html @@ -1,6 +1,8 @@ SYSCALL_SEMAPHORE_CREATE in os::syscall - Rust -
const SYSCALL_SEMAPHORE_CREATE: usize = 1020;
+ +
const SYSCALL_SEMAPHORE_CREATE: usize = 1020;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_DOWN.html b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_DOWN.html index e7b97375..9c178b9c 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_DOWN.html +++ b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_DOWN.html @@ -1,6 +1,8 @@ SYSCALL_SEMAPHORE_DOWN in os::syscall - Rust -
const SYSCALL_SEMAPHORE_DOWN: usize = 1022;
+ +
const SYSCALL_SEMAPHORE_DOWN: usize = 1022;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_UP.html b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_UP.html index ce325bb6..be10fecd 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_UP.html +++ b/ch9-log/os/syscall/constant.SYSCALL_SEMAPHORE_UP.html @@ -1,6 +1,8 @@ SYSCALL_SEMAPHORE_UP in os::syscall - Rust -
const SYSCALL_SEMAPHORE_UP: usize = 1021;
+ +
const SYSCALL_SEMAPHORE_UP: usize = 1021;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_SLEEP.html b/ch9-log/os/syscall/constant.SYSCALL_SLEEP.html index e1e9e0bc..8f1480da 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_SLEEP.html +++ b/ch9-log/os/syscall/constant.SYSCALL_SLEEP.html @@ -1,6 +1,8 @@ SYSCALL_SLEEP in os::syscall - Rust -
const SYSCALL_SLEEP: usize = 101;
+ +
const SYSCALL_SLEEP: usize = 101;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_THREAD_CREATE.html b/ch9-log/os/syscall/constant.SYSCALL_THREAD_CREATE.html index 2fe08c30..f873b513 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_THREAD_CREATE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_THREAD_CREATE.html @@ -1,6 +1,8 @@ SYSCALL_THREAD_CREATE in os::syscall - Rust -
const SYSCALL_THREAD_CREATE: usize = 1000;
+ +
const SYSCALL_THREAD_CREATE: usize = 1000;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_WAITPID.html b/ch9-log/os/syscall/constant.SYSCALL_WAITPID.html index d902aa1a..e4746848 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_WAITPID.html +++ b/ch9-log/os/syscall/constant.SYSCALL_WAITPID.html @@ -1,6 +1,8 @@ SYSCALL_WAITPID in os::syscall - Rust -
const SYSCALL_WAITPID: usize = 260;
+ +
const SYSCALL_WAITPID: usize = 260;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_WAITTID.html b/ch9-log/os/syscall/constant.SYSCALL_WAITTID.html index c259da17..a6c07f23 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_WAITTID.html +++ b/ch9-log/os/syscall/constant.SYSCALL_WAITTID.html @@ -1,6 +1,8 @@ SYSCALL_WAITTID in os::syscall - Rust -
const SYSCALL_WAITTID: usize = 1002;
+ +
const SYSCALL_WAITTID: usize = 1002;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_WRITE.html b/ch9-log/os/syscall/constant.SYSCALL_WRITE.html index 73f23b78..ffce29df 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_WRITE.html +++ b/ch9-log/os/syscall/constant.SYSCALL_WRITE.html @@ -1,6 +1,8 @@ SYSCALL_WRITE in os::syscall - Rust -
const SYSCALL_WRITE: usize = 64;
+ +
const SYSCALL_WRITE: usize = 64;
\ No newline at end of file diff --git a/ch9-log/os/syscall/constant.SYSCALL_YIELD.html b/ch9-log/os/syscall/constant.SYSCALL_YIELD.html index 45bf9297..0ab0ec57 100644 --- a/ch9-log/os/syscall/constant.SYSCALL_YIELD.html +++ b/ch9-log/os/syscall/constant.SYSCALL_YIELD.html @@ -1,6 +1,8 @@ SYSCALL_YIELD in os::syscall - Rust -
const SYSCALL_YIELD: usize = 124;
+ +
const SYSCALL_YIELD: usize = 124;
\ No newline at end of file diff --git a/ch9-log/os/syscall/fn.sys_id_str.html b/ch9-log/os/syscall/fn.sys_id_str.html index bb748054..d3f5a2f8 100644 --- a/ch9-log/os/syscall/fn.sys_id_str.html +++ b/ch9-log/os/syscall/fn.sys_id_str.html @@ -1,6 +1,8 @@ sys_id_str in os::syscall - Rust -
-

Function os::syscall::sys_id_str

source · []
pub fn sys_id_str(syscall_id: usize) -> &'static str
+ +
+

Function os::syscall::sys_id_str

source · []
pub fn sys_id_str(syscall_id: usize) -> &'static str
\ No newline at end of file diff --git a/ch9-log/os/syscall/fn.syscall.html b/ch9-log/os/syscall/fn.syscall.html index 46807849..2dc0f099 100644 --- a/ch9-log/os/syscall/fn.syscall.html +++ b/ch9-log/os/syscall/fn.syscall.html @@ -1,6 +1,8 @@ syscall in os::syscall - Rust -
-

Function os::syscall::syscall

source · []
pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize
+ +
+

Function os::syscall::syscall

source · []
pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/fs/fn.sys_close.html b/ch9-log/os/syscall/fs/fn.sys_close.html index f3880698..de58daee 100644 --- a/ch9-log/os/syscall/fs/fn.sys_close.html +++ b/ch9-log/os/syscall/fs/fn.sys_close.html @@ -1,6 +1,8 @@ sys_close in os::syscall::fs - Rust -
-

Function os::syscall::fs::sys_close

source · []
pub fn sys_close(fd: usize) -> isize
+ +
+

Function os::syscall::fs::sys_close

source · []
pub fn sys_close(fd: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/fs/fn.sys_dup.html b/ch9-log/os/syscall/fs/fn.sys_dup.html index b2af56bb..a352a097 100644 --- a/ch9-log/os/syscall/fs/fn.sys_dup.html +++ b/ch9-log/os/syscall/fs/fn.sys_dup.html @@ -1,6 +1,8 @@ sys_dup in os::syscall::fs - Rust -
-

Function os::syscall::fs::sys_dup

source · []
pub fn sys_dup(fd: usize) -> isize
+ +
+

Function os::syscall::fs::sys_dup

source · []
pub fn sys_dup(fd: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/fs/fn.sys_open.html b/ch9-log/os/syscall/fs/fn.sys_open.html index ccb6d0de..fcc97c73 100644 --- a/ch9-log/os/syscall/fs/fn.sys_open.html +++ b/ch9-log/os/syscall/fs/fn.sys_open.html @@ -1,6 +1,8 @@ sys_open in os::syscall::fs - Rust -
-

Function os::syscall::fs::sys_open

source · []
pub fn sys_open(path: *const u8, flags: u32) -> isize
+ +
+

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/ch9-log/os/syscall/fs/fn.sys_pipe.html b/ch9-log/os/syscall/fs/fn.sys_pipe.html index a5e0ea02..fdc07356 100644 --- a/ch9-log/os/syscall/fs/fn.sys_pipe.html +++ b/ch9-log/os/syscall/fs/fn.sys_pipe.html @@ -1,6 +1,8 @@ sys_pipe in os::syscall::fs - Rust -
-

Function os::syscall::fs::sys_pipe

source · []
pub fn sys_pipe(pipe: *mut usize) -> isize
+ +
+

Function os::syscall::fs::sys_pipe

source · []
pub fn sys_pipe(pipe: *mut usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/fs/fn.sys_read.html b/ch9-log/os/syscall/fs/fn.sys_read.html index 46b28058..f2a3f680 100644 --- a/ch9-log/os/syscall/fs/fn.sys_read.html +++ b/ch9-log/os/syscall/fs/fn.sys_read.html @@ -1,6 +1,8 @@ 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
+ +
+

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/ch9-log/os/syscall/fs/fn.sys_write.html b/ch9-log/os/syscall/fs/fn.sys_write.html index ffd9f98c..6e58f716 100644 --- a/ch9-log/os/syscall/fs/fn.sys_write.html +++ b/ch9-log/os/syscall/fs/fn.sys_write.html @@ -1,6 +1,8 @@ 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
+ +
+

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/ch9-log/os/syscall/fs/index.html b/ch9-log/os/syscall/fs/index.html index 73e15653..abe15c29 100644 --- a/ch9-log/os/syscall/fs/index.html +++ b/ch9-log/os/syscall/fs/index.html @@ -1,7 +1,9 @@ os::syscall::fs - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/syscall/index.html b/ch9-log/os/syscall/index.html index 70493310..3a7c1b5d 100644 --- a/ch9-log/os/syscall/index.html +++ b/ch9-log/os/syscall/index.html @@ -1,9 +1,11 @@ os::syscall - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_exec.html b/ch9-log/os/syscall/process/fn.sys_exec.html index eae1285d..1c303d14 100644 --- a/ch9-log/os/syscall/process/fn.sys_exec.html +++ b/ch9-log/os/syscall/process/fn.sys_exec.html @@ -1,6 +1,8 @@ sys_exec in os::syscall::process - Rust -
pub fn sys_exec(path: *const u8, args: *const usize) -> isize
+ +
pub fn sys_exec(path: *const u8, args: *const usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_exit.html b/ch9-log/os/syscall/process/fn.sys_exit.html index f353f095..8faee4f8 100644 --- a/ch9-log/os/syscall/process/fn.sys_exit.html +++ b/ch9-log/os/syscall/process/fn.sys_exit.html @@ -1,6 +1,8 @@ sys_exit in os::syscall::process - Rust -
pub fn sys_exit(exit_code: i32) -> !
+ +
pub fn sys_exit(exit_code: i32) -> !
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_fork.html b/ch9-log/os/syscall/process/fn.sys_fork.html index 2ae00581..fffbcc17 100644 --- a/ch9-log/os/syscall/process/fn.sys_fork.html +++ b/ch9-log/os/syscall/process/fn.sys_fork.html @@ -1,6 +1,8 @@ sys_fork in os::syscall::process - Rust -
pub fn sys_fork() -> isize
+ +
pub fn sys_fork() -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_get_time.html b/ch9-log/os/syscall/process/fn.sys_get_time.html index c114be47..ae2c2492 100644 --- a/ch9-log/os/syscall/process/fn.sys_get_time.html +++ b/ch9-log/os/syscall/process/fn.sys_get_time.html @@ -1,6 +1,8 @@ sys_get_time in os::syscall::process - Rust -
pub fn sys_get_time() -> isize
+ +
pub fn sys_get_time() -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_getpid.html b/ch9-log/os/syscall/process/fn.sys_getpid.html index 7277bafa..f94d29a9 100644 --- a/ch9-log/os/syscall/process/fn.sys_getpid.html +++ b/ch9-log/os/syscall/process/fn.sys_getpid.html @@ -1,6 +1,8 @@ sys_getpid in os::syscall::process - Rust -
pub fn sys_getpid() -> isize
+ +
pub fn sys_getpid() -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_kill.html b/ch9-log/os/syscall/process/fn.sys_kill.html index 79179522..cc9111de 100644 --- a/ch9-log/os/syscall/process/fn.sys_kill.html +++ b/ch9-log/os/syscall/process/fn.sys_kill.html @@ -1,6 +1,8 @@ sys_kill in os::syscall::process - Rust -
pub fn sys_kill(pid: usize, signal: u32) -> isize
+ +
pub fn sys_kill(pid: usize, signal: u32) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/fn.sys_waitpid.html b/ch9-log/os/syscall/process/fn.sys_waitpid.html index 37262294..82870791 100644 --- a/ch9-log/os/syscall/process/fn.sys_waitpid.html +++ b/ch9-log/os/syscall/process/fn.sys_waitpid.html @@ -1,8 +1,10 @@ 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. +

+
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 diff --git a/ch9-log/os/syscall/process/fn.sys_yield.html b/ch9-log/os/syscall/process/fn.sys_yield.html index 591b19e5..f55300c9 100644 --- a/ch9-log/os/syscall/process/fn.sys_yield.html +++ b/ch9-log/os/syscall/process/fn.sys_yield.html @@ -1,6 +1,8 @@ sys_yield in os::syscall::process - Rust -
pub fn sys_yield() -> isize
+ +
pub fn sys_yield() -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/process/index.html b/ch9-log/os/syscall/process/index.html index f19b6958..5c7691d3 100644 --- a/ch9-log/os/syscall/process/index.html +++ b/ch9-log/os/syscall/process/index.html @@ -1,9 +1,11 @@ os::syscall::process - Rust -
-

Module os::syscall::process

source · []

Functions

+ +
+

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 diff --git a/ch9-log/os/syscall/sync/fn.sys_condvar_create.html b/ch9-log/os/syscall/sync/fn.sys_condvar_create.html index e9328362..95072723 100644 --- a/ch9-log/os/syscall/sync/fn.sys_condvar_create.html +++ b/ch9-log/os/syscall/sync/fn.sys_condvar_create.html @@ -1,6 +1,8 @@ sys_condvar_create in os::syscall::sync - Rust -
pub fn sys_condvar_create(_arg: usize) -> isize
+ +
pub fn sys_condvar_create(_arg: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_condvar_signal.html b/ch9-log/os/syscall/sync/fn.sys_condvar_signal.html index f80ea7d7..6dc29dc4 100644 --- a/ch9-log/os/syscall/sync/fn.sys_condvar_signal.html +++ b/ch9-log/os/syscall/sync/fn.sys_condvar_signal.html @@ -1,6 +1,8 @@ sys_condvar_signal in os::syscall::sync - Rust -
pub fn sys_condvar_signal(condvar_id: usize) -> isize
+ +
pub fn sys_condvar_signal(condvar_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_condvar_wait.html b/ch9-log/os/syscall/sync/fn.sys_condvar_wait.html index 1ee8cb62..58338532 100644 --- a/ch9-log/os/syscall/sync/fn.sys_condvar_wait.html +++ b/ch9-log/os/syscall/sync/fn.sys_condvar_wait.html @@ -1,6 +1,8 @@ sys_condvar_wait in os::syscall::sync - Rust -
pub fn sys_condvar_wait(condvar_id: usize, mutex_id: usize) -> isize
+ +
pub fn sys_condvar_wait(condvar_id: usize, mutex_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_mutex_create.html b/ch9-log/os/syscall/sync/fn.sys_mutex_create.html index ec8b6c51..fd9e4965 100644 --- a/ch9-log/os/syscall/sync/fn.sys_mutex_create.html +++ b/ch9-log/os/syscall/sync/fn.sys_mutex_create.html @@ -1,6 +1,8 @@ sys_mutex_create in os::syscall::sync - Rust -
pub fn sys_mutex_create(blocking: bool) -> isize
+ +
pub fn sys_mutex_create(blocking: bool) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_mutex_lock.html b/ch9-log/os/syscall/sync/fn.sys_mutex_lock.html index 82df5577..59272ff4 100644 --- a/ch9-log/os/syscall/sync/fn.sys_mutex_lock.html +++ b/ch9-log/os/syscall/sync/fn.sys_mutex_lock.html @@ -1,6 +1,8 @@ sys_mutex_lock in os::syscall::sync - Rust -
pub fn sys_mutex_lock(mutex_id: usize) -> isize
+ +
pub fn sys_mutex_lock(mutex_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_mutex_unlock.html b/ch9-log/os/syscall/sync/fn.sys_mutex_unlock.html index e3b3c56e..f68f802b 100644 --- a/ch9-log/os/syscall/sync/fn.sys_mutex_unlock.html +++ b/ch9-log/os/syscall/sync/fn.sys_mutex_unlock.html @@ -1,6 +1,8 @@ sys_mutex_unlock in os::syscall::sync - Rust -
pub fn sys_mutex_unlock(mutex_id: usize) -> isize
+ +
pub fn sys_mutex_unlock(mutex_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_semaphore_create.html b/ch9-log/os/syscall/sync/fn.sys_semaphore_create.html index dea11d79..d122d85b 100644 --- a/ch9-log/os/syscall/sync/fn.sys_semaphore_create.html +++ b/ch9-log/os/syscall/sync/fn.sys_semaphore_create.html @@ -1,6 +1,8 @@ sys_semaphore_create in os::syscall::sync - Rust -
pub fn sys_semaphore_create(res_count: usize) -> isize
+ +
pub fn sys_semaphore_create(res_count: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_semaphore_down.html b/ch9-log/os/syscall/sync/fn.sys_semaphore_down.html index 960453ca..f587ea96 100644 --- a/ch9-log/os/syscall/sync/fn.sys_semaphore_down.html +++ b/ch9-log/os/syscall/sync/fn.sys_semaphore_down.html @@ -1,6 +1,8 @@ sys_semaphore_down in os::syscall::sync - Rust -
pub fn sys_semaphore_down(sem_id: usize) -> isize
+ +
pub fn sys_semaphore_down(sem_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_semaphore_up.html b/ch9-log/os/syscall/sync/fn.sys_semaphore_up.html index 3ba76d19..98829564 100644 --- a/ch9-log/os/syscall/sync/fn.sys_semaphore_up.html +++ b/ch9-log/os/syscall/sync/fn.sys_semaphore_up.html @@ -1,6 +1,8 @@ sys_semaphore_up in os::syscall::sync - Rust -
pub fn sys_semaphore_up(sem_id: usize) -> isize
+ +
pub fn sys_semaphore_up(sem_id: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/fn.sys_sleep.html b/ch9-log/os/syscall/sync/fn.sys_sleep.html index 9c2d044a..af21c7ba 100644 --- a/ch9-log/os/syscall/sync/fn.sys_sleep.html +++ b/ch9-log/os/syscall/sync/fn.sys_sleep.html @@ -1,6 +1,8 @@ sys_sleep in os::syscall::sync - Rust -
-

Function os::syscall::sync::sys_sleep

source · []
pub fn sys_sleep(ms: usize) -> isize
+ +
+

Function os::syscall::sync::sys_sleep

source · []
pub fn sys_sleep(ms: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/sync/index.html b/ch9-log/os/syscall/sync/index.html index 92132186..f4810a91 100644 --- a/ch9-log/os/syscall/sync/index.html +++ b/ch9-log/os/syscall/sync/index.html @@ -1,7 +1,9 @@ os::syscall::sync - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/syscall/thread/fn.sys_gettid.html b/ch9-log/os/syscall/thread/fn.sys_gettid.html index 3e2a08b4..d00b5895 100644 --- a/ch9-log/os/syscall/thread/fn.sys_gettid.html +++ b/ch9-log/os/syscall/thread/fn.sys_gettid.html @@ -1,6 +1,8 @@ sys_gettid in os::syscall::thread - Rust -
pub fn sys_gettid() -> isize
+ +
pub fn sys_gettid() -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/thread/fn.sys_thread_create.html b/ch9-log/os/syscall/thread/fn.sys_thread_create.html index 705c100d..001f127d 100644 --- a/ch9-log/os/syscall/thread/fn.sys_thread_create.html +++ b/ch9-log/os/syscall/thread/fn.sys_thread_create.html @@ -1,6 +1,8 @@ sys_thread_create in os::syscall::thread - Rust -
pub fn sys_thread_create(entry: usize, arg: usize) -> isize
+ +
pub fn sys_thread_create(entry: usize, arg: usize) -> isize
\ No newline at end of file diff --git a/ch9-log/os/syscall/thread/fn.sys_waittid.html b/ch9-log/os/syscall/thread/fn.sys_waittid.html index 0e2d59ff..df450dab 100644 --- a/ch9-log/os/syscall/thread/fn.sys_waittid.html +++ b/ch9-log/os/syscall/thread/fn.sys_waittid.html @@ -1,9 +1,11 @@ sys_waittid in os::syscall::thread - Rust -
pub fn sys_waittid(tid: usize) -> i32
Expand description

thread does not exist, return -1 +

+
pub fn sys_waittid(tid: usize) -> i32
Expand description

thread does not exist, return -1 thread has not exited yet, return -2 otherwise, return thread’s exit code

-
+
\ No newline at end of file diff --git a/ch9-log/os/syscall/thread/index.html b/ch9-log/os/syscall/thread/index.html index 1be1fb02..8a12b5c5 100644 --- a/ch9-log/os/syscall/thread/index.html +++ b/ch9-log/os/syscall/thread/index.html @@ -1,10 +1,12 @@ os::syscall::thread - Rust -
-

Module os::syscall::thread

source · []

Functions

+ +
+

Module os::syscall::thread

source · []

Functions

thread does not exist, return -1 thread has not exited yet, return -2 otherwise, return thread’s exit code

-
+
\ No newline at end of file diff --git a/ch9-log/os/task/context/index.html b/ch9-log/os/task/context/index.html index d9baf036..74b2c655 100644 --- a/ch9-log/os/task/context/index.html +++ b/ch9-log/os/task/context/index.html @@ -1,7 +1,9 @@ os::task::context - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/task/context/struct.TaskContext.html b/ch9-log/os/task/context/struct.TaskContext.html index 86c3149c..76dd0a3a 100644 --- a/ch9-log/os/task/context/struct.TaskContext.html +++ b/ch9-log/os/task/context/struct.TaskContext.html @@ -1,19 +1,23 @@ TaskContext in os::task::context - Rust -
#[repr(C)]
pub struct TaskContext { + +
#[repr(C)]
pub struct TaskContext { ra: usize, sp: usize, s: [usize; 12], -}

Fields

ra: usizesp: usizes: [usize; 12]

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

ra: usizesp: usizes: [usize; 12]

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/ch9-log/os/task/fn.add_initproc.html b/ch9-log/os/task/fn.add_initproc.html index 7988ba17..2db12337 100644 --- a/ch9-log/os/task/fn.add_initproc.html +++ b/ch9-log/os/task/fn.add_initproc.html @@ -1,6 +1,8 @@ add_initproc in os::task - Rust -
-

Function os::task::add_initproc

source · []
pub fn add_initproc()
+ +
+

Function os::task::add_initproc

source · []
pub fn add_initproc()
\ No newline at end of file diff --git a/ch9-log/os/task/fn.block_current_and_run_next.html b/ch9-log/os/task/fn.block_current_and_run_next.html index ee26d68c..874f4ff7 100644 --- a/ch9-log/os/task/fn.block_current_and_run_next.html +++ b/ch9-log/os/task/fn.block_current_and_run_next.html @@ -1,6 +1,8 @@ block_current_and_run_next in os::task - Rust -
pub fn block_current_and_run_next()
+ +
pub fn block_current_and_run_next()
\ No newline at end of file diff --git a/ch9-log/os/task/fn.block_current_task.html b/ch9-log/os/task/fn.block_current_task.html index f463dcab..f9d61132 100644 --- a/ch9-log/os/task/fn.block_current_task.html +++ b/ch9-log/os/task/fn.block_current_task.html @@ -1,7 +1,9 @@ block_current_task in os::task - Rust -
pub fn block_current_task() -> *mut TaskContext
Expand description

This function must be followed by a schedule

-
+ +
pub fn block_current_task() -> *mut TaskContext
Expand description

This function must be followed by a schedule

+
\ No newline at end of file diff --git a/ch9-log/os/task/fn.check_signals_of_current.html b/ch9-log/os/task/fn.check_signals_of_current.html index 5b23d860..5eede41e 100644 --- a/ch9-log/os/task/fn.check_signals_of_current.html +++ b/ch9-log/os/task/fn.check_signals_of_current.html @@ -1,6 +1,8 @@ check_signals_of_current in os::task - Rust -
pub fn check_signals_of_current() -> Option<(i32, &'static str)>
+ +
pub fn check_signals_of_current() -> Option<(i32, &'static str)>
\ No newline at end of file diff --git a/ch9-log/os/task/fn.current_add_signal.html b/ch9-log/os/task/fn.current_add_signal.html index a500b44c..d3dcb015 100644 --- a/ch9-log/os/task/fn.current_add_signal.html +++ b/ch9-log/os/task/fn.current_add_signal.html @@ -1,6 +1,8 @@ current_add_signal in os::task - Rust -
pub fn current_add_signal(signal: SignalFlags)
+ +
pub fn current_add_signal(signal: SignalFlags)
\ No newline at end of file diff --git a/ch9-log/os/task/fn.exit_current_and_run_next.html b/ch9-log/os/task/fn.exit_current_and_run_next.html index c73bb31e..2e8abf9f 100644 --- a/ch9-log/os/task/fn.exit_current_and_run_next.html +++ b/ch9-log/os/task/fn.exit_current_and_run_next.html @@ -1,6 +1,8 @@ exit_current_and_run_next in os::task - Rust -
pub fn exit_current_and_run_next(exit_code: i32)
+ +
pub fn exit_current_and_run_next(exit_code: i32)
\ No newline at end of file diff --git a/ch9-log/os/task/fn.suspend_current_and_run_next.html b/ch9-log/os/task/fn.suspend_current_and_run_next.html index 07d8310a..e3449a64 100644 --- a/ch9-log/os/task/fn.suspend_current_and_run_next.html +++ b/ch9-log/os/task/fn.suspend_current_and_run_next.html @@ -1,6 +1,8 @@ suspend_current_and_run_next in os::task - Rust -
pub fn suspend_current_and_run_next()
+ +
pub fn suspend_current_and_run_next()
\ No newline at end of file diff --git a/ch9-log/os/task/id/constant.IDLE_PID.html b/ch9-log/os/task/id/constant.IDLE_PID.html new file mode 100644 index 00000000..87f63b27 --- /dev/null +++ b/ch9-log/os/task/id/constant.IDLE_PID.html @@ -0,0 +1,8 @@ +IDLE_PID in os::task::id - Rust + +
+

Constant os::task::id::IDLE_PID

source · []
pub const IDLE_PID: usize = 0;
+ \ No newline at end of file diff --git a/ch9-log/os/task/id/fn.kernel_stack_position.html b/ch9-log/os/task/id/fn.kernel_stack_position.html index a646aa00..05a5c992 100644 --- a/ch9-log/os/task/id/fn.kernel_stack_position.html +++ b/ch9-log/os/task/id/fn.kernel_stack_position.html @@ -1,7 +1,9 @@ kernel_stack_position in os::task::id - Rust -
pub fn kernel_stack_position(kstack_id: usize) -> (usize, usize)
Expand description

Return (bottom, top) of a kernel stack in kernel space.

-
+ +
pub fn kernel_stack_position(kstack_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/ch9-log/os/task/id/fn.kstack_alloc.html b/ch9-log/os/task/id/fn.kstack_alloc.html index 64310b1d..e9c1b871 100644 --- a/ch9-log/os/task/id/fn.kstack_alloc.html +++ b/ch9-log/os/task/id/fn.kstack_alloc.html @@ -1,6 +1,8 @@ kstack_alloc in os::task::id - Rust -
-

Function os::task::id::kstack_alloc

source · []
pub fn kstack_alloc() -> KernelStack
+ +
+

Function os::task::id::kstack_alloc

source · []
pub fn kstack_alloc() -> KernelStack
\ No newline at end of file diff --git a/ch9-log/os/task/id/fn.pid_alloc.html b/ch9-log/os/task/id/fn.pid_alloc.html index d758b823..96afeb69 100644 --- a/ch9-log/os/task/id/fn.pid_alloc.html +++ b/ch9-log/os/task/id/fn.pid_alloc.html @@ -1,6 +1,8 @@ pid_alloc in os::task::id - Rust -
-

Function os::task::id::pid_alloc

source · []
pub fn pid_alloc() -> PidHandle
+ +
+

Function os::task::id::pid_alloc

source · []
pub fn pid_alloc() -> PidHandle
\ No newline at end of file diff --git a/ch9-log/os/task/id/fn.trap_cx_bottom_from_tid.html b/ch9-log/os/task/id/fn.trap_cx_bottom_from_tid.html index 99b5a350..59b8a2f0 100644 --- a/ch9-log/os/task/id/fn.trap_cx_bottom_from_tid.html +++ b/ch9-log/os/task/id/fn.trap_cx_bottom_from_tid.html @@ -1,6 +1,8 @@ trap_cx_bottom_from_tid in os::task::id - Rust -
fn trap_cx_bottom_from_tid(tid: usize) -> usize
+ +
fn trap_cx_bottom_from_tid(tid: usize) -> usize
\ No newline at end of file diff --git a/ch9-log/os/task/id/fn.ustack_bottom_from_tid.html b/ch9-log/os/task/id/fn.ustack_bottom_from_tid.html index 5ec81526..abe4e0ba 100644 --- a/ch9-log/os/task/id/fn.ustack_bottom_from_tid.html +++ b/ch9-log/os/task/id/fn.ustack_bottom_from_tid.html @@ -1,6 +1,8 @@ ustack_bottom_from_tid in os::task::id - Rust -
fn ustack_bottom_from_tid(ustack_base: usize, tid: usize) -> usize
+ +
fn ustack_bottom_from_tid(ustack_base: usize, tid: usize) -> usize
\ No newline at end of file diff --git a/ch9-log/os/task/id/index.html b/ch9-log/os/task/id/index.html index c85967ac..4b1e28c2 100644 --- a/ch9-log/os/task/id/index.html +++ b/ch9-log/os/task/id/index.html @@ -1,9 +1,12 @@ os::task::id - Rust -
\ No newline at end of file diff --git a/ch9-log/os/task/id/sidebar-items.js b/ch9-log/os/task/id/sidebar-items.js index 693c0c6e..87951670 100644 --- a/ch9-log/os/task/id/sidebar-items.js +++ b/ch9-log/os/task/id/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"fn":[["kernel_stack_position","Return (bottom, top) of a kernel stack in kernel space."],["kstack_alloc",""],["pid_alloc",""],["trap_cx_bottom_from_tid",""],["ustack_bottom_from_tid",""]],"struct":[["KSTACK_ALLOCATOR",""],["KernelStack",""],["PID_ALLOCATOR",""],["PidHandle",""],["RecycleAllocator",""],["TaskUserRes",""]]}); \ No newline at end of file +initSidebarItems({"constant":[["IDLE_PID",""]],"fn":[["kernel_stack_position","Return (bottom, top) of a kernel stack in kernel space."],["kstack_alloc",""],["pid_alloc",""],["trap_cx_bottom_from_tid",""],["ustack_bottom_from_tid",""]],"struct":[["KSTACK_ALLOCATOR",""],["KernelStack",""],["PID_ALLOCATOR",""],["PidHandle",""],["RecycleAllocator",""],["TaskUserRes",""]]}); \ No newline at end of file diff --git a/ch9-log/os/task/id/struct.KSTACK_ALLOCATOR.html b/ch9-log/os/task/id/struct.KSTACK_ALLOCATOR.html index ec9f74d1..6dc4a8d4 100644 --- a/ch9-log/os/task/id/struct.KSTACK_ALLOCATOR.html +++ b/ch9-log/os/task/id/struct.KSTACK_ALLOCATOR.html @@ -1,20 +1,24 @@ KSTACK_ALLOCATOR in os::task::id - Rust -
struct KSTACK_ALLOCATOR {
+    
+    
struct KSTACK_ALLOCATOR {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<RecycleAllocator>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<RecycleAllocator>>

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/ch9-log/os/task/id/struct.KernelStack.html b/ch9-log/os/task/id/struct.KernelStack.html index 51811571..1802a656 100644 --- a/ch9-log/os/task/id/struct.KernelStack.html +++ b/ch9-log/os/task/id/struct.KernelStack.html @@ -1,16 +1,20 @@ KernelStack in os::task::id - Rust -
-

Struct os::task::id::KernelStack

source · []
pub struct KernelStack(pub usize);

Tuple Fields

0: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+ +
+

Struct os::task::id::KernelStack

source · []
pub struct KernelStack(pub usize);

Tuple Fields

0: usize

Implementations

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).

+

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/ch9-log/os/task/id/struct.PID_ALLOCATOR.html b/ch9-log/os/task/id/struct.PID_ALLOCATOR.html index 49491f0a..2704a9da 100644 --- a/ch9-log/os/task/id/struct.PID_ALLOCATOR.html +++ b/ch9-log/os/task/id/struct.PID_ALLOCATOR.html @@ -1,20 +1,24 @@ PID_ALLOCATOR in os::task::id - Rust -
struct PID_ALLOCATOR {
+    
+    
struct PID_ALLOCATOR {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<RecycleAllocator>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<RecycleAllocator>>

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/ch9-log/os/task/id/struct.PidHandle.html b/ch9-log/os/task/id/struct.PidHandle.html index 153fc82f..47858825 100644 --- a/ch9-log/os/task/id/struct.PidHandle.html +++ b/ch9-log/os/task/id/struct.PidHandle.html @@ -1,16 +1,20 @@ PidHandle in os::task::id - Rust -
-

Struct os::task::id::PidHandle

source · []
pub struct PidHandle(pub usize);

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+ +
+

Struct os::task::id::PidHandle

source · []
pub struct PidHandle(pub usize);

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).

+

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/ch9-log/os/task/id/struct.RecycleAllocator.html b/ch9-log/os/task/id/struct.RecycleAllocator.html index d92efefd..5c11bac4 100644 --- a/ch9-log/os/task/id/struct.RecycleAllocator.html +++ b/ch9-log/os/task/id/struct.RecycleAllocator.html @@ -1,18 +1,22 @@ RecycleAllocator in os::task::id - Rust -
pub struct RecycleAllocator {
+    
+    
pub struct RecycleAllocator {
     current: usize,
     recycled: Vec<usize>,
-}

Fields

current: usizerecycled: Vec<usize>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

current: usizerecycled: Vec<usize>

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/ch9-log/os/task/id/struct.TaskUserRes.html b/ch9-log/os/task/id/struct.TaskUserRes.html index a24d16b4..857a3653 100644 --- a/ch9-log/os/task/id/struct.TaskUserRes.html +++ b/ch9-log/os/task/id/struct.TaskUserRes.html @@ -1,20 +1,24 @@ TaskUserRes in os::task::id - Rust -
-

Struct os::task::id::TaskUserRes

source · []
pub struct TaskUserRes {
+    
+    
+

Struct os::task::id::TaskUserRes

source · []
pub struct TaskUserRes {
     pub tid: usize,
     pub ustack_base: usize,
     pub process: Weak<ProcessControlBlock>,
-}

Fields

tid: usizeustack_base: usizeprocess: Weak<ProcessControlBlock>

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

tid: usizeustack_base: usizeprocess: Weak<ProcessControlBlock>

Implementations

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).

+

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/ch9-log/os/task/index.html b/ch9-log/os/task/index.html index e1a045eb..c03a4c5b 100644 --- a/ch9-log/os/task/index.html +++ b/ch9-log/os/task/index.html @@ -1,11 +1,13 @@ os::task - Rust -
-

Module os::task

source · []

Re-exports

-
pub use context::TaskContext;
pub use id::kstack_alloc;
pub use id::pid_alloc;
pub use id::KernelStack;
pub use id::PidHandle;
pub use manager::add_task;
pub use manager::pid2process;
pub use manager::remove_from_pid2process;
pub use processor::current_kstack_top;
pub use processor::current_process;
pub use processor::current_task;
pub use processor::current_trap_cx;
pub use processor::current_trap_cx_user_va;
pub use processor::current_user_token;
pub use processor::run_tasks;
pub use processor::schedule;
pub use processor::take_current_task;
pub use signal::SignalFlags;
pub use task::TaskControlBlock;
pub use task::TaskStatus;

Modules

-

Structs

+ +
+

Module os::task

source · []

Re-exports

+
pub use context::TaskContext;
pub use id::kstack_alloc;
pub use id::pid_alloc;
pub use id::KernelStack;
pub use id::PidHandle;
pub use id::IDLE_PID;
pub use manager::add_task;
pub use manager::pid2process;
pub use manager::remove_from_pid2process;
pub use processor::current_kstack_top;
pub use processor::current_process;
pub use processor::current_task;
pub use processor::current_trap_cx;
pub use processor::current_trap_cx_user_va;
pub use processor::current_user_token;
pub use processor::run_tasks;
pub use processor::schedule;
pub use processor::take_current_task;
pub use signal::SignalFlags;
pub use task::TaskControlBlock;
pub use task::TaskStatus;

Modules

+
context 🔒
id 🔒
manager 🔒
process 🔒
processor 🔒
signal 🔒
switch 🔒
task 🔒

Structs

Functions

+
\ No newline at end of file diff --git a/ch9-log/os/task/manager/fn.add_task.html b/ch9-log/os/task/manager/fn.add_task.html index bbd685ef..a0739ae2 100644 --- a/ch9-log/os/task/manager/fn.add_task.html +++ b/ch9-log/os/task/manager/fn.add_task.html @@ -1,6 +1,8 @@ add_task in os::task::manager - Rust -
-

Function os::task::manager::add_task

source · []
pub fn add_task(task: Arc<TaskControlBlock>)
+ +
+

Function os::task::manager::add_task

source · []
pub fn add_task(task: Arc<TaskControlBlock>)
\ No newline at end of file diff --git a/ch9-log/os/task/manager/fn.fetch_task.html b/ch9-log/os/task/manager/fn.fetch_task.html index 74d20120..72a3246f 100644 --- a/ch9-log/os/task/manager/fn.fetch_task.html +++ b/ch9-log/os/task/manager/fn.fetch_task.html @@ -1,6 +1,8 @@ fetch_task in os::task::manager - Rust -
pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
+ +
pub fn fetch_task() -> Option<Arc<TaskControlBlock>>
\ No newline at end of file diff --git a/ch9-log/os/task/manager/fn.insert_into_pid2process.html b/ch9-log/os/task/manager/fn.insert_into_pid2process.html index de388b70..73afff17 100644 --- a/ch9-log/os/task/manager/fn.insert_into_pid2process.html +++ b/ch9-log/os/task/manager/fn.insert_into_pid2process.html @@ -1,6 +1,8 @@ insert_into_pid2process in os::task::manager - Rust -
pub fn insert_into_pid2process(pid: usize, process: Arc<ProcessControlBlock>)
+ +
pub fn insert_into_pid2process(pid: usize, process: Arc<ProcessControlBlock>)
\ No newline at end of file diff --git a/ch9-log/os/task/manager/fn.pid2process.html b/ch9-log/os/task/manager/fn.pid2process.html index d995598f..ce22b0d8 100644 --- a/ch9-log/os/task/manager/fn.pid2process.html +++ b/ch9-log/os/task/manager/fn.pid2process.html @@ -1,6 +1,8 @@ pid2process in os::task::manager - Rust -
pub fn pid2process(pid: usize) -> Option<Arc<ProcessControlBlock>>
+ +
pub fn pid2process(pid: usize) -> Option<Arc<ProcessControlBlock>>
\ No newline at end of file diff --git a/ch9-log/os/task/manager/fn.remove_from_pid2process.html b/ch9-log/os/task/manager/fn.remove_from_pid2process.html index 3b5ca411..39b354c8 100644 --- a/ch9-log/os/task/manager/fn.remove_from_pid2process.html +++ b/ch9-log/os/task/manager/fn.remove_from_pid2process.html @@ -1,6 +1,8 @@ remove_from_pid2process in os::task::manager - Rust -
pub fn remove_from_pid2process(pid: usize)
+ +
pub fn remove_from_pid2process(pid: usize)
\ No newline at end of file diff --git a/ch9-log/os/task/manager/index.html b/ch9-log/os/task/manager/index.html index 2cbd1a5b..4662aae1 100644 --- a/ch9-log/os/task/manager/index.html +++ b/ch9-log/os/task/manager/index.html @@ -1,8 +1,10 @@ os::task::manager - Rust -
\ No newline at end of file diff --git a/ch9-log/os/task/manager/struct.PID2PCB.html b/ch9-log/os/task/manager/struct.PID2PCB.html index ec757ad0..68e5bc5b 100644 --- a/ch9-log/os/task/manager/struct.PID2PCB.html +++ b/ch9-log/os/task/manager/struct.PID2PCB.html @@ -1,20 +1,24 @@ PID2PCB in os::task::manager - Rust -
pub struct PID2PCB {
+    
+    
pub struct PID2PCB {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<BTreeMap<usize, Arc<ProcessControlBlock>>>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<BTreeMap<usize, Arc<ProcessControlBlock>>>>

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/ch9-log/os/task/manager/struct.TASK_MANAGER.html b/ch9-log/os/task/manager/struct.TASK_MANAGER.html index 1954ffe3..16502011 100644 --- a/ch9-log/os/task/manager/struct.TASK_MANAGER.html +++ b/ch9-log/os/task/manager/struct.TASK_MANAGER.html @@ -1,20 +1,24 @@ TASK_MANAGER in os::task::manager - Rust -
pub struct TASK_MANAGER {
+    
+    
pub struct TASK_MANAGER {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<TaskManager>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<TaskManager>>

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/ch9-log/os/task/manager/struct.TaskManager.html b/ch9-log/os/task/manager/struct.TaskManager.html index 06461f22..78cc2788 100644 --- a/ch9-log/os/task/manager/struct.TaskManager.html +++ b/ch9-log/os/task/manager/struct.TaskManager.html @@ -1,18 +1,22 @@ TaskManager in os::task::manager - Rust -
pub struct TaskManager {
+    
+    
pub struct TaskManager {
     ready_queue: VecDeque<Arc<TaskControlBlock>>,
-}

Fields

ready_queue: VecDeque<Arc<TaskControlBlock>>

Implementations

A simple FIFO scheduler.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

ready_queue: VecDeque<Arc<TaskControlBlock>>

Implementations

A simple FIFO scheduler.

+

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/ch9-log/os/task/process/index.html b/ch9-log/os/task/process/index.html index 90542358..7bc42d80 100644 --- a/ch9-log/os/task/process/index.html +++ b/ch9-log/os/task/process/index.html @@ -1,7 +1,9 @@ os::task::process - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/task/process/struct.ProcessControlBlock.html b/ch9-log/os/task/process/struct.ProcessControlBlock.html index f57ed16a..4076c321 100644 --- a/ch9-log/os/task/process/struct.ProcessControlBlock.html +++ b/ch9-log/os/task/process/struct.ProcessControlBlock.html @@ -1,20 +1,24 @@ ProcessControlBlock in os::task::process - Rust -
pub struct ProcessControlBlock {
+    
+    
pub struct ProcessControlBlock {
     pub pid: PidHandle,
     inner: UPIntrFreeCell<ProcessControlBlockInner>,
-}

Fields

pid: PidHandleinner: UPIntrFreeCell<ProcessControlBlockInner>

Implementations

Only support processes with a single thread.

-

Only support processes with a single thread.

-

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

pid: PidHandleinner: UPIntrFreeCell<ProcessControlBlockInner>

Implementations

Only support processes with a single thread.

+

Only support processes with a single thread.

+

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/ch9-log/os/task/process/struct.ProcessControlBlockInner.html b/ch9-log/os/task/process/struct.ProcessControlBlockInner.html index ea0fe5dc..a77e4f02 100644 --- a/ch9-log/os/task/process/struct.ProcessControlBlockInner.html +++ b/ch9-log/os/task/process/struct.ProcessControlBlockInner.html @@ -1,8 +1,10 @@ ProcessControlBlockInner in os::task::process - Rust -
pub struct ProcessControlBlockInner {
+    
+    
pub struct ProcessControlBlockInner {
     pub is_zombie: bool,
     pub memory_set: MemorySet,
     pub parent: Option<Weak<ProcessControlBlock>>,
@@ -15,14 +17,16 @@
     pub mutex_list: Vec<Option<Arc<dyn Mutex>>>,
     pub semaphore_list: Vec<Option<Arc<Semaphore>>>,
     pub condvar_list: Vec<Option<Arc<Condvar>>>,
-}

Fields

is_zombie: boolmemory_set: MemorySetparent: Option<Weak<ProcessControlBlock>>children: Vec<Arc<ProcessControlBlock>>exit_code: i32fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>signals: SignalFlagstasks: Vec<Option<Arc<TaskControlBlock>>>task_res_allocator: RecycleAllocatormutex_list: Vec<Option<Arc<dyn Mutex>>>semaphore_list: Vec<Option<Arc<Semaphore>>>condvar_list: Vec<Option<Arc<Condvar>>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

is_zombie: boolmemory_set: MemorySetparent: Option<Weak<ProcessControlBlock>>children: Vec<Arc<ProcessControlBlock>>exit_code: i32fd_table: Vec<Option<Arc<dyn File + Send + Sync>>>signals: SignalFlagstasks: Vec<Option<Arc<TaskControlBlock>>>task_res_allocator: RecycleAllocatormutex_list: Vec<Option<Arc<dyn Mutex>>>semaphore_list: Vec<Option<Arc<Semaphore>>>condvar_list: Vec<Option<Arc<Condvar>>>

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/ch9-log/os/task/processor/fn.current_kstack_top.html b/ch9-log/os/task/processor/fn.current_kstack_top.html index 22c8157d..f09e08dc 100644 --- a/ch9-log/os/task/processor/fn.current_kstack_top.html +++ b/ch9-log/os/task/processor/fn.current_kstack_top.html @@ -1,6 +1,8 @@ current_kstack_top in os::task::processor - Rust -
pub fn current_kstack_top() -> usize
+ +
pub fn current_kstack_top() -> usize
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.current_process.html b/ch9-log/os/task/processor/fn.current_process.html index eb429588..6ca2cf23 100644 --- a/ch9-log/os/task/processor/fn.current_process.html +++ b/ch9-log/os/task/processor/fn.current_process.html @@ -1,6 +1,8 @@ current_process in os::task::processor - Rust -
pub fn current_process() -> Arc<ProcessControlBlock>
+ +
pub fn current_process() -> Arc<ProcessControlBlock>
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.current_task.html b/ch9-log/os/task/processor/fn.current_task.html index f7622796..419443ae 100644 --- a/ch9-log/os/task/processor/fn.current_task.html +++ b/ch9-log/os/task/processor/fn.current_task.html @@ -1,6 +1,8 @@ current_task in os::task::processor - Rust -
pub fn current_task() -> Option<Arc<TaskControlBlock>>
+ +
pub fn current_task() -> Option<Arc<TaskControlBlock>>
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.current_trap_cx.html b/ch9-log/os/task/processor/fn.current_trap_cx.html index 5d7630b2..5e0a71d0 100644 --- a/ch9-log/os/task/processor/fn.current_trap_cx.html +++ b/ch9-log/os/task/processor/fn.current_trap_cx.html @@ -1,6 +1,8 @@ current_trap_cx in os::task::processor - Rust -
pub fn current_trap_cx() -> &'static mut TrapContext
+ +
pub fn current_trap_cx() -> &'static mut TrapContext
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.current_trap_cx_user_va.html b/ch9-log/os/task/processor/fn.current_trap_cx_user_va.html index 4c849b25..25db9fda 100644 --- a/ch9-log/os/task/processor/fn.current_trap_cx_user_va.html +++ b/ch9-log/os/task/processor/fn.current_trap_cx_user_va.html @@ -1,6 +1,8 @@ current_trap_cx_user_va in os::task::processor - Rust -
pub fn current_trap_cx_user_va() -> usize
+ +
pub fn current_trap_cx_user_va() -> usize
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.current_user_token.html b/ch9-log/os/task/processor/fn.current_user_token.html index c204dfa5..3d4fc45c 100644 --- a/ch9-log/os/task/processor/fn.current_user_token.html +++ b/ch9-log/os/task/processor/fn.current_user_token.html @@ -1,6 +1,8 @@ current_user_token in os::task::processor - Rust -
pub fn current_user_token() -> usize
+ +
pub fn current_user_token() -> usize
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.run_tasks.html b/ch9-log/os/task/processor/fn.run_tasks.html index 120b2d25..a6e069f4 100644 --- a/ch9-log/os/task/processor/fn.run_tasks.html +++ b/ch9-log/os/task/processor/fn.run_tasks.html @@ -1,6 +1,8 @@ run_tasks in os::task::processor - Rust -
pub fn run_tasks()
+ +
pub fn run_tasks()
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.schedule.html b/ch9-log/os/task/processor/fn.schedule.html index b07965e8..5f328dc7 100644 --- a/ch9-log/os/task/processor/fn.schedule.html +++ b/ch9-log/os/task/processor/fn.schedule.html @@ -1,6 +1,8 @@ schedule in os::task::processor - Rust -
pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
+ +
pub fn schedule(switched_task_cx_ptr: *mut TaskContext)
\ No newline at end of file diff --git a/ch9-log/os/task/processor/fn.take_current_task.html b/ch9-log/os/task/processor/fn.take_current_task.html index df1cc109..cfdf6144 100644 --- a/ch9-log/os/task/processor/fn.take_current_task.html +++ b/ch9-log/os/task/processor/fn.take_current_task.html @@ -1,6 +1,8 @@ take_current_task in os::task::processor - Rust -
pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
+ +
pub fn take_current_task() -> Option<Arc<TaskControlBlock>>
\ No newline at end of file diff --git a/ch9-log/os/task/processor/index.html b/ch9-log/os/task/processor/index.html index e42b037e..f5069955 100644 --- a/ch9-log/os/task/processor/index.html +++ b/ch9-log/os/task/processor/index.html @@ -1,8 +1,10 @@ os::task::processor - Rust -
\ No newline at end of file diff --git a/ch9-log/os/task/processor/struct.PROCESSOR.html b/ch9-log/os/task/processor/struct.PROCESSOR.html index 0f1cb9c6..2d08543d 100644 --- a/ch9-log/os/task/processor/struct.PROCESSOR.html +++ b/ch9-log/os/task/processor/struct.PROCESSOR.html @@ -1,20 +1,24 @@ PROCESSOR in os::task::processor - Rust -
pub struct PROCESSOR {
+    
+    
pub struct PROCESSOR {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<Processor>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<Processor>>

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/ch9-log/os/task/processor/struct.Processor.html b/ch9-log/os/task/processor/struct.Processor.html index 9fc6cc87..48ca87af 100644 --- a/ch9-log/os/task/processor/struct.Processor.html +++ b/ch9-log/os/task/processor/struct.Processor.html @@ -1,18 +1,22 @@ Processor in os::task::processor - Rust -
pub struct Processor {
+    
+    
pub struct Processor {
     current: Option<Arc<TaskControlBlock>>,
     idle_task_cx: TaskContext,
-}

Fields

current: Option<Arc<TaskControlBlock>>idle_task_cx: TaskContext

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

current: Option<Arc<TaskControlBlock>>idle_task_cx: TaskContext

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/ch9-log/os/task/signal/index.html b/ch9-log/os/task/signal/index.html index b3346870..318bb245 100644 --- a/ch9-log/os/task/signal/index.html +++ b/ch9-log/os/task/signal/index.html @@ -1,7 +1,9 @@ os::task::signal - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/task/signal/struct.SignalFlags.html b/ch9-log/os/task/signal/struct.SignalFlags.html index c994d201..aa8a6398 100644 --- a/ch9-log/os/task/signal/struct.SignalFlags.html +++ b/ch9-log/os/task/signal/struct.SignalFlags.html @@ -1,53 +1,55 @@ SignalFlags in os::task::signal - Rust -

Fields

bits: u32

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 representation contains bits that do not correspond to a flag.

-

Convert from underlying bit representation, dropping any bits +

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

-

Convert from underlying bit representation, preserving all +

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

-
Safety
+
Safety

The caller of the bitflags! macro can chose to allow or 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 +

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 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.

+

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 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.

+

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 +

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 @@ -55,65 +57,67 @@ both. Equivalently, it contains the flags present in exactly one of the sets self and other.

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

-

Returns the complement of this set of flags.

+

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)

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 +

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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).

+

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/ch9-log/os/task/struct.INITPROC.html b/ch9-log/os/task/struct.INITPROC.html index 518fa4ae..83a7fe13 100644 --- a/ch9-log/os/task/struct.INITPROC.html +++ b/ch9-log/os/task/struct.INITPROC.html @@ -1,19 +1,23 @@ INITPROC in os::task - Rust -
-

Struct os::task::INITPROC

source · []
pub struct INITPROC {
+    
+    
+

Struct os::task::INITPROC

source · []
pub struct INITPROC {
     __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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

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).

+

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/ch9-log/os/task/switch/fn.__switch.html b/ch9-log/os/task/switch/fn.__switch.html index 7d5e620d..71540423 100644 --- a/ch9-log/os/task/switch/fn.__switch.html +++ b/ch9-log/os/task/switch/fn.__switch.html @@ -1,6 +1,8 @@ __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
)
+ +
+

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/ch9-log/os/task/switch/index.html b/ch9-log/os/task/switch/index.html index c7c3e27b..108eea14 100644 --- a/ch9-log/os/task/switch/index.html +++ b/ch9-log/os/task/switch/index.html @@ -1,7 +1,9 @@ os::task::switch - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/task/task/enum.TaskStatus.html b/ch9-log/os/task/task/enum.TaskStatus.html index 8c32ecbd..ba876d74 100644 --- a/ch9-log/os/task/task/enum.TaskStatus.html +++ b/ch9-log/os/task/task/enum.TaskStatus.html @@ -1,27 +1,31 @@ TaskStatus in os::task::task - Rust -
pub enum TaskStatus {
+    
+    
pub enum TaskStatus {
     Ready,
     Running,
     Blocking,
-}

Variants

Ready

Running

Blocking

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 +}

Variants

Ready

Running

Blocking

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/task/task/index.html b/ch9-log/os/task/task/index.html index 504e5aeb..e60abda3 100644 --- a/ch9-log/os/task/task/index.html +++ b/ch9-log/os/task/task/index.html @@ -1,8 +1,10 @@ os::task::task - Rust -
\ No newline at end of file diff --git a/ch9-log/os/task/task/struct.TaskControlBlock.html b/ch9-log/os/task/task/struct.TaskControlBlock.html index aeae1a42..1438a8e3 100644 --- a/ch9-log/os/task/task/struct.TaskControlBlock.html +++ b/ch9-log/os/task/task/struct.TaskControlBlock.html @@ -1,19 +1,23 @@ TaskControlBlock in os::task::task - Rust -
pub struct TaskControlBlock {
+    
+    
pub struct TaskControlBlock {
     pub process: Weak<ProcessControlBlock>,
     pub kstack: KernelStack,
     pub inner: UPIntrFreeCell<TaskControlBlockInner>,
-}

Fields

process: Weak<ProcessControlBlock>kstack: KernelStackinner: UPIntrFreeCell<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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

process: Weak<ProcessControlBlock>kstack: KernelStackinner: UPIntrFreeCell<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).

+

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/ch9-log/os/task/task/struct.TaskControlBlockInner.html b/ch9-log/os/task/task/struct.TaskControlBlockInner.html index cd782d69..f8b7f86d 100644 --- a/ch9-log/os/task/task/struct.TaskControlBlockInner.html +++ b/ch9-log/os/task/task/struct.TaskControlBlockInner.html @@ -1,21 +1,25 @@ TaskControlBlockInner in os::task::task - Rust -
pub struct TaskControlBlockInner {
+    
+    
pub struct TaskControlBlockInner {
     pub res: Option<TaskUserRes>,
     pub trap_cx_ppn: PhysPageNum,
     pub task_cx: TaskContext,
     pub task_status: TaskStatus,
     pub exit_code: Option<i32>,
-}

Fields

res: Option<TaskUserRes>trap_cx_ppn: PhysPageNumtask_cx: TaskContexttask_status: TaskStatusexit_code: Option<i32>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

res: Option<TaskUserRes>trap_cx_ppn: PhysPageNumtask_cx: TaskContexttask_status: TaskStatusexit_code: Option<i32>

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/ch9-log/os/timer/constant.MSEC_PER_SEC.html b/ch9-log/os/timer/constant.MSEC_PER_SEC.html index 3c422973..819371c1 100644 --- a/ch9-log/os/timer/constant.MSEC_PER_SEC.html +++ b/ch9-log/os/timer/constant.MSEC_PER_SEC.html @@ -1,6 +1,8 @@ MSEC_PER_SEC in os::timer - Rust -
-

Constant os::timer::MSEC_PER_SEC

source · []
const MSEC_PER_SEC: usize = 1000;
+ +
+

Constant os::timer::MSEC_PER_SEC

source · []
const MSEC_PER_SEC: usize = 1000;
\ No newline at end of file diff --git a/ch9-log/os/timer/constant.TICKS_PER_SEC.html b/ch9-log/os/timer/constant.TICKS_PER_SEC.html index 296cfd51..65ff446c 100644 --- a/ch9-log/os/timer/constant.TICKS_PER_SEC.html +++ b/ch9-log/os/timer/constant.TICKS_PER_SEC.html @@ -1,6 +1,8 @@ TICKS_PER_SEC in os::timer - Rust -
const TICKS_PER_SEC: usize = 100;
+ +
const TICKS_PER_SEC: usize = 100;
\ No newline at end of file diff --git a/ch9-log/os/timer/fn.add_timer.html b/ch9-log/os/timer/fn.add_timer.html index 133c0a66..ac02daac 100644 --- a/ch9-log/os/timer/fn.add_timer.html +++ b/ch9-log/os/timer/fn.add_timer.html @@ -1,6 +1,8 @@ add_timer in os::timer - Rust -
-

Function os::timer::add_timer

source · []
pub fn add_timer(expire_ms: usize, task: Arc<TaskControlBlock>)
+ +
+

Function os::timer::add_timer

source · []
pub fn add_timer(expire_ms: usize, task: Arc<TaskControlBlock>)
\ No newline at end of file diff --git a/ch9-log/os/timer/fn.check_timer.html b/ch9-log/os/timer/fn.check_timer.html index 81338d52..9492418f 100644 --- a/ch9-log/os/timer/fn.check_timer.html +++ b/ch9-log/os/timer/fn.check_timer.html @@ -1,6 +1,8 @@ check_timer in os::timer - Rust -
-

Function os::timer::check_timer

source · []
pub fn check_timer()
+ +
+

Function os::timer::check_timer

source · []
pub fn check_timer()
\ No newline at end of file diff --git a/ch9-log/os/timer/fn.get_time.html b/ch9-log/os/timer/fn.get_time.html index b217a3fb..052a1cfd 100644 --- a/ch9-log/os/timer/fn.get_time.html +++ b/ch9-log/os/timer/fn.get_time.html @@ -1,6 +1,8 @@ get_time in os::timer - Rust -
-

Function os::timer::get_time

source · []
pub fn get_time() -> usize
+ +
+

Function os::timer::get_time

source · []
pub fn get_time() -> usize
\ No newline at end of file diff --git a/ch9-log/os/timer/fn.get_time_ms.html b/ch9-log/os/timer/fn.get_time_ms.html index 1749b65b..24cd029c 100644 --- a/ch9-log/os/timer/fn.get_time_ms.html +++ b/ch9-log/os/timer/fn.get_time_ms.html @@ -1,6 +1,8 @@ get_time_ms in os::timer - Rust -
-

Function os::timer::get_time_ms

source · []
pub fn get_time_ms() -> usize
+ +
+

Function os::timer::get_time_ms

source · []
pub fn get_time_ms() -> usize
\ No newline at end of file diff --git a/ch9-log/os/timer/fn.set_next_trigger.html b/ch9-log/os/timer/fn.set_next_trigger.html index f306d03d..4513e3e2 100644 --- a/ch9-log/os/timer/fn.set_next_trigger.html +++ b/ch9-log/os/timer/fn.set_next_trigger.html @@ -1,6 +1,8 @@ set_next_trigger in os::timer - Rust -
pub fn set_next_trigger()
+ +
pub fn set_next_trigger()
\ No newline at end of file diff --git a/ch9-log/os/timer/index.html b/ch9-log/os/timer/index.html index 8a0c31fe..e5b7b55c 100644 --- a/ch9-log/os/timer/index.html +++ b/ch9-log/os/timer/index.html @@ -1,9 +1,11 @@ os::timer - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/timer/struct.TIMERS.html b/ch9-log/os/timer/struct.TIMERS.html index 5b2865df..1148ae6c 100644 --- a/ch9-log/os/timer/struct.TIMERS.html +++ b/ch9-log/os/timer/struct.TIMERS.html @@ -1,20 +1,24 @@ TIMERS in os::timer - Rust -
-

Struct os::timer::TIMERS

source · []
struct TIMERS {
+    
+    
+

Struct os::timer::TIMERS

source · []
struct TIMERS {
     __private_field: (),
-}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<BinaryHeap<TimerCondVar>>>

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

__private_field: ()

Methods from Deref<Target = UPIntrFreeCell<BinaryHeap<TimerCondVar>>>

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/ch9-log/os/timer/struct.TimerCondVar.html b/ch9-log/os/timer/struct.TimerCondVar.html index 9c75a56e..71d6a6a8 100644 --- a/ch9-log/os/timer/struct.TimerCondVar.html +++ b/ch9-log/os/timer/struct.TimerCondVar.html @@ -1,32 +1,36 @@ TimerCondVar in os::timer - Rust -
pub struct TimerCondVar {
+    
+    
pub struct TimerCondVar {
     pub expire_ms: usize,
     pub task: Arc<TaskControlBlock>,
-}

Fields

expire_ms: usizetask: Arc<TaskControlBlock>

Trait Implementations

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 +}

Fields

expire_ms: usizetask: Arc<TaskControlBlock>

Trait Implementations

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 <= +

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 >= +

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+

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/ch9-log/os/trap/context/index.html b/ch9-log/os/trap/context/index.html index 33efe7c8..83286fbd 100644 --- a/ch9-log/os/trap/context/index.html +++ b/ch9-log/os/trap/context/index.html @@ -1,7 +1,9 @@ os::trap::context - Rust -
+ +
\ No newline at end of file diff --git a/ch9-log/os/trap/context/struct.TrapContext.html b/ch9-log/os/trap/context/struct.TrapContext.html index fe6763d4..a51745d6 100644 --- a/ch9-log/os/trap/context/struct.TrapContext.html +++ b/ch9-log/os/trap/context/struct.TrapContext.html @@ -1,23 +1,27 @@ TrapContext in os::trap::context - Rust -
#[repr(C)]
pub struct TrapContext { + +
#[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, -}

Fields

x: [usize; 32]sstatus: Sstatussepc: usizekernel_satp: usizekernel_sp: usizetrap_handler: usize

Implementations

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

-

Performs the conversion.

-

Performs the conversion.

-

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.

-
+}

Fields

x: [usize; 32]sstatus: Sstatussepc: usizekernel_satp: usizekernel_sp: usizetrap_handler: usize

Implementations

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).

+

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/ch9-log/os/trap/fn.disable_supervisor_interrupt.html b/ch9-log/os/trap/fn.disable_supervisor_interrupt.html index 30915bc0..35b02dd6 100644 --- a/ch9-log/os/trap/fn.disable_supervisor_interrupt.html +++ b/ch9-log/os/trap/fn.disable_supervisor_interrupt.html @@ -1,6 +1,8 @@ disable_supervisor_interrupt in os::trap - Rust -
fn disable_supervisor_interrupt()
+ +
fn disable_supervisor_interrupt()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.enable_supervisor_interrupt.html b/ch9-log/os/trap/fn.enable_supervisor_interrupt.html index 0a4d7e06..495d4e5b 100644 --- a/ch9-log/os/trap/fn.enable_supervisor_interrupt.html +++ b/ch9-log/os/trap/fn.enable_supervisor_interrupt.html @@ -1,6 +1,8 @@ enable_supervisor_interrupt in os::trap - Rust -
fn enable_supervisor_interrupt()
+ +
fn enable_supervisor_interrupt()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.enable_timer_interrupt.html b/ch9-log/os/trap/fn.enable_timer_interrupt.html index 5369cd76..3d264ce8 100644 --- a/ch9-log/os/trap/fn.enable_timer_interrupt.html +++ b/ch9-log/os/trap/fn.enable_timer_interrupt.html @@ -1,6 +1,8 @@ enable_timer_interrupt in os::trap - Rust -
pub fn enable_timer_interrupt()
+ +
pub fn enable_timer_interrupt()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.init.html b/ch9-log/os/trap/fn.init.html index 9c003952..fa802389 100644 --- a/ch9-log/os/trap/fn.init.html +++ b/ch9-log/os/trap/fn.init.html @@ -1,6 +1,8 @@ init in os::trap - Rust -
-

Function os::trap::init

source · []
pub fn init()
+ +
+

Function os::trap::init

source · []
pub fn init()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.set_kernel_trap_entry.html b/ch9-log/os/trap/fn.set_kernel_trap_entry.html index e5335492..0b51114d 100644 --- a/ch9-log/os/trap/fn.set_kernel_trap_entry.html +++ b/ch9-log/os/trap/fn.set_kernel_trap_entry.html @@ -1,6 +1,8 @@ set_kernel_trap_entry in os::trap - Rust -
fn set_kernel_trap_entry()
+ +
fn set_kernel_trap_entry()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.set_user_trap_entry.html b/ch9-log/os/trap/fn.set_user_trap_entry.html index 4cea44da..b862fa3f 100644 --- a/ch9-log/os/trap/fn.set_user_trap_entry.html +++ b/ch9-log/os/trap/fn.set_user_trap_entry.html @@ -1,6 +1,8 @@ set_user_trap_entry in os::trap - Rust -
fn set_user_trap_entry()
+ +
fn set_user_trap_entry()
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.trap_from_kernel.html b/ch9-log/os/trap/fn.trap_from_kernel.html index 2fe8534c..eac31ad0 100644 --- a/ch9-log/os/trap/fn.trap_from_kernel.html +++ b/ch9-log/os/trap/fn.trap_from_kernel.html @@ -1,7 +1,9 @@ trap_from_kernel in os::trap - Rust -
#[no_mangle]
-pub fn trap_from_kernel(_trap_cx: &TrapContext)
+ +
#[no_mangle]
+pub fn trap_from_kernel(_trap_cx: &TrapContext)
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.trap_handler.html b/ch9-log/os/trap/fn.trap_handler.html index eb45b417..0bd5bb7b 100644 --- a/ch9-log/os/trap/fn.trap_handler.html +++ b/ch9-log/os/trap/fn.trap_handler.html @@ -1,7 +1,9 @@ trap_handler in os::trap - Rust -
-

Function os::trap::trap_handler

source · []
#[no_mangle]
-pub fn trap_handler() -> !
+ +
+

Function os::trap::trap_handler

source · []
#[no_mangle]
+pub fn trap_handler() -> !
\ No newline at end of file diff --git a/ch9-log/os/trap/fn.trap_return.html b/ch9-log/os/trap/fn.trap_return.html index 093fd8e7..498a862f 100644 --- a/ch9-log/os/trap/fn.trap_return.html +++ b/ch9-log/os/trap/fn.trap_return.html @@ -1,7 +1,9 @@ trap_return in os::trap - Rust -
-

Function os::trap::trap_return

source · []
#[no_mangle]
-pub fn trap_return() -> !
+ +
+

Function os::trap::trap_return

source · []
#[no_mangle]
+pub fn trap_return() -> !
\ No newline at end of file diff --git a/ch9-log/os/trap/index.html b/ch9-log/os/trap/index.html index 3275cc44..3d4d5ef9 100644 --- a/ch9-log/os/trap/index.html +++ b/ch9-log/os/trap/index.html @@ -1,9 +1,11 @@ os::trap - Rust -
\ No newline at end of file diff --git a/ch9-log/rustdoc.css b/ch9-log/rustdoc.css index deed2f8a..674a5af6 100644 --- a/ch9-log/rustdoc.css +++ b/ch9-log/rustdoc.css @@ -1 +1 @@ - @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.4 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.4rem;}h3{font-size:1.3rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{margin:0;padding:0;}.main-heading{display:flex;border-bottom:1px dashed #DDDDDD;padding-bottom:6px;margin-bottom:15px;padding-left:1px;}.main-heading a:hover{text-decoration:underline;}#toggle-all-docs{text-decoration:none;}h2,.top-doc h3,.top-doc h4,.sidebar .others h3{border-bottom:1px solid;}h3.code-header{font-size:1.1rem;}h4.code-header{font-size:1rem;}h3.code-header,h4.code-header{font-weight:600;border-bottom-style:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,.out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}.content ul.crate a.crate{font-size:1rem/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{width:200px;overflow-y:scroll;position:sticky;min-width:200px;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(:first-child){transition:opacity 0.5s,visibility 0.2s;opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*{opacity:1;visibility:visible;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.hidden{display:none !important;}.logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.logo-container>img{height:100px;width:100px;}.sidebar .location{border:1px solid;font-size:1.0625rem;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:0.9375rem;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;overflow-wrap:anywhere;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:0.875rem;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:1.0625rem;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.3rem;}.top-doc .docblock h3{font-size:1.15rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.1rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.95rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;margin-left:auto;margin-right:0;font-size:1.15rem;padding:0 0 0 12px;font-weight:normal;float:right;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:break-word;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;overflow-wrap:normal;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:0.81rem;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:1.5625rem;position:absolute;top:-6px;left:-19px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;}nav:not(.sidebar){flex-grow:1;border-bottom:1px solid;padding-bottom:10px;margin-bottom:25px;}.source nav:not(.sidebar).sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:1.0625rem;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;max-width:960px;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}.search-results-title{display:inline;}#search-settings{font-size:1.5rem;font-weight:500;margin-bottom:20px;}#crate-search{min-width:115px;margin-top:5px;margin-left:0.2em;padding-left:0.3em;padding-right:23px;border:0;border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:1.0625rem;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{padding:3px;margin-bottom:5px;font-size:0.9rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.2rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.8rem;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.impl .srclink{font-size:1.0625rem;}.rightside{float:right;}.has-srclink{font-size:1rem;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.3rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.code-attribute{font-weight:300;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;margin-right:5px;}h3.variant{font-weight:600;font-size:1.1rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.top-doc .docblock>.section-header:first-child{margin-left:15px;}.top-doc .docblock>.section-header:first-child:hover>a:before{left:-10px;}.docblock>.section-header:first-child{margin-top:0;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.2rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-34px;top:9px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;font-size:16px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:16px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);overflow-wrap:normal;}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.1875rem;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:1.0625rem;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.rustdoc.source .sidebar{transition:width .5s;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){body{padding-top:0px;}main{padding-left:15px;padding-top:0px;}#theme-picker{display:none;width:0;}.rustdoc{flex-direction:column;}.rustdoc:not(.source)>.sidebar{width:100%;height:45px;min-height:40px;max-height:45px;margin:0;padding:0 15px;position:static;z-index:11;overflow-y:hidden;}.rustdoc.source>.sidebar{position:fixed;top:0;left:0;margin:0;z-index:11;width:0;}.sidebar.mobile{position:sticky !important;top:0;left:0;width:100%;margin-left:0;background-color:rgba(0,0,0,0);}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:1.5rem;}.sidebar .location:empty{padding:0;}.rustdoc:not(.source) .sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;top:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}.source nav:not(.sidebar).sub{margin-left:32px;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.theme-picker{z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:1.3125rem;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{border-radius:4px;border:0;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock table code{overflow-wrap:normal;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;} \ No newline at end of file + @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{margin:0;padding:0;}.main-heading{display:flex;flex-wrap:wrap;justify-content:space-between;padding-bottom:6px;margin-bottom:15px;}.main-heading a:hover{text-decoration:underline;}#toggle-all-docs{text-decoration:none;}h2,.top-doc h3,.top-doc h4{border-bottom:1px solid;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;border-bottom-style:none;margin:0;padding:0;margin-top:0.6em;margin-bottom:0.4em;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,.out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}button{padding:1px 6px;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:1rem;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{font-size:0.875rem;width:250px;min-width:200px;overflow-y:scroll;position:sticky;height:100vh;top:0;left:0;}.sidebar-elems,.sidebar>.location{padding-left:24px;}.sidebar .location{overflow-wrap:anywhere;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(#sidebar-toggle){opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*:not(#sidebar-toggle){opacity:1;visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.hidden{display:none !important;}.sidebar .logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.block{padding:0;}.block ul,.block li{padding:0;margin:0;list-style:none;}.block a,h2.location a{display:block;padding:0.25rem;margin-left:-0.25rem;text-overflow:ellipsis;overflow:hidden;}.sidebar h2{border-bottom:none;font-weight:500;padding:0;margin:0;margin-top:0.7rem;margin-bottom:0.7rem;}.sidebar h3{font-size:1.125rem;font-weight:500;padding:0;margin:0;}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;}.mobile-topbar{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.line-numbers{text-align:right;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}.search-loading{text-align:center;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;font-size:1.125rem;font-weight:normal;float:right;}.method>.code-header,.trait-impl>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:break-word;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.125rem;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1rem;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.875rem;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.item-info{display:block;}.content .item-info code{font-size:0.875rem;}.content .item-info{position:relative;margin-left:24px;}.sub-variant>div>.item-info{margin-top:initial;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;margin-left:0;}nav.sub{flex-grow:1;margin-bottom:25px;}.source nav.sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.block a.current.crate{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.25rem;}.search-container{position:relative;display:flex;height:34px;}.search-container>*{height:100%;}.search-results-title{display:inline;}#search-settings{font-size:1.5rem;font-weight:500;margin-bottom:20px;}#crate-search{min-width:115px;margin-top:5px;margin-left:0.25em;padding-left:0.3125em;padding-right:23px;border:0;border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container{margin-top:4px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:1px solid;border-radius:2px;padding:8px;font-size:1rem;transition:border-color 300ms ease;width:100%;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:inline-block;}.stab{padding:3px;margin-bottom:5px;font-size:0.875rem;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.25rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:0.875rem;line-height:1.2;margin-bottom:0;margin-left:0.3125em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-weight:normal;font-size:1rem;}.rightside{float:right;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;}.example-wrap:hover .test-arrow{visibility:visible;}a.test-arrow:hover{text-decoration:none;}.code-attribute{font-weight:300;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:1.25rem;}h3.variant{font-weight:600;font-size:1.125rem;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1rem;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:1rem;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:1.25rem;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:1rem;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:1.1875rem;font-weight:600;display:block;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:1.25rem;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:1.125rem;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:1rem;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-38px;top:4px;}.theme-picker button{outline:none;}#settings-menu,#help-button{margin-left:4px;outline:none;}#theme-picker,#copy-path{height:34px;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:5px;width:33px;border:1px solid;border-radius:2px;cursor:pointer;}#help-button{font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:20px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);overflow-wrap:normal;}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:1rem;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:1.125rem;display:block;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.625rem;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:1rem;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:16px;height:16px;background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{padding-top:0px;display:block;}main{padding-left:15px;padding-top:0px;}.rustdoc,.main-heading{flex-direction:column;}.content .out-of-band{text-align:left;margin-left:initial;padding:initial;}.content .out-of-band .since::before{content:"Since ";}#copy-path{display:none;}.sidebar .sidebar-logo,.sidebar .location{display:none;}.sidebar-elems{margin-top:1em;}.sidebar{position:fixed;top:45px;left:-1000px;margin-left:0;background-color:rgba(0,0,0,0);margin:0;padding:0;z-index:11;height:calc(100vh - 45px);}.source main,.source .sidebar{top:0;padding:0;}.sidebar.shown,.sidebar.expanded,.sidebar:focus-within{left:0;}.rustdoc.source>.sidebar{position:fixed;margin:0;z-index:11;width:0;}.mobile-topbar .location a{padding:0;margin:0;}.mobile-topbar .location{border:none;padding:0;margin:auto 0.5em auto auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:24px;}.mobile-topbar .logo-container{max-height:45px;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin-left:20px;margin-top:5px;margin-bottom:5px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.source .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;}.source nav:not(.sidebar).sub{margin-left:32px;}#theme-picker{display:none;width:0;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}details.rustdoc-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,#main-content>details.rustdoc-toggle:not(.top-doc)>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}#crate-search{border-radius:4px;border:0;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.method-toggle summary,.implementors-toggle summary,.impl{margin-bottom:0.75em;}.method-toggle[open]{margin-bottom:2em;}.implementors-toggle[open]{margin-bottom:2em;}#trait-implementations-list .method-toggle,#synthetic-implementations-list .method-toggle,#blanket-implementations-list .method-toggle{margin-bottom:1em;}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/ch9-log/search-index.js b/ch9-log/search-index.js index 88392591..15799914 100644 --- a/ch9-log/search-index.js +++ b/ch9-log/search-index.js @@ -1,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"os":{"doc":"","t":[3,12,0,11,11,5,0,0,11,0,11,0,11,14,14,0,0,14,14,5,0,0,0,0,0,0,11,11,11,6,17,6,17,17,17,5,5,17,17,17,17,17,17,17,17,3,3,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,0,0,0,3,12,5,11,11,11,11,11,11,11,11,0,3,17,3,12,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,5,5,5,11,8,3,12,11,11,11,11,10,11,0,10,11,11,11,10,18,18,18,18,3,3,3,3,3,3,18,18,3,18,18,3,12,12,12,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,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,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,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,12,12,12,12,12,12,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,13,3,13,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,8,0,0,0,10,10,0,10,10,17,0,0,0,0,0,0,17,3,6,11,12,11,11,11,5,11,11,11,11,12,11,11,11,3,17,3,3,12,11,5,12,12,11,11,11,11,11,11,12,11,11,11,11,11,5,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,8,10,10,10,6,3,11,11,12,11,11,11,12,12,11,11,11,11,12,12,11,11,11,11,11,11,17,17,6,3,13,3,4,17,13,17,17,17,17,17,6,17,3,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,12,12,11,12,11,11,11,11,11,11,11,12,11,12,11,11,12,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,3,12,12,12,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,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,13,13,13,3,3,17,4,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,5,11,11,11,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,12,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,5,0,0,0,5,0,0,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,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,0,0,0,0,3,3,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,12,11,8,3,3,3,11,11,11,11,11,11,11,11,11,12,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,12,3,3,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,12,3,3,3,3,3,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,12,12,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,0,0,0,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,12,5,5,5,11,11,5,0,5,11,5,11,0,11,0,0,0,0,5,0,0,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,12,12,3,3,3,3,3,3,12,12,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,5,5,11,11,5,12,11,12,12,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,11,3,3,3,12,12,11,5,11,11,11,11,11,11,11,11,11,5,11,11,11,5,11,11,11,11,5,12,5,11,11,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,12,12,11,11,12,12,11,11,11,11,11,11,12,11,11,11,12,12,12,11,12,12,12,12,12,12,11,11,11,11,11,11,11,3,3,12,11,11,11,11,11,12,5,5,5,5,5,5,11,11,11,11,12,11,11,11,5,5,11,5,11,11,11,11,11,11,18,18,18,18,18,3,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,11,11,11,11,11,11,11,11,11,5,13,13,13,3,3,4,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,12,11,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,17,17,3,3,12,5,11,11,11,11,5,11,11,11,12,11,11,5,5,11,11,11,5,12,11,11,11,11,11,11,0,5,5,5,5,5,5,5,5,5,3,11,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["DEV_NON_BLOCKING_ACCESS","__private_field","board","borrow","borrow_mut","clear_bss","config","console","deref","drivers","from","fs","into","kprint","kprintln","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","try_from","try_into","type_id","BlockDeviceImpl","CLOCK_FREQ","CharDeviceImpl","MMIO","VIRT_PLIC","VIRT_UART","device_init","irq_handler","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT_BASE","USER_STACK_SIZE","Kstdout","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","kprint","print","try_from","try_from","try_into","try_into","type_id","type_id","write_str","write_str","block","chardev","plic","BLOCK_DEVICE","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","try_from","try_into","type_id","virtio_blk","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","__private_field","borrow","borrow","borrow_mut","borrow_mut","condvars","deref","from","from","handle_irq","into","into","new","read_block","try_from","try_from","try_into","try_into","type_id","type_id","virtio_blk","virtio_dma_alloc","virtio_dma_dealloc","virtio_phys_to_virt","virtio_virt_to_phys","write_block","CharDevice","UART","__private_field","borrow","borrow_mut","deref","from","handle_irq","into","ns16550a","read","try_from","try_into","type_id","write","AUX_OUTPUT1","AUX_OUTPUT2","DATA_AVAILABLE","DATA_TERMINAL_READY","IER","LSR","MCR","NS16550a","NS16550aInner","NS16550aRaw","REQUEST_TO_SEND","RX_AVALIABLE","ReadWithoutDLAB","THR_EMPTY","TX_EMPTY","WriteWithoutDLAB","_padding0","_padding1","_padding1","_padding2","all","all","all","base_addr","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bits","bits","bits","bits","bits","bits","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","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_into","clone_into","clone_into","cmp","cmp","cmp","complement","complement","complement","condvar","contains","contains","contains","difference","difference","difference","empty","empty","empty","eq","eq","eq","extend","extend","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_bits","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_bits_truncate","from_bits_unchecked","from_bits_unchecked","from_bits_unchecked","from_iter","from_iter","from_iter","handle_irq","hash","hash","hash","ier","ier","iir","init","inner","insert","insert","insert","intersection","intersection","intersection","intersects","intersects","intersects","into","into","into","into","into","into","into","into","is_all","is_all","is_all","is_empty","is_empty","is_empty","lcr","lcr","lsr","lsr","mcr","mcr","ne","ne","ne","new","new","not","not","not","ns16550a","partial_cmp","partial_cmp","partial_cmp","rbr","read","read","read_buffer","read_end","remove","remove","remove","set","set","set","sub","sub","sub","sub_assign","sub_assign","sub_assign","symmetric_difference","symmetric_difference","symmetric_difference","thr","to_owned","to_owned","to_owned","toggle","toggle","toggle","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","union","union","union","write","write","write_end","IntrTargetPriority","Machine","PLIC","Supervisor","base_addr","borrow","borrow","borrow_mut","borrow_mut","claim","claim_comp_ptr_of_hart_with_priority","clone","clone_into","complete","disable","enable","enable_ptr","from","from","get_priority","get_threshold","hart_id_with_priority","into","into","new","priority_ptr","set_priority","set_threshold","supported_number","threshold_ptr_of_hart_with_priority","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","File","easy_fs","inode","pipe","read","readable","stdio","writable","write","BLOCK_SZ","bitmap","block_cache","block_dev","efs","layout","vfs","BLOCK_BITS","Bitmap","BitmapBlock","alloc","blocks","borrow","borrow_mut","dealloc","decomposition","from","into","maximum","new","start_block_id","try_from","try_into","type_id","BLOCK_CACHE_MANAGER","BLOCK_CACHE_SIZE","BlockCache","BlockCacheManager","__private_field","addr_of_offset","block_cache_sync_all","block_device","block_id","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cache","deref","drop","from","from","from","get_block_cache","get_block_cache","get_mut","get_ref","into","into","into","modified","modify","new","new","queue","read","sync","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","BlockDevice","handle_irq","read_block","write_block","DataBlock","EasyFileSystem","alloc_data","alloc_inode","block_device","borrow","borrow_mut","create","data_area_start_block","data_bitmap","dealloc_data","from","get_data_block_id","get_disk_inode_pos","inode_area_start_block","inode_bitmap","into","open","root_inode","try_from","try_into","type_id","DIRECT_BOUND","DIRENT_SZ","DataBlock","DirEntry","Directory","DiskInode","DiskInodeType","EFS_MAGIC","File","INDIRECT1_BOUND","INDIRECT2_BOUND","INODE_DIRECT_COUNT","INODE_INDIRECT1_COUNT","INODE_INDIRECT2_COUNT","IndirectBlock","NAME_LENGTH_LIMIT","SuperBlock","_data_blocks","as_bytes","as_bytes_mut","blocks_num_needed","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_size","data_area_blocks","data_bitmap_blocks","data_blocks","direct","empty","eq","fmt","from","from","from","from","get_block_id","increase_size","indirect1","indirect2","initialize","initialize","inode_area_blocks","inode_bitmap_blocks","inode_number","inode_number","into","into","into","into","is_dir","is_file","is_valid","magic","name","name","new","read_at","size","total_blocks","total_blocks","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_","type_id","type_id","type_id","type_id","write_at","Inode","block_device","block_id","block_offset","borrow","borrow_mut","clear","create","find","find_inode_id","from","fs","increase_size","into","ls","modify_disk_inode","new","read_at","read_disk_inode","try_from","try_into","type_id","write_at","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","Empty","Full","Normal","Pipe","PipeRingBuffer","RING_BUFFER_SIZE","RingBufferStatus","all_write_ends_closed","arr","available_read","available_write","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","buffer","clone","clone_into","eq","from","from","from","head","into","into","into","make_pipe","new","read","read_byte","read_end_with_buffer","readable","readable","set_write_end","status","tail","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","writable","writable","write","write_byte","write_end","write_end_with_buffer","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","backtrace","panic","address","frame_allocator","heap_allocator","init","memory_set","page_table","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_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","condvar","mutex","semaphore","up","Condvar","CondvarInner","borrow","borrow","borrow_mut","borrow_mut","from","from","inner","into","into","new","signal","try_from","try_from","try_into","try_into","type_id","type_id","wait_no_sched","wait_queue","wait_with_mutex","Mutex","MutexBlocking","MutexBlockingInner","MutexSpin","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","from","from","from","inner","into","into","into","lock","lock","lock","locked","locked","new","new","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unlock","unlock","unlock","wait_queue","Semaphore","SemaphoreInner","borrow","borrow","borrow_mut","borrow_mut","count","down","from","from","inner","into","into","new","try_from","try_from","try_into","try_into","type_id","type_id","up","wait_queue","0","INTR_MASKING_INFO","IntrMaskingInfo","UPIntrFreeCell","UPIntrRefMut","UPSafeCellRaw","__private_field","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref_mut","drop","enter","exclusive_access","exclusive_session","exit","from","from","from","from","from","get_mut","inner","inner","into","into","into","into","into","nested_level","new","new","new","sie_before_masking","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","SYSCALL_CLOSE","SYSCALL_CONDVAR_CREATE","SYSCALL_CONDVAR_SIGNAL","SYSCALL_CONDVAR_WAIT","SYSCALL_DUP","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GETTID","SYSCALL_GET_TIME","SYSCALL_KILL","SYSCALL_MUTEX_CREATE","SYSCALL_MUTEX_LOCK","SYSCALL_MUTEX_UNLOCK","SYSCALL_OPEN","SYSCALL_PIPE","SYSCALL_READ","SYSCALL_SEMAPHORE_CREATE","SYSCALL_SEMAPHORE_DOWN","SYSCALL_SEMAPHORE_UP","SYSCALL_SLEEP","SYSCALL_THREAD_CREATE","SYSCALL_WAITPID","SYSCALL_WAITTID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","sync","sys_id_str","syscall","thread","sys_close","sys_dup","sys_open","sys_pipe","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_kill","sys_waitpid","sys_yield","sys_condvar_create","sys_condvar_signal","sys_condvar_wait","sys_mutex_create","sys_mutex_lock","sys_mutex_unlock","sys_semaphore_create","sys_semaphore_down","sys_semaphore_up","sys_sleep","sys_gettid","sys_thread_create","sys_waittid","INITPROC","__private_field","add_initproc","block_current_and_run_next","block_current_task","borrow","borrow_mut","check_signals_of_current","context","current_add_signal","deref","exit_current_and_run_next","from","id","into","manager","process","processor","signal","suspend_current_and_run_next","switch","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","0","0","KSTACK_ALLOCATOR","KernelStack","PID_ALLOCATOR","PidHandle","RecycleAllocator","TaskUserRes","__private_field","__private_field","alloc","alloc_tid","alloc_user_res","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc_tid","dealloc_user_res","deref","deref","drop","drop","drop","from","from","from","from","from","from","get_top","into","into","into","into","into","into","kernel_stack_position","kstack_alloc","new","new","pid_alloc","process","push_on_top","recycled","tid","trap_cx_bottom_from_tid","trap_cx_ppn","trap_cx_user_va","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","ustack_base","ustack_base","ustack_bottom_from_tid","ustack_top","PID2PCB","TASK_MANAGER","TaskManager","__private_field","__private_field","add","add_task","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","deref","fetch","fetch_task","from","from","from","insert_into_pid2process","into","into","into","new","pid2process","ready_queue","remove_from_pid2process","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","ProcessControlBlock","ProcessControlBlockInner","alloc_fd","alloc_tid","borrow","borrow","borrow_mut","borrow_mut","children","condvar_list","dealloc_tid","exec","exit_code","fd_table","fork","from","from","get_task","get_user_token","getpid","inner","inner_exclusive_access","into","into","is_zombie","memory_set","mutex_list","new","parent","pid","semaphore_list","signals","task_res_allocator","tasks","thread_count","try_from","try_from","try_into","try_into","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_kstack_top","current_process","current_task","current_trap_cx","current_trap_cx_user_va","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","SIGABRT","SIGFPE","SIGILL","SIGINT","SIGSEGV","SignalFlags","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow_mut","check_error","clone","clone_into","cmp","complement","contains","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","insert","intersection","intersects","into","is_all","is_empty","ne","not","partial_cmp","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_into","type_id","union","__switch","Blocking","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","eq","exit_code","from","from","from","get_status","get_trap_cx","get_user_token","inner","inner_exclusive_access","into","into","into","kstack","new","process","res","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","TIMERS","TimerCondVar","__private_field","add_timer","borrow","borrow","borrow_mut","borrow_mut","check_timer","cmp","deref","eq","expire_ms","from","from","get_time","get_time_ms","into","into","partial_cmp","set_next_trigger","task","try_from","try_from","try_into","try_into","type_id","type_id","context","disable_supervisor_interrupt","enable_supervisor_interrupt","enable_timer_interrupt","init","set_kernel_trap_entry","set_user_trap_entry","trap_from_kernel","trap_handler","trap_return","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::virtio_blk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::chardev","","","","","","","","","","","","","","","os::drivers::chardev::ns16550a","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::plic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs","","","","","","","","","os::fs::easy_fs","","","","","","","os::fs::easy_fs::bitmap","","","","","","","","","","","","","","","","","os::fs::easy_fs::block_cache","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::block_dev","","","","os::fs::easy_fs::efs","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::layout","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::vfs","","","","","","","","","","","","","","","","","","","","","","","os::fs::inode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::pipe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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::condvar","","","","","","","","","","","","","","","","","","","","","","os::sync::mutex","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sync::semaphore","","","","","","","","","","","","","","","","","","","","","","os::sync::up","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::syscall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::syscall::fs","","","","","","os::syscall::process","","","","","","","","os::syscall::sync","","","","","","","","","","os::syscall::thread","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::id","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::manager","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::process","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::processor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::signal","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::trap","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","InterruptEnableRegister","LineStatusRegister","Model Control Register","","","","","","","","","","ignore FCR","ignore MSR","ignore other registers","ignore SCR","Returns the set containing all flags.","Returns the set containing all flags.","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Adds the set of flags.","Adds the set of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","","","","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","Toggles the set of flags.","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns an empty set of flags.","Returns an empty set of flags.","Returns an empty set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","","","","","","","","interrupt enable register","interrupt enable register","interrupt identification register","","","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","","","","","","","","","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","line control register","line control register","line status register","line status register","model control register","modem control register","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","","","","","receiver buffer register","","","","","Removes the specified flags in-place.","Removes the specified flags in-place.","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","transmitter holding register","","","","Toggles the specified flags in-place.","Toggles the specified flags in-place.","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return (block_pos, bits64_pos, inner_pos)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Load a new BlockCache from disk.","","","","","","","","","","","","","","","","","","","","Return a block ID not ID in the data area.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Clear size to zero and return blocks that should be …","","","Return block number correspond to size.","","","","","","","","","","","","","","indirect1 and indirect2 block are allocated only when they …","","","","","","","","","","","","","","","","","","Return number of blocks needed include indirect1/2.","","","","","","","","","","","","","","","File size must be adjusted before.","","","","","","","","","","","","","","","","","We should not acquire efs lock here.","","","","","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","Returns the complement of this set of flags.","","","","","","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.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return (read_end, write_end)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Definitions","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","data: start-aligned but maybe with shorter length assume …","","","Returns the difference between the flags in self and other.","","","","Returns an empty set of flags.","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Include sections in elf and trampoline, also returns …","","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","Mention that trampoline is not collected by areas.","","","","","Without kernel stacks.","Returns the complement of this set of flags.","","","","","","Removes the specified flags in-place.","","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","Temporarily used to get arguments from user space.","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","","","","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","Load a string from other address spaces into kernel space …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Panic if the data has been borrowed.","","","","","","","","","","inner data","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If there is not a child process whose pid is same as …","","","","","","","","","","","","","","thread does not exist, return -1 thread has not exited …","","","","","This function must be followed by a schedule","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return (bottom, top) of a kernel stack in kernel space.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Only support processes with a single thread.","","","Only support processes with a single thread.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,2,3,2,3,2,3,0,0,2,3,2,3,2,3,2,3,0,0,0,0,4,0,4,4,4,4,4,4,4,4,0,0,0,0,5,6,5,6,5,6,5,6,5,6,6,5,6,6,6,5,6,5,6,5,6,0,0,0,0,6,0,0,7,7,7,7,7,8,7,0,8,7,7,7,8,9,9,10,9,0,0,0,0,0,0,9,11,0,10,11,0,12,13,12,13,11,10,9,14,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,13,12,14,15,16,11,10,9,13,12,14,15,16,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,16,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,11,11,11,11,11,10,10,10,10,10,9,9,9,9,9,13,12,14,15,16,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,16,11,10,9,13,12,13,14,16,11,10,9,11,10,9,11,10,9,13,12,14,15,16,11,10,9,11,10,9,11,10,9,13,12,13,12,13,12,11,10,9,14,16,11,10,9,15,11,10,9,13,14,16,15,14,11,10,9,11,10,9,11,10,9,11,10,9,11,10,9,12,11,10,9,11,10,9,13,12,14,15,16,11,10,9,13,12,14,15,16,11,10,9,13,12,14,15,16,11,10,9,11,10,9,14,16,14,0,17,0,17,18,18,17,18,17,18,18,17,17,18,18,18,18,18,17,18,18,18,18,17,18,18,18,18,17,18,17,18,17,18,17,18,17,0,0,0,0,19,19,0,19,19,0,0,0,0,0,0,0,0,0,0,20,20,20,20,20,0,20,20,20,20,20,20,20,20,0,0,0,0,21,22,0,22,22,22,23,21,22,23,21,22,21,22,22,23,21,0,23,22,22,22,23,21,22,22,22,23,23,22,22,22,23,21,22,23,21,22,23,21,0,24,24,24,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,0,26,0,0,0,26,0,0,0,0,0,0,0,0,27,28,28,27,29,27,28,26,29,27,28,26,27,29,29,27,27,28,26,29,29,27,28,26,27,27,27,27,29,27,29,29,28,28,29,27,28,26,27,27,29,29,28,28,28,27,27,27,29,29,27,28,26,29,27,28,26,27,29,27,28,26,27,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,0,0,0,31,31,0,31,31,32,31,31,31,31,31,31,31,31,31,33,34,32,31,33,34,32,31,31,31,31,31,31,32,31,31,31,31,31,31,31,31,31,33,34,32,31,31,31,31,31,31,33,34,31,31,31,33,34,32,31,31,31,0,31,33,31,34,0,31,33,33,31,33,33,31,31,31,31,31,31,31,33,34,32,31,33,34,32,31,33,34,32,31,31,33,33,33,35,35,35,0,0,0,0,36,36,36,36,37,36,35,37,36,35,37,35,35,35,37,36,35,36,37,36,35,0,36,37,36,37,37,37,36,36,36,35,37,36,35,37,36,35,37,36,35,37,37,37,36,36,37,0,0,38,39,38,39,38,39,38,39,38,39,38,39,38,39,38,39,38,39,38,39,38,39,0,0,0,0,0,0,0,0,40,41,42,43,0,0,0,0,0,0,0,0,0,0,0,0,40,41,44,40,41,42,43,45,44,40,41,42,43,45,40,41,40,41,42,43,45,40,41,42,43,45,40,41,42,43,44,44,40,41,42,43,40,41,40,41,42,43,44,40,40,40,41,41,41,42,42,42,43,43,43,45,42,45,40,42,42,40,45,43,44,40,41,42,43,45,44,45,45,40,41,42,43,44,45,44,40,41,40,41,42,43,45,46,42,43,40,41,42,43,45,44,40,41,42,43,45,44,40,41,42,43,45,44,40,41,42,43,45,0,0,0,0,0,47,48,49,50,49,47,50,49,47,49,48,49,47,50,49,50,0,0,0,50,49,47,49,0,50,49,47,48,50,49,50,49,50,49,47,50,49,47,50,49,47,0,0,0,0,0,51,51,0,0,0,0,0,52,52,52,52,53,54,52,54,52,52,52,52,52,52,52,52,54,55,53,51,52,54,55,53,51,52,51,52,51,52,52,52,52,55,55,53,52,0,0,0,52,51,52,0,0,52,51,52,52,52,52,52,54,55,53,51,52,55,52,52,52,54,54,52,52,52,54,52,52,54,55,53,51,52,52,52,0,55,55,55,54,55,52,55,54,54,52,54,52,54,54,0,52,54,0,0,52,0,0,0,52,52,52,51,52,52,54,54,54,55,53,51,52,54,55,53,51,52,54,55,53,51,52,52,55,55,55,56,56,56,0,0,0,56,56,0,0,56,56,56,56,56,56,56,56,56,56,57,56,56,58,59,60,56,57,58,59,60,56,57,59,60,56,57,56,57,56,56,56,60,60,56,56,57,56,57,56,58,58,57,56,56,56,56,56,58,58,59,60,56,57,56,56,56,56,58,56,56,56,56,58,59,60,56,57,59,60,56,56,57,59,58,56,58,59,57,60,56,56,57,57,56,58,56,56,56,56,56,57,56,58,58,58,0,0,0,0,58,59,60,56,57,58,59,60,56,57,58,59,60,56,57,56,58,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,62,61,62,61,62,61,61,62,61,61,61,62,61,62,61,62,61,62,61,0,0,0,0,63,64,65,63,64,65,63,64,65,64,63,64,65,66,63,64,63,65,63,64,63,64,65,63,64,65,63,64,65,66,63,64,65,0,0,67,68,67,68,68,67,67,68,67,67,68,67,67,68,67,68,67,68,67,68,69,0,0,0,0,0,70,71,72,73,69,70,71,72,73,69,70,69,70,69,69,72,73,73,72,71,72,73,69,70,71,71,73,71,72,73,69,70,72,71,72,73,72,71,72,73,69,70,71,72,73,69,70,71,72,73,69,70,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,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,74,0,0,0,74,74,0,0,0,74,0,74,0,74,0,0,0,0,0,0,0,74,74,74,0,75,75,75,75,75,75,75,75,75,75,75,75,76,77,0,0,0,0,0,0,78,79,80,81,81,80,76,77,81,78,79,80,76,77,81,78,79,80,80,81,81,78,79,76,77,81,80,76,77,81,78,79,77,80,76,77,81,78,79,0,0,80,81,0,81,77,80,81,0,81,81,80,76,77,81,78,79,80,76,77,81,78,79,80,76,77,81,78,79,81,81,0,81,0,0,0,82,83,84,0,84,82,83,84,82,83,82,83,84,0,84,82,83,0,84,82,83,84,0,84,0,84,82,83,84,82,83,84,82,83,0,0,85,85,86,85,86,85,85,85,85,86,85,85,86,86,85,85,85,86,86,86,86,85,85,85,85,86,85,86,85,85,85,85,85,86,85,86,85,86,85,0,0,87,88,87,88,87,88,88,0,0,0,0,0,0,87,88,87,88,88,88,87,88,0,0,88,0,88,87,88,87,88,87,89,89,89,89,89,0,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,0,90,90,90,0,0,0,91,92,90,91,92,90,90,90,90,92,91,92,90,92,92,91,91,91,91,92,90,91,91,91,92,92,92,90,92,91,92,90,91,92,90,91,92,90,0,0,0,0,93,0,94,93,94,93,0,94,93,94,94,94,93,0,0,94,93,94,0,94,94,93,94,93,94,93,0,0,0,0,0,0,0,0,0,0,0,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95],"f":[null,null,null,[[]],[[]],[[]],null,null,[[],["upintrfreecell",3]],null,[[]],null,[[]],null,null,null,null,null,null,[[],["never",15]],null,null,null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["arguments",3]]],[[["arguments",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15]],["result",6]],[[["str",15]],["result",6]],null,null,null,null,null,[[]],[[]],[[]],[[],["arc",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[]],[[]],null,[[],["upintrfreecell",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[["usize",15]],["physaddr",3]],[[["physaddr",3],["usize",15]],["i32",15]],[[["physaddr",3]],["virtaddr",3]],[[["virtaddr",3]],["physaddr",3]],[[["usize",15]]],null,null,null,[[]],[[]],[[],["arc",3]],[[]],[[]],[[]],null,[[],["u8",15]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["u8",15]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[["ier",3]]],[[["lsr",3]]],[[["mcr",3]]],[[]],[[]],[[]],[[],["u8",15]],[[],["u8",15]],[[],["u8",15]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["ier",3]],[[],["lsr",3]],[[],["mcr",3]],[[]],[[]],[[]],[[["ier",3]],["ordering",4]],[[["lsr",3]],["ordering",4]],[[["mcr",3]],["ordering",4]],[[]],[[]],[[]],null,[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["ier",3]],["bool",15]],[[["lsr",3]],["bool",15]],[[["mcr",3]],["bool",15]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",15]],["option",4]],[[["u8",15]],["option",4]],[[["u8",15]],["option",4]],[[["u8",15]]],[[["u8",15]]],[[["u8",15]]],[[["u8",15]]],[[["u8",15]]],[[["u8",15]]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[]],[[]],[[]],[[]],null,null,null,[[]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,[[["ier",3]],["bool",15]],[[["lsr",3]],["bool",15]],[[["mcr",3]],["bool",15]],[[["usize",15]]],[[]],[[]],[[]],[[]],null,[[["ier",3]],["option",4,[["ordering",4]]]],[[["lsr",3]],["option",4,[["ordering",4]]]],[[["mcr",3]],["option",4,[["ordering",4]]]],null,[[],["option",4,[["u8",15]]]],[[],["u8",15]],null,[[],["readwithoutdlab",3]],[[]],[[]],[[]],[[["bool",15]]],[[["bool",15]]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[["u8",15]]],[[["u8",15]]],[[],["writewithoutdlab",3]],null,null,null,null,null,[[]],[[]],[[]],[[]],[[["usize",15],["intrtargetpriority",4]],["u32",15]],[[["usize",15],["intrtargetpriority",4]]],[[],["intrtargetpriority",4]],[[]],[[["usize",15],["intrtargetpriority",4],["u32",15]]],[[["usize",15],["intrtargetpriority",4],["usize",15]]],[[["usize",15],["intrtargetpriority",4],["usize",15]]],[[["usize",15],["intrtargetpriority",4],["usize",15]]],[[]],[[]],[[["usize",15]],["u32",15]],[[["usize",15],["intrtargetpriority",4]],["u32",15]],[[["usize",15],["intrtargetpriority",4]],["usize",15]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15],["u32",15]]],[[["usize",15],["intrtargetpriority",4],["u32",15]]],[[],["usize",15]],[[["usize",15],["intrtargetpriority",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[["userbuffer",3]],["usize",15]],[[],["bool",15]],null,[[],["bool",15]],[[["userbuffer",3]],["usize",15]],null,null,null,null,null,null,null,null,null,null,[[["arc",3]],["option",4,[["usize",15]]]],null,[[]],[[]],[[["arc",3],["usize",15]]],[[["usize",15]]],[[]],[[]],[[],["usize",15]],[[["usize",15],["usize",15]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,[[["usize",15]],["usize",15]],[[]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["mutex",3]],[[]],[[]],[[]],[[]],[[["usize",15],["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3,[["blockcache",3]]]]]],[[["usize",15],["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3,[["blockcache",3]]]]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[]],null,[[["usize",15]]],[[["usize",15],["arc",3,[["blockdevice",8]]]]],[[]],null,[[["usize",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[["usize",15]]],[[["usize",15]]],null,null,[[],["u32",15]],[[],["u32",15]],null,[[]],[[]],[[["arc",3,[["blockdevice",8]]],["u32",15],["u32",15]],["arc",3,[["mutex",3]]]],null,null,[[["u32",15]]],[[]],[[["u32",15]],["u32",15]],[[["u32",15]]],null,null,[[]],[[["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3]]]],[[["arc",3]],["inode",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["u32",15]],["u32",15]],[[]],[[]],[[["u32",15]],["u32",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["arc",3]],["vec",3,[["u32",15]]]],null,null,[[],["u32",15]],null,[[]],[[["diskinodetype",4]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["u32",15],["arc",3]],["u32",15]],[[["u32",15],["vec",3,[["u32",15]]],["arc",3]]],null,null,[[["u32",15],["u32",15],["u32",15],["u32",15],["u32",15]]],[[["diskinodetype",4]]],null,null,[[],["u32",15]],null,[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[],["str",15]],null,[[["str",15],["u32",15]]],[[["usize",15],["arc",3]],["usize",15]],null,[[["u32",15]],["u32",15]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15],["arc",3]],["usize",15]],null,null,null,null,[[]],[[]],[[]],[[["str",15]],["option",4,[["arc",3,[["inode",3]]]]]],[[["str",15]],["option",4,[["arc",3,[["inode",3]]]]]],[[["str",15],["diskinode",3]],["option",4,[["u32",15]]]],[[]],null,[[["u32",15],["diskinode",3],["mutexguard",3]]],[[]],[[],["vec",3,[["string",3]]]],[[]],[[["u32",15],["usize",15],["arc",3,[["mutex",3,[["easyfilesystem",3]]]]],["arc",3,[["blockdevice",8]]]]],[[["usize",15]],["usize",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["usize",15]],["usize",15]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["openflags",3]]],[[]],[[],["u32",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["openflags",3]],[[]],[[["openflags",3]],["ordering",4]],[[]],[[],["bool",15]],[[],["arc",3]],[[]],[[]],[[["openflags",3]],["bool",15]],[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["u32",15]],["option",4]],[[["u32",15]]],[[["u32",15]]],[[["intoiterator",8]]],[[]],null,null,[[]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[]],[[["openflags",3]],["bool",15]],[[["bool",15],["bool",15],["arc",3,[["inode",3]]]]],[[]],null,[[["str",15],["openflags",3]],["option",4,[["arc",3,[["osinode",3]]]]]],[[["openflags",3]],["option",4,[["ordering",4]]]],[[["userbuffer",3]],["usize",15]],[[],["vec",3,[["u8",15]]]],[[]],[[],["bool",15]],null,[[]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[],["bool",15]],null,[[["userbuffer",3]],["usize",15]],null,null,null,null,null,null,null,[[],["bool",15]],null,[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["ringbufferstatus",4]],[[]],[[["ringbufferstatus",4]],["bool",15]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[["userbuffer",3]],["usize",15]],[[],["u8",15]],[[["arc",3,[["upintrfreecell",3,[["piperingbuffer",3]]]]]]],[[],["bool",15]],null,[[["arc",3]]],null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],null,[[["userbuffer",3]],["usize",15]],[[["u8",15]]],null,[[["arc",3,[["upintrfreecell",3,[["piperingbuffer",3]]]]]]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["userbuffer",3]],["usize",15]],[[["userbuffer",3]],["usize",15]],[[],["bool",15]],[[],["bool",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],[[],["bool",15]],[[["userbuffer",3]],["usize",15]],[[["userbuffer",3]],["usize",15]],[[]],[[["panicinfo",3]],["never",15]],null,null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[],["physaddr",3]],[[],["virtaddr",3]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[],["simplerange",3]],[[]],[[]],[[]],[[]],[[]],[[["physaddr",3]],["ordering",4]],[[["virtaddr",3]],["ordering",4]],[[["physpagenum",3]],["ordering",4]],[[["virtpagenum",3]],["ordering",4]],null,null,[[["physaddr",3]],["bool",15]],[[["virtaddr",3]],["bool",15]],[[["physpagenum",3]],["bool",15]],[[["virtpagenum",3]],["bool",15]],[[],["physpagenum",3]],[[],["virtpagenum",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["usize",15]]],[[]],[[["physpagenum",3]]],[[]],[[["usize",15]]],[[["virtpagenum",3]]],[[]],[[["usize",15]]],[[["physaddr",3]]],[[]],[[["usize",15]]],[[["virtaddr",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["physaddr",3]],["bool",15]],[[["virtaddr",3]],["bool",15]],[[["physpagenum",3]],["bool",15]],[[["virtpagenum",3]],["bool",15]],[[]],[[]],[[],["option",4]],[[],["usize",15]],[[],["usize",15]],[[["physaddr",3]],["option",4,[["ordering",4]]]],[[["virtaddr",3]],["option",4,[["ordering",4]]]],[[["physpagenum",3]],["option",4,[["ordering",4]]]],[[["virtpagenum",3]],["option",4,[["ordering",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,[[],["option",4,[["physpagenum",3]]]],[[],["option",4,[["physpagenum",3]]]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["physpagenum",3]]],[[["physpagenum",3]]],[[],["upintrfreecell",3]],[[]],null,[[["formatter",3]],["result",6]],[[],["option",4,[["frametracker",3]]]],[[]],[[["physpagenum",3]]],[[]],[[]],[[]],[[["physpagenum",3],["physpagenum",3]]],[[]],[[]],[[]],[[]],[[]],[[["physpagenum",3]]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[["layout",3]],["never",15]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],null,[[]],[[]],[[["mappermission",3]]],[[]],[[],["u8",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["maptype",4]],[[],["mappermission",3]],[[]],[[]],[[["mappermission",3]],["ordering",4]],[[]],[[],["bool",15]],[[["pagetable",3]]],null,[[],["arc",3]],[[]],null,null,null,[[]],[[["maptype",4]],["bool",15]],[[["mappermission",3]],["bool",15]],null,null,[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["maparea",3]]],[[["u8",15]],["option",4]],[[["u8",15]]],[[["u8",15]]],[[]],[[["memoryset",3]],["memoryset",3]],[[["intoiterator",8]]],[[]],[[]],[[["virtaddr",3],["virtaddr",3],["mappermission",3]]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["usize",15]],[[["pagetable",3]]],[[["pagetable",3],["virtpagenum",3]]],null,[[]],null,[[["mappermission",3]],["bool",15]],[[["virtaddr",3],["virtaddr",3],["maptype",4],["mappermission",3]]],[[]],[[]],[[]],null,[[["mappermission",3]],["option",4,[["ordering",4]]]],[[["maparea",3],["option",4]]],[[]],[[]],[[]],[[["virtpagenum",3]]],null,null,[[["bool",15]]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[["pagetable",3]]],[[["pagetable",3],["virtpagenum",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["pteflags",3]]],[[]],[[],["u8",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[],["pteflags",3]],[[],["pagetableentry",3]],[[]],[[]],[[["pteflags",3]],["ordering",4]],[[]],[[],["bool",15]],null,null,[[]],[[]],[[]],[[["pteflags",3]],["bool",15]],[[],["bool",15]],[[["intoiterator",8]]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[],["pteflags",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[]],[[]],[[["u8",15]],["option",4]],[[["u8",15]]],[[["u8",15]]],[[["intoiterator",8]]],[[["usize",15]]],[[]],[[]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["usize",15]],[[["virtpagenum",3],["physpagenum",3],["pteflags",3]]],[[["pteflags",3]],["bool",15]],[[]],[[["vec",3]]],[[["physpagenum",3],["pteflags",3]]],[[],["option",4]],[[]],[[["pteflags",3]],["option",4,[["ordering",4]]]],[[],["physpagenum",3]],[[],["bool",15]],[[]],null,[[["bool",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[["virtpagenum",3]],["option",4,[["pagetableentry",3]]]],[[["virtaddr",3]],["option",4,[["physaddr",3]]]],[[["usize",15],["usize",15]],["vec",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[["virtpagenum",3]]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,[[],["usize",15]],[[["usize",15]]],[[["usize",15],["usize",15],["usize",15],["usize",15]],["usize",15]],[[["usize",15]]],[[],["never",15]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],null,[[["arc",3,[["mutex",8]]]]],null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],null,[[]],[[]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["upsafecellraw",3]],[[]],[[]],[[]],[[],["upintrrefmut",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],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,[[["usize",15]],["str",15]],[[["usize",15]],["isize",15]],null,[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["u32",15]],["isize",15]],[[],["isize",15]],[[["usize",15],["usize",15]],["isize",15]],[[["usize",15],["usize",15]],["isize",15]],[[],["isize",15]],[[["i32",15]],["never",15]],[[],["isize",15]],[[],["isize",15]],[[],["isize",15]],[[["usize",15],["u32",15]],["isize",15]],[[["isize",15]],["isize",15]],[[],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15],["usize",15]],["isize",15]],[[["bool",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[["usize",15]],["isize",15]],[[],["isize",15]],[[["usize",15],["usize",15]],["isize",15]],[[["usize",15]],["i32",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[],["option",4]],null,[[["signalflags",3]]],[[],["arc",3]],[[["i32",15]]],[[]],null,[[]],null,null,null,null,[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],[[]],[[["usize",15]]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["usize",15]]],[[]],[[]],[[],["upintrfreecell",3]],[[],["upintrfreecell",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[],["kernelstack",3]],[[]],[[["arc",3,[["processcontrolblock",3]]],["usize",15],["bool",15]]],[[],["pidhandle",3]],null,[[]],null,null,[[["usize",15]],["usize",15]],[[],["physpagenum",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["usize",15]],null,[[["usize",15],["usize",15]],["usize",15]],[[],["usize",15]],null,null,null,null,null,[[["arc",3,[["taskcontrolblock",3]]]]],[[["arc",3,[["taskcontrolblock",3]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["upintrfreecell",3]],[[],["upintrfreecell",3]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[]],[[]],[[]],[[["usize",15],["arc",3,[["processcontrolblock",3]]]]],[[]],[[]],[[]],[[]],[[["usize",15]],["option",4,[["arc",3,[["processcontrolblock",3]]]]]],null,[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],null,null,[[["usize",15]]],[[["arc",3],["vec",3,[["string",3]]]]],null,null,[[["arc",3]],["arc",3]],[[]],[[]],[[["usize",15]],["arc",3,[["taskcontrolblock",3]]]],[[],["usize",15]],[[],["usize",15]],null,[[],["upintrrefmut",3,[["processcontrolblockinner",3]]]],[[]],[[]],null,null,null,[[],["arc",3]],null,null,null,null,null,null,[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,[[]],[[]],[[]],[[]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],null,[[],["usize",15]],[[],["arc",3,[["processcontrolblock",3]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["trapcontext",3]],[[],["usize",15]],[[],["usize",15]],[[],["upintrfreecell",3]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],[[]],[[["signalflags",3]]],[[]],[[],["u32",15]],null,[[]],[[]],[[]],[[]],[[],["option",4]],[[],["signalflags",3]],[[]],[[["signalflags",3]],["ordering",4]],[[]],[[],["bool",15]],[[]],[[]],[[["signalflags",3]],["bool",15]],[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["u32",15]],["option",4]],[[["u32",15]]],[[["u32",15]]],[[["intoiterator",8]]],[[]],[[]],[[]],[[],["bool",15]],[[]],[[],["bool",15]],[[],["bool",15]],[[["signalflags",3]],["bool",15]],[[]],[[["signalflags",3]],["option",4,[["ordering",4]]]],[[]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["taskstatus",4]],[[]],[[["taskstatus",4]],["bool",15]],null,[[]],[[]],[[]],[[],["taskstatus",4]],[[],["trapcontext",3]],[[],["usize",15]],null,[[],["upintrrefmut",3,[["taskcontrolblockinner",3]]]],[[]],[[]],[[]],null,[[["arc",3,[["processcontrolblock",3]]],["usize",15],["bool",15]]],null,null,null,null,[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[["usize",15],["arc",3,[["taskcontrolblock",3]]]]],[[]],[[]],[[]],[[]],[[]],[[],["ordering",4]],[[],["upintrfreecell",3]],[[],["bool",15]],null,[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[],["option",4,[["ordering",4]]]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[["trapcontext",3]]],[[],["never",15]],[[],["never",15]],null,[[["usize",15],["usize",15],["usize",15],["usize",15],["usize",15]]],[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],null,null,null,[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"DEV_NON_BLOCKING_ACCESS"],[3,"Stdout"],[3,"Kstdout"],[3,"BLOCK_DEVICE"],[3,"QUEUE_FRAMES"],[3,"VirtIOBlock"],[3,"UART"],[8,"CharDevice"],[3,"MCR"],[3,"LSR"],[3,"IER"],[3,"WriteWithoutDLAB"],[3,"ReadWithoutDLAB"],[3,"NS16550aRaw"],[3,"NS16550aInner"],[3,"NS16550a"],[4,"IntrTargetPriority"],[3,"PLIC"],[8,"File"],[3,"Bitmap"],[3,"BLOCK_CACHE_MANAGER"],[3,"BlockCache"],[3,"BlockCacheManager"],[8,"BlockDevice"],[3,"EasyFileSystem"],[4,"DiskInodeType"],[3,"DiskInode"],[3,"DirEntry"],[3,"SuperBlock"],[3,"Inode"],[3,"OpenFlags"],[3,"ROOT_INODE"],[3,"OSInode"],[3,"OSInodeInner"],[4,"RingBufferStatus"],[3,"PipeRingBuffer"],[3,"Pipe"],[3,"Stdin"],[3,"Stdout"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"PhysPageNum"],[3,"VirtPageNum"],[3,"SimpleRangeIterator"],[3,"SimpleRange"],[8,"StepByOne"],[3,"FRAME_ALLOCATOR"],[8,"FrameAllocator"],[3,"StackFrameAllocator"],[3,"FrameTracker"],[4,"MapType"],[3,"MapPermission"],[3,"KERNEL_SPACE"],[3,"MemorySet"],[3,"MapArea"],[3,"PTEFlags"],[3,"PageTableEntry"],[3,"PageTable"],[3,"UserBuffer"],[3,"UserBufferIterator"],[3,"Condvar"],[3,"CondvarInner"],[3,"MutexSpin"],[3,"MutexBlocking"],[3,"MutexBlockingInner"],[8,"Mutex"],[3,"Semaphore"],[3,"SemaphoreInner"],[3,"UPIntrRefMut"],[3,"INTR_MASKING_INFO"],[3,"UPSafeCellRaw"],[3,"IntrMaskingInfo"],[3,"UPIntrFreeCell"],[3,"INITPROC"],[3,"TaskContext"],[3,"PidHandle"],[3,"KernelStack"],[3,"PID_ALLOCATOR"],[3,"KSTACK_ALLOCATOR"],[3,"RecycleAllocator"],[3,"TaskUserRes"],[3,"TASK_MANAGER"],[3,"PID2PCB"],[3,"TaskManager"],[3,"ProcessControlBlockInner"],[3,"ProcessControlBlock"],[3,"PROCESSOR"],[3,"Processor"],[3,"SignalFlags"],[4,"TaskStatus"],[3,"TaskControlBlock"],[3,"TaskControlBlockInner"],[3,"TIMERS"],[3,"TimerCondVar"],[3,"TrapContext"]]}\ +"os":{"doc":"","t":[3,12,0,11,11,5,0,0,11,0,11,0,11,14,14,0,0,14,14,5,0,0,0,0,0,0,11,11,11,6,17,6,17,17,17,5,5,0,6,17,6,17,17,17,17,17,8,17,3,17,17,17,12,11,11,5,10,11,5,10,11,10,11,11,11,5,11,11,11,11,17,17,17,17,17,17,17,17,3,3,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,0,0,0,3,12,5,11,11,11,11,11,11,11,11,0,3,17,3,12,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,5,5,5,11,8,3,12,11,11,11,11,10,11,0,10,11,11,11,10,18,18,18,18,3,3,3,3,3,3,18,18,3,18,18,3,12,12,12,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,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,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,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,12,12,12,12,12,12,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,13,3,13,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,8,0,0,0,10,10,0,10,10,17,0,0,0,0,0,0,17,3,6,11,12,11,11,11,5,11,11,11,11,12,11,11,11,3,17,3,3,12,11,5,12,12,11,11,11,11,11,11,12,11,11,11,11,11,5,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,8,10,10,10,6,3,11,11,12,11,11,11,12,12,11,11,11,11,12,12,11,11,11,11,11,11,17,17,6,3,13,3,4,17,13,17,17,17,17,17,6,17,3,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,12,11,11,11,11,11,11,11,11,11,12,12,11,11,12,12,11,12,11,11,11,11,11,11,11,12,11,12,11,11,12,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,3,12,12,12,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,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,13,13,13,3,3,17,4,11,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,5,11,11,11,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,12,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,5,0,0,0,5,0,0,12,12,12,12,17,17,3,3,3,3,8,17,6,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,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,0,0,0,0,3,3,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,12,11,8,3,3,3,11,11,11,11,11,11,11,11,11,12,11,11,11,10,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,12,3,3,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,12,3,3,3,3,3,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,12,12,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,0,0,0,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,12,5,5,5,11,11,5,0,5,11,5,11,0,11,0,0,0,0,5,0,0,11,11,11,3,11,11,11,11,11,12,12,12,11,11,11,11,12,12,17,3,3,3,3,3,3,12,12,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,5,5,11,11,5,12,11,12,12,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,11,3,3,3,12,12,11,5,11,11,11,11,11,11,11,11,11,5,11,11,11,5,11,11,11,11,5,12,5,11,11,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,12,12,11,11,12,12,11,11,11,11,11,11,12,11,11,11,12,12,12,11,12,12,12,12,12,12,11,11,11,11,11,11,11,3,3,12,11,11,11,11,11,12,5,5,5,5,5,5,11,11,11,11,12,11,11,11,5,5,11,5,11,11,11,11,11,11,18,18,18,18,18,3,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,11,11,11,11,11,11,11,11,11,5,13,13,13,3,3,4,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,12,11,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,17,17,3,3,12,5,11,11,11,11,5,11,11,11,12,11,11,5,5,11,11,11,5,12,11,11,11,11,11,11,0,5,5,5,5,5,5,5,5,5,3,11,11,11,11,11,11,12,12,12,11,12,12,11,11,11,12],"n":["DEV_NON_BLOCKING_ACCESS","__private_field","board","borrow","borrow_mut","clear_bss","config","console","deref","drivers","from","fs","into","kprint","kprintln","lang_items","mm","print","println","rust_main","sbi","sync","syscall","task","timer","trap","try_from","try_into","type_id","BlockDeviceImpl","CLOCK_FREQ","CharDeviceImpl","MMIO","VIRT_PLIC","VIRT_UART","device_init","irq_handler","qemu","BlockDeviceImpl","CLOCK_FREQ","CharDeviceImpl","EXIT_FAILURE","EXIT_FAILURE_FLAG","EXIT_RESET","EXIT_SUCCESS","MMIO","QEMUExit","QEMU_EXIT_HANDLE","RISCV64","VIRT_PLIC","VIRT_TEST","VIRT_UART","addr","borrow","borrow_mut","device_init","exit","exit","exit_code_encode","exit_failure","exit_failure","exit_success","exit_success","from","into","irq_handler","new","try_from","try_into","type_id","KERNEL_HEAP_SIZE","KERNEL_STACK_SIZE","MEMORY_END","PAGE_SIZE","PAGE_SIZE_BITS","TRAMPOLINE","TRAP_CONTEXT_BASE","USER_STACK_SIZE","Kstdout","Stdout","borrow","borrow","borrow_mut","borrow_mut","from","from","into","into","kprint","print","try_from","try_from","try_into","try_into","type_id","type_id","write_str","write_str","block","chardev","plic","BLOCK_DEVICE","__private_field","block_device_test","borrow","borrow_mut","deref","from","into","try_from","try_into","type_id","virtio_blk","QUEUE_FRAMES","VIRTIO0","VirtIOBlock","__private_field","borrow","borrow","borrow_mut","borrow_mut","condvars","deref","from","from","handle_irq","into","into","new","read_block","try_from","try_from","try_into","try_into","type_id","type_id","virtio_blk","virtio_dma_alloc","virtio_dma_dealloc","virtio_phys_to_virt","virtio_virt_to_phys","write_block","CharDevice","UART","__private_field","borrow","borrow_mut","deref","from","handle_irq","into","ns16550a","read","try_from","try_into","type_id","write","AUX_OUTPUT1","AUX_OUTPUT2","DATA_AVAILABLE","DATA_TERMINAL_READY","IER","LSR","MCR","NS16550a","NS16550aInner","NS16550aRaw","REQUEST_TO_SEND","RX_AVAILABLE","ReadWithoutDLAB","THR_EMPTY","TX_EMPTY","WriteWithoutDLAB","_padding0","_padding1","_padding1","_padding2","all","all","all","base_addr","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bits","bits","bits","bits","bits","bits","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","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_into","clone_into","clone_into","cmp","cmp","cmp","complement","complement","complement","condvar","contains","contains","contains","difference","difference","difference","empty","empty","empty","eq","eq","eq","extend","extend","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_bits","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_bits_truncate","from_bits_unchecked","from_bits_unchecked","from_bits_unchecked","from_iter","from_iter","from_iter","handle_irq","hash","hash","hash","ier","ier","iir","init","inner","insert","insert","insert","intersection","intersection","intersection","intersects","intersects","intersects","into","into","into","into","into","into","into","into","is_all","is_all","is_all","is_empty","is_empty","is_empty","lcr","lcr","lsr","lsr","mcr","mcr","ne","ne","ne","new","new","not","not","not","ns16550a","partial_cmp","partial_cmp","partial_cmp","rbr","read","read","read_buffer","read_end","remove","remove","remove","set","set","set","sub","sub","sub","sub_assign","sub_assign","sub_assign","symmetric_difference","symmetric_difference","symmetric_difference","thr","to_owned","to_owned","to_owned","toggle","toggle","toggle","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","union","union","union","write","write","write_end","IntrTargetPriority","Machine","PLIC","Supervisor","base_addr","borrow","borrow","borrow_mut","borrow_mut","claim","claim_comp_ptr_of_hart_with_priority","clone","clone_into","complete","disable","enable","enable_ptr","from","from","get_priority","get_threshold","hart_id_with_priority","into","into","new","priority_ptr","set_priority","set_threshold","supported_number","threshold_ptr_of_hart_with_priority","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","File","easy_fs","inode","pipe","read","readable","stdio","writable","write","BLOCK_SZ","bitmap","block_cache","block_dev","efs","layout","vfs","BLOCK_BITS","Bitmap","BitmapBlock","alloc","blocks","borrow","borrow_mut","dealloc","decomposition","from","into","maximum","new","start_block_id","try_from","try_into","type_id","BLOCK_CACHE_MANAGER","BLOCK_CACHE_SIZE","BlockCache","BlockCacheManager","__private_field","addr_of_offset","block_cache_sync_all","block_device","block_id","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cache","deref","drop","from","from","from","get_block_cache","get_block_cache","get_mut","get_ref","into","into","into","modified","modify","new","new","queue","read","sync","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","BlockDevice","handle_irq","read_block","write_block","DataBlock","EasyFileSystem","alloc_data","alloc_inode","block_device","borrow","borrow_mut","create","data_area_start_block","data_bitmap","dealloc_data","from","get_data_block_id","get_disk_inode_pos","inode_area_start_block","inode_bitmap","into","open","root_inode","try_from","try_into","type_id","DIRECT_BOUND","DIRENT_SZ","DataBlock","DirEntry","Directory","DiskInode","DiskInodeType","EFS_MAGIC","File","INDIRECT1_BOUND","INDIRECT2_BOUND","INODE_DIRECT_COUNT","INODE_INDIRECT1_COUNT","INODE_INDIRECT2_COUNT","IndirectBlock","NAME_LENGTH_LIMIT","SuperBlock","_data_blocks","as_bytes","as_bytes_mut","blocks_num_needed","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_size","data_area_blocks","data_bitmap_blocks","data_blocks","direct","empty","eq","fmt","from","from","from","from","get_block_id","increase_size","indirect1","indirect2","initialize","initialize","inode_area_blocks","inode_bitmap_blocks","inode_number","inode_number","into","into","into","into","is_dir","is_file","is_valid","magic","name","name","new","read_at","size","total_blocks","total_blocks","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_","type_id","type_id","type_id","type_id","write_at","Inode","block_device","block_id","block_offset","borrow","borrow_mut","clear","create","find","find_inode_id","from","fs","increase_size","into","ls","modify_disk_inode","new","read_at","read_disk_inode","try_from","try_into","type_id","write_at","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","Empty","Full","Normal","Pipe","PipeRingBuffer","RING_BUFFER_SIZE","RingBufferStatus","all_write_ends_closed","arr","available_read","available_write","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","buffer","clone","clone_into","eq","from","from","from","head","into","into","into","make_pipe","new","read","read_byte","read_end_with_buffer","readable","readable","set_write_end","status","tail","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","writable","writable","write","write_byte","write_end","write_end_with_buffer","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","backtrace","panic","address","frame_allocator","heap_allocator","init","memory_set","page_table","0","0","0","0","PA_WIDTH_SV39","PPN_WIDTH_SV39","PhysAddr","PhysPageNum","SimpleRange","SimpleRangeIterator","StepByOne","VA_WIDTH_SV39","VPNRange","VPN_WIDTH_SV39","VirtAddr","VirtPageNum","aligned","aligned","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","ceil","ceil","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","current","end","eq","eq","eq","eq","floor","floor","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_bytes_array","get_end","get_mut","get_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","condvar","mutex","semaphore","up","Condvar","CondvarInner","borrow","borrow","borrow_mut","borrow_mut","from","from","inner","into","into","new","signal","try_from","try_from","try_into","try_into","type_id","type_id","wait_no_sched","wait_queue","wait_with_mutex","Mutex","MutexBlocking","MutexBlockingInner","MutexSpin","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","from","from","from","inner","into","into","into","lock","lock","lock","locked","locked","new","new","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unlock","unlock","unlock","wait_queue","Semaphore","SemaphoreInner","borrow","borrow","borrow_mut","borrow_mut","count","down","from","from","inner","into","into","new","try_from","try_from","try_into","try_into","type_id","type_id","up","wait_queue","0","INTR_MASKING_INFO","IntrMaskingInfo","UPIntrFreeCell","UPIntrRefMut","UPSafeCellRaw","__private_field","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref_mut","drop","enter","exclusive_access","exclusive_session","exit","from","from","from","from","from","get_mut","inner","inner","into","into","into","into","into","nested_level","new","new","new","sie_before_masking","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","SYSCALL_CLOSE","SYSCALL_CONDVAR_CREATE","SYSCALL_CONDVAR_SIGNAL","SYSCALL_CONDVAR_WAIT","SYSCALL_DUP","SYSCALL_EXEC","SYSCALL_EXIT","SYSCALL_FORK","SYSCALL_GETPID","SYSCALL_GETTID","SYSCALL_GET_TIME","SYSCALL_KILL","SYSCALL_MUTEX_CREATE","SYSCALL_MUTEX_LOCK","SYSCALL_MUTEX_UNLOCK","SYSCALL_OPEN","SYSCALL_PIPE","SYSCALL_READ","SYSCALL_SEMAPHORE_CREATE","SYSCALL_SEMAPHORE_DOWN","SYSCALL_SEMAPHORE_UP","SYSCALL_SLEEP","SYSCALL_THREAD_CREATE","SYSCALL_WAITPID","SYSCALL_WAITTID","SYSCALL_WRITE","SYSCALL_YIELD","fs","process","sync","sys_id_str","syscall","thread","sys_close","sys_dup","sys_open","sys_pipe","sys_read","sys_write","sys_exec","sys_exit","sys_fork","sys_get_time","sys_getpid","sys_kill","sys_waitpid","sys_yield","sys_condvar_create","sys_condvar_signal","sys_condvar_wait","sys_mutex_create","sys_mutex_lock","sys_mutex_unlock","sys_semaphore_create","sys_semaphore_down","sys_semaphore_up","sys_sleep","sys_gettid","sys_thread_create","sys_waittid","INITPROC","__private_field","add_initproc","block_current_and_run_next","block_current_task","borrow","borrow_mut","check_signals_of_current","context","current_add_signal","deref","exit_current_and_run_next","from","id","into","manager","process","processor","signal","suspend_current_and_run_next","switch","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","0","0","IDLE_PID","KSTACK_ALLOCATOR","KernelStack","PID_ALLOCATOR","PidHandle","RecycleAllocator","TaskUserRes","__private_field","__private_field","alloc","alloc_tid","alloc_user_res","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","current","dealloc","dealloc_tid","dealloc_user_res","deref","deref","drop","drop","drop","from","from","from","from","from","from","get_top","into","into","into","into","into","into","kernel_stack_position","kstack_alloc","new","new","pid_alloc","process","push_on_top","recycled","tid","trap_cx_bottom_from_tid","trap_cx_ppn","trap_cx_user_va","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","ustack_base","ustack_base","ustack_bottom_from_tid","ustack_top","PID2PCB","TASK_MANAGER","TaskManager","__private_field","__private_field","add","add_task","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","deref","fetch","fetch_task","from","from","from","insert_into_pid2process","into","into","into","new","pid2process","ready_queue","remove_from_pid2process","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","ProcessControlBlock","ProcessControlBlockInner","alloc_fd","alloc_tid","borrow","borrow","borrow_mut","borrow_mut","children","condvar_list","dealloc_tid","exec","exit_code","fd_table","fork","from","from","get_task","get_user_token","getpid","inner","inner_exclusive_access","into","into","is_zombie","memory_set","mutex_list","new","parent","pid","semaphore_list","signals","task_res_allocator","tasks","thread_count","try_from","try_from","try_into","try_into","type_id","type_id","PROCESSOR","Processor","__private_field","borrow","borrow","borrow_mut","borrow_mut","current","current","current_kstack_top","current_process","current_task","current_trap_cx","current_trap_cx_user_va","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","SIGABRT","SIGFPE","SIGILL","SIGINT","SIGSEGV","SignalFlags","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits","bitxor","bitxor_assign","borrow","borrow_mut","check_error","clone","clone_into","cmp","complement","contains","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","insert","intersection","intersects","into","is_all","is_empty","ne","not","partial_cmp","remove","set","sub","sub_assign","symmetric_difference","to_owned","toggle","try_from","try_into","type_id","union","__switch","Blocking","Ready","Running","TaskControlBlock","TaskControlBlockInner","TaskStatus","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","eq","exit_code","from","from","from","get_status","get_trap_cx","get_user_token","inner","inner_exclusive_access","into","into","into","kstack","new","process","res","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","TIMERS","TimerCondVar","__private_field","add_timer","borrow","borrow","borrow_mut","borrow_mut","check_timer","cmp","deref","eq","expire_ms","from","from","get_time","get_time_ms","into","into","partial_cmp","set_next_trigger","task","try_from","try_from","try_into","try_into","type_id","type_id","context","disable_supervisor_interrupt","enable_supervisor_interrupt","enable_timer_interrupt","init","set_kernel_trap_entry","set_user_trap_entry","trap_from_kernel","trap_handler","trap_return","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::board::qemu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::config","","","","","","","","os::console","","","","","","","","","","","","","","","","","","","","os::drivers","","","os::drivers::block","","","","","","","","","","","","os::drivers::block::virtio_blk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::chardev","","","","","","","","","","","","","","","os::drivers::chardev::ns16550a","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::drivers::plic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs","","","","","","","","","os::fs::easy_fs","","","","","","","os::fs::easy_fs::bitmap","","","","","","","","","","","","","","","","","os::fs::easy_fs::block_cache","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::block_dev","","","","os::fs::easy_fs::efs","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::layout","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::easy_fs::vfs","","","","","","","","","","","","","","","","","","","","","","","os::fs::inode","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::fs::pipe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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::condvar","","","","","","","","","","","","","","","","","","","","","","os::sync::mutex","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::sync::semaphore","","","","","","","","","","","","","","","","","","","","","","os::sync::up","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::syscall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::syscall::fs","","","","","","os::syscall::process","","","","","","","","os::syscall::sync","","","","","","","","","","os::syscall::thread","","","os::task","","","","","","","","","","","","","","","","","","","","","","","","","os::task::context","","","","","","","","","","","","","os::task::id","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::manager","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::process","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::processor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::signal","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::task::switch","os::task::task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::timer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","os::trap","","","","","","","","","","os::trap::context","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","InterruptEnableRegister","LineStatusRegister","Model Control Register","","","","","","","","","","ignore FCR","ignore MSR","ignore other registers","ignore SCR","Returns the set containing all flags.","Returns the set containing all flags.","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Adds the set of flags.","Adds the set of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","","","","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","Toggles the set of flags.","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns an empty set of flags.","Returns an empty set of flags.","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.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","","","","","","","","interrupt enable register","interrupt enable register","interrupt identification register","","","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both 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).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","line control register","line control register","line status register","line status register","model control register","modem control register","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the complement of this set of flags.","","","","","receiver buffer register","","","","","Removes the specified flags in-place.","Removes the specified flags in-place.","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","transmitter holding register","","","","Toggles the specified flags in-place.","Toggles the specified flags in-place.","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return (block_pos, bits64_pos, inner_pos)","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).","","","Load a new BlockCache from disk.","","","","","","","","","","","","","","","","","","","","Return a block ID not ID in the data area.","","","","","","","","","Returns the argument unchanged.","","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Clear size to zero and return blocks that should be …","","","Return block number correspond to size.","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","indirect1 and indirect2 block are allocated only when they …","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Return number of blocks needed include indirect1/2.","","","","","","","","","","","","","","","File size must be adjusted before.","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","We should not acquire efs lock here.","","","","","","","","","","","","","","","","","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.","","","","Returns the complement of this set of flags.","","","","","","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.","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return (read_end, write_end)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Definitions","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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, also returns …","","","","Inserts the specified flags in-place.","Assume that no conflicts.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","Mention that trampoline is not collected by areas.","","","","","Without kernel stacks.","Returns the complement of this set of flags.","","","","","","Removes the specified flags in-place.","","","","Inserts or removes the specified flags depending on the …","","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","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.","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.","","","","","","","","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","","Toggles the specified flags in-place.","","","","","","","Load a string from other address spaces into kernel space …","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","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).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Panic if the data has been borrowed.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","inner data","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If there is not a child process whose pid is same as …","","","","","","","","","","","","","","thread does not exist, return -1 thread has not exited …","","","","","This function must be followed by a schedule","","","","","","","","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.","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).","Return (bottom, top) of a kernel stack in kernel space.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Only support processes with a single thread.","","","Only support processes with a single thread.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","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.","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).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","Returns the union of between the flags in self and other.","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","",""],"i":[0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,3,2,0,3,2,3,2,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,4,5,4,5,4,5,4,5,0,0,4,5,4,5,4,5,4,5,0,0,0,0,6,0,6,6,6,6,6,6,6,6,0,0,0,0,7,8,7,8,7,8,7,8,7,8,8,7,8,8,8,7,8,7,8,7,8,0,0,0,0,8,0,0,9,9,9,9,9,10,9,0,10,9,9,9,10,11,11,12,11,0,0,0,0,0,0,11,13,0,12,13,0,14,15,14,15,13,12,11,16,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,15,14,16,17,18,13,12,11,15,14,16,17,18,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,18,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,13,13,13,13,13,12,12,12,12,12,11,11,11,11,11,15,14,16,17,18,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,18,13,12,11,15,14,15,16,18,13,12,11,13,12,11,13,12,11,15,14,16,17,18,13,12,11,13,12,11,13,12,11,15,14,15,14,15,14,13,12,11,16,18,13,12,11,17,13,12,11,15,16,18,17,16,13,12,11,13,12,11,13,12,11,13,12,11,13,12,11,14,13,12,11,13,12,11,15,14,16,17,18,13,12,11,15,14,16,17,18,13,12,11,15,14,16,17,18,13,12,11,13,12,11,16,18,16,0,19,0,19,20,20,19,20,19,20,20,19,19,20,20,20,20,20,19,20,20,20,20,19,20,20,20,20,19,20,19,20,19,20,19,20,19,0,0,0,0,21,21,0,21,21,0,0,0,0,0,0,0,0,0,0,22,22,22,22,22,0,22,22,22,22,22,22,22,22,0,0,0,0,23,24,0,24,24,24,25,23,24,25,23,24,23,24,24,25,23,0,25,24,24,24,25,23,24,24,24,25,25,24,24,24,25,23,24,25,23,24,25,23,0,26,26,26,0,0,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,28,0,0,0,28,0,0,0,0,0,0,0,0,29,30,30,29,31,29,30,28,31,29,30,28,29,31,31,29,29,30,28,31,31,29,30,28,29,29,29,29,31,29,31,31,30,30,31,29,30,28,29,29,31,31,30,30,30,29,29,29,31,31,29,30,28,31,29,30,28,29,31,29,30,28,29,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,0,0,0,33,33,0,33,33,34,33,33,33,33,33,33,33,33,33,35,36,34,33,35,36,34,33,33,33,33,33,33,34,33,33,33,33,33,33,33,33,33,35,36,34,33,33,33,33,33,33,35,36,33,33,33,35,36,34,33,33,33,0,33,35,33,36,0,33,35,35,33,35,35,33,33,33,33,33,33,33,35,36,34,33,35,36,34,33,35,36,34,33,33,35,35,35,37,37,37,0,0,0,0,38,38,38,38,39,38,37,39,38,37,39,37,37,37,39,38,37,38,39,38,37,0,38,39,38,39,39,39,38,38,38,37,39,38,37,39,38,37,39,38,37,39,39,39,38,38,39,0,0,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,0,0,0,0,0,0,0,0,42,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0,42,43,46,42,43,44,45,47,46,42,43,44,45,47,42,43,42,43,44,45,47,42,43,44,45,47,42,43,44,45,46,46,42,43,44,45,42,43,42,43,44,45,46,42,42,42,43,43,43,44,44,44,45,45,45,47,44,47,42,44,44,42,47,45,46,42,43,44,45,47,46,47,47,42,43,44,45,46,47,46,42,43,42,43,44,45,47,48,44,45,42,43,44,45,47,46,42,43,44,45,47,46,42,43,44,45,47,46,42,43,44,45,47,0,0,0,0,0,49,50,51,52,51,49,52,51,49,51,50,51,49,52,51,52,0,0,0,52,51,49,51,0,52,51,49,50,52,51,52,51,52,51,49,52,51,49,52,51,49,0,0,0,0,0,53,53,0,0,0,0,0,54,54,54,54,55,56,54,56,54,54,54,54,54,54,54,54,56,57,55,53,54,56,57,55,53,54,53,54,53,54,54,54,54,57,57,55,54,0,0,0,54,53,54,0,0,54,53,54,54,54,54,54,56,57,55,53,54,57,54,54,54,56,56,54,54,54,56,54,54,56,57,55,53,54,54,54,0,57,57,57,56,57,54,57,56,56,54,56,54,56,56,0,54,56,0,0,54,0,0,0,54,54,54,53,54,54,56,56,56,57,55,53,54,56,57,55,53,54,56,57,55,53,54,54,57,57,57,58,58,58,0,0,0,58,58,0,0,58,58,58,58,58,58,58,58,58,58,59,58,58,60,61,62,58,59,60,61,62,58,59,61,62,58,59,58,59,58,58,58,62,62,58,58,59,58,59,58,60,60,59,58,58,58,58,58,60,60,61,62,58,59,58,58,58,58,60,58,58,58,58,60,61,62,58,59,61,62,58,58,59,61,60,58,60,61,59,62,58,58,59,59,58,60,58,58,58,58,58,59,58,60,60,60,0,0,0,0,60,61,62,58,59,60,61,62,58,59,60,61,62,58,59,58,60,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,64,63,64,63,64,63,63,64,63,63,63,64,63,64,63,64,63,64,63,0,0,0,0,65,66,67,65,66,67,65,66,67,66,65,66,67,68,65,66,65,67,65,66,65,66,67,65,66,67,65,66,67,68,65,66,67,0,0,69,70,69,70,70,69,69,70,69,69,70,69,69,70,69,70,69,70,69,70,71,0,0,0,0,0,72,73,74,75,71,72,73,74,75,71,72,71,72,71,71,74,75,75,74,73,74,75,71,72,73,73,75,73,74,75,71,72,74,73,74,75,74,73,74,75,71,72,73,74,75,71,72,73,74,75,71,72,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,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,76,0,0,0,76,76,0,0,0,76,0,76,0,76,0,0,0,0,0,0,0,76,76,76,0,77,77,77,77,77,77,77,77,77,77,77,77,78,79,0,0,0,0,0,0,0,80,81,82,83,83,82,78,79,83,80,81,82,78,79,83,80,81,82,82,83,83,80,81,78,79,83,82,78,79,83,80,81,79,82,78,79,83,80,81,0,0,82,83,0,83,79,82,83,0,83,83,82,78,79,83,80,81,82,78,79,83,80,81,82,78,79,83,80,81,83,83,0,83,0,0,0,84,85,86,0,86,84,85,86,84,85,84,85,86,0,86,84,85,0,86,84,85,86,0,86,0,86,84,85,86,84,85,86,84,85,0,0,87,87,88,87,88,87,87,87,87,88,87,87,88,88,87,87,87,88,88,88,88,87,87,87,87,88,87,88,87,87,87,87,87,88,87,88,87,88,87,0,0,89,90,89,90,89,90,90,0,0,0,0,0,0,89,90,89,90,90,90,89,90,0,0,90,0,90,89,90,89,90,89,91,91,91,91,91,0,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,0,92,92,92,0,0,0,93,94,92,93,94,92,92,92,92,94,93,94,92,94,94,93,93,93,93,94,92,93,93,93,94,94,94,92,94,93,94,92,93,94,92,93,94,92,0,0,0,0,95,0,96,95,96,95,0,96,95,96,96,96,95,0,0,96,95,96,0,96,96,95,96,95,96,95,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97],"f":[null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],null,null,[[["",0]],["upintrfreecell",3]],null,[[]],null,[[]],null,null,null,null,null,null,[[],["never",0]],null,null,null,null,null,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]],[[["",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,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[]],[[]],[[["arguments",3]]],[[["arguments",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0],["str",0]],["result",6]],[[["",0],["str",0]],["result",6]],null,null,null,null,null,[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["arc",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0]],["upintrfreecell",3]],[[]],[[]],[[["",0]]],[[]],[[]],[[]],[[["",0],["usize",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[["usize",0]],["physaddr",3]],[[["physaddr",3],["usize",0]],["i32",0]],[[["physaddr",3]],["virtaddr",3]],[[["virtaddr",3]],["physaddr",3]],[[["",0],["usize",0]]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["arc",3]],[[]],[[["",0]]],[[]],null,[[["",0]],["u8",0]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0],["u8",0]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],null,[[]],[[]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],[[["ier",3]]],[[["lsr",3]]],[[["mcr",3]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["u8",0]],[[["",0]],["u8",0]],[[["",0]],["u8",0]],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]],[[["",0]],["",0]],[[["",0]],["ier",3]],[[["",0]],["lsr",3]],[[["",0]],["mcr",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["ier",3]],["ordering",4]],[[["",0],["lsr",3]],["ordering",4]],[[["",0],["mcr",3]],["ordering",4]],[[]],[[]],[[]],null,[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0],["ier",3]],["bool",0]],[[["",0],["lsr",3]],["bool",0]],[[["",0],["mcr",3]],["bool",0]],[[["",0],["intoiterator",8]]],[[["",0],["intoiterator",8]]],[[["",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]],[[["",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]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",0]],["option",4]],[[["u8",0]],["option",4]],[[["u8",0]],["option",4]],[[["u8",0]]],[[["u8",0]]],[[["u8",0]]],[[["u8",0]]],[[["u8",0]]],[[["u8",0]]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[["intoiterator",8]]],[[["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,null,[[["",0]]],null,[[["",0]]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],null,null,null,null,null,null,[[["",0],["ier",3]],["bool",0]],[[["",0],["lsr",3]],["bool",0]],[[["",0],["mcr",3]],["bool",0]],[[["usize",0]]],[[]],[[]],[[]],[[]],null,[[["",0],["ier",3]],["option",4,[["ordering",4]]]],[[["",0],["lsr",3]],["option",4,[["ordering",4]]]],[[["",0],["mcr",3]],["option",4,[["ordering",4]]]],null,[[["",0]],["option",4,[["u8",0]]]],[[["",0]],["u8",0]],null,[[["",0]],["readwithoutdlab",3]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0],["bool",0]]],[[["",0],["bool",0]]],[[["",0],["bool",0]]],[[]],[[]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],null,[[["",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]],[[],["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],["u8",0]]],[[["",0],["u8",0]]],[[["",0]],["writewithoutdlab",3]],null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0],["usize",0],["intrtargetpriority",4]],["u32",0]],[[["",0],["usize",0],["intrtargetpriority",4]]],[[["",0]],["intrtargetpriority",4]],[[["",0],["",0]]],[[["",0],["usize",0],["intrtargetpriority",4],["u32",0]]],[[["",0],["usize",0],["intrtargetpriority",4],["usize",0]]],[[["",0],["usize",0],["intrtargetpriority",4],["usize",0]]],[[["",0],["usize",0],["intrtargetpriority",4],["usize",0]]],[[]],[[]],[[["",0],["usize",0]],["u32",0]],[[["",0],["usize",0],["intrtargetpriority",4]],["u32",0]],[[["usize",0],["intrtargetpriority",4]],["usize",0]],[[]],[[]],[[["usize",0]]],[[["",0],["usize",0]]],[[["",0],["usize",0],["u32",0]]],[[["",0],["usize",0],["intrtargetpriority",4],["u32",0]]],[[],["usize",0]],[[["",0],["usize",0],["intrtargetpriority",4]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,[[["",0],["userbuffer",3]],["usize",0]],[[["",0]],["bool",0]],null,[[["",0]],["bool",0]],[[["",0],["userbuffer",3]],["usize",0]],null,null,null,null,null,null,null,null,null,null,[[["",0],["arc",3]],["option",4,[["usize",0]]]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0],["arc",3],["usize",0]]],[[["usize",0]]],[[]],[[]],[[["",0]],["usize",0]],[[["usize",0],["usize",0]]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,[[["",0],["usize",0]],["usize",0]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0]],["mutex",3]],[[["",0]]],[[]],[[]],[[]],[[["usize",0],["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3,[["blockcache",3]]]]]],[[["",0],["usize",0],["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3,[["blockcache",3]]]]]],[[["",0],["usize",0]],["",0]],[[["",0],["usize",0]],["",0]],[[]],[[]],[[]],null,[[["",0],["usize",0]]],[[["usize",0],["arc",3,[["blockdevice",8]]]]],[[]],null,[[["",0],["usize",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[["",0]]],[[["",0],["usize",0]]],[[["",0],["usize",0]]],null,null,[[["",0]],["u32",0]],[[["",0]],["u32",0]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[["arc",3,[["blockdevice",8]]],["u32",0],["u32",0]],["arc",3,[["mutex",3]]]],null,null,[[["",0],["u32",0]]],[[]],[[["",0],["u32",0]],["u32",0]],[[["",0],["u32",0]]],null,null,[[]],[[["arc",3,[["blockdevice",8]]]],["arc",3,[["mutex",3]]]],[[["arc",3]],["inode",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["u32",0]],["u32",0]],[[["",0]]],[[["",0]]],[[["",0],["u32",0]],["u32",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0],["arc",3]],["vec",3,[["u32",0]]]],null,null,[[["",0]],["u32",0]],null,[[]],[[["",0],["diskinodetype",4]],["bool",0]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["",0],["u32",0],["arc",3]],["u32",0]],[[["",0],["u32",0],["vec",3,[["u32",0]]],["arc",3]]],null,null,[[["",0],["u32",0],["u32",0],["u32",0],["u32",0],["u32",0]]],[[["",0],["diskinodetype",4]]],null,null,[[["",0]],["u32",0]],null,[[]],[[]],[[]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],null,[[["",0]],["str",0]],null,[[["str",0],["u32",0]]],[[["",0],["usize",0],["arc",3]],["usize",0]],null,[[["u32",0]],["u32",0]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0],["usize",0],["arc",3]],["usize",0]],null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]]],[[["",0],["str",0]],["option",4,[["arc",3,[["inode",3]]]]]],[[["",0],["str",0]],["option",4,[["arc",3,[["inode",3]]]]]],[[["",0],["str",0],["diskinode",3]],["option",4,[["u32",0]]]],[[]],null,[[["",0],["u32",0],["diskinode",3],["mutexguard",3]]],[[]],[[["",0]],["vec",3,[["string",3]]]],[[["",0]]],[[["u32",0],["usize",0],["arc",3,[["mutex",3,[["easyfilesystem",3]]]]],["arc",3,[["blockdevice",8]]]]],[[["",0],["usize",0]],["usize",0]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0],["usize",0]],["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,null,null,null,null,null,[[["",0]],["bool",0]],null,[[["",0]],["usize",0]],[[["",0]],["usize",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0]],["ringbufferstatus",4]],[[["",0],["",0]]],[[["",0],["ringbufferstatus",4]],["bool",0]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],[[["",0],["userbuffer",3]],["usize",0]],[[["",0]],["u8",0]],[[["arc",3,[["upintrfreecell",3,[["piperingbuffer",3]]]]]]],[[["",0]],["bool",0]],null,[[["",0],["arc",3]]],null,null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["bool",0]],null,[[["",0],["userbuffer",3]],["usize",0]],[[["",0],["u8",0]]],null,[[["arc",3,[["upintrfreecell",3,[["piperingbuffer",3]]]]]]],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,[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0]],["physaddr",3]],[[["",0]],["virtaddr",3]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0]],["simplerange",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["physaddr",3]],["ordering",4]],[[["",0],["virtaddr",3]],["ordering",4]],[[["",0],["physpagenum",3]],["ordering",4]],[[["",0],["virtpagenum",3]],["ordering",4]],null,null,[[["",0],["physaddr",3]],["bool",0]],[[["",0],["virtaddr",3]],["bool",0]],[[["",0],["physpagenum",3]],["bool",0]],[[["",0],["virtpagenum",3]],["bool",0]],[[["",0]],["physpagenum",3]],[[["",0]],["virtpagenum",3]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[["",0],["formatter",3]],["result",6]],[[]],[[]],[[["usize",0]]],[[["physpagenum",3]]],[[]],[[["usize",0]]],[[["virtpagenum",3]]],[[["physaddr",3]]],[[["usize",0]]],[[]],[[["virtaddr",3]]],[[["usize",0]]],[[]],[[]],[[["",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]],["upintrfreecell",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]]],[[["usize",0]],["never",0]],null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],null,[[]],[[]],[[]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]]],null,[[["",0],["arc",3,[["mutex",8]]]]],null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[["",0]]],[[["",0]]],[[["",0]]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]]],[[["",0]]],[[["",0]]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["",0]]],[[]],[[]],null,[[]],[[]],[[["usize",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]]],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]],["upsafecellraw",3]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["upintrrefmut",3]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["",0]],null,null,[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],null,[[],["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]],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,[[["usize",0]],["str",0]],[[["usize",0]],["isize",0]],null,[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["u32",0]],["isize",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]],[[["usize",0],["u32",0]],["isize",0]],[[["isize",0]],["isize",0]],[[],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0],["usize",0]],["isize",0]],[[["bool",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[["usize",0]],["isize",0]],[[],["isize",0]],[[["usize",0],["usize",0]],["isize",0]],[[["usize",0]],["i32",0]],null,null,[[]],[[]],[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["option",4]],null,[[["signalflags",3]]],[[["",0]],["arc",3]],[[["i32",0]]],[[]],null,[[]],null,null,null,null,[[]],null,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,null,null,null,null,null,null,null,null,[[["",0]],["usize",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]],null,[[["",0],["usize",0]]],[[["",0]]],[[["",0]]],[[["",0]],["upintrfreecell",3]],[[["",0]],["upintrfreecell",3]],[[["",0]]],[[["",0]]],[[["",0]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["usize",0]],[[]],[[]],[[]],[[]],[[]],[[]],[[["usize",0]]],[[],["kernelstack",3]],[[]],[[["arc",3,[["processcontrolblock",3]]],["usize",0],["bool",0]]],[[],["pidhandle",3]],null,[[["",0]]],null,null,[[["usize",0]],["usize",0]],[[["",0]],["physpagenum",3]],[[["",0]],["usize",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]],[[["",0]],["usize",0]],null,[[["usize",0],["usize",0]],["usize",0]],[[["",0]],["usize",0]],null,null,null,null,null,[[["",0],["arc",3,[["taskcontrolblock",3]]]]],[[["arc",3,[["taskcontrolblock",3]]]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["upintrfreecell",3]],[[["",0]],["upintrfreecell",3]],[[["",0]],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[]],[[]],[[]],[[["usize",0],["arc",3,[["processcontrolblock",3]]]]],[[]],[[]],[[]],[[]],[[["usize",0]],["option",4,[["arc",3,[["processcontrolblock",3]]]]]],null,[[["usize",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,[[["",0]],["usize",0]],[[["",0]],["usize",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,[[["",0],["usize",0]]],[[["arc",3],["vec",3,[["string",3]]]]],null,null,[[["arc",3]],["arc",3]],[[]],[[]],[[["",0],["usize",0]],["arc",3,[["taskcontrolblock",3]]]],[[["",0]],["usize",0]],[[["",0]],["usize",0]],null,[[["",0]],["upintrrefmut",3,[["processcontrolblockinner",3]]]],[[]],[[]],null,null,null,[[],["arc",3]],null,null,null,null,null,null,[[["",0]],["usize",0]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",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,[[],["usize",0]],[[],["arc",3,[["processcontrolblock",3]]]],[[],["option",4,[["arc",3,[["taskcontrolblock",3]]]]]],[[],["trapcontext",3]],[[],["usize",0]],[[],["usize",0]],[[["",0]],["upintrfreecell",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,[[]],[[]],[[["",0]]],[[["signalflags",3]]],[[["",0]]],[[["",0]],["u32",0]],null,[[]],[[["",0]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["option",4]],[[["",0]],["signalflags",3]],[[["",0],["",0]]],[[["",0],["signalflags",3]],["ordering",4]],[[]],[[["",0]],["bool",0]],[[]],[[]],[[["",0],["signalflags",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]]],[[["",0]]],[[]],[[["",0]],["bool",0]],[[]],[[["",0]],["bool",0]],[[["",0]],["bool",0]],[[["",0],["signalflags",3]],["bool",0]],[[]],[[["",0],["signalflags",3]],["option",4,[["ordering",4]]]],[[["",0]]],[[["",0],["bool",0]]],[[]],[[["",0]]],[[]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["taskstatus",4]],[[["",0],["",0]]],[[["",0],["taskstatus",4]],["bool",0]],null,[[]],[[]],[[]],[[["",0]],["taskstatus",4]],[[["",0]],["trapcontext",3]],[[["",0]],["usize",0]],null,[[["",0]],["upintrrefmut",3,[["taskcontrolblockinner",3]]]],[[]],[[]],[[]],null,[[["arc",3,[["processcontrolblock",3]]],["usize",0],["bool",0]]],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,null,null,null,[[["usize",0],["arc",3,[["taskcontrolblock",3]]]]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[["",0],["",0]],["ordering",4]],[[["",0]],["upintrfreecell",3]],[[["",0],["",0]],["bool",0]],null,[[]],[[]],[[],["usize",0]],[[],["usize",0]],[[]],[[]],[[["",0],["",0]],["option",4,[["ordering",4]]]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[["trapcontext",3]]],[[],["never",0]],[[],["never",0]],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,"DEV_NON_BLOCKING_ACCESS"],[3,"RISCV64"],[8,"QEMUExit"],[3,"Stdout"],[3,"Kstdout"],[3,"BLOCK_DEVICE"],[3,"QUEUE_FRAMES"],[3,"VirtIOBlock"],[3,"UART"],[8,"CharDevice"],[3,"MCR"],[3,"LSR"],[3,"IER"],[3,"WriteWithoutDLAB"],[3,"ReadWithoutDLAB"],[3,"NS16550aRaw"],[3,"NS16550aInner"],[3,"NS16550a"],[4,"IntrTargetPriority"],[3,"PLIC"],[8,"File"],[3,"Bitmap"],[3,"BLOCK_CACHE_MANAGER"],[3,"BlockCache"],[3,"BlockCacheManager"],[8,"BlockDevice"],[3,"EasyFileSystem"],[4,"DiskInodeType"],[3,"DiskInode"],[3,"DirEntry"],[3,"SuperBlock"],[3,"Inode"],[3,"OpenFlags"],[3,"ROOT_INODE"],[3,"OSInode"],[3,"OSInodeInner"],[4,"RingBufferStatus"],[3,"PipeRingBuffer"],[3,"Pipe"],[3,"Stdin"],[3,"Stdout"],[3,"PhysAddr"],[3,"VirtAddr"],[3,"PhysPageNum"],[3,"VirtPageNum"],[3,"SimpleRangeIterator"],[3,"SimpleRange"],[8,"StepByOne"],[3,"FRAME_ALLOCATOR"],[8,"FrameAllocator"],[3,"StackFrameAllocator"],[3,"FrameTracker"],[4,"MapType"],[3,"MapPermission"],[3,"KERNEL_SPACE"],[3,"MemorySet"],[3,"MapArea"],[3,"PTEFlags"],[3,"PageTableEntry"],[3,"PageTable"],[3,"UserBuffer"],[3,"UserBufferIterator"],[3,"Condvar"],[3,"CondvarInner"],[3,"MutexSpin"],[3,"MutexBlocking"],[3,"MutexBlockingInner"],[8,"Mutex"],[3,"Semaphore"],[3,"SemaphoreInner"],[3,"UPIntrRefMut"],[3,"INTR_MASKING_INFO"],[3,"UPSafeCellRaw"],[3,"IntrMaskingInfo"],[3,"UPIntrFreeCell"],[3,"INITPROC"],[3,"TaskContext"],[3,"PidHandle"],[3,"KernelStack"],[3,"PID_ALLOCATOR"],[3,"KSTACK_ALLOCATOR"],[3,"RecycleAllocator"],[3,"TaskUserRes"],[3,"TASK_MANAGER"],[3,"PID2PCB"],[3,"TaskManager"],[3,"ProcessControlBlockInner"],[3,"ProcessControlBlock"],[3,"PROCESSOR"],[3,"Processor"],[3,"SignalFlags"],[4,"TaskStatus"],[3,"TaskControlBlock"],[3,"TaskControlBlockInner"],[3,"TIMERS"],[3,"TimerCondVar"],[3,"TrapContext"]]}\ }'); if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/ch9-log/search.js b/ch9-log/search.js index 3aa50607..a8026db5 100644 --- a/ch9-log/search.js +++ b/ch9-log/search.js @@ -1,2 +1,2 @@ -(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[result.id];obj.lev=result.lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates[obj.fullPath]){continue}duplicates[obj.fullPath]=true;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){var result=results[entry];result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};ar.push(result)}}results=ar;if(results.length===0){return[]}results.sort(function(aaa,bbb){var a,b;a=(aaa.word!==val);b=(bbb.word!==val);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==window.currentCrate);b=(bbb.item.crate!==window.currentCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(var i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){var found=false;if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){found=obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return found?0:MAX_LEV_DISTANCE+1}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(isExact,res,fullId,id,index,lev){if(lev===0||(!isExact&&lev<=MAX_LEV_DISTANCE)){if(res[fullId]!==undefined){var result=res[fullId];if(result.dontValidate||result.lev<=lev){return}}res[fullId]={id:id,index:index,dontValidate:isExact,lev:lev,}}}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i0){firstNonZeroDistance=distance;break}}in_args=firstNonZeroDistance}addIntoResults(true,results_in_args,fullId,i,-1,in_args);addIntoResults(true,results_returned,fullId,i,-1,returned);if(is_module){addIntoResults(true,results,fullId,i,-1,0)}}}query.inputs=inputs.map(function(input){return input.name});query.output=output.name}else{query.inputs=[val];query.output=val;query.search=val;val=val.replace(/_/g,"");var valGenerics=extractGenerics(val);var paths=valLower.split("::");removeEmptyStringsFromArray(paths);val=paths[paths.length-1];var contains=paths.slice(0,paths.length>1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}addIntoResults(false,results_in_args,fullId,j,index,in_args);addIntoResults(false,results_returned,fullId,j,index,returned);if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}addIntoResults(false,results,fullId,j,index,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type="",query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}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){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0,len=positions.length;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev}}return start}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0,arrays_len=arrays.length;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1}}}return ret}function tokenizeQuery(raw){var i,matched;var l=raw.length;var depth=0;var nextAngle=/(<|>)/g;var ret=[];var start=0;for(i=0;i'){depth+=1}break;case">":if(depth>0){depth-=1}break;case",":if(depth===0){ret.push(raw.substring(start,i));start=i+1}break}}if(start!==i){ret.push(raw.substring(start,i))}return ret}var queries=tokenizeQuery(query.raw);var results={"in_args":[],"returned":[],"others":[],};for(var i=0,len=queries.length;i1){return{"in_args":mergeArrays(results.in_args),"returned":mergeArrays(results.returned),"others":mergeArrays(results.others),}}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function getFilterCrates(){var elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return undefined}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){searchState.putBackSearch(searchState.input)}return}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=getNakedUrl()+"?search="+encodeURIComponent(query.raw)+window.location.hash;if(!history.state&&!params.search){history.pushState(query,"",newURL)}else{history.replaceState(query,"",newURL)}}var filterCrates=getFilterCrates();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){updateLocalStorage("rustdoc-saved-filter-crate",ev.target.value);currentResults=null;search(undefined,true)}searchWords=buildIndex(rawSearchIndex);registerSearchEvents();if(searchState.getQueryStringParams().search){search()}};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file +(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/ch9-log/settings.css b/ch9-log/settings.css index 67098658..35df7bce 100644 --- a/ch9-log/settings.css +++ b/ch9-log/settings.css @@ -1 +1 @@ -.setting-line{padding:5px;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;}.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 +.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/ch9-log/settings.html b/ch9-log/settings.html index d801b250..a433d003 100644 --- a/ch9-log/settings.html +++ b/ch9-log/settings.html @@ -1,6 +1,17 @@ Rustdoc settings -

Rustdoc settings

Theme preferences
Use system theme
Theme
Preferred dark theme
Preferred light 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
+ +
+

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 diff --git a/ch9-log/settings.js b/ch9-log/settings.js index b26bdadc..80471891 100644 --- a/ch9-log/settings.js +++ b/ch9-log/settings.js @@ -1 +1 @@ -(function(){function changeSetting(settingName,value){updateLocalStorage("rustdoc-"+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.parentElement,"hidden");removeClass(document.getElementById("preferred-light-theme").parentElement.parentElement,"hidden");removeClass(document.getElementById("preferred-dark-theme").parentElement.parentElement,"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme").parentElement.parentElement,"hidden");addClass(document.getElementById("preferred-dark-theme").parentElement.parentElement,"hidden");removeClass(document.getElementById("theme").parentElement.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)}})}window.addEventListener("DOMContentLoaded",setEvents)})() \ No newline at end of file +(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/ch9-log/source-files.js b/ch9-log/source-files.js index a46e85b2..e75c32f7 100644 --- a/ch9-log/source-files.js +++ b/ch9-log/source-files.js @@ -1,3 +1,3 @@ var N = null;var sourcesIndex = {}; -sourcesIndex["os"] = {"name":"","dirs":[{"name":"board","files":["mod.rs"]},{"name":"drivers","dirs":[{"name":"block","files":["mod.rs","virtio_blk.rs"]},{"name":"chardev","files":["mod.rs","ns16550a.rs"]}],"files":["mod.rs","plic.rs"]},{"name":"fs","dirs":[{"name":"easy_fs","files":["bitmap.rs","block_cache.rs","block_dev.rs","efs.rs","layout.rs","mod.rs","vfs.rs"]}],"files":["inode.rs","mod.rs","pipe.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":["condvar.rs","mod.rs","mutex.rs","semaphore.rs","up.rs"]},{"name":"syscall","files":["fs.rs","mod.rs","process.rs","sync.rs","thread.rs"]},{"name":"task","files":["context.rs","id.rs","manager.rs","mod.rs","process.rs","processor.rs","signal.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"]}; +sourcesIndex["os"] = {"name":"","dirs":[{"name":"board","files":["mod.rs","qemu.rs"]},{"name":"drivers","dirs":[{"name":"block","files":["mod.rs","virtio_blk.rs"]},{"name":"chardev","files":["mod.rs","ns16550a.rs"]}],"files":["mod.rs","plic.rs"]},{"name":"fs","dirs":[{"name":"easy_fs","files":["bitmap.rs","block_cache.rs","block_dev.rs","efs.rs","layout.rs","mod.rs","vfs.rs"]}],"files":["inode.rs","mod.rs","pipe.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":["condvar.rs","mod.rs","mutex.rs","semaphore.rs","up.rs"]},{"name":"syscall","files":["fs.rs","mod.rs","process.rs","sync.rs","thread.rs"]},{"name":"task","files":["context.rs","id.rs","manager.rs","mod.rs","process.rs","processor.rs","signal.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/ch9-log/source-script.js b/ch9-log/source-script.js index 09515e07..9faf492c 100644 --- a/ch9-log/source-script.js +++ b/ch9-log/source-script.js @@ -1 +1 @@ -(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("rustdoc-source-sidebar-show","true")}else{sidebar.classList.remove("expanded");child.innerText=">";updateLocalStorage("rustdoc-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("rustdoc-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("rustdoc-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.insertBefore(sidebar,document.querySelector(".sidebar-logo").nextSibling);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,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(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file +(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/ch9-log/src/os/board/mod.rs.html b/ch9-log/src/os/board/mod.rs.html index 39910e11..8856625c 100644 --- a/ch9-log/src/os/board/mod.rs.html +++ b/ch9-log/src/os/board/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -48,7 +50,13 @@
 45
 46
 47
-
pub const CLOCK_FREQ: usize = 12500000;
+48
+49
+50
+
mod qemu;
+pub use qemu::*;
+
+pub const CLOCK_FREQ: usize = 12500000;
 
 pub const MMIO: &[(usize, usize)] = &[
     (0x1000_0000, 0x1000),
@@ -96,5 +104,5 @@
     plic.complete(0, IntrTargetPriority::Supervisor, intr_src_id);
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/board/qemu.rs.html b/ch9-log/src/os/board/qemu.rs.html new file mode 100644 index 00000000..5640c730 --- /dev/null +++ b/ch9-log/src/os/board/qemu.rs.html @@ -0,0 +1,268 @@ +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
+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
+
pub const CLOCK_FREQ: usize = 12500000;
+
+pub const MMIO: &[(usize, usize)] = &[
+    (0x1000_0000, 0x1000),        // VIRT_UART0 in virt machine
+    (0x1000_1000, 0x1000),        // VIRT_VIRTIO in virt machine 
+    (0x0C00_0000, 0x40_0000),  // VIRT_PLIC in virt machine
+    (0x0010_0000, 0x00_2000),  // VIRT_TEST/RTC  in virt machine
+];
+
+pub type BlockDeviceImpl = crate::drivers::block::VirtIOBlock;
+pub type CharDeviceImpl = crate::drivers::chardev::NS16550a<VIRT_UART>;
+
+pub const VIRT_PLIC: usize = 0xC00_0000;
+pub const VIRT_UART: usize = 0x1000_0000;
+
+use crate::drivers::block::BLOCK_DEVICE;
+use crate::drivers::chardev::{CharDevice, UART};
+use crate::drivers::plic::{IntrTargetPriority, PLIC};
+
+pub fn device_init() {
+    use riscv::register::sie;
+    
+    kprintln!("[KERN] board::qemu::device_init() begin");
+    let mut plic = unsafe { PLIC::new(VIRT_PLIC) };
+    let hart_id: usize = 0;
+    let supervisor = IntrTargetPriority::Supervisor;
+    let machine = IntrTargetPriority::Machine;
+    plic.set_threshold(hart_id, supervisor, 0);
+    plic.set_threshold(hart_id, machine, 1);
+    for intr_src_id in [1usize, 10] {
+        plic.enable(hart_id, supervisor, intr_src_id);
+        plic.set_priority(intr_src_id, 1);
+    }
+    unsafe {
+        sie::set_sext();
+    }
+    kprintln!("[KERN] board::qemu::device_init() end");
+}
+
+pub fn irq_handler() {
+    let mut plic = unsafe { PLIC::new(VIRT_PLIC) };
+    let intr_src_id = plic.claim(0, IntrTargetPriority::Supervisor);
+    match intr_src_id {
+        1 => BLOCK_DEVICE.handle_irq(),
+        10 => UART.handle_irq(),
+        _ => panic!("unsupported IRQ {}", intr_src_id),
+    }
+    plic.complete(0, IntrTargetPriority::Supervisor, intr_src_id);
+}
+
+//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 diff --git a/ch9-log/src/os/config.rs.html b/ch9-log/src/os/config.rs.html index 7e23b86e..66a33366 100644 --- a/ch9-log/src/os/config.rs.html +++ b/ch9-log/src/os/config.rs.html @@ -1,15 +1,17 @@ config.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -28,5 +30,5 @@
 
 pub use crate::board::{CLOCK_FREQ, MMIO};
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/console.rs.html b/ch9-log/src/os/console.rs.html index cc36963b..9f1e8d21 100644 --- a/ch9-log/src/os/console.rs.html +++ b/ch9-log/src/os/console.rs.html @@ -1,15 +1,17 @@ console.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -123,5 +125,5 @@
         $crate::console::kprint(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
     }
 }
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/block/mod.rs.html b/ch9-log/src/os/drivers/block/mod.rs.html index b8a4c26d..75b5f1b5 100644 --- a/ch9-log/src/os/drivers/block/mod.rs.html +++ b/ch9-log/src/os/drivers/block/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -68,5 +70,5 @@
     println!("block device test passed!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/block/virtio_blk.rs.html b/ch9-log/src/os/drivers/block/virtio_blk.rs.html index f5b286f4..e55cad4e 100644 --- a/ch9-log/src/os/drivers/block/virtio_blk.rs.html +++ b/ch9-log/src/os/drivers/block/virtio_blk.rs.html @@ -1,105 +1,107 @@ 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
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
+    
+    
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
@@ -268,5 +270,5 @@
         .unwrap()
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/chardev/mod.rs.html b/ch9-log/src/os/drivers/chardev/mod.rs.html index 5cba19bc..76815765 100644 --- a/ch9-log/src/os/drivers/chardev/mod.rs.html +++ b/ch9-log/src/os/drivers/chardev/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -42,5 +44,5 @@
     };
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/chardev/ns16550a.rs.html b/ch9-log/src/os/drivers/chardev/ns16550a.rs.html index 28026916..10178f76 100644 --- a/ch9-log/src/os/drivers/chardev/ns16550a.rs.html +++ b/ch9-log/src/os/drivers/chardev/ns16550a.rs.html @@ -1,105 +1,107 @@ ns16550a.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
+    
+    
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
@@ -176,11 +178,9 @@
 173
 174
 175
-176
 
///! Ref: https://www.lammertbies.nl/comm/info/serial-uart
 ///! Ref: ns16550a datasheet: https://datasheetspdf.com/pdf-file/605590/NationalSemiconductor/NS16550A/1
 ///! Ref: ns16450 datasheet: https://datasheetspdf.com/pdf-file/1311818/NationalSemiconductor/NS16450/1
-
 use super::CharDevice;
 use crate::sync::{Condvar, UPIntrFreeCell};
 use crate::task::schedule;
@@ -191,7 +191,7 @@
 bitflags! {
     /// InterruptEnableRegister
     pub struct IER: u8 {
-        const RX_AVALIABLE = 1 << 0;
+        const RX_AVAILABLE = 1 << 0;
         const TX_EMPTY = 1 << 1;
     }
 
@@ -274,7 +274,7 @@
         mcr |= MCR::REQUEST_TO_SEND;
         mcr |= MCR::AUX_OUTPUT2;
         read_end.mcr.write(mcr);
-        let ier = IER::RX_AVALIABLE;
+        let ier = IER::RX_AVAILABLE;
         read_end.ier.write(ier);
     }
 
@@ -354,5 +354,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/mod.rs.html b/ch9-log/src/os/drivers/mod.rs.html index c7fcb12d..65adf397 100644 --- a/ch9-log/src/os/drivers/mod.rs.html +++ b/ch9-log/src/os/drivers/mod.rs.html @@ -1,7 +1,9 @@ mod.rs - source -
1
+    
+    
1
 2
 3
 4
@@ -14,5 +16,5 @@
 pub use block::BLOCK_DEVICE;
 pub use chardev::UART;
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/drivers/plic.rs.html b/ch9-log/src/os/drivers/plic.rs.html index a5bcfab8..55cc394b 100644 --- a/ch9-log/src/os/drivers/plic.rs.html +++ b/ch9-log/src/os/drivers/plic.rs.html @@ -1,105 +1,107 @@ plic.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
+    
+    
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
@@ -250,5 +252,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/bitmap.rs.html b/ch9-log/src/os/fs/easy_fs/bitmap.rs.html index 288b3d26..19a433a6 100644 --- a/ch9-log/src/os/fs/easy_fs/bitmap.rs.html +++ b/ch9-log/src/os/fs/easy_fs/bitmap.rs.html @@ -1,15 +1,17 @@ bitmap.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -146,5 +148,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/block_cache.rs.html b/ch9-log/src/os/fs/easy_fs/block_cache.rs.html index 75479104..abd9b4e9 100644 --- a/ch9-log/src/os/fs/easy_fs/block_cache.rs.html +++ b/ch9-log/src/os/fs/easy_fs/block_cache.rs.html @@ -1,105 +1,107 @@ block_cache.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
+    
+    
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
@@ -294,5 +296,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/block_dev.rs.html b/ch9-log/src/os/fs/easy_fs/block_dev.rs.html index 1dc786c0..d46c1ee6 100644 --- a/ch9-log/src/os/fs/easy_fs/block_dev.rs.html +++ b/ch9-log/src/os/fs/easy_fs/block_dev.rs.html @@ -1,7 +1,9 @@ block_dev.rs - source -
1
+    
+    
1
 2
 3
 4
@@ -16,5 +18,5 @@
     fn handle_irq(&self);
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/efs.rs.html b/ch9-log/src/os/fs/easy_fs/efs.rs.html index c7dc13a7..30e2c637 100644 --- a/ch9-log/src/os/fs/easy_fs/efs.rs.html +++ b/ch9-log/src/os/fs/easy_fs/efs.rs.html @@ -1,105 +1,107 @@ efs.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
+    
+    
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
@@ -318,5 +320,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/layout.rs.html b/ch9-log/src/os/fs/easy_fs/layout.rs.html index 796d3f52..951ae2db 100644 --- a/ch9-log/src/os/fs/easy_fs/layout.rs.html +++ b/ch9-log/src/os/fs/easy_fs/layout.rs.html @@ -1,105 +1,107 @@ layout.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
+    
+    
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
@@ -838,5 +840,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/mod.rs.html b/ch9-log/src/os/fs/easy_fs/mod.rs.html index cdfd0bd6..e3de6834 100644 --- a/ch9-log/src/os/fs/easy_fs/mod.rs.html +++ b/ch9-log/src/os/fs/easy_fs/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -38,5 +40,5 @@
 pub use layout::*;
 pub use vfs::Inode;
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/easy_fs/vfs.rs.html b/ch9-log/src/os/fs/easy_fs/vfs.rs.html index f14054e4..b8e1e21b 100644 --- a/ch9-log/src/os/fs/easy_fs/vfs.rs.html +++ b/ch9-log/src/os/fs/easy_fs/vfs.rs.html @@ -1,105 +1,107 @@ vfs.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
+    
+    
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
@@ -398,5 +400,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/inode.rs.html b/ch9-log/src/os/fs/inode.rs.html index 28f34e6b..7a39c29f 100644 --- a/ch9-log/src/os/fs/inode.rs.html +++ b/ch9-log/src/os/fs/inode.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -296,5 +298,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/mod.rs.html b/ch9-log/src/os/fs/mod.rs.html index 9e3dd79d..75b525c5 100644 --- a/ch9-log/src/os/fs/mod.rs.html +++ b/ch9-log/src/os/fs/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -35,5 +37,5 @@
 pub use pipe::{make_pipe, Pipe};
 pub use stdio::{Stdin, Stdout};
 pub use easy_fs::*;
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/pipe.rs.html b/ch9-log/src/os/fs/pipe.rs.html index a513e20d..44687393 100644 --- a/ch9-log/src/os/fs/pipe.rs.html +++ b/ch9-log/src/os/fs/pipe.rs.html @@ -1,105 +1,107 @@ pipe.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
+    
+    
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
@@ -334,5 +336,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/fs/stdio.rs.html b/ch9-log/src/os/fs/stdio.rs.html index 9323b00e..9a0f5a06 100644 --- a/ch9-log/src/os/fs/stdio.rs.html +++ b/ch9-log/src/os/fs/stdio.rs.html @@ -1,15 +1,17 @@ stdio.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -92,5 +94,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/lang_items.rs.html b/ch9-log/src/os/lang_items.rs.html index 3510fcf6..f559c0d2 100644 --- a/ch9-log/src/os/lang_items.rs.html +++ b/ch9-log/src/os/lang_items.rs.html @@ -1,15 +1,17 @@ lang_items.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -58,7 +60,7 @@
     unsafe {
         backtrace();
     }
-    shutdown()
+    shutdown(255)
 }
 
 unsafe fn backtrace() {
@@ -76,5 +78,5 @@
     println!("---END   BACKTRACE---");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/main.rs.html b/ch9-log/src/os/main.rs.html index 3d2d18c2..ebe62528 100644 --- a/ch9-log/src/os/main.rs.html +++ b/ch9-log/src/os/main.rs.html @@ -1,15 +1,17 @@ main.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -88,8 +90,8 @@
 // #[path = "boards/k210.rs"]
 // mod board;
 // #[cfg(not(any(feature = "board_k210")))]
-// #[path = "boards/qemu.rs"]
-
+// #[path = "board/qemu.rs"]
+// mod board::qemu;
 
 #[macro_use]
 mod console;
@@ -148,5 +150,5 @@
     panic!("[KERN] Unreachable in rust_main!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/address.rs.html b/ch9-log/src/os/mm/address.rs.html index ae243b29..441aea72 100644 --- a/ch9-log/src/os/mm/address.rs.html +++ b/ch9-log/src/os/mm/address.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -259,6 +261,10 @@
 256
 257
 258
+259
+260
+261
+262
 
use super::PageTableEntry;
 use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS};
 use core::fmt::{self, Debug, Formatter};
@@ -344,7 +350,11 @@
 }
 impl From<VirtAddr> for usize {
     fn from(v: VirtAddr) -> Self {
-        v.0
+        if v.0 >= (1 << (VA_WIDTH_SV39 - 1)) {
+            v.0 | (!((1 << VA_WIDTH_SV39) - 1))
+        } else {
+            v.0
+        }
     }
 }
 impl From<VirtPageNum> for usize {
@@ -518,5 +528,5 @@
 }
 pub type VPNRange = SimpleRange<VirtPageNum>;
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/frame_allocator.rs.html b/ch9-log/src/os/mm/frame_allocator.rs.html index 1d88410e..314b0691 100644 --- a/ch9-log/src/os/mm/frame_allocator.rs.html +++ b/ch9-log/src/os/mm/frame_allocator.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -268,5 +270,5 @@
     println!("frame_allocator_test passed!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/heap_allocator.rs.html b/ch9-log/src/os/mm/heap_allocator.rs.html index 08e1edf8..db60cd19 100644 --- a/ch9-log/src/os/mm/heap_allocator.rs.html +++ b/ch9-log/src/os/mm/heap_allocator.rs.html @@ -1,15 +1,17 @@ heap_allocator.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -96,5 +98,5 @@
     println!("heap_test passed!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/memory_set.rs.html b/ch9-log/src/os/mm/memory_set.rs.html index 899229de..6d09b03d 100644 --- a/ch9-log/src/os/mm/memory_set.rs.html +++ b/ch9-log/src/os/mm/memory_set.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -778,5 +780,5 @@
     println!("remap_test passed!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/mod.rs.html b/ch9-log/src/os/mm/mod.rs.html index fba00402..5830d3bc 100644 --- a/ch9-log/src/os/mm/mod.rs.html +++ b/ch9-log/src/os/mm/mod.rs.html @@ -1,15 +1,17 @@ mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -50,5 +52,5 @@
     kprintln!("[KERN] mm::init() end");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/mm/page_table.rs.html b/ch9-log/src/os/mm/page_table.rs.html index da976c57..5ac95682 100644 --- a/ch9-log/src/os/mm/page_table.rs.html +++ b/ch9-log/src/os/mm/page_table.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -500,5 +502,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sbi.rs.html b/ch9-log/src/os/sbi.rs.html index 3d51abc8..e0fbafc5 100644 --- a/ch9-log/src/os/sbi.rs.html +++ b/ch9-log/src/os/sbi.rs.html @@ -1,15 +1,17 @@ sbi.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -46,6 +48,8 @@
 43
 44
 45
+46
+47
 
#![allow(unused)]
 
 use core::arch::asm;
@@ -64,7 +68,7 @@
 fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
     let mut ret;
     unsafe {
-        asm!(
+        core::arch::asm!(
             "ecall",
             inlateout("x10") arg0 => ret,
             in("x11") arg1,
@@ -87,10 +91,12 @@
     sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0)
 }
 
-pub fn shutdown() -> ! {
-    sbi_call(SBI_SHUTDOWN, 0, 0, 0);
+use crate::board::QEMUExit;
+pub fn shutdown(exit_code: usize) -> ! {
+    //sbi_call(SBI_SHUTDOWN, exit_code, 0, 0);
+    crate::board::QEMU_EXIT_HANDLE.exit_failure();
     panic!("It should shutdown!");
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sync/condvar.rs.html b/ch9-log/src/os/sync/condvar.rs.html index 07ebb0e3..50482e57 100644 --- a/ch9-log/src/os/sync/condvar.rs.html +++ b/ch9-log/src/os/sync/condvar.rs.html @@ -1,15 +1,17 @@ condvar.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -56,8 +58,14 @@
 53
 54
 55
+56
+57
+58
 
use crate::sync::{Mutex, UPIntrFreeCell};
-use crate::task::{add_task, block_current_task, block_current_and_run_next, current_task, TaskControlBlock, TaskContext};
+use crate::task::{
+    add_task, block_current_and_run_next, block_current_task, current_task, TaskContext,
+    TaskControlBlock,
+};
 use alloc::{collections::VecDeque, sync::Arc};
 
 pub struct Condvar {
@@ -112,5 +120,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sync/mod.rs.html b/ch9-log/src/os/sync/mod.rs.html index e265a3f8..793930a8 100644 --- a/ch9-log/src/os/sync/mod.rs.html +++ b/ch9-log/src/os/sync/mod.rs.html @@ -1,7 +1,9 @@ mod.rs - source -
1
+    
+    
1
 2
 3
 4
@@ -20,5 +22,5 @@
 pub use semaphore::Semaphore;
 pub use up::{UPIntrFreeCell, UPIntrRefMut};
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sync/mutex.rs.html b/ch9-log/src/os/sync/mutex.rs.html index 5f35adda..d3c2900e 100644 --- a/ch9-log/src/os/sync/mutex.rs.html +++ b/ch9-log/src/os/sync/mutex.rs.html @@ -1,15 +1,17 @@ mutex.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -178,5 +180,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sync/semaphore.rs.html b/ch9-log/src/os/sync/semaphore.rs.html index 71a9239d..c58f9aa7 100644 --- a/ch9-log/src/os/sync/semaphore.rs.html +++ b/ch9-log/src/os/sync/semaphore.rs.html @@ -1,15 +1,17 @@ semaphore.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -92,5 +94,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/sync/up.rs.html b/ch9-log/src/os/sync/up.rs.html index e97983be..e1052e6e 100644 --- a/ch9-log/src/os/sync/up.rs.html +++ b/ch9-log/src/os/sync/up.rs.html @@ -1,105 +1,107 @@ 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
- 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
+    
+    
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
@@ -136,10 +138,17 @@
 133
 134
 135
+136
+137
+138
+139
+140
+141
+142
 
use core::cell::{RefCell, RefMut, UnsafeCell};
 use core::ops::{Deref, DerefMut};
-use riscv::register::sstatus;
 use lazy_static::*;
+use riscv::register::sstatus;
 
 /*
 /// Wrap a static data structure inside it so that we are
@@ -210,7 +219,9 @@ impl<T> UPSafeCell<T> {
 
     pub fn enter(&mut self) {
         let sie = sstatus::read().sie();
-        unsafe { sstatus::clear_sie(); }
+        unsafe {
+            sstatus::clear_sie();
+        }
         if self.nested_level == 0 {
             self.sie_before_masking = sie;
         }
@@ -220,7 +231,9 @@ impl<T> UPSafeCell<T> {
     pub fn exit(&mut self) {
         self.nested_level -= 1;
         if self.nested_level == 0 && self.sie_before_masking {
-            unsafe { sstatus::set_sie(); }            
+            unsafe {
+                sstatus::set_sie();
+            }
         }
     }
 }
@@ -240,13 +253,17 @@ impl<T> UPSafeCell<T> {
             inner: RefCell::new(value),
         }
     }
+
     /// Panic if the data has been borrowed.
     pub fn exclusive_access(&self) -> UPIntrRefMut<'_, T> {
         INTR_MASKING_INFO.get_mut().enter();
         UPIntrRefMut(Some(self.inner.borrow_mut()))
     }
 
-    pub fn exclusive_session<F, V>(&self, f: F) -> V where F: FnOnce(&mut T) -> V {
+    pub fn exclusive_session<F, V>(&self, f: F) -> V
+    where
+        F: FnOnce(&mut T) -> V,
+    {
         let mut inner = self.exclusive_access();
         f(inner.deref_mut())
     }
@@ -270,7 +287,6 @@ impl<T> UPSafeCell<T> {
         self.0.as_mut().unwrap().deref_mut()
     }
 }
-
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/syscall/fs.rs.html b/ch9-log/src/os/syscall/fs.rs.html index e334025a..73dfad1c 100644 --- a/ch9-log/src/os/syscall/fs.rs.html +++ b/ch9-log/src/os/syscall/fs.rs.html @@ -1,105 +1,107 @@ 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
- 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
+    
+    
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
@@ -222,5 +224,5 @@
     new_fd as isize
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/syscall/mod.rs.html b/ch9-log/src/os/syscall/mod.rs.html index 5c9a16f7..8dca135a 100644 --- a/ch9-log/src/os/syscall/mod.rs.html +++ b/ch9-log/src/os/syscall/mod.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -219,5 +221,5 @@
         _ => "Unsupported syscall_id",
     }
 }
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/syscall/process.rs.html b/ch9-log/src/os/syscall/process.rs.html index fc0c06ce..1a68be3e 100644 --- a/ch9-log/src/os/syscall/process.rs.html +++ b/ch9-log/src/os/syscall/process.rs.html @@ -1,105 +1,107 @@ 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
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
+    
+    
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
@@ -260,5 +262,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/syscall/sync.rs.html b/ch9-log/src/os/syscall/sync.rs.html index 9ea3b4d6..7cfc507a 100644 --- a/ch9-log/src/os/syscall/sync.rs.html +++ b/ch9-log/src/os/syscall/sync.rs.html @@ -1,105 +1,107 @@ sync.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
+    
+    
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
@@ -292,5 +294,5 @@
     0
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/syscall/thread.rs.html b/ch9-log/src/os/syscall/thread.rs.html index 0002ea15..47271115 100644 --- a/ch9-log/src/os/syscall/thread.rs.html +++ b/ch9-log/src/os/syscall/thread.rs.html @@ -1,15 +1,17 @@ thread.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -180,5 +182,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/context.rs.html b/ch9-log/src/os/task/context.rs.html index 61884b80..d9313a1d 100644 --- a/ch9-log/src/os/task/context.rs.html +++ b/ch9-log/src/os/task/context.rs.html @@ -1,15 +1,17 @@ context.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -52,5 +54,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/id.rs.html b/ch9-log/src/os/task/id.rs.html index cce40c2b..99c9887e 100644 --- a/ch9-log/src/os/task/id.rs.html +++ b/ch9-log/src/os/task/id.rs.html @@ -1,105 +1,107 @@ id.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
+    
+    
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
@@ -253,6 +255,8 @@
 250
 251
 252
+253
+254
 
use super::ProcessControlBlock;
 use crate::config::{KERNEL_STACK_SIZE, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT_BASE, USER_STACK_SIZE};
 use crate::mm::{MapPermission, PhysPageNum, VirtAddr, KERNEL_SPACE};
@@ -308,6 +312,8 @@
     };
 }
 
+pub const IDLE_PID: usize = 0;
+
 pub struct PidHandle(pub usize);
 
 pub fn pid_alloc() -> PidHandle {
@@ -506,5 +512,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/manager.rs.html b/ch9-log/src/os/task/manager.rs.html index a2242882..0a0398c2 100644 --- a/ch9-log/src/os/task/manager.rs.html +++ b/ch9-log/src/os/task/manager.rs.html @@ -1,15 +1,17 @@ manager.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -132,5 +134,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/mod.rs.html b/ch9-log/src/os/task/mod.rs.html index f375edc7..43f85a7b 100644 --- a/ch9-log/src/os/task/mod.rs.html +++ b/ch9-log/src/os/task/mod.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -155,6 +157,34 @@
 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
 
mod context;
 mod id;
 mod manager;
@@ -165,15 +195,16 @@
 #[allow(clippy::module_inception)]
 mod task;
 
+use self::id::TaskUserRes;
 use crate::fs::{open_file, OpenFlags};
-use alloc::sync::Arc;
+use alloc::{sync::Arc, vec::Vec};
 use lazy_static::*;
 use manager::fetch_task;
 use process::ProcessControlBlock;
 use switch::__switch;
 
 pub use context::TaskContext;
-pub use id::{kstack_alloc, pid_alloc, KernelStack, PidHandle};
+pub use id::{kstack_alloc, pid_alloc, KernelStack, PidHandle, IDLE_PID};
 pub use manager::{add_task, pid2process, remove_from_pid2process};
 pub use processor::{
     current_kstack_top, current_process, current_task, current_trap_cx, current_trap_cx_user_va,
@@ -213,10 +244,12 @@
 }
 
 pub fn block_current_and_run_next() {
-    let task_cx_ptr = block_current_task(); 
+    let task_cx_ptr = block_current_task();
     schedule(task_cx_ptr);
 }
 
+use crate::board::QEMUExit;
+
 pub fn exit_current_and_run_next(exit_code: i32) {
     kprintln!("[KERN] task::exit_current_and_run_next() begin");
     let task = take_current_task().unwrap();
@@ -238,7 +271,21 @@
     // the process should terminate at once
     if tid == 0 {
         kprintln!("[KERN] task::exit_current_and_run_next(): it's main thread, process should terminate at once");
-        remove_from_pid2process(process.getpid());
+        let pid = process.getpid();
+        if pid == IDLE_PID {
+            println!(
+                "[kernel] Idle process exit with 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();
+            }
+        }
+        remove_from_pid2process(pid);
         let mut process_inner = process.inner_exclusive_access();
         // mark this process as a zombie process
         kprintln!("[KERN] task::exit_current_and_run_next(): mark this process as a zombie process");
@@ -261,12 +308,23 @@
         // it has to be done before we dealloc the whole memory_set
         // otherwise they will be deallocated twice
         kprintln!("[KERN] task::exit_current_and_run_next(): deallocate user res (tid/trap_cx/ustack) of all threads");
+        let mut recycle_res = Vec::<TaskUserRes>::new();
         for task in process_inner.tasks.iter().filter(|t| t.is_some()) {
             let task = task.as_ref().unwrap();
             let mut task_inner = task.inner_exclusive_access();
-            task_inner.res = None;
+            if let Some(res) = task_inner.res.take() {
+                recycle_res.push(res);
+            }
         }
+
         kprintln!("[KERN] task::exit_current_and_run_next(): clear children Vector in process_inner");
+        // dealloc_tid and dealloc_user_res require access to PCB inner, so we
+        // need to collect those user res first, then release process_inner
+        // for now to avoid deadlock/double borrow problem.
+        drop(process_inner);
+        recycle_res.clear();
+
+        let mut process_inner = process.inner_exclusive_access();
         process_inner.children.clear();
         // deallocate other data in user space i.e. program code/data section
         kprintln!("[KERN] task::exit_current_and_run_next(): deallocate code/data in user space");
@@ -310,5 +368,5 @@
     process_inner.signals |= signal;
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/process.rs.html b/ch9-log/src/os/task/process.rs.html index 5dc10c16..6d79e019 100644 --- a/ch9-log/src/os/task/process.rs.html +++ b/ch9-log/src/os/task/process.rs.html @@ -1,105 +1,107 @@ 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
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
+    
+    
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
@@ -582,5 +584,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/processor.rs.html b/ch9-log/src/os/task/processor.rs.html index 1961f29a..27de80a7 100644 --- a/ch9-log/src/os/task/processor.rs.html +++ b/ch9-log/src/os/task/processor.rs.html @@ -1,105 +1,107 @@ 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
- 94
- 95
- 96
- 97
- 98
- 99
+    
+    
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
@@ -107,7 +109,6 @@
 104
 105
 106
-107
 
use super::__switch;
 use super::{fetch_task, TaskStatus};
 use super::{ProcessControlBlock, TaskContext, TaskControlBlock};
@@ -208,13 +209,12 @@
 }
 
 pub fn schedule(switched_task_cx_ptr: *mut TaskContext) {
-    let idle_task_cx_ptr = PROCESSOR.exclusive_session(|processor| {
-        processor.get_idle_task_cx_ptr()
-    });
+    let idle_task_cx_ptr =
+        PROCESSOR.exclusive_session(|processor| processor.get_idle_task_cx_ptr());
     unsafe {
         __switch(switched_task_cx_ptr, idle_task_cx_ptr);
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/signal.rs.html b/ch9-log/src/os/task/signal.rs.html index 31594845..a3cfd8d8 100644 --- a/ch9-log/src/os/task/signal.rs.html +++ b/ch9-log/src/os/task/signal.rs.html @@ -1,15 +1,17 @@ signal.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -60,5 +62,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/switch.rs.html b/ch9-log/src/os/task/switch.rs.html index 416474a8..18b475c6 100644 --- a/ch9-log/src/os/task/switch.rs.html +++ b/ch9-log/src/os/task/switch.rs.html @@ -1,7 +1,9 @@ switch.rs - source -
1
+    
+    
1
 2
 3
 4
@@ -18,5 +20,5 @@
     pub fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext);
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/task/task.rs.html b/ch9-log/src/os/task/task.rs.html index 68a22206..7c875566 100644 --- a/ch9-log/src/os/task/task.rs.html +++ b/ch9-log/src/os/task/task.rs.html @@ -1,15 +1,17 @@ task.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -81,10 +83,16 @@
 78
 79
 80
+81
+82
+83
 
use super::id::TaskUserRes;
 use super::{kstack_alloc, KernelStack, ProcessControlBlock, TaskContext};
 use crate::trap::TrapContext;
-use crate::{mm::PhysPageNum, sync::{UPIntrFreeCell, UPIntrRefMut}};
+use crate::{
+    mm::PhysPageNum,
+    sync::{UPIntrFreeCell, UPIntrRefMut},
+};
 use alloc::sync::{Arc, Weak};
 
 pub struct TaskControlBlock {
@@ -162,5 +170,5 @@
     Blocking,
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/timer.rs.html b/ch9-log/src/os/timer.rs.html index 4576c2d2..80b3867b 100644 --- a/ch9-log/src/os/timer.rs.html +++ b/ch9-log/src/os/timer.rs.html @@ -1,15 +1,17 @@ timer.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -156,5 +158,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/trap/context.rs.html b/ch9-log/src/os/trap/context.rs.html index 6e0a6d4c..8afd78f4 100644 --- a/ch9-log/src/os/trap/context.rs.html +++ b/ch9-log/src/os/trap/context.rs.html @@ -1,15 +1,17 @@ context.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
+    
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
 10
 11
 12
@@ -84,5 +86,5 @@
     }
 }
 
-
+
\ No newline at end of file diff --git a/ch9-log/src/os/trap/mod.rs.html b/ch9-log/src/os/trap/mod.rs.html index e0d93444..89426159 100644 --- a/ch9-log/src/os/trap/mod.rs.html +++ b/ch9-log/src/os/trap/mod.rs.html @@ -1,105 +1,107 @@ 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
+    
+    
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
@@ -187,7 +189,7 @@
 use riscv::register::{
     mtvec::TrapMode,
     scause::{self, Exception, Interrupt, Trap},
-    sie, stval, stvec, sstatus, sscratch,
+    sie, sscratch, sstatus, stval, stvec,
 };
 
 global_asm!(include_str!("trap.S"));
@@ -201,7 +203,7 @@
 fn set_kernel_trap_entry() {
     extern "C" {
         fn __alltraps();
-        fn __alltraps_k(); 
+        fn __alltraps_k();
     }
     let __alltraps_k_va = __alltraps_k as usize - __alltraps as usize + TRAMPOLINE;
     unsafe {
@@ -232,7 +234,7 @@
 
 fn disable_supervisor_interrupt() {
     unsafe {
-        sstatus::clear_sie(); 
+        sstatus::clear_sie();
     }
 }
 
@@ -247,7 +249,7 @@
             // jump to next instruction anyway
             let mut cx = current_trap_cx();
             cx.sepc += 4;
-            
+
             enable_supervisor_interrupt();
 
             // get system call return value
@@ -330,23 +332,23 @@
     match scause.cause() {
         Trap::Interrupt(Interrupt::SupervisorExternal) => {
             crate::board::irq_handler();
-        },
+        }
         Trap::Interrupt(Interrupt::SupervisorTimer) => {
             set_next_trigger();
             check_timer();
             // do not schedule now
-        },
+        }
         _ => {
             panic!(
                 "Unsupported trap from kernel: {:?}, stval = {:#x}!",
                 scause.cause(),
                 stval
             );
-        },
+        }
     }
 }
 
 pub use context::TrapContext;
 
-
+
\ No newline at end of file diff --git a/ch9-log/storage.js b/ch9-log/storage.js index c090e1f3..c6d070de 100644 --- a/ch9-log/storage.js +++ b/ch9-log/storage.js @@ -1 +1 @@ -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('rustdoc-'+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("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)} \ No newline at end of file +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