Ejemplo n.º 1
0
BBString *bbStringNew( int len ){
	int flags;
	BBString *str;
	if( !len ) return &bbEmptyString;
	str=(BBString*)bbGCAllocObject( sizeof(BBString)+len*sizeof(BBChar),&bbStringClass,BBGC_ATOMIC );
	str->length=len;
	return str;
}
Ejemplo n.º 2
0
static BBArray *allocateArray( const char *type,int dims,int *lens ){
	int k,*len;
	int size=4;
	int length=1;
	int flags=BBGC_ATOMIC;
	BBArray *arr;
	
	len=lens;
	for( k=0;k<dims;++k ){
		int n=*len++;
		if( n<=0 ) return &bbEmptyArray;
		length*=n;
	}
		
	switch( type[0] ){
	case 'b':size=1;break;
	case 's':size=2;break;
	case 'l':size=8;break;
	case 'd':size=8;break;
	case ':':flags=0;break;
	case '$':flags=0;break;
	case '[':flags=0;break;
	}
	size*=length;
	
	arr=(BBArray*)bbGCAllocObject( BBARRAYSIZE(size,dims),&bbArrayClass,flags );

	arr->type=type;
	arr->dims=dims;
	arr->size=size;
	
	len=lens;
	for( k=0;k<dims;++k ) arr->scales[k]=*len++;
	for( k=dims-2;k>=0;--k ) arr->scales[k]*=arr->scales[k+1];
		
	return arr;
}
Ejemplo n.º 3
0
BBObject *bbObjectAtomicNew( BBClass *clas ){
	int flags=( clas->dtor!=bbObjectDtor ) ? BBGC_FINALIZE | BBGC_ATOMIC : BBGC_ATOMIC;
	BBObject *o=(BBObject*)bbGCAllocObject( clas->instance_size,clas,flags );
	clas->ctor( o );
	return o;
}