Exemple #1
0
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)--;
}
Exemple #2
0
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);
    }
}
Exemple #3
0
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;
}
Exemple #4
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);
    }
}
Exemple #5
0
/* 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;
}