symtab.dc

来自「Object-Oriented Programming With ANSI-C这」· DC 代码 · 共 64 行

DC
64
字号
#include <stdlib.h>#include <string.h>#include "binary.h"#include "Symbol.h"% Symtab ctor {	struct Symtab * self = super_ctor(Symtab(), _self, app);	if (! (self -> dim = va_arg(* app, size_t)))		self -> dim = 1;	self -> buf = malloc(self -> dim * sizeof(void *));	assert(self -> buf);	return self;}% : Symtab delete {		// don't delete}static int cmp (const void * _key, const void * _elt){	const char * const * key = _key;	const void * const * elt = _elt;	return strcmp(* key, name(* elt));}static void ** search (struct Symtab * self, const char ** np){	if (self -> count >= self -> dim)	{	self -> buf = realloc(self -> buf,						(self -> dim *= 2) * sizeof(void *));		assert(self -> buf);	}	return binary(np, self -> buf, & self -> count,										sizeof(void *), cmp);}% Symtab install {	const char * nm;	void ** pp;%casts	nm = name(entry);	pp = search(self, & nm);	if (* pp != nm)			// found entry		delete(* pp);	* pp = (void *) entry;}% Symtab screen {	void ** pp;%casts	pp = search(self, & name);	if (* pp == name)					// entered name	{	char * copy = malloc(strlen(name) + 1);		assert(copy);		* pp = new(Symbol(), strcpy(copy, name), lex);	}	return * pp;}%init

⌨️ 快捷键说明

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