1 |
jgs |
82 |
/* |
2 |
|
|
****************************************************************************** |
3 |
|
|
* * |
4 |
|
|
* COPYRIGHT ACcESS 2004 - All Rights Reserved * |
5 |
|
|
* * |
6 |
|
|
* This software is the property of ACcESS. No part of this code * |
7 |
|
|
* may be copied in any form or by any means without the expressed written * |
8 |
|
|
* consent of ACcESS. Copying, use or modification of this software * |
9 |
|
|
* by any unauthorised person is illegal unless that person has a software * |
10 |
|
|
* license agreement with ACcESS. * |
11 |
|
|
* * |
12 |
|
|
****************************************************************************** |
13 |
|
|
*/ |
14 |
|
|
|
15 |
|
|
#if !defined escript_DataBlocks2D_20040405_H |
16 |
|
|
#define escript_DataBlocks2D_20040405_H |
17 |
|
|
|
18 |
|
|
#include <vector> |
19 |
|
|
|
20 |
|
|
namespace escript { |
21 |
|
|
|
22 |
|
|
/** |
23 |
|
|
\brief |
24 |
|
|
DataBlocks2D allocates and manages a 2D array of data blocks. |
25 |
|
|
|
26 |
|
|
Description: |
27 |
|
|
DataBlocks2D allocates and manages a 2D array of data blocks. |
28 |
|
|
|
29 |
|
|
*/ |
30 |
|
|
|
31 |
|
|
class DataBlocks2D { |
32 |
|
|
|
33 |
|
|
public: |
34 |
|
|
|
35 |
|
|
typedef std::vector<double> ValueType; |
36 |
|
|
|
37 |
|
|
/** |
38 |
|
|
\brief |
39 |
|
|
Default constructor for DataBlocks2D |
40 |
|
|
|
41 |
|
|
Description: |
42 |
|
|
Default constructor for DataBlocks2D |
43 |
|
|
*/ |
44 |
|
|
DataBlocks2D(); |
45 |
|
|
|
46 |
|
|
/** |
47 |
|
|
\brief |
48 |
|
|
Copy constructor for DataBlocks2D |
49 |
|
|
|
50 |
|
|
Description: |
51 |
|
|
Copy constructor for DataBlocks2D |
52 |
|
|
*/ |
53 |
|
|
DataBlocks2D(const DataBlocks2D& other); |
54 |
|
|
|
55 |
|
|
/** |
56 |
|
|
\brief |
57 |
|
|
Constructor for DataBlocks2D |
58 |
|
|
|
59 |
|
|
Description: |
60 |
|
|
Constructor for DataBlocks2D |
61 |
|
|
\param numRows - Input - Number of rows |
62 |
|
|
\param numCols - Input - Number of columns |
63 |
|
|
\param blockSize - Input - Number of elements per block |
64 |
|
|
*/ |
65 |
|
|
DataBlocks2D(int numRows, int numCols, int blockSize); |
66 |
|
|
|
67 |
|
|
/** |
68 |
|
|
\brief |
69 |
|
|
Default destructor for DataBlocks2D |
70 |
|
|
|
71 |
|
|
Description: |
72 |
|
|
Default destructor for DataBlocks2D |
73 |
|
|
*/ |
74 |
|
|
~DataBlocks2D(); |
75 |
|
|
|
76 |
|
|
/** |
77 |
|
|
\brief |
78 |
|
|
Resize the container. All current data is lost. |
79 |
|
|
|
80 |
|
|
Description: |
81 |
|
|
Resize the container. All current data is lost. The data elements are |
82 |
|
|
initialised to 0. |
83 |
|
|
|
84 |
|
|
\param numRows - Input - Number of rows |
85 |
|
|
\param numCols - Input - Number of columns |
86 |
|
|
\param blockSize - Input - Number of elements per block |
87 |
|
|
*/ |
88 |
|
|
void resize(int numRows, int numCols, int blockSize); |
89 |
|
|
|
90 |
|
|
/** |
91 |
|
|
\brief |
92 |
|
|
Return the 1 dimensional index of the first element for the block i,j. |
93 |
|
|
Allows each element to be referenced as though entire 3D array was laid |
94 |
|
|
out as a 1 dimensional list of elements. |
95 |
|
|
*/ |
96 |
|
|
ValueType::size_type index(ValueType::size_type i, ValueType::size_type j) const; |
97 |
|
|
|
98 |
|
|
/** |
99 |
|
|
\brief |
100 |
|
|
Return the data |
101 |
|
|
Data is returned as an array that can be indexed via indexes generated by DataBlocks2D::index |
102 |
|
|
*/ |
103 |
|
|
ValueType& getData(); |
104 |
|
|
|
105 |
|
|
/** |
106 |
|
|
\brief |
107 |
|
|
Return the data |
108 |
|
|
Data is returned as an array that can be indexed via indexes generated by DataBlocks2D::index |
109 |
|
|
*/ |
110 |
|
|
const ValueType& getData() const; |
111 |
|
|
|
112 |
|
|
/** |
113 |
|
|
\brief |
114 |
|
|
Return the number of rows |
115 |
|
|
*/ |
116 |
|
|
ValueType::size_type getNumRows() const; |
117 |
|
|
|
118 |
|
|
/** |
119 |
|
|
\brief |
120 |
|
|
Return the number of columns |
121 |
|
|
*/ |
122 |
|
|
ValueType::size_type getNumCols() const; |
123 |
|
|
|
124 |
|
|
/** |
125 |
|
|
\brief |
126 |
|
|
Swap |
127 |
|
|
*/ |
128 |
|
|
void Swap(DataBlocks2D& other); |
129 |
|
|
|
130 |
|
|
/** |
131 |
|
|
\brief |
132 |
|
|
operator= |
133 |
|
|
*/ |
134 |
|
|
DataBlocks2D& operator=(const DataBlocks2D& other); |
135 |
|
|
|
136 |
|
|
protected: |
137 |
|
|
|
138 |
|
|
private: |
139 |
|
|
|
140 |
|
|
// |
141 |
|
|
// data container, currently only concerned with doubles |
142 |
|
|
ValueType m_data; |
143 |
|
|
|
144 |
|
|
// |
145 |
|
|
// the number of doubles per data block |
146 |
|
|
int m_blockSize; |
147 |
|
|
|
148 |
|
|
// |
149 |
|
|
// |
150 |
|
|
int m_numRows; |
151 |
|
|
int m_numCols; |
152 |
|
|
|
153 |
|
|
}; |
154 |
|
|
|
155 |
|
|
inline DataBlocks2D::ValueType::size_type DataBlocks2D::getNumRows() const |
156 |
|
|
{ |
157 |
|
|
return m_numRows; |
158 |
|
|
} |
159 |
|
|
|
160 |
|
|
inline DataBlocks2D::ValueType::size_type DataBlocks2D::getNumCols() const |
161 |
|
|
{ |
162 |
|
|
return m_numCols; |
163 |
|
|
} |
164 |
|
|
|
165 |
|
|
} // end of namespace |
166 |
|
|
#endif |