forked from llnl/zfp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathiterator.cpp
More file actions
74 lines (67 loc) · 2.46 KB
/
iterator.cpp
File metadata and controls
74 lines (67 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include "zfparray1.h"
#include "zfparray2.h"
#include "zfparray3.h"
void print1(zfp::array1<double>::pointer p, size_t n)
{
for (size_t i = 0; i < n; i++)
std::cout << p[i] << std::endl;
}
void print2(zfp::array2<double>::pointer p, size_t n)
{
while (n--)
std::cout << *p++ << std::endl;
}
void print3(zfp::array1<double>::const_iterator begin, zfp::array1<double>::const_iterator end)
{
for (zfp::array1<double>::const_iterator p = begin; p != end; p++)
std::cout << *p << std::endl;
}
int main()
{
// some fun with 1D arrays
zfp::array1<double> v(10, 64.0);
// initialize and print array of random values
for (zfp::array1<double>::iterator p = v.begin(); p != v.end(); p++)
*p = rand();
std::cout << "random array" << std::endl;
print1(&v[0], v.size());
std::cout << std::endl;
// sorting is possible via random access iterators (1D arrays only)
std::sort(v.begin(), v.end());
// print array using iteration
std::cout << "sorted array" << std::endl;
print3(v.begin(), v.end());
std::cout << std::endl;
// some fun with 2D arrays
zfp::array2<double> a(5, 7, 64.0);
// print array indices visited in block-order traversal
std::cout << "block order (x, y) indices" << std::endl;
for (zfp::array2<double>::iterator p = a.begin(); p != a.end(); p++) {
std::cout << "(" << p.i() << ", " << p.j() << ")" << std::endl;
*p = p.i() + 10 * p.j();
}
std::cout << std::endl;
// print array contents in row-major order
std::cout << "row-major order yx indices" << std::endl;
print2(&a[0], a.size());
std::cout << std::endl;
// pointer arithmetic
std::cout << a.size_x() << " * " << a.size_y() << " = " << (&*a.end() - &*a.begin()) << std::endl;
// min and max values
std::cout << "min = " << *std::min_element(a.begin(), a.end()) << std::endl;
std::cout << "max = " << *std::max_element(a.begin(), a.end()) << std::endl;
std::cout << std::endl;
// some fun with 3D arrays
zfp::array3<double> b(7, 2, 5, 64.0);
// print array indices visited in block-order traversal
std::cout << "block order (x, y, z) indices" << std::endl;
for (zfp::array3<double>::iterator p = b.begin(); p != b.end(); p++)
std::cout << "(" << p.i() << ", " << p.j() << ", " << p.k() << ")" << std::endl;
std::cout << std::endl;
// pointer arithmetic
std::cout << b.size_x() << " * " << b.size_y() << " * " << b.size_z() << " = " << (&*b.end() - &*b.begin()) << std::endl;
return 0;
}