Branch data Line data Source code
1 : : #ifndef VERTEX_SEQUENCE_HPP
2 : : #define VERTEX_SEQUENCE_HPP
3 : :
4 : : #include "EntitySequence.hpp"
5 : : #include "SequenceData.hpp"
6 : :
7 : : namespace moab
8 : : {
9 : :
10 : : class VertexSequence : public EntitySequence
11 : : {
12 : : public:
13 : 146 : VertexSequence( EntityHandle start, EntityID count, SequenceData* dat ) : EntitySequence( start, count, dat ) {}
14 : :
15 : 408 : VertexSequence( EntityHandle start, EntityID count, EntityID data_size )
16 [ + - ]: 408 : : EntitySequence( start, count, new SequenceData( 3, start, start + data_size - 1 ) )
17 : : {
18 [ + - ][ + - ]: 408 : data()->create_sequence_data( X, sizeof( double ) );
19 [ + - ][ + - ]: 408 : data()->create_sequence_data( Y, sizeof( double ) );
20 [ + - ][ + - ]: 408 : data()->create_sequence_data( Z, sizeof( double ) );
21 : 408 : }
22 : :
23 : : virtual ~VertexSequence();
24 : :
25 : : inline ErrorCode get_coordinates( EntityHandle handle, double& x, double& y, double& z ) const;
26 : :
27 : : inline ErrorCode get_coordinates( EntityHandle handle, double coords[3] ) const;
28 : :
29 : : inline ErrorCode get_coordinates_ref( EntityHandle handle, const double*& x, const double*& y,
30 : : const double*& z ) const;
31 : :
32 : : inline ErrorCode set_coordinates( EntityHandle entity, double x, double y, double z );
33 : :
34 : : inline ErrorCode set_coordinates( EntityHandle entity, const double xyz[3] );
35 : :
36 : : inline ErrorCode get_coordinate_arrays( double*& x, double*& y, double*& z );
37 : :
38 : : inline ErrorCode get_coordinate_arrays( const double*& x, const double*& y, const double*& z ) const;
39 : :
40 : : EntitySequence* split( EntityHandle here );
41 : :
42 : : SequenceData* create_data_subset( EntityHandle start, EntityHandle end ) const;
43 : :
44 : : ErrorCode push_front( EntityID count );
45 : : ErrorCode push_back( EntityID count );
46 : :
47 : : void get_const_memory_use( unsigned long& bytes_per_entity, unsigned long& size_of_sequence ) const;
48 : :
49 : : private:
50 : : enum Coord
51 : : {
52 : : X = 0,
53 : : Y = 1,
54 : : Z = 2
55 : : };
56 : :
57 : 6368880 : inline double* array( Coord coord )
58 : : {
59 : 6368880 : return reinterpret_cast< double* >( data()->get_sequence_data( coord ) );
60 : : }
61 : :
62 : 40283928 : inline const double* array( Coord coord ) const
63 : : {
64 : 40283928 : return reinterpret_cast< const double* >( data()->get_sequence_data( coord ) );
65 : : }
66 : :
67 : 2122960 : inline double* x_array()
68 : : {
69 : 2122960 : return array( X );
70 : : }
71 : 2122960 : inline double* y_array()
72 : : {
73 : 2122960 : return array( Y );
74 : : }
75 : 2122960 : inline double* z_array()
76 : : {
77 : 2122960 : return array( Z );
78 : : }
79 : :
80 : 13427976 : inline const double* x_array() const
81 : : {
82 : 13427976 : return array( X );
83 : : }
84 : 13427976 : inline const double* y_array() const
85 : : {
86 : 13427976 : return array( Y );
87 : : }
88 : 13427976 : inline const double* z_array() const
89 : : {
90 : 13427976 : return array( Z );
91 : : }
92 : :
93 : 450 : VertexSequence( VertexSequence& split_from, EntityHandle here ) : EntitySequence( split_from, here ) {}
94 : : };
95 : :
96 : 2140 : ErrorCode VertexSequence::get_coordinates( EntityHandle handle, double& x, double& y, double& z ) const
97 : : {
98 : 2140 : EntityID offset = handle - data()->start_handle();
99 : 2140 : x = x_array()[offset];
100 : 2140 : y = y_array()[offset];
101 : 2140 : z = z_array()[offset];
102 : 2140 : return MB_SUCCESS;
103 : : }
104 : :
105 : 12184049 : ErrorCode VertexSequence::get_coordinates( EntityHandle handle, double coords[3] ) const
106 : : {
107 : 12184049 : EntityID offset = handle - data()->start_handle();
108 : 12184049 : coords[X] = x_array()[offset];
109 : 12184049 : coords[Y] = y_array()[offset];
110 : 12184049 : coords[Z] = z_array()[offset];
111 : 12184049 : return MB_SUCCESS;
112 : : }
113 : :
114 : 1241787 : ErrorCode VertexSequence::get_coordinates_ref( EntityHandle handle, const double*& x, const double*& y,
115 : : const double*& z ) const
116 : : {
117 : 1241787 : EntityID offset = handle - data()->start_handle();
118 : 1241787 : x = x_array() + offset;
119 : 1241787 : y = y_array() + offset;
120 : 1241787 : z = z_array() + offset;
121 : 1241787 : return MB_SUCCESS;
122 : : }
123 : :
124 : 7428 : ErrorCode VertexSequence::set_coordinates( EntityHandle entity, double x, double y, double z )
125 : : {
126 : 7428 : EntityID offset = entity - data()->start_handle();
127 : 7428 : x_array()[offset] = x;
128 : 7428 : y_array()[offset] = y;
129 : 7428 : z_array()[offset] = z;
130 : 7428 : return MB_SUCCESS;
131 : : }
132 : :
133 : 2114879 : ErrorCode VertexSequence::set_coordinates( EntityHandle entity, const double* xyz )
134 : : {
135 : 2114879 : EntityID offset = entity - data()->start_handle();
136 : 2114879 : x_array()[offset] = xyz[0];
137 : 2114879 : y_array()[offset] = xyz[1];
138 : 2114879 : z_array()[offset] = xyz[2];
139 : 2114879 : return MB_SUCCESS;
140 : : }
141 : :
142 : 653 : ErrorCode VertexSequence::get_coordinate_arrays( double*& x, double*& y, double*& z )
143 : : {
144 : 653 : EntityID offset = start_handle() - data()->start_handle();
145 : 653 : x = x_array() + offset;
146 : 653 : y = y_array() + offset;
147 : 653 : z = z_array() + offset;
148 : 653 : return MB_SUCCESS;
149 : : }
150 : :
151 : 1241787 : ErrorCode VertexSequence::get_coordinate_arrays( const double*& x, const double*& y, const double*& z ) const
152 : : {
153 : 1241787 : return get_coordinates_ref( start_handle(), x, y, z );
154 : : }
155 : :
156 : : } // namespace moab
157 : :
158 : : #endif
|