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

📄 bag.c

📁 Object-Oriented Programming With ANSI-C这本书中的源代码!找了很久
💻 C
字号:
#include <assert.h>#include <stdio.h>#include <stdlib.h>#include "new.h"#include "Set.h"#include "Object.h"struct Set { unsigned count; };struct Object { unsigned count; struct Set * in; };static const size_t _Set = sizeof(struct Set);static const size_t _Object = sizeof(struct Object);const void * Set = & _Set;const void * Object = & _Object;void * new (const void * type, ...){	const size_t size = * (const size_t *) type;	void * p = calloc(1, size);	assert(p);	return p;}void delete (void * item){	free(item);}void * add (void * _set, const void * _element){	struct Set * set = _set;	struct Object * element = (void *) _element;	assert(set);	assert(element);	if (! element -> in)		element -> in = set;	else		assert(element -> in == set);	++ element -> count, ++ set -> count;	return element;}void * find (const void * _set, const void * _element){	const struct Object * element = _element;	assert(_set);	assert(element);	return element -> in == _set ? (void *) element : 0;}int contains (const void * _set, const void * _element){	return find(_set, _element) != 0;}void * drop (void * _set, const void * _element){	struct Set * set = _set;	struct Object * element = find(set, _element);	if (element)	{	if (-- element -> count == 0)			element -> in = 0;		-- set -> count;	}	return element;}unsigned count (const void * _set){	const struct Set * set = _set;	assert(set);	return set -> count;}int differ (const void * a, const void * b){	return a != b;}

⌨️ 快捷键说明

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