⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assoctab.c

📁 一个用在mips体系结构中的操作系统
💻 C
字号:
/* * Copyright (C) 1996-1998 by the Board of Trustees *    of Leland Stanford Junior University. *  * This file is part of the SimOS distribution.  * See LICENSE file for terms of the license.  * */#include <string.h>#include <assert.h>#include <stdlib.h>#include <stdio.h>#include "assoctab.h"#define TAB_SIZE    1024#define HASH_MASK   (TAB_SIZE - 1)int hash(char* label){   char *c;   int key = 0;      for (c=label; *c; c++) {      key = (key<< 1) ^ *c;   }      return key & HASH_MASK;}AssocTab *AssocTabCreate(void){   AssocTab *at;   int i;      at = (AssocTab *)malloc(sizeof(ATHeader*)*TAB_SIZE);      for (i=0; i<TAB_SIZE; i++) {      at[i] = NULL;   }   return at;}int AssocTabEnter(AssocTab *at, ATHeader *item){   int key = hash(item->label);#ifdef DEBUG   ATHeader *mark = at[key];   while (mark) {      if (strcmp(item->label, mark->label) == 0) {         return AT_ERROR;      }      mark = mark->next;   }#endif      item->next = at[key];   at[key] = item;   return AT_OK;}int AssocTabLookup(AssocTab *at, char *index, ATHeader **item){   ATHeader* mark = at[hash(index)];      while (mark) {      if (strcmp(index, mark->label) == 0) {         if (item) {            *item = mark;         }         return AT_OK;      }      mark = mark->next;   }      return AT_ERROR;}void AssocTabForeach(AssocTab *at, void (*p)(ATHeader *item)){   ATHeader *mark;   int i;      for (i=0; i<TAB_SIZE; i++) {      mark = at[i];      while (mark) {         if (p) {            p(mark);         } else {            printf("at[%d]: %s\n", i, mark->label);         }         mark = mark->next;      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -