Beispiel #1
0
/*buddy_alloc_pages - alloc n page from free area and return the first page.
 *	                  The header page should set page property flag, and the
 *					  property field should assign to n which means next 
 *					  follow n pages has been allocated.
 */
struct Page* buddy_alloc_pages(size_t n){
	assert(n > 0);
	if(n > nr_free){
		return NULL;
	}
	struct Page* page = NULL;
	uint8_t o = get_ord(n * MIN_BLOCK);
	uint32_t i = 0;
	while(1){
		if( lft(mem[i]) >= o )
			i = lc(i);
		else if( rht(mem[i]) >= o )
			i = rc(i);
		else
			break;
	}	
	if( o == ord(mem[i]) ){
		set_rht(mem[i], 0);
		set_lft(mem[i], 0);
		page = buddy2page(mem[i], i);
		assert(!PageReserved(page));
		SetPageProperty(page);
		nr_free -= page->property = 1 << (ord(mem[i]) - 2);
		update(i);
	}
	return page;
}
void VkeCamera::updateTransform(){
	//if (!m_transform_needs_update && !m_use_look_at) return;

	m_transform.reset();

	if (!m_use_look_at){

        nv_math::vec4f tra = nv_math::vec4f(m_position,1.0);
        nv_math::vec3f fwd(0.0,0.0,1.0);
        nv_math::vec3f up(0.0,0.0,0.0);
        nv_math::vec3f lft(0.0,0.0,0.0);
        m_transform.translate(tra);
        m_transform.rotate(m_rotation.z, fwd);
        m_transform.rotate(m_rotation.y, up);
        m_transform.rotate(m_rotation.x, lft);
	}
	else{
		m_transform.setMatrix(m_look_at_matrix);
	}

	m_transform.update();

	m_transform_needs_update = false;
	m_view_projection_needs_update = true;
}
Beispiel #3
0
int main () {
    initMotors();
	open(5);
	unsigned char rx_str[50];
	while (1) {
	    read(rx_str,10,ON);
		if(!(strncmp(rx_str,"fwd",3))) {fwd(rx_str[4]);}
		if(!(strncmp(rx_str,"bwd",3))) {bwd(rx_str[4]);}
		if(!(strncmp(rx_str,"lft",3))) {lft(rx_str[4]);}
		if(!(strncmp(rx_str,"rgh",3))) {rgh(rx_str[4]);}
		if(!(strncmp(rx_str,"slft",4))) {slft(rx_str[4]);}
		if(!(strncmp(rx_str,"srgh",4))) {srgh(rx_str[4]);}
		if(!(strncmp(rx_str,"blft",4))) {blft(rx_str[4]);}
		if(!(strncmp(rx_str,"brgh",4))) {brgh(rx_str[4]);}
		if(!(strncmp(rx_str,"stop",4))) {stop();}
	}
	return 0;
}
int main(){
    scanf("%d%d",&N,&M);
    for(int i=0,a;i<N;++i){
        scanf("%d",&a);
        mrg(rt,rt,new nd(a));
    }
    for(int i=0,a,b,c;i<M;++i){
        scanf("%d%d%d",&a,&b,&c);
        nd *l=0,*m=0,*r=0;
        spt(rt,m,r,c);
        spt(m,l,m,b-1);
        if(a==1){
            mrg(m,m,l); 
            mrg(rt,m,r);
        }else{
            mrg(m,r,m);
            mrg(rt,l,m);
        }
    }
    printf("%d\n",abs(rht(rt)-lft(rt)));
    dfs(rt);
}
int lft(nd *n){
    if(!n->l) return n->val;
    else return lft(n->l);
}