-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpartial_image2d.h
More file actions
82 lines (65 loc) · 2.25 KB
/
partial_image2d.h
File metadata and controls
82 lines (65 loc) · 2.25 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
75
76
77
78
79
80
81
82
//
// Created by Valentin on 08/11/2019.
//
#pragma once
#include <vector>
#include <cassert>
#include "partial_box2d.h"
template <typename T>
class partial_image2d {
public :
using value_type = T;
using domain_type = partial_box2d;
using point_type = typename domain_type::point_type;
using p_iterator_type = typename domain_type::p_iterator_type;
using n_iterator_type = typename domain_type::n_iterator_type;
partial_image2d();
explicit partial_image2d(const domain_type& d);
partial_image2d(unsigned nrows, unsigned ncols);
partial_image2d(unsigned nrows, unsigned ncols, std::vector<T>& v);
const domain_type& domain() const;
box2d bounding_box() const;
void setDomain(const domain_type& d);
T& operator()(const point_type& p);
T operator()(const point_type& p) const;
private:
unsigned ncols_;
unsigned nrows_;
domain_type dom_;
std::vector<T> data_;
};
template<typename T>
partial_image2d<T>::partial_image2d(const partial_image2d::domain_type &d) :dom_{d}, nrows_{static_cast<unsigned int>(d.rows())}, ncols_{static_cast<unsigned int>(d.cols())}{
data_ = std::vector<T>(ncols_*nrows_);
}
template<typename T>
partial_image2d<T>::partial_image2d(unsigned nrows, unsigned ncols) : nrows_{nrows}, ncols_{ncols} {}
template<typename T>
partial_image2d<T>::partial_image2d() : nrows_{0}, ncols_{0} {}
template<typename T>
partial_image2d<T>::partial_image2d(unsigned nrows, unsigned ncols, std::vector<T> &v) : nrows_{nrows}, ncols_{ncols}{
assert(v.size() == ncols*nrows);
image2d<T> i = image2d<T>(nrows, ncols, v);
dom_ = domain_type(i);
data_ = v;
}
template<typename T>
auto partial_image2d<T>::domain() const -> const domain_type& {
return dom_;
}
template<typename T>
void partial_image2d<T>::setDomain(const domain_type& d) {
dom_ = d;
}
template<typename T>
box2d partial_image2d<T>::bounding_box() const { return dom_.ima_.domain();}
template<typename T>
T &partial_image2d<T>::operator()(const partial_image2d::point_type &p){
unsigned nc = dom_.cols();
return data_[p.row * nc + p.col];
}
template<typename T>
T partial_image2d<T>::operator()(const partial_image2d::point_type &p) const {
unsigned nc = dom_.cols();
return data_[p.row * nc + p.col];
}