Exemple #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;
}
Exemple #2
0
OP_STATUS UnionIndexGroup::MessageRemoved(Index* index, message_gid_t message, BOOL setting_keyword)
{
	for (unsigned i = 0; i < m_indexes.GetCount(); i++)
	{
		Index* index = m_indexer->GetIndexById(m_indexes.GetByIndex(i));
		if (index && index->Contains(message))
		{
			return OpStatus::OK;
		}
	}
	return m_index->RemoveMessage(message);
}
Exemple #3
0
OP_STATUS IntersectionIndexGroup::MessageAdded(Index* index, message_gid_t message, BOOL setting_keyword)
{
	if (index == m_base || m_indexes.Contains(index->GetId()))
	{
		if (m_base->Contains(message))
		{
			for (unsigned i = 0; i < m_indexes.GetCount(); i++)
			{
				Index * index = m_indexer->GetIndexById(m_indexes.GetByIndex(i));
				if (index && !index->Contains(message))
					return OpStatus::OK;
			}
			return m_index->NewMessage(message);
		}
	}
	return OpStatus::OK;
}
Exemple #4
0
OP_STATUS ComplementIndexGroup::MessageRemoved(Index* index, message_gid_t message, BOOL setting_keyword)
{
	if (index == m_base)
	{
		return m_index->RemoveMessage(message);
	}
	else if (m_base && m_base->Contains(message))
	{
		for (unsigned i = 0; i < m_indexes.GetCount(); i++)
		{
			Index * index = m_indexer->GetIndexById(m_indexes.GetByIndex(i));
			if (index && index->Contains(message))
				return m_index->RemoveMessage(message);
		}
		return m_index->NewMessage(message);
	}

	return OpStatus::OK;
}