41 #ifndef CORE_CONAINTERS_ARRAY3_H
42 #define CORE_CONAINTERS_ARRAY3_H 1
44 #include <boost/multi_array.hpp>
46 #ifdef SCIRUN4_CODE_TO_BE_ENABLED_LATER
47 #include <sci_defs/bits_defs.h>
51 #include <sys/types.h>
72 Array3(
size_t size1,
size_t size2,
size_t size3)
74 resize(size1, size2, size3);
77 void resize(
size_t size1,
size_t size2,
size_t size3)
79 typename impl_type::extent_gen extents;
80 impl_.resize(extents[size1][size2][size3]);
90 return impl_.origin()[idx];
95 return impl_.origin()[idx];
98 const T&
operator()(
size_t i1,
size_t i2,
size_t i3)
const
100 return impl_[i1][i2][i3];
105 return impl_[i1][i2][i3];
108 inline size_t dim1()
const {
return impl_.shape()[0];}
109 inline size_t dim2()
const {
return impl_.shape()[1];}
110 inline size_t dim3()
const {
return impl_.shape()[2];}
116 template<
class T>
void Pio(Piostream& stream, Array3<T>& array);
117 template<
class T>
void Pio(Piostream& stream, Array3<T>& array,
const std::string&);
118 template<
class T>
void Pio(Piostream& stream, Array3<T>*& array);
120 #define ARRAY3_VERSION 2
142 long long d1, d2, d3;
146 data.
resize(static_cast<size_type>(d1),
147 static_cast<size_type>(d2),
148 static_cast<size_type>(d3));
153 long long d1, d2, d3;
154 d1 =
static_cast<long long>(data.
dim1());
155 d2 =
static_cast<long long>(data.
dim2());
156 d3 =
static_cast<long long>(data.
dim3());
164 stream.
block_io(reinterpret_cast<void*>(&data[0]),
sizeof(T), data.
size());
168 for(
size_t i=0;i<data.
dim1();i++)
170 for(
size_t j=0;j<data.
dim2();j++)
172 for(
size_t k=0;k<data.
dim3();k++)
198 const std::string& filename )
212 data.input( filename );
217 long long d1, d2, d3;
221 data.
resize(static_cast<size_type>(d1),
222 static_cast<size_type>(d2),
223 static_cast<size_type>(d3));
224 data.input( filename );
229 long long d1, d2, d3;
230 d1 =
static_cast<long long>(data.dm1);
231 d2 =
static_cast<long long>(data.dm2);
232 d3 =
static_cast<long long>(data.dm3);
236 data.output( filename );
244 Array3<T>::input(
const std::string &filename )
246 std::cerr <<
"Array3: Split input\n";
249 int file=open( filename.c_str(), O_RDONLY, 0666);
251 printf(
"can not open file %s\n", filename.c_str());
255 int maxiosz=1024*1024;
257 int n = int(size / maxiosz);
258 char *p =
reinterpret_cast<char *
>(objs[0][0]);
260 for ( ; n> 0 ; n--, p+= maxiosz)
262 int i =
read( file, p, maxiosz);
266 int i =
read( file, p, size % maxiosz);
267 if ( i != (size % maxiosz) )
268 perror(
"on last io");
278 Array3<T>::output(
const std::string &filename )
282 int file=open( filename.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666);
288 int maxiosz=1024*1024;
291 int n = size / maxiosz;
292 char *p =
reinterpret_cast<char *
>(objs[0][0]);
294 printf(
"Start writing...%d %d %d\n", size, maxiosz, n);
296 for ( ; n> 0 ; n--, p+= maxiosz) {
297 int l =
write( file, p, maxiosz);
301 int sz = (size % maxiosz );
302 int l =
write( file, p, sz);
303 if ( l != (size % maxiosz ) ) {
304 printf(
"Error: wrote %d / %d\n", l,(size % maxiosz ));
virtual bool block_io(void *, size_t, size_t)
Definition: Persistent.h:174
bool reading() const
Definition: Persistent.h:164
virtual bool supports_block_io()
Definition: Persistent.h:171
Definition: Persistent.h:89
size_t dim2() const
Definition: Array3.h:109
tuple read
Definition: eab.py:11
boost::multi_array< T, 3 > impl_type
Definition: Array3.h:67
Utility for specifying data invariants (Assertions)
const T & operator[](size_t idx) const
Definition: Array3.h:93
size_t size() const
Definition: Array3.h:83
size_t dim3() const
Definition: Array3.h:110
virtual int begin_class(const std::string &name, int current_version)
Definition: Persistent.cc:143
Base class for persistent objects...
#define ARRAY3_VERSION
Definition: Array3.h:120
void resize(size_t size1, size_t size2, size_t size3)
Definition: Array3.h:77
long long size_type
Definition: Types.h:40
T value_type
Definition: Array3.h:68
dictionary data
Definition: eabLatVolData.py:11
tuple write
Definition: eab.py:17
T & operator()(size_t i1, size_t i2, size_t i3)
Definition: Array3.h:103
void Pio(Piostream &stream, Array1< T > &array)
Definition: Array1.h:65
size_t dim1() const
Definition: Array3.h:108
virtual void end_class()
Definition: Persistent.cc:178
const T & operator()(size_t i1, size_t i2, size_t i3) const
Definition: Array3.h:98
Array3(size_t size1, size_t size2, size_t size3)
Definition: Array3.h:72
int n
Definition: eab.py:9
tuple file
Definition: eab.py:7
T & operator[](size_t idx)
Definition: Array3.h:88
Array3()
Definition: Array3.h:70
int size
Definition: eabLatVolData.py:2