Exemplo n.º 1
0
int DaoCdata_ChildOf( DaoTypeBase *self, DaoTypeBase *super )
{
	int i;
	if( self == super ) return 1;
	for(i=0; i<DAO_MAX_CDATA_SUPER; i++){
		if( self->supers[i] == NULL ) break;
		if( DaoCdata_ChildOf( self->supers[i], super ) ) return 1;
	}
	return 0;
}
Exemplo n.º 2
0
int DaoClass_ChildOf( DaoClass *self, DaoValue *klass )
{
	DaoCdata *cdata = (DaoCdata*) klass;
	if( self == NULL || klass == NULL ) return 0;
	if( klass == (DaoValue*) self ) return 1;
	if( klass == self->parent ) return 1;
	if( self->parent == NULL ) return 0;
	if( self->parent->type == DAO_CLASS ){
		return DaoClass_ChildOf( (DaoClass*) self->parent, klass );
	}else if( self->parent->type == DAO_CTYPE && klass->type == DAO_CTYPE ){
		DaoCdata *csup = (DaoCdata*) self->parent;
		return DaoCdata_ChildOf( csup->ctype->kernel->typer, cdata->ctype->kernel->typer );
	}
	return 0;
}
Exemplo n.º 3
0
int  DaoClass_ChildOf( DaoClass *self, DaoValue *klass )
{
	DaoCdata *cdata = (DaoCdata*) klass;
	int i;
	if( self == NULL ) return 0;
	if( klass == (DaoValue*) self ) return 1;
	for( i=0; i<self->superClass->size; i++ ){
		DaoClass *dsup = self->superClass->items.pClass[i];
		DaoCdata *csup = self->superClass->items.pCdata[i];
		if( dsup == NULL ) continue;
		if( klass == self->superClass->items.pValue[i] ) return 1;
		if( dsup->type == DAO_CLASS && DaoClass_ChildOf( dsup,  klass ) ){
			return 1;
		}else if( csup->type == DAO_CTYPE && klass->type == DAO_CTYPE ){
			if( DaoCdata_ChildOf( csup->ctype->kernel->typer, cdata->ctype->kernel->typer ) )
				return 1;
		}
	}
	return 0;
}