예제 #1
0
bool TBListBackend::Add(void *data)
{
	if (!GrowIfNeeded())
		return false;
	m_data->list[m_data->num] = data;
	m_data->num++;
	return true;
}
예제 #2
0
bool TBListBackend::Add(void *data, int index)
{
	assert(index >= 0 && index <= GetNumItems());
	if (!GrowIfNeeded())
		return false;
	if (index < m_data->num)
		memmove(&m_data->list[index + 1], &m_data->list[index], (m_data->num - index) * sizeof(void*));
	m_data->list[index] = data;
	m_data->num++;
	return true;
}
예제 #3
0
OP_STATUS OpHashTable::Add(const void* key, void* data)
{
	if (!IsInitialized())
	{
		RETURN_IF_ERROR(Init());
	}

	RETURN_IF_ERROR(GrowIfNeeded());
	RETURN_IF_ERROR(hash_backend.Add(key, data));
	nr_of_elements++;
	return OpStatus::OK;
}
예제 #4
0
OP_STATUS OpHashTable::Update(const void* key,
                              void* data,
                              void** old_data /* = NULL */,
                              BOOL* had_key   /* = NULL */)
{
	if (!IsInitialized())
		RETURN_IF_ERROR(Init());

	/* TODO: This will grow the hash table if we are at the maximum capacity
	   for the current hash_size_index and update an existing element, which is
	   unnecessary. */
	RETURN_IF_ERROR(GrowIfNeeded());
	const BOOL key_exists = hash_backend.Update(key, data, old_data);
	if (had_key)
		*had_key = key_exists;
	if (!key_exists)
		++nr_of_elements;
	return OpStatus::OK;
}