bool TBListBackend::Add(void *data) { if (!GrowIfNeeded()) return false; m_data->list[m_data->num] = data; m_data->num++; return true; }
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; }
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; }
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; }