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

📄 hnobject.cc

📁 R 树
💻 CC
字号:
/* * HnObject.cc * Copyright (C) 1997 Norio Katayama * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA * * 11/23/95 katayama@rd.nacsis.ac.jp * $Id: HnObject.cc,v 1.4 1997/06/02 09:35:20 katayama Exp $ */#include <errno.h>#include <stdarg.h>#include <string.h>#include "config.h"#include "HnObject.hh"HnObject *HnObject::busyObject = NULL;int HnObject::numBusyObjects = 0;HnObject *HnObject::freeObject = NULL;int HnObject::numFreeObjects = 0;int HnObject::MAGIC = 0x05121010;voidHnObject::setBusy(void){	prev = busyObject;	next = NULL;	busyObject = this;	if(prev != NULL)		prev->next = this;	numBusyObjects ++;}voidHnObject::unsetBusy(void) {	if(prev != NULL)		prev->next = next;	if(next != NULL)		next->prev = prev;	else		busyObject = prev;	numBusyObjects --;}voidHnObject::setFree(void) {	prev = freeObject;	next = NULL;	freeObject = this;	if(prev != NULL)		prev->next = this;	numFreeObjects ++;}voidHnObject::unsetFree(void) {	if(prev != NULL)		prev->next = next;	if(next != NULL)		next->prev = prev;	else		freeObject = prev;	numFreeObjects --;}voidHnRef(HnObject *object){	if(object->refCount == 0) {		object->unsetFree();		object->setBusy();	}	object->refCount ++;}voidHnUnref(HnObject *object){	object->refCount --;	if(object->refCount == 0) {		object->unsetBusy();		object->setFree();		delete object;	}}/* * error */#define BufferSize	4096#ifndef HAVE_STRERROR#define strerror        mystrerrorstatic const char *strerror(int errnum) {        extern int sys_nerr;        extern const char * const sys_errlist[];        if(errnum >= 0 && errnum < sys_nerr)                return sys_errlist[errnum];        else                return NULL;}#endifvoidHnObject::setErrorMessage(const char *message){	if(errmsg != NULL)		free(errmsg);	if(message != NULL) {		if((errmsg = (char *)malloc(strlen(message) + 1)) == NULL)			HnSysError("malloc");		strcpy(errmsg, message);	}	else		errmsg = NULL;}voidHnObject::setError(const char *format, ... ){	va_list ap;	char buffer[BufferSize];	va_start(ap, format);	vsprintf(buffer, format, ap);	va_end(ap);	setErrorMessage(buffer);}voidHnObject::setSysError(const char *format, ... ){	va_list ap;	char buffer[BufferSize], *bp;	const char *message;	bp = buffer;	va_start(ap, format);	vsprintf(bp, format, ap);	va_end(ap);	bp += strlen(bp);	if((message = strerror(errno)) != NULL)		sprintf(bp, ": %s.", message);	setErrorMessage(buffer);}

⌨️ 快捷键说明

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