📄 utility.h
字号:
// utility.h // Miscellaneous useful definitions, including debugging routines.//// The debugging routines allow the user to turn on selected// debugging messages, controllable from the command line arguments// passed to Nachos (-d). You are encouraged to add your own// debugging flags. The pre-defined debugging flags are://// '+' -- turn on all debug messages// 't' -- thread system// 's' -- semaphores, locks, and conditions// 'i' -- interrupt emulation// 'm' -- machine emulation (USER_PROGRAM)// 'd' -- disk emulation (FILESYS)// 'f' -- file system (FILESYS)// 'a' -- address spaces (USER_PROGRAM)// 'n' -- network emulation (NETWORK)//// Copyright (c) 1992-1993 The Regents of the University of California.// All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#ifndef UTILITY_H#define UTILITY_H#include "copyright.h"// Miscellaneous useful routines//#include <bool.h> // Boolean values. // This is the same definition // as in the g++ library.#define TRUE true#define FALSE false#define min(a,b) (((a) < (b)) ? (a) : (b))#define max(a,b) (((a) > (b)) ? (a) : (b))// Divide and either round up or down #define divRoundDown(n,s) ((n) / (s))#define divRoundUp(n,s) (((n) / (s)) + ((((n) % (s)) > 0) ? 1 : 0))// This declares the type "VoidFunctionPtr" to be a "pointer to a// function taking an integer argument and returning nothing". With// such a function pointer (say it is "func"), we can call it like this://// (*func) (17);//// This is used by Thread::Fork and for interrupt handlers, as well// as a couple of other places.typedef void (*VoidFunctionPtr)(int arg); typedef void (*VoidNoArgFunctionPtr)(); // Include interface that isolates us from the host machine system library.// Requires definition of bool, and VoidFunctionPtr#include "sysdep.h" // Interface to debugging routines.extern void DebugInit(char* flags); // enable printing debug messagesextern bool DebugIsEnabled(char flag); // Is this debug flag enabled?extern void DEBUG (char flag, char* format, ...); // Print debug message // if flag is enabled//----------------------------------------------------------------------// ASSERT// If condition is false, print a message and dump core.// Useful for documenting assumptions in the code.//// NOTE: needs to be a #define, to be able to print the location // where the error occurred.//----------------------------------------------------------------------#define ASSERT(condition) \ if (!(condition)) { \ fprintf(stderr, "Assertion failed: line %d, file \"%s\"\n", \ __LINE__, __FILE__); \ fflush(stderr); \ Abort(); \ }#endif UTILITY_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -