コード例 #1
0
ファイル: linked-list.c プロジェクト: Katharine/linked-list
static char* prepend_not_empty(void) {
  linked_list_append(root, create_object(1));
  linked_list_prepend(root, create_object(2));
  Object* object = (Object*)linked_list_get(root, 0);
  mu_assert(NULL != object && 2 == object->id, "Cannot get item prepended on list.");
  return 0;
}
コード例 #2
0
ファイル: hash_map.c プロジェクト: gibsjose/c-hash-map
void hash_map_put(hash_map *map, void *key, void *value) {
	linked_list *list = map->table[map->hash_func(key, map->capacity)];

	if (!list) {
		list = (linked_list *) safe_malloc(sizeof(linked_list));
		linked_list_init(list, (linked_list_destructor) safe_free);
		map->table[map->hash_func(key, map->capacity)] = list;
	}

	linked_list_node *head = linked_list_head(list);

	while (head) {
		hash_map_pair *pair = (hash_map_pair *) head->data;

		// if key already exists, update the value
		if (map->comparator(pair->key, key) == 0) {
			pair->value = value;
			return;
		}

		head = head->next;
	}

	// or else insert new one

	hash_map_pair *pair = (hash_map_pair *) safe_malloc(sizeof(hash_map_pair));
	pair->key = key;
	pair->value = value;

	linked_list_prepend(list, pair);

	linked_list_append(map->keys, key);

	map->size++;
}
コード例 #3
0
static char* prv_load(int32_t hashval) {
  ResHandle  locale_handle = resource_get_handle(s_previous_locale);

  int resource_offset = 0;
  int locale_entries = 0;
  resource_offset += resource_load_byte_range(locale_handle, resource_offset, (uint8_t*)&locale_entries, sizeof(locale_entries));

  struct locale {
    int32_t hashval;
    int32_t strlen;
  } locale_info;

  hash_string *s = (hash_string *)malloc(sizeof(hash_string));
  s->hashval = hashval;
  s->value = NULL;

  linked_list_prepend(s_root, s);

  for (int i = 0; i < locale_entries; i++) {
    resource_offset += resource_load_byte_range(locale_handle, resource_offset, (uint8_t*)&locale_info, sizeof(struct locale));

    if(locale_info.hashval == hashval){
      char *buffer = malloc(locale_info.strlen);
      resource_load_byte_range(locale_handle, resource_offset, (uint8_t*)buffer, locale_info.strlen);
      s->value = buffer;
      break;
    }
    else {
      resource_offset += locale_info.strlen;
    }
  }

  return s->value;
}