File: iterator.cpp

package info (click to toggle)
zfp 1.0.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,744 kB
  • sloc: cpp: 20,656; ansic: 18,871; pascal: 1,231; f90: 907; python: 255; makefile: 183; sh: 79; fortran: 70
file content (74 lines) | stat: -rw-r--r-- 2,533 bytes parent folder | download | duplicates (2)
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 "zfp/array1.hpp"
#include "zfp/array2.hpp"
#include "zfp/array3.hpp"

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;
}