static void elt_delete (heap_header_t * h, heap_elt_t * e) { heap_elt_t * l = vec_end (h->elts) - 1; ASSERT (e >= h->elts && e <= l); /* Update doubly linked pointers. */ { heap_elt_t * p = heap_prev (e); heap_elt_t * n = heap_next (e); if (p == e) { n->prev = 0; h->head = n - h->elts; } else if (n == e) { p->next = 0; h->tail = p - h->elts; } else { p->next = n - p; n->prev = p - n; } } /* Add to index free list or delete from end. */ if (e < l) vec_add1 (h->free_elts, e - h->elts); else _vec_len (h->elts)--; }
void init_texture_list(GtkTreeView* tree) { GtkTreeStore* store = GTK_TREE_STORE(gtk_tree_view_get_model(tree)); gtk_tree_store_clear(store); inspect_tex_vec_t textures = inspector->textures; for (inspect_texture_t* tex = textures->data; !vec_end(textures, tex); tex++) { char str[64]; memset(str, 0, 64); snprintf(str, 64, "%u", tex->fake); GtkTreeIter row; gtk_tree_store_append(store, &row, NULL); gtk_tree_store_set(store, &row, 0, str, -1); } }
int main() { int n = 10, i; pvec v1; int* it = NULL; vec_init(&v1, sizeof(int), NULL ); for(i = 0; i < 20; i++) { vec_push(v1, &i); vec_debugi(v1); } vec_debugi(v1); vec_release(v1); for(it = (int*)vec_begin(v); it != (int*)vec_end(); it++) { printf("%d ",*it); } return 0; }
void init_syncs_list(GtkTreeView* tree) { GtkTreeView* content = GTK_TREE_VIEW(gtk_builder_get_object(builder, "sync_treeview")); GtkTreeStore* store = GTK_TREE_STORE(gtk_tree_view_get_model(content)); gtk_tree_store_clear(store); store = GTK_TREE_STORE(gtk_tree_view_get_model(tree)); gtk_tree_store_clear(store); inspect_sync_vec_t syncs = inspector->syncs; for (inspect_sync_t* sync = syncs->data; !vec_end(syncs, sync); sync++) { char str[64]; memset(str, 0, 64); snprintf(str, 64, "0x%zx", sync->fake); GtkTreeIter row; gtk_tree_store_append(store, &row, NULL); gtk_tree_store_set(store, &row, 0, str, -1); } }
/* Interrupt handler. Call functions for all expired timers. Set time for next timer interrupt. */ static void timer_interrupt (int signum) { f64 now = unix_time_now (); f64 dt; timer_callback_t *t; while (1) { if (vec_len (timers) <= 0) return; /* Consider last (earliest) timer in reverse sorted vector of pending timers. */ t = vec_end (timers) - 1; ASSERT (now >= 0 && isfinite (now)); /* Time difference between when timer goes off and now. */ dt = t->time - now; /* If timer is within threshold of going off call user's callback. */ if (dt <= time_resolution && isfinite (dt)) { _vec_len (timers) -= 1; (*t->func) (t->arg, -dt); } else { /* Set timer for to go off in future. */ struct itimerval itv; clib_memset (&itv, 0, sizeof (itv)); f64_to_tv (dt, &itv.it_value); if (setitimer (ITIMER_REAL, &itv, 0) < 0) clib_unix_error ("sititmer"); return; } } }
vector<vector<string>> Solution::findLadders(string start, string end, unordered_set<string> &dict) { unordered_map<string, vector<vector<string>>> set1, set2, *set_cur, *set_target; vector<vector<string>> vec_start(1, vector<string>(1, start)), vec_end(1, vector<string>(1, end)); //two-end BFS to effectively prune, BFS strategy will get the smaller set to traverse in each iteration set1[start] = vec_start; set2[end] = vec_end; int K = start.size(); bool isUpdated = true, isFinished = false; vector<vector<string>> res; for(int depth = 2; isUpdated && !isFinished; ++depth) { if(set1.size() > set2.size()) { set_cur = &set2; set_target = &set1; } else { set_cur = &set1; set_target = &set2; } unordered_map<string, vector<vector<string>>> inter_set; isUpdated = false; unordered_set<string> deleting; for(auto iteri=set_cur->cbegin(), end = set_cur->cend(); iteri!=end; ++iteri) { for(int i=0; i<K; ++i) { string temp = (*iteri).first; char ch = 'a'; for(int c = 0; c<26; ++c) { temp[i] = ch + c; if(set_target->find(temp) != set_target->end()) { const vector<vector<string>> *new_paths_first = &(*iteri).second; const vector<vector<string>> *new_paths_second = &(*set_target)[temp]; auto iter_in = set_cur->cbegin(); if(((*iter_in).second)[0][0] != start) { new_paths_first = &(*set_target)[temp]; new_paths_second = &(*iteri).second; } for_each(new_paths_first->cbegin(), new_paths_first->end(), [&] (const vector<string> &first_path) { for_each(new_paths_second->cbegin(), new_paths_second->cend(), [&] (const vector<string> &second_path) { vector<string> temp_path = first_path; for_each(second_path.crbegin(), second_path.crend(), [&](const string &s) { temp_path.push_back(s); }); res.push_back(temp_path); }); }); isFinished = true; } else if(dict.find(temp) != dict.end()) { vector<vector<string>> new_paths = (*iteri).second; for_each(new_paths.begin(), new_paths.end(), [&] (vector<string> &path) { path.push_back(temp); }); if(inter_set.find(temp) == inter_set.end()) inter_set[temp] = new_paths; else { for_each(new_paths.begin(), new_paths.end(), [&] (vector<string> &path) { inter_set[temp].push_back(path); }); } deleting.insert(temp); isUpdated = true; } } } } for_each(deleting.begin(), deleting.end(), [&] (const string &s) { dict.erase(s); }); *set_cur = inter_set; } return res; }
int main() { #ifdef _TEST1 std::string str = "robot.xml"; CConfigLoader cfg(str); if(!cfg.LoadXml()) return 1; //Set origin at O_zero CRobot robot(Vector3f(0.0f,0.0f,0.0f)); robot.LoadConfig(cfg.GetTable()); //Print loaded data robot.PrintHomogenTransformationMatrix(); robot.PrintFullTransformationMatrix(); //Rotating joint 1 for 90 degrees robot.RotateJoint(DHINDEX(1),90.0f); robot.PrintHomogenTransformationMatrix(); robot.PrintFullTransformationMatrix(); #endif #ifdef _TEST2 CLine3D line; Vector3f test2; Vector3f vec_end(20,1,0); Vector3f vec_start(1,2,3); float displ = 0.01f; test2 = line.GetNextPoint(vec_end,vec_start,displ); while(true) { if (test2 == vec_end) { break; } std::cout<<test2<<std::endl; test2 = line.GetNextPoint(vec_end,test2,displ); } std::cout<<test2<<std::endl; #endif #ifdef _TESTJACIBIANTRANSPOSE std::string str = "robot.xml"; CConfigLoader cfg(str); if(!cfg.LoadXml()) return 1; //Set origin at O_zero CRobot robot(Vector3f(0.0f,0.0f,0.0f)); robot.LoadConfig(cfg.GetTable()); CAlgoFactory factory; VectorXf des(6); float speccfc = 0.001f; des << 200.0f ,200.0f ,0.0f ,0.0f ,0.0f ,0.0f ; CAlgoAbstract * pJpt = factory.GiveMeSolver(JACOBIANTRANSPOSE,des,robot); pJpt->SetAdditionalParametr(speccfc); pJpt->CalculateData(); robot.PrintConfiguration(); #endif #ifdef _TESTJACIBIANPSEUDO std::string str = "robot.xml"; CConfigLoader cfg(str); if(!cfg.LoadXml()) return 1; //Set origin at O_zero CRobot robot(Vector3f(0.0f,0.0f,0.0f)); robot.LoadConfig(cfg.GetTable()); CAlgoFactory factory; VectorXf des(6); float speccfc = 0.001f; des << 200.0f , 200.0f , 0.0f , 0.0f , 0.0f , 0.0f ; CAlgoAbstract * pJpt = factory.GiveMeSolver(JACOBIANPSEVDOINVERSE,des,robot); pJpt->CalculateData(); robot.PrintConfiguration(); #endif #ifdef _TESTDLS std::string str = "robot.xml"; CConfigLoader cfg(str); if(!cfg.LoadXml()) return 1; //Set origin at O_zero CRobot robot(Vector3f(0.0f,0.0f,0.0f)); robot.LoadConfig(cfg.GetTable()); CAlgoFactory factory; VectorXf des(6); float speccfc = 0.001f; des << 200.0f , 200.0f , 0.0f , 0.0f , 0.0f , 0.0f ; CAlgoAbstract * pJpt = factory.GiveMeSolver(DUMPEDLEASTSQUARES,des,robot); pJpt->SetAdditionalParametr(speccfc); pJpt->CalculateData(); robot.PrintConfiguration(); #endif return 0; }