object_t *vector_concat (object_t * a, object_t * b) { size_t al = VLENGTH (a), bl = VLENGTH (b); object_t *c = c_vec (al + bl, NIL); size_t i; for (i = 0; i < al; i++) vset (c, i, UPREF (vget (a, i))); for (i = 0; i < bl; i++) vset (c, i + al, UPREF (vget (b, i))); return c; }
object_t *vector_sub (object_t * vo, int start, int end) { vector_t *v = OVAL (vo); if (end == -1) end = v->len - 1; object_t *newv = c_vec (1 + end - start, NIL); int i; for (i = start; i <= end; i++) vset (newv, i - start, UPREF (vget (vo, i))); return newv; }
object_t *list2vector (object_t * lst) { int cnt = 0; object_t *p = lst; while (p != NIL) { cnt++; p = CDR (p); } object_t *v = c_vec (cnt, NIL); p = lst; size_t i = 0; while (p != NIL) { vset (v, i, UPREF (CAR (p))); i++; p = CDR (p); } return v; }
TEST(PerfGraphTest, test) { PerfGraph graph("Unit"); auto a_id = graph.registerSection("a", 1); auto b_id = graph.registerSection("b", 1); auto c_id = graph.registerSection("c", 1); unsigned int a = 0; unsigned int b = 0; unsigned int c = 0; std::vector<double> a_vec(100000, 2); std::vector<double> b_vec(100000, 3); std::vector<double> c_vec(100000, 2); { PerfGuard guard(graph, a_id); for (auto & aval : a_vec) aval += a++; { PerfGuard guard(graph, c_id); for (auto & cval : c_vec) cval += c++; } } { PerfGuard guard(graph, b_id); for (auto & bval : b_vec) bval += b++; { PerfGuard guard(graph, c_id); for (auto & cval : c_vec) cval += c++; } } }