Mesh Oriented datABase  (version 5.4.1)
Array-based unstructured mesh datastructure
UnstructuredElemSeq.cpp
Go to the documentation of this file.
00001 #include "UnstructuredElemSeq.hpp"
00002 #include "SequenceData.hpp"
00003 #include "moab/CN.hpp"
00004 
00005 namespace moab
00006 {
00007 
00008 UnstructuredElemSeq::UnstructuredElemSeq( EntityHandle shandle,
00009                                           EntityID entity_count,
00010                                           unsigned nodes_per_entity,
00011                                           SequenceData* dat )
00012     : ElementSequence( shandle, entity_count, nodes_per_entity, dat )
00013 {
00014 }
00015 
00016 UnstructuredElemSeq::UnstructuredElemSeq( EntityHandle shandle,
00017                                           EntityID entity_count,
00018                                           unsigned nodes_per_entity,
00019                                           EntityID data_size )
00020     : ElementSequence( shandle,
00021                        entity_count,
00022                        nodes_per_entity,
00023                        new SequenceData( 1, shandle, shandle + data_size - 1 ) )
00024 {
00025     data()->create_sequence_data( 0, nodes_per_entity * sizeof( EntityHandle ) );
00026 }
00027 
00028 UnstructuredElemSeq::~UnstructuredElemSeq() {}
00029 
00030 int UnstructuredElemSeq::values_per_entity() const
00031 {
00032     return nodes_per_element();
00033 }
00034 
00035 EntitySequence* UnstructuredElemSeq::split( EntityHandle here )
00036 {
00037     if( here <= start_handle() || here > end_handle() ) return 0;
00038 
00039     return new UnstructuredElemSeq( *this, here );
00040 }
00041 
00042 SequenceData* UnstructuredElemSeq::create_data_subset( EntityHandle start, EntityHandle end ) const
00043 {
00044     int esize = nodes_per_element() * sizeof( EntityHandle );
00045     return data()->subset( start, end, &esize );
00046 }
00047 
00048 void UnstructuredElemSeq::get_const_memory_use( unsigned long& bytes_per_entity, unsigned long& size_of_sequence ) const
00049 {
00050     bytes_per_entity = nodes_per_element() * sizeof( EntityHandle );
00051     size_of_sequence = sizeof( *this );
00052 }
00053 
00054 ErrorCode UnstructuredElemSeq::get_connectivity( EntityHandle handle,
00055                                                  std::vector< EntityHandle >& connect,
00056                                                  bool topological ) const
00057 {
00058     EntityHandle const* conn = get_array() + nodes_per_element() * ( handle - start_handle() );
00059     int len                  = topological ? CN::VerticesPerEntity( type() ) : nodes_per_element();
00060     connect.reserve( connect.size() + len );
00061     std::copy( conn, conn + len, std::back_inserter( connect ) );
00062     return MB_SUCCESS;
00063 }
00064 
00065 ErrorCode UnstructuredElemSeq::get_connectivity( EntityHandle handle,
00066                                                  EntityHandle const*& conn_ptr,
00067                                                  int& len,
00068                                                  bool topological,
00069                                                  std::vector< EntityHandle >* ) const
00070 {
00071     conn_ptr = get_array() + nodes_per_element() * ( handle - start_handle() );
00072     len      = topological ? CN::VerticesPerEntity( type() ) : nodes_per_element();
00073     return MB_SUCCESS;
00074 }
00075 
00076 ErrorCode UnstructuredElemSeq::set_connectivity( EntityHandle handle, EntityHandle const* connect, int connect_length )
00077 {
00078     if( (unsigned)connect_length != nodes_per_element() ) return MB_INDEX_OUT_OF_RANGE;
00079     EntityHandle* conn_ptr = get_array() + nodes_per_element() * ( handle - start_handle() );
00080     std::copy( connect, connect + connect_length, conn_ptr );
00081     return MB_SUCCESS;
00082 }
00083 
00084 EntityHandle* UnstructuredElemSeq::get_connectivity_array()
00085 {
00086     return get_array();
00087 }
00088 
00089 ErrorCode UnstructuredElemSeq::push_back( EntityID count )
00090 {
00091     return EntitySequence::append_entities( count );
00092 }
00093 
00094 ErrorCode UnstructuredElemSeq::push_front( EntityID count )
00095 {
00096     return EntitySequence::prepend_entities( count );
00097 }
00098 
00099 }  // namespace moab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines