moab
moab::TagInfo Class Reference

#include <TagInfo.hpp>

Inheritance diagram for moab::TagInfo:
moab::BitTag moab::DenseTag moab::MeshTag moab::SparseTag moab::VarLenDenseTag moab::VarLenSparseTag

List of all members.

Public Member Functions

 TagInfo ()
 constructor
 TagInfo (const char *name, int size, DataType type, const void *default_value, int default_value_size)
 constructor that takes all parameters
virtual ~TagInfo ()
virtual ErrorCode release_all_data (SequenceManager *seqman, Error *error_handler, bool tag_delete_pending)=0
 Remove/clear tag data for all entities.
void set_name (const std::string &name)
 set the name of the tag
const std::string & get_name () const
 get the name of the tag
int get_default_value_size () const
 get length of default value
const void * get_default_value () const
 get the default data
bool equals_default_value (const void *data, int size=-1) const
DataType get_data_type () const
int get_size () const
 get the size of the data in bytes
bool variable_length () const
 Check if variable-length tag.
bool check_valid_sizes (const int *sizes, int num_sizes) const
ErrorCode validate_lengths (Error *error_handler, const int *lengths, size_t num_lengths) const
virtual TagType get_storage_type () const =0
virtual ErrorCode get_data (const SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities, void *data) const =0
 Get tag value for passed entities.
virtual ErrorCode get_data (const SequenceManager *seqman, Error *error_handler, const Range &entities, void *data) const =0
 Get tag value for passed entities.
virtual ErrorCode get_data (const SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities, const void **data_ptrs, int *data_lengths) const =0
 Get tag value for passed entities.
virtual ErrorCode get_data (const SequenceManager *seqman, Error *error_handler, const Range &entities, const void **data_ptrs, int *data_lengths) const =0
 Get tag value for passed entities.
virtual ErrorCode set_data (SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities, const void *data)=0
 Set tag value for passed entities.
virtual ErrorCode set_data (SequenceManager *seqman, Error *error_handler, const Range &entities, const void *data)=0
 Set tag value for passed entities.
virtual ErrorCode set_data (SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities, void const *const *data_ptrs, const int *data_lengths)=0
 Set tag value for passed entities.
virtual ErrorCode set_data (SequenceManager *seqman, Error *error_handler, const Range &entities, void const *const *data_ptrs, const int *data_lengths)=0
 Set tag value for passed entities.
virtual ErrorCode clear_data (SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities, const void *value_ptr, int value_len=0)=0
 Set tag value for passed entities.
virtual ErrorCode clear_data (SequenceManager *seqman, Error *error_handler, const Range &entities, const void *value_ptr, int value_len=0)=0
 Set tag value for passed entities.
virtual ErrorCode remove_data (SequenceManager *seqman, Error *error_handler, const EntityHandle *entities, size_t num_entities)=0
 Remove/clear tag data for entities.
virtual ErrorCode remove_data (SequenceManager *seqman, Error *error_handler, const Range &entities)=0
 Remove/clear tag data for entities.
virtual ErrorCode tag_iterate (SequenceManager *seqman, Error *error_handler, Range::iterator &iter, const Range::iterator &end, void *&data_ptr, bool allocate=true)=0
 Access tag data via direct pointer into contiguous blocks.
virtual ErrorCode get_tagged_entities (const SequenceManager *seqman, Range &output_entities, EntityType type=MBMAXTYPE, const Range *intersect=0) const =0
 Get all tagged entities.
virtual ErrorCode num_tagged_entities (const SequenceManager *seqman, size_t &output_count, EntityType type=MBMAXTYPE, const Range *intersect=0) const =0
 Count all tagged entities.
virtual ErrorCode find_entities_with_value (const SequenceManager *seqman, Error *error_handler, Range &output_entities, const void *value, int value_bytes=0, EntityType type=MBMAXTYPE, const Range *intersect_entities=0) const =0
 Get all tagged entities with tag value.
virtual bool is_tagged (const SequenceManager *seqman, EntityHandle entity) const =0
 Check if entity is tagged.
virtual ErrorCode get_memory_use (const SequenceManager *seqman, unsigned long &total, unsigned long &per_entity) const =0
 Get memory use for tag data.

Static Public Member Functions

static int size_from_data_type (DataType t)

Protected Member Functions

unsigned long get_memory_use () const

Private Member Functions

 TagInfo (const TagInfo &copy)
TagInfooperator= (const TagInfo &copy)

Private Attributes

void * mDefaultValue
 stores the default data, if any
void * mMeshValue
 store the mesh value, if any
int mDefaultValueSize
int mMeshValueSize
int mDataSize
 stores the size of the data for this tag
DataType dataType
 type of tag data
std::string mTagName
 stores the tag name

Detailed Description


Constructor & Destructor Documentation

moab::TagInfo::TagInfo ( ) [inline]

constructor

Definition at line 19 of file TagInfo.hpp.

moab::TagInfo::TagInfo ( const char *  name,
int  size,
DataType  type,
const void *  default_value,
int  default_value_size 
)

constructor that takes all parameters

Definition at line 9 of file TagInfo.cpp.

 : mDefaultValue(0),
   mDefaultValueSize(default_value_size),
   mDataSize(size),
   dataType(type)
{
  if (default_value) {
    mDefaultValue = malloc( mDefaultValueSize );
    memcpy( mDefaultValue, default_value, mDefaultValueSize );
  }
  if (name)
    mTagName = name;
}
moab::TagInfo::~TagInfo ( ) [virtual]

Definition at line 27 of file TagInfo.cpp.

moab::TagInfo::TagInfo ( const TagInfo copy) [private]

Member Function Documentation

bool moab::TagInfo::check_valid_sizes ( const int *  sizes,
int  num_sizes 
) const

Definition at line 70 of file TagInfo.cpp.

{
  unsigned sum = 0;
  const unsigned size = size_from_data_type( get_data_type() );
  if (size == 1)
    return true;
  for (int i = 0; i < num_sizes; ++i)
    sum |= ((unsigned)sizes[i]) % size;
  return (sum == 0);
}
virtual ErrorCode moab::TagInfo::clear_data ( SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities,
const void *  value_ptr,
int  value_len = 0 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
num_entitiesLength of entities array
value_ptrPointer to a single tag value which is to be stored for each of the passed entities.
value_lenLength of tag value in bytes. Ignored for fixed-length tags. Required for variable- length tags.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::clear_data ( SequenceManager seqman,
Error error_handler,
const Range entities,
const void *  value_ptr,
int  value_len = 0 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
value_ptrPointer to a single tag value which is to be stored for each of the passed entities.
value_lenLength of tag value in bytes. Ignored for fixed-length tags. Required for variable- length tags.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

bool moab::TagInfo::equals_default_value ( const void *  data,
int  size = -1 
) const

compare the passed value to the default value. returns false if no default value.

Definition at line 45 of file TagInfo.cpp.

{
  if (!get_default_value())
    return false;
  
  if (variable_length() && size != get_default_value_size())
    return false;
  
  if (!variable_length() && size >=0 && size != get_size())
    return false;
    
  if (get_data_type() == MB_TYPE_BIT) {
    assert(get_size() <= 8 && get_default_value_size() == 1);
    unsigned char byte1 = *reinterpret_cast<const unsigned char*>(data);
    unsigned char byte2 = *reinterpret_cast<const unsigned char*>(get_default_value());
    unsigned char mask = (unsigned char)((1u << get_size()) - 1);
    return (byte1&mask) == (byte2&mask);
  }
  else {
    return !memcmp( data, get_default_value(), get_default_value_size() );
  }
}
virtual ErrorCode moab::TagInfo::find_entities_with_value ( const SequenceManager seqman,
Error error_handler,
Range output_entities,
const void *  value,
int  value_bytes = 0,
EntityType  type = MBMAXTYPE,
const Range intersect_entities = 0 
) const [pure virtual]

Get all tagged entities with tag value.

Get the list of entities which have the specified tag value.

Parameters:
seqmanPointer to entity storage database
output_entitiesResults *appended* to this range
valuePointer to tag value
value_bytesSize of tag value in bytes.
typeOptional entity type. If specified, search is limited to entities of specified type.
intersect_entitiesOpotional intersect list. If specified, search is restricted to entities in this list.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::get_data ( const SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities,
void *  data 
) const [pure virtual]

Get tag value for passed entities.

Get tag values for specified entities.

Will fail for variable-length data.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to retrieve tag data
num_entitiesLength of entities array
dataPointer to memory in which to store consecutive tag values, one for each passed entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::get_data ( const SequenceManager seqman,
Error error_handler,
const Range entities,
void *  data 
) const [pure virtual]

Get tag value for passed entities.

Get tag values for specified entities.

Will fail for variable-length data.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to retrieve tag data
dataPointer to memory in which to store consecutive tag values, one for each passed entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::get_data ( const SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities,
const void **  data_ptrs,
int *  data_lengths 
) const [pure virtual]

Get tag value for passed entities.

Get tag values for specified entities.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to retrieve tag data
num_entitiesLength of entities array
data_ptrsArray of pointers to tag values, one pointer for each passed entity.
data_lengthsOne value for each entity specifying the length of the tag value for the corresponding entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::get_data ( const SequenceManager seqman,
Error error_handler,
const Range entities,
const void **  data_ptrs,
int *  data_lengths 
) const [pure virtual]

Get tag value for passed entities.

Get tag values for specified entities.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to retrieve tag data
data_ptrsArray of pointers to tag values, one pointer for each passed entity.
data_lengthsOne value for each entity specifying the length of the tag value for the corresponding entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

Definition at line 67 of file TagInfo.hpp.

{ return dataType; }
const void* moab::TagInfo::get_default_value ( ) const [inline]

get the default data

Definition at line 61 of file TagInfo.hpp.

{ return mDefaultValue; }
int moab::TagInfo::get_default_value_size ( ) const [inline]

get length of default value

Definition at line 58 of file TagInfo.hpp.

{ return mDefaultValueSize; }
virtual ErrorCode moab::TagInfo::get_memory_use ( const SequenceManager seqman,
unsigned long &  total,
unsigned long &  per_entity 
) const [pure virtual]
unsigned long moab::TagInfo::get_memory_use ( ) const [inline, protected]

Definition at line 415 of file TagInfo.hpp.

  {
    return get_default_value_size() + get_name().size();
  }
const std::string& moab::TagInfo::get_name ( ) const [inline]

get the name of the tag

Definition at line 55 of file TagInfo.hpp.

{ return mTagName; }
int moab::TagInfo::get_size ( ) const [inline]

get the size of the data in bytes

Definition at line 70 of file TagInfo.hpp.

{ return mDataSize; }
virtual ErrorCode moab::TagInfo::get_tagged_entities ( const SequenceManager seqman,
Range output_entities,
EntityType  type = MBMAXTYPE,
const Range intersect = 0 
) const [pure virtual]

Get all tagged entities.

Get the list of entities for which the a tag value has been set, or a close approximation if the tag storage scheme cannot accurately determine exactly which entities have explicit values.

Parameters:
seqmanPointer to entity storage database
output_entitiesResults *appended* to this range
typeOptional entity type. If specified, search is limited to entities of specified type.
intersectOpotional intersect list. If specified, search is restricted to entities in this list.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual bool moab::TagInfo::is_tagged ( const SequenceManager seqman,
EntityHandle  entity 
) const [pure virtual]
virtual ErrorCode moab::TagInfo::num_tagged_entities ( const SequenceManager seqman,
size_t &  output_count,
EntityType  type = MBMAXTYPE,
const Range intersect = 0 
) const [pure virtual]

Count all tagged entities.

Count the entities for which the a tag value has been set, or a close approximation if the tag storage scheme cannot accurately determine exactly which entities have explicit values.

Parameters:
seqmanPointer to entity storage database
output_countThis is *incremented* for each detected entity.
typeOptional entity type. If specified, search is limited to entities of specified type.
intersectOpotional intersect list. If specified, search is restricted to entities in this list.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

TagInfo& moab::TagInfo::operator= ( const TagInfo copy) [private]
virtual ErrorCode moab::TagInfo::release_all_data ( SequenceManager seqman,
Error error_handler,
bool  tag_delete_pending 
) [pure virtual]

Remove/clear tag data for all entities.

Remove tag values from entities.

Parameters:
tag_delete_pendingIf true, then release any global data associated with the tag in preparation for deleting the tag itself.

Invalidates tag if tag_delete_pending is true. The only valid method that can be invoked that is is the destructor.

Parameters:
seqmanPointer to mesh entity database

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::remove_data ( SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities 
) [pure virtual]

Remove/clear tag data for entities.

Remove tag values from entities.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
num_entitiesLength of entities array

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::remove_data ( SequenceManager seqman,
Error error_handler,
const Range entities 
) [pure virtual]

Remove/clear tag data for entities.

Remove tag values from entities.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::set_data ( SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities,
const void *  data 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values Will fail for variable-length data.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
num_entitiesLength of entities array
dataPointer to memory holding consecutive tag values, one for each passed entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::set_data ( SequenceManager seqman,
Error error_handler,
const Range entities,
const void *  data 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values Will fail for variable-length data.

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
dataPointer to memory holding consecutive tag values, one for each passed entity.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::set_data ( SequenceManager seqman,
Error error_handler,
const EntityHandle entities,
size_t  num_entities,
void const *const *  data_ptrs,
const int *  data_lengths 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
num_entitiesLength of entities array
data_ptrsArray of pointers to tag values, one pointer for each passed entity.
data_lengthsOne value for each entity specifying the length of the tag value for the corresponding entity. Array is required for variable-length tags and is ignored for fixed-length tags.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

virtual ErrorCode moab::TagInfo::set_data ( SequenceManager seqman,
Error error_handler,
const Range entities,
void const *const *  data_ptrs,
const int *  data_lengths 
) [pure virtual]

Set tag value for passed entities.

Store tag data or update stored tag values

Parameters:
seqmanPointer to mesh entity database
entitiesEntity handles for which to store tag data
data_ptrsArray of pointers to tag values, one pointer for each passed entity.
data_lengthsOne value for each entity specifying the length of the tag value for the corresponding entity. Array is required for variable-length tags and is ignored for fixed-length tags.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

void moab::TagInfo::set_name ( const std::string &  name) [inline]

set the name of the tag

Definition at line 52 of file TagInfo.hpp.

{ mTagName = name; }

Definition at line 34 of file TagInfo.cpp.

{
  static const int sizes[] = { 1, 
                               sizeof(int), 
                               sizeof(double), 
                               1, 
                               sizeof(EntityHandle),
                               0 };  
   return sizes[t];
}
virtual ErrorCode moab::TagInfo::tag_iterate ( SequenceManager seqman,
Error error_handler,
Range::iterator iter,
const Range::iterator end,
void *&  data_ptr,
bool  allocate = true 
) [pure virtual]

Access tag data via direct pointer into contiguous blocks.

Iteratively obtain direct access to contiguous blocks of tag storage. This function cannot be used with bit tags because of the compressed bit storage. This function cannot be used with variable length tags because it does not provide a mechanism to determine the length of the value for each entity. This function may be used with sparse tags, but if it is used, it will return data for a single entity at a time.

Parameters:
iterAs input, the first entity for which to return data. As output, one past the last entity for which data was returned.
endOne past the last entity for which data is desired
data_ptrOutput: pointer to tag storage.
allocateIf true, space for this tag will be allocated, if not it wont

If this function is called for entities for which no tag value has been set, but for which a default value exists, it will force the allocation of explicit storage for each such entity even though MOAB would normally not explicitly store tag values for such entities.

Implemented in moab::SparseTag, moab::VarLenSparseTag, moab::VarLenDenseTag, moab::DenseTag, moab::BitTag, and moab::MeshTag.

ErrorCode moab::TagInfo::validate_lengths ( Error error_handler,
const int *  lengths,
size_t  num_lengths 
) const
Returns:
MB_VARIABLE_LENGTH_DATA If variable_length() && lengths is NULL MB_INVALID_SIZE If variable_length() && lengths is not NULL && any size is not a multiple of type size. MB_INVALID_SIZE If !variable_length() && lengths is not NULL && any size is not the tag size. MB_SUCCESS Otherwise.

Definition at line 81 of file TagInfo.cpp.

{
  int bits = 0;
  if (variable_length()) {
    if (!lengths) {
      error_handler->set_last_error("No size specified for variable-length tag");
      return MB_VARIABLE_DATA_LENGTH;
    }
    const unsigned type_size = size_from_data_type( get_data_type() );
    if (type_size == 1)
      return MB_SUCCESS;
    for (size_t i = 0; i < num_lengths; ++i)
      bits |= lengths[i] % type_size;
  }
  else if (lengths) {
    for (size_t i = 0; i < num_lengths; ++i)
      bits |= lengths[i] - get_size();
  }
  if (!bits)
    return MB_SUCCESS;
  error_handler->set_last_error("Tag data with invalid size");
  return MB_INVALID_SIZE;
}
bool moab::TagInfo::variable_length ( ) const [inline]

Check if variable-length tag.

Definition at line 73 of file TagInfo.hpp.

{ return get_size() == MB_VARIABLE_LENGTH; }

Member Data Documentation

type of tag data

Definition at line 442 of file TagInfo.hpp.

int moab::TagInfo::mDataSize [private]

stores the size of the data for this tag

Definition at line 439 of file TagInfo.hpp.

stores the default data, if any

Definition at line 427 of file TagInfo.hpp.

Size of mDefaultValue and mMeshValue, in bytes NOTE: These sizes differ from mDataSize in two cases: a) Variable-length tags b) Bit tags (where mDataSize is bits, not bytes.)

Definition at line 436 of file TagInfo.hpp.

void* moab::TagInfo::mMeshValue [private]

store the mesh value, if any

Definition at line 430 of file TagInfo.hpp.

Definition at line 436 of file TagInfo.hpp.

std::string moab::TagInfo::mTagName [private]

stores the tag name

Definition at line 445 of file TagInfo.hpp.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines