Example #1
0
OP_STATUS IntersectionIndexGroup::AddIndex(index_gid_t index_id)
{
	if (m_indexes.Contains(index_id))
		return OpStatus::OK;

	Index* index = m_indexer->GetIndexById(index_id);

	if (index)
	{
		RETURN_IF_ERROR(index->PreFetch());
		
		OpINT32Vector all_messages;
		RETURN_IF_ERROR(m_index->GetAllMessages(all_messages));
		for (UINT32 i = 0; i < all_messages.GetCount(); i++)
		{
			if (!index->Contains(all_messages.Get(i)))
			{
				RETURN_IF_ERROR(m_index->RemoveMessage(all_messages.Get(i)));
			}
		}

		RETURN_IF_ERROR(m_indexes.Insert(index_id));
		RETURN_IF_ERROR(index->AddObserver(this));
	}

	return OpStatus::OK;
}
Example #2
0
OP_STATUS IndexGroup::IndexAdded(Indexer *indexer, UINT32 index_id)
{
	if (m_base_id == index_id)
	{
		m_base = m_indexer->GetIndexById(index_id);
		return m_base->AddObserver(this);
	}
	else if (m_indexes.Contains(index_id))
	{
		Index* index = m_indexer->GetIndexById(index_id);
		return index->AddObserver(this);
	}

	return OpStatus::OK;
}
Example #3
0
OP_STATUS IndexGroup::AddIndexWithoutAddingMessages(index_gid_t index_id)
{
	if (m_indexes.Contains(index_id))
		return OpStatus::OK;

	RETURN_IF_ERROR(m_indexes.Insert(index_id));

	Index* index = m_indexer->GetIndexById(index_id);
	if (index)
	{
		RETURN_IF_ERROR(index->AddObserver(this));
	}

	return OpStatus::OK;
}
Example #4
0
OP_STATUS UnionIndexGroup::AddIndex(index_gid_t index_id)
{
	if (m_indexes.Contains(index_id))
		return OpStatus::OK;

	RETURN_IF_ERROR(m_indexes.Insert(index_id));

	Index* index = m_indexer->GetIndexById(index_id);

	if (index)
	{
		index->PreFetch();
		for (INT32SetIterator it(index->GetIterator()); it; it++)
		{
			RETURN_IF_ERROR(m_index->NewMessage(it.GetData()));
		}

		index->AddObserver(this);

		m_index->ResetUnreadCount();
	}

	return OpStatus::OK;
}