/*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; }
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); }