示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
文件: testvismat4.hpp 项目: 8l/Mach7
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
}
示例#4
0
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;
    }
}
示例#5
0
文件: walker.c 项目: quesnel/tinyap
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;
}
示例#6
0
 void
 run() override
 {
     float const loadFactor = 0.95f;
     do_visit(5000, 4096, loadFactor);
 }
示例#7
0
void compute_face_normals_visitor::visit( subd_mesh_model_t& model, shape_t& shape)
{
    do_visit( model, shape);
}