home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
ML
/
OBJECT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-20
|
1KB
|
91 lines
/*
* オブジェクト制御
*
* T.Kobayashi 1994.5.21
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include "data.h"
#include "err.h"
#include "inlib.h"
int ObjectCount ;
/* オブジェクトの確保 */
Object *ObjectAlloc( size, type )
int size ;
int type ;
{
Object *p ;
p = MemoryAlloc( sizeof( Object ) + size );
if ( p == NULL )
{
ExecError( "オブジェクト領域が確保できません。" );
}
p->type = type ;
p->ref = 1 ;
p->size = size ;
ObjectCount++ ;
return p ;
}
/* オブジェクトの解放 */
void ObjectFree( obj )
Object *obj ;
{
obj->ref -- ;
if ( obj->ref == 0 )
{
MemoryFree( obj );
}
ObjectCount-- ;
}
/* 継承クラスのチェック */
int ObjectCheck( buf, type )
DataStruct *buf ;
int type ;
{
int otype ;
if ( buf->type == TYPE_OBJECT )
{
otype = buf->od.ptr->type ;
while( otype > 0 )
{
if ( otype == type )
return TRUE ;
otype = ClassList[otype].parent ;
}
}
return FALSE ;
}
/* オブジェクトの複製をつくる */
Object *ObjectDup( obj )
Object *obj ;
{
Object *ret ;
ret = ObjectAlloc( obj->size, obj->type );
memcpy( ret, obj, sizeof( Object ) + obj->size );
ret->ref = 1 ;
return ret ;
}
/* オブジェクトのコピー */
Object *ObjectCopy( obj )
Object *obj ;
{
obj->ref ++ ;
ObjectCount++ ;
return obj ;
}