void triangulate_visitor::visit( subd_mesh_model_t& model, shape_t& shape) { if( !shape.attributes().point().has_attribute( g_P_name)) throw core::runtime_error( core::string8_t( "No P attribute found in triangulate visitor")); shape_t new_shape( shape_t::create_subd_mesh()); subd_mesh_model_t& new_model( shape_cast<subd_mesh_model_t>( new_shape)); do_visit( model, shape, new_model, new_shape); }
void partial_do_visit(std::vector<Shape*>& shapes, size_t L, size_t R, std::atomic<size_t>& result) { size_t a = 0; unsigned char j = (unsigned char)L; for (size_t i = L; i < R; ++i) a += do_visit(*shapes[i],some_numbers[j++]); result += a; }
size_t run_timings( std::vector<Shape*>& shapes, std::vector<long long>& timingsV, std::vector<long long>& timingsM, size_t& aV, size_t& aM ) { XTL_ASSERT(timingsM.size() == timingsV.size()); size_t N = shapes.size(); size_t M = timingsV.size(); for (size_t m = 0; m < M; ++m) { unsigned char j = 0; time_stamp liStart1 = get_time_stamp(); for (size_t i = 0; i < N-3; i += 4) aV += do_visit(*shapes[i],*shapes[i+1],*shapes[i+2],*shapes[i+3],some_numbers[j++]); time_stamp liFinish1 = get_time_stamp(); j = 0; time_stamp liStart2 = get_time_stamp(); for (size_t i = 0; i < N-3; i += 4) aM += do_match(*shapes[i],*shapes[i+1],*shapes[i+2],*shapes[i+3],some_numbers[j++]); time_stamp liFinish2 = get_time_stamp(); XTL_ASSERT(aV==aM); timingsV[m] = liFinish1-liStart1; timingsM[m] = liFinish2-liStart2; } return N/4; // Number of iterations per measurement }
void run_timings( std::vector<Shape*>& shapes, std::vector<long long>& timingsV, std::vector<long long>& timingsM, size_t& aV, size_t& aM ) { XTL_ASSERT(timingsM.size() == timingsV.size()); size_t N = shapes.size(); size_t M = timingsV.size(); for (size_t m = 0; m < M; ++m) { unsigned char j = 0; time_stamp liStart1 = get_time_stamp(); for (size_t i = 0; i < N; ++i) aV += do_visit(*shapes[i],some_numbers[j++]); time_stamp liFinish1 = get_time_stamp(); j = 0; time_stamp liStart2 = get_time_stamp(); for (size_t i = 0; i < N; ++i) aM += do_match(*shapes[i],some_numbers[j++]); time_stamp liFinish2 = get_time_stamp(); XTL_ASSERT(aV==aM); timingsV[m] = liFinish1-liStart1; timingsM[m] = liFinish2-liStart2; } }
void* walk(wast_t a, pilot_t p) { pilot_cache_elem_t pce; WalkDirection d; tinyap_stack_t stack; tinyap_stack_t ofs_stack; wast_t next=NULL; size_t opd=0; void* result; // int i; if(!p) { return NULL; } stack = new_stack(); ofs_stack = new_stack(); pce = p->p_type; d = do_visit(p,a); if(d==Error) { fprintf(stderr, "Walking : Immediate error !\n"); } while(d!=Done&&d!=Error) { // printf(" ofs_stack : "); // for(i=0;i<ofs_stack->sz;i++) { // printf(" %li",(size_t)ofs_stack->stack[i]); // } // printf(" opd = %li\n",opd); switch(d) { case Down: /* puts("Down");*/ /*fprintf(stderr, "Down\n");*/ push(stack,a); push(ofs_stack,(void*)opd); opd=-1; case Next: /* puts("Next");*/ /*fprintf(stderr, "Next\n");*/ opd += 1; if(is_empty(stack)) { d = Done; break; } else if(opd<wa_opd_count(peek(wast_t,stack))) { next = wa_opd(peek(wast_t,stack),(unsigned int)opd); break; } else { //d=Up; } case Up: /* puts("Up");*/ /*fprintf(stderr, "Up\n");*/ next=NULL; /* either pop or go to father */ if(not_empty(stack)) { _pop(stack); opd = pop(size_t,ofs_stack); d=Next; } else { //next = wa_father(a); d = Done; } break; case Done: next=NULL; /* puts("Done");*/ /*fprintf(stderr, "Done\n");*/ break; case Error: next=NULL; /* puts("Error");*/ /*fprintf(stderr, "Error\n");*/ break; default: ; }; if(next!=NULL) { a = next; d = do_visit(p,a); } } if(pce->result) { result = pce->result(p->data); } else { result = NULL; } free_pilot(p); free_stack(stack); free_stack(ofs_stack); return result; }
void run() override { float const loadFactor = 0.95f; do_visit(5000, 4096, loadFactor); }
void compute_face_normals_visitor::visit( subd_mesh_model_t& model, shape_t& shape) { do_visit( model, shape); }