static bool draw_transition(bool (*view_start)(int, int), bool (*view_end)(int, int), enum transition_t transition) { static int cur_x = ET024006_WIDTH; static bool altern = true; const int inc = 25; cur_x -= inc; if (cur_x < 0) cur_x = 0; switch (transition) { case TRANSITION_FROM_LEFT_TO_RIGHT: if (altern) view_start(cur_x - ET024006_WIDTH, 0); else view_end(cur_x, 0); break; case TRANSITION_FROM_RIGHT_TO_LEFT: if (altern) view_start(ET024006_WIDTH - cur_x, 0); else view_end(-cur_x, 0); break; } altern = !altern; if (cur_x) return false; cur_x = ET024006_WIDTH; return true; }
TEST(nn_workload_data_cpp_wrapper, basic_view_test) { nn_workload_data_coords_t lengths = { 4, 4, 4, 4, 4, 4 }; nn_workload_data_layout_t layout = { { 0, 0, 0, 0, 0, 0 }, // tile_log2 { 0, 0, 0, 0, 0, 0 }, // alignment default_ordering, // ordering NN_DATATYPE_FLOAT }; nn_workload_data_coords_t view_begin(1, 1, 1, 1, 1, 1); nn_workload_data_coords_t view_end(2, 2, 2, 2, 2, 2); nn::nn_workload_data_t<float> nndata(lengths, layout); nn::nn_workload_data_t<float> nnview(nndata, view_begin, view_end); ASSERT_NE(nndata.parent->data_buffer, nullptr); // Two views that have the same parent ASSERT_EQ(nnview.parent, nndata.parent); validate_view(nndata, nnview, view_begin, view_end); }
TEST(nn_workload_data_cpp_wrapper, tiling_view_test) { nn_workload_data_coords_t lengths = { 8, 8, 8, 8, 8, 8 }; nn_workload_data_layout_t layout = { { 1, 1, 1, 1, 1, 1 }, // tile_log2 { 0, 0, 0, 0, 0, 0 }, // alignment default_ordering, // ordering NN_DATATYPE_INT16 }; nn_workload_data_coords_t view_begin(2, 2, 2, 2, 2, 2); nn_workload_data_coords_t view_end(5, 5, 5, 5, 5, 5); nn::nn_workload_data_t<int16_t> nndata(lengths, layout); nn::nn_workload_data_t<int16_t> nnview(nndata, view_begin, view_end); ASSERT_NE(nndata.parent->data_buffer, nullptr); // Two views that have the same parent ASSERT_EQ(nnview.parent, nndata.parent); validate_view(nndata, nnview, view_begin, view_end); // View created from a view nn_workload_data_coords_t view2_begin(0, 0, 0, 0, 0, 0); nn_workload_data_coords_t view2_end(1, 1, 1, 1, 1, 1); nn_workload_data_coords_t view3_begin(2, 2, 2, 2, 2, 2); nn_workload_data_coords_t view3_end(3, 3, 3, 3, 3, 3); nn::nn_workload_data_t<int16_t> nnview2(nnview, view2_begin, view2_end); nn::nn_workload_data_t<int16_t> nnview3(nnview, view3_begin, view3_end); EXPECT_EQ(4, nndata.parent->reference_count); // make sure the views give access to the correct data validate_view(nnview, nnview2, view2_begin, view2_end); validate_view(nnview, nnview3, view3_begin, view3_end); // Invalid view requested - causes an exception nn_workload_data_coords_t view4_begin(1, 1, 1, 1, 1, 1); nn_workload_data_coords_t view4_end(2, 2, 2, 2, 2, 2); EXPECT_THROW(nn::nn_workload_data_t<int16_t> nnview3(nnview, view4_begin, view4_end), std::bad_alloc); }
/* * Each word in the command buffer is the name of a treetop. */ void ph_gettrees(struct pkg_conn *UNUSED(pc), char *buf) { size_t n = 0; long max_argc = 0; char **argv = NULL; int argc = 0; struct rt_i *rtip = APP.a_rt_i; RT_CK_RTI(rtip); if (debug) fprintf(stderr, "ph_gettrees: %s\n", buf); /* Copy values from command line options into rtip */ rtip->useair = use_air; if (rt_dist_tol > 0) { rtip->rti_tol.dist = rt_dist_tol; rtip->rti_tol.dist_sq = rt_dist_tol * rt_dist_tol; } if (rt_perp_tol > 0) { rtip->rti_tol.perp = rt_perp_tol; rtip->rti_tol.para = 1 - rt_perp_tol; } for (n = 0; n < strlen(buf); n++) { if (isspace((int)buf[n])) max_argc++; } argv = (char **)bu_calloc(max_argc+1, sizeof(char *), "alloc argv"); if ((argc = bu_argv_from_string(argv, max_argc, buf)) <= 0) { /* No words in input */ (void)free(buf); bu_free(argv, "free argv"); return; } title_obj = bu_strdup(argv[0]); if (rtip->needprep == 0) { /* First clean up after the end of the previous frame */ if (debug)bu_log("Cleaning previous model\n"); view_end(&APP); view_cleanup(rtip); rt_clean(rtip); if (rdebug&RDEBUG_RTMEM_END) bu_prmem("After rt_clean"); } /* Load the desired portion of the model */ if (rt_gettrees(rtip, argc, (const char **)argv, npsw) < 0) fprintf(stderr, "rt_gettrees(%s) FAILED\n", argv[0]); bu_free(argv, "free argv"); /* In case it changed from startup time via an OPT command */ if (npsw > 1) { RTG.rtg_parallel = 1; } else RTG.rtg_parallel = 0; seen_gettrees = 1; (void)free(buf); prepare(); /* Acknowledge that we are ready */ if (pkg_send(MSG_GETTREES_REPLY, title_obj, strlen(title_obj)+1, pcsrv) < 0) fprintf(stderr, "MSG_START error\n"); }