예제 #1
0
파일: test_add.c 프로젝트: onyettr/c-llist
int test_add ( void )
{
  list_t *addTest;
  list_t *emplaceTest;
  
  // Sign on
  printf("**** Linked List Test - add\n");

  /*
   * create a new list
   */ 
  addTest = list_create();  
  printf("\tTest01a - add single element\n");
  list_add_element(addTest,10);
  list_show(addTest);  

  printf("\tTest01b - add more   elements\n");
  list_add_element(addTest,20);
  list_add_element(addTest,30);
  list_add_element(addTest,40);
  list_add_element(addTest,50);
  list_add_element(addTest,60);  
  list_show(addTest);
  printf("\tTest01b - size of list %d\n", list_size(addTest));

  printf("\tTest02a - add to front\n");  
  list_push_front(addTest, 111);
  list_show(addTest);
  printf("\tTest02a - size of list %d\n", list_size(addTest));

  printf("\tTest03a - add to back\n");;  
  list_push_back(addTest, 222);
  list_show(addTest);
  printf("\tTest03a - size of list %d\n", list_size(addTest));

  emplaceTest = list_create();
  
  printf("\tTest04a - emplace\n");
  list_add_element(emplaceTest, 1);
  list_add_element(emplaceTest, 2);
  list_add_element(emplaceTest, 3);
  list_add_element(emplaceTest, 4);  
  list_show(emplaceTest);
  printf("\tTest04a - size of list 4 = %d\n", list_size(emplaceTest));

  printf("\tTest05a - emplace at position 2\n");    
  list_add_position(emplaceTest, 2, 5);
  list_show(emplaceTest);  
  printf("\tTest05a - size of list %d\n", list_size(emplaceTest));

  printf("\tTest05b get at position 2 (5) %d\n", list_get_position(emplaceTest, 2));
  
  printf("\tTest05c - emplace at position 0\n");    
  list_add_position(emplaceTest, 0, 555);
  list_show(emplaceTest);  
  printf("\tTest05c - size of list %d\n", list_size(emplaceTest));
  printf("\tTest05c get at position 2 (555) %d\n", list_get_position(emplaceTest, 0));

  printf("\tTest05d - emplace at position size+1\n");    
  list_add_position(emplaceTest, (list_size(emplaceTest)+1), 100);
  
  printf("**** Linked List Test - add Ends\n");
  
  return 0;
}
예제 #2
0
hash_t *port_hash_init(list_t * ports_list, list_t * packages, conf_t * conf)
{
	hash_t *self;
	dict_t *pkgmk_confs_exploded;
	port_t *port, *found, *package;
	unsigned i;
	int cmp;
	char *locked_version, *pkgmk_conf;

	assert(ports_list != NULL && packages != NULL && conf != NULL);

	pkgmk_confs_exploded = pkgmk_confs_explode(conf->pkgmk_confs,
						   ports_list);

	self = hash_new_with_size(1000);

	for (i = 0; i < ports_list->length; i++) {
		port = list_get(ports_list, i);
		if ((pkgmk_conf = dict_get(pkgmk_confs_exploded, port->name)) !=
		    NULL)
			port->pkgmk_conf = xstrdup(pkgmk_conf);
		if (list_get_position(conf->never_install, strequ, port->name)
		    != -1)
			port->status = PRT_NEVERINSTALL;
		if ((locked_version =
		     dict_get(conf->locked_versions, port->name))) {
			if (!strcmp(port->version, locked_version))
				hash_add(self, port->name, port);
		} else if (locked_version == NULL &&
			   (found = dict_get(conf->favourite_repositories,
					     port->name)) != NULL) {
			if (strcmp(found->repository->name,
				   port->repository->name) == 0)
				hash_add(self, port->name, port);
		} else if (!locked_version
			   && !(found = hash_get(self, port->name)))
			hash_add(self, port->name, port);
		else if (!locked_version && port->repository->priority >
			 found->repository->priority)
			hash_add(self, port->name, port);
		else if (!locked_version && port->repository->priority ==
			 found->repository->priority &&
			 strverscmp(port->version, found->version) > 0)
			hash_add(self, port->name, port);
	}

	for (i = 0; i < packages->length; i++) {
		package = list_get(packages, i);
		if (!(port = hash_get(self, package->name))) {
			hash_add(self, package->name, package);
			continue;
		}
		if(port->status == PRT_NEVERINSTALL)
			continue;
		if ((cmp = strverscmp(port->version, package->version)) > 0)
			port->status = PRT_OUTDATED;
		else if (cmp < 0)
			port->status = PRT_DIFF;
		else
			port->status = PRT_INSTALLED;
	}

	dict_free(pkgmk_confs_exploded, free);

	return self;
}