Example #1
0
bool Partition::add(Entity entity)
{
  TraceIf("stk::mesh::impl::Partition::add", LOG_PARTITION);
  DiagIf(LOG_PARTITION, "Adding entity: " << print_entity_key(MetaData::get(BulkData::get(*m_repository)), m_mesh.entity_key(entity)));
  TraceIfWatchingDec("stk::mesh::impl::Partition::add", LOG_ENTITY, m_mesh.entity_key(entity), extra);

  if (m_mesh.bucket_ptr(entity))
  {
    // If an entity already belongs to a partition, it cannot be added to one.
    return false;
  }

  // If the last bucket is full, automatically create a new one.
  Bucket *bucket = get_bucket_for_adds();

  bucket->add_entity(entity);
  bucket->mesh().modified(entity);
  ++m_size;

  m_updated_since_compress = m_updated_since_sort = true;
  m_mesh.set_synchronized_count(entity, m_mesh.synchronized_count());

  // TODO - Too much tracing in this file, REMOVE
  DiagIfWatching(LOG_ENTITY, m_mesh.entity_key(entity),
                 " Bucket: " << *bucket << ", ordinal: " << m_mesh.bucket_ordinal(entity));
  DiagIf(LOG_PARTITION, "After add, state is: " << *this);

  internal_check_invariants();

  return true;
}