123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #include "simple/geom/iterator.hpp"
- #include "simple/geom/algorithm.hpp"
- #include <cassert>
- #include <memory>
- #include <chrono>
- #include <iostream>
- using namespace simple::geom;
- using namespace std::chrono;
- #undef assert
- #define assert(x) if(not (x)) std::puts("aaaa!");
- template <unsigned width, unsigned height, unsigned step>
- void BasicReadWrite()
- {
- constexpr vector size{width,height};
- constexpr unsigned pitch = size.x() + step;
- auto image_ptr = std::make_unique<std::array<unsigned, pitch * size.y()>>();
- auto& image = *image_ptr;
- loop(size, [&, position = unsigned()] (auto i) mutable
- {
- image[i.y() * pitch + i.x()] = position;
- ++position;
- });
- std::cout << "generic" << '\n';
- {
- auto now = high_resolution_clock::now();
- iterator begin{image.begin(), 0u};
- iterator end{image.end()-step, size.x()};
- unsigned i = 0;
- while(true)
- {
- auto done = begin == end;
- if(done) break;
- if(done.first_false != 0)
- begin.next(step,done);
- assert(*begin == i);
- ++begin;
- ++i;
- }
- assert(i == size.x() * size.y());
- std::cout << (high_resolution_clock::now() - now).count() << '\n';
- }
- std::cout << "generic vectirator" << '\n';
- {
- auto now = high_resolution_clock::now();
- vectirator begin{image.begin(), {0u, 0u}};
- vectirator end{image.begin(), {size.x(), size.y()*pitch - step}};
- unsigned i = 0;
- while(true)
- {
- auto done = begin == end;
- if(done) break;
- if(to_disjunction(done))
- begin.next({1u, step}, done);
- assert(*begin == i);
- ++begin;
- ++i;
- }
- assert(i == size.x() * size.y());
- std::cout << (high_resolution_clock::now() - now).count() << '\n';
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- std::cout << "--------------" << '\n';
- }
- int main()
- {
-
- BasicReadWrite<1,2,3>();
- BasicReadWrite<1,1,1>();
- BasicReadWrite<1,2,0>();
- BasicReadWrite<1,1,0>();
-
-
-
- BasicReadWrite<0,0,0>();
- BasicReadWrite<1000,1000,200>();
- BasicReadWrite<2000,2000,4000>();
- BasicReadWrite<1000,1000,0>();
- BasicReadWrite<2000,2000,0>();
-
- }
|