Mesh Oriented datABase
(version 5.5.1)
An array-based unstructured mesh library
EntitySequence.hpp
Go to the documentation of this file.
1
#ifndef ENTITY_SEQUENCE_HPP
2
#define ENTITY_SEQUENCE_HPP
3
4
#include "
moab/Types.hpp
"
5
#include "
Internals.hpp
"
6
7
namespace
moab
8
{
9
10
class
SequenceData;
11
12
class
EntitySequence
13
{
14
private
:
15
EntityHandle
startHandle
,
endHandle
;
16
SequenceData
*
sequenceData
;
17
18
protected
:
19
EntitySequence
(
EntityHandle
h ) :
startHandle
( h ),
endHandle
( h ),
sequenceData
( NULL ) {}
20
21
EntitySequence
(
EntitySequence
& split_from,
EntityHandle
here )
22
:
startHandle
( here ),
endHandle
( split_from.
endHandle
),
sequenceData
( split_from.
sequenceData
)
23
{
24
split_from.
endHandle
= here - 1;
25
}
26
27
SequenceData
*
create_data_subset
(
EntityHandle
start_handle
,
28
EntityHandle
end_handle
,
29
int
num_sequence_arrays,
30
unsigned
const
* bytes_per_element )
const
;
31
32
ErrorCode
prepend_entities
(
EntityID
count );
33
ErrorCode
append_entities
(
EntityID
count );
34
35
public
:
36
EntitySequence
(
EntityHandle
start,
EntityID
count,
SequenceData
* dat )
37
:
startHandle
( start ),
endHandle
( start + count - 1 ),
sequenceData
( dat )
38
{
39
}
40
41
virtual
~EntitySequence
() {}
42
43
EntityType
type
()
const
44
{
45
return
TYPE_FROM_HANDLE
(
start_handle
() );
46
}
47
48
EntityHandle
start_handle
()
const
49
{
50
return
startHandle
;
51
}
52
53
EntityHandle
end_handle
()
const
54
{
55
return
endHandle
;
56
}
57
58
SequenceData
*
data
()
const
59
{
60
return
sequenceData
;
61
}
62
63
void
data
(
SequenceData
* ptr )
64
{
65
sequenceData
= ptr;
66
}
67
68
EntityID
size
()
const
69
{
70
return
endHandle
-
startHandle
+ 1;
71
}
72
73
/**\brief True if SequenceData has no holes and is used only
74
* by this EntitySequence */
75
bool
using_entire_data
()
const
;
76
77
/**\brief Integer value used in finding appropriate SequenceData
78
*
79
* This value is matched to input values by TypeSequenceManager to
80
* determine if an available, unused portino of a SequenceData can
81
* be used for a specific entity allocation. For example, it is
82
* used to find a SequenceData with the appropriate number of vertices
83
* per element when allocating elements. The default value is zero.
84
*/
85
virtual
int
values_per_entity
()
const
;
86
87
/**\brief Split this sequence into two consecutive sequences
88
*
89
* Split this sequence into two sequences.
90
*\param here New sequences should be [start_handle(),here) & [here,end_handle()]
91
*\return New sequence containing [here,end_handle()]
92
*/
93
virtual
EntitySequence
*
split
(
EntityHandle
here ) = 0;
94
95
/**\brief Merge this sequence with another
96
*
97
* Combine two adjacent sequences. Sequence handle blocks must be
98
* consective and sequences must share a common SequenceData.
99
*/
100
virtual
ErrorCode
merge
(
EntitySequence
& other );
101
102
/**\brief Erase entities in range: (end_handle()-count, end_handle()] */
103
virtual
ErrorCode
pop_back
(
EntityID
count );
104
105
/**\brief Erase entities in range: [start_handle(), start_handle()+count) */
106
virtual
ErrorCode
pop_front
(
EntityID
count );
107
108
/**\brief Create a new SequenceData that is a copy of a subset of
109
* the one referenced by this sequence.
110
*
111
* Create a new SequenceData that is a copy of a subset of the
112
* SequenceData referenced by this EntitySequence. Do not make any
113
* changes to this EntitySequence or the current SequenceData.
114
*/
115
virtual
SequenceData
*
create_data_subset
(
EntityHandle
start_handle
,
EntityHandle
end_handle
)
const
= 0;
116
117
/**\brief Get memory characteristcs that are the same for all entities
118
*
119
* Get charactersitic constant memory use for all entities in sequence.
120
*\param bytes_per_entity The total bytes consumed for each entity in
121
* the underlying SequenceData. It is assumed
122
* that the same amount of memory is consumed
123
* for unused portions of the SequenceData.
124
*\param size_of_sequence The size of the leaf subclass of this class
125
*/
126
virtual
void
get_const_memory_use
(
unsigned
long
& bytes_per_entity,
unsigned
long
& size_of_sequence )
const
= 0;
127
/**\brief Get portion of memory use that varies per entity
128
*
129
*\return Any per-entity memory use not accounted for in the results
130
* of get_const_memory_use.
131
*/
132
virtual
unsigned
long
get_per_entity_memory_use
(
EntityHandle
first
,
EntityHandle
last )
const
;
133
};
134
135
}
// namespace moab
136
137
#endif
src
EntitySequence.hpp
Generated on Tue Oct 29 2024 02:05:40 for Mesh Oriented datABase by
1.9.1.