7#include <unordered_map>
8#include <unordered_set>
17template <
class T>
class Vector :
public std::vector<T>
19 using Base = std::vector<T>;
24 Vector(
const std::vector<T> &v) : Base(v) {};
25 Vector(std::vector<T> &&v) : Base(std::move(v)) {}
26 decltype(
auto)
first() {
return this->front(); }
27 decltype(
auto)
first()
const {
return this->front(); }
28 decltype(
auto)
last() {
return this->back(); }
29 decltype(
auto)
last()
const {
return this->back(); }
49 std::ptrdiff_t
size() const noexcept {
return static_cast<std::ptrdiff_t
>(Base::size()); }
50 bool isEmpty()
const {
return this->empty(); }
51 void append(
const T &v) { this->push_back(v); }
52 void append(T &&v) { this->push_back(std::move(v)); }
55 T result = std::move(this->back());
61 T result = std::move(this->front());
62 this->erase(this->
begin());
67 void fill(
const T &v) { std::fill(this->
begin(), this->
end(), v); }
71 return std::find(this->
begin(), this->
end(), v) != this->
end();
74template <
class K>
struct Hash : std::hash<K> {
76template <
class A,
class B>
struct Hash<std::pair<A, B>> {
80 return a ^ (
b + std::size_t(0x9e3779b97f4a7c15ull) + (
a << 6) + (
a >> 2));
83template <
class K,
class V>
class Map
85 using Base = std::unordered_map<K, V, Hash<K>>;
92 std::conditional_t<Const, typename Base::const_iterator, typename Base::iterator>;
97 decltype(
auto)
value()
const {
return (it_->second); }
98 const K &
key()
const {
return it_->first; }
99 decltype(
auto)
operator*()
const {
return (it_->second); }
113 bool isEmpty()
const {
return data_.empty(); }
114 std::ptrdiff_t
size()
const {
return data_.size(); }
115 bool contains(
const K &
k)
const {
return data_.find(
k) != data_.end(); }
120 bool remove(
const K &
k) {
return data_.erase(
k) != 0; }
122 V
value(
const K &
k,
const V &fallback = V{})
const
124 auto it = data_.find(
k);
125 return it == data_.end() ? fallback : it->second;
139 std::unordered_map<K, Vector<V>,
Hash<K>> data_;
143 void remove(
const K &key) { data_.erase(key); }
146 auto &
values = data_[key];
151 auto it = data_.find(key);
152 return it != data_.end() && it->second.contains(
value);
156 auto it = data_.find(key);
157 return it == data_.end() ?
Vector<V>{} : it->second;
160template <
class K>
class Set :
public std::unordered_set<K, Hash<K>>
163 bool remove(
const K &
k) {
return this->erase(
k) != 0; }
164 bool isEmpty()
const {
return this->empty(); }
165 bool contains(
const K &key)
const {
return this->find(key) != this->
end(); }
179 return "cdt: non-finite input point " + std::to_string(
i);
197 std::chrono::steady_clock::time_point start_;
200 void start() { start_ = std::chrono::steady_clock::now(); }
203 return std::chrono::duration_cast<std::chrono::nanoseconds>(
204 std::chrono::steady_clock::now() - start_)
Definition geometry.hpp:59
Definition geometry.hpp:11
Definition storage.hpp:90
auto operator->() const
Definition storage.hpp:100
bool operator==(const Iterator &b) const
Definition storage.hpp:106
const K & key() const
Definition storage.hpp:98
bool operator!=(const Iterator &b) const
Definition storage.hpp:107
Iterator & operator++()
Definition storage.hpp:101
Iterator(It it)
Definition storage.hpp:96
decltype(auto) value() const
Definition storage.hpp:97
Definition storage.hpp:84
MutableIterator end()
Definition storage.hpp:129
ConstIterator constFind(const K &k) const
Definition storage.hpp:130
V value(const K &k, const V &fallback=V{}) const
Definition storage.hpp:122
V & operator[](const K &k)
Definition storage.hpp:121
bool contains(const K &k) const
Definition storage.hpp:115
Iterator< true > ConstIterator
Definition storage.hpp:109
Iterator< false > MutableIterator
Definition storage.hpp:110
bool isEmpty() const
Definition storage.hpp:113
bool remove(const K &k)
Definition storage.hpp:120
ConstIterator constEnd() const
Definition storage.hpp:131
MutableIterator find(const K &k)
Definition storage.hpp:127
ConstIterator cbegin() const
Definition storage.hpp:132
ConstIterator begin() const
Definition storage.hpp:134
void clear()
Definition storage.hpp:111
std::ptrdiff_t size() const
Definition storage.hpp:114
void reserve(std::size_t n)
Definition storage.hpp:112
ConstIterator end() const
Definition storage.hpp:135
ConstIterator cend() const
Definition storage.hpp:133
MutableIterator insert(const K &k, const V &v)
Definition storage.hpp:116
MutableIterator begin()
Definition storage.hpp:128
Definition storage.hpp:138
bool contains(const K &key, const V &value) const
Definition storage.hpp:149
void clear()
Definition storage.hpp:142
void remove(const K &key)
Definition storage.hpp:143
void insert(const K &key, const V &value)
Definition storage.hpp:144
Vector< V > values(const K &key) const
Definition storage.hpp:154
Definition storage.hpp:183
ScopeExit(F f)
Definition storage.hpp:187
ScopeExit(const ScopeExit &)=delete
~ScopeExit()
Definition storage.hpp:188
Definition storage.hpp:161
bool isEmpty() const
Definition storage.hpp:164
bool contains(const K &key) const
Definition storage.hpp:165
bool remove(const K &k)
Definition storage.hpp:163
Definition storage.hpp:196
std::int64_t nsecsElapsed() const
Definition storage.hpp:201
void start()
Definition storage.hpp:200
Definition storage.hpp:18
decltype(auto) last() const
Definition storage.hpp:29
void prepend(const T &v)
Definition storage.hpp:36
T takeFirst()
Definition storage.hpp:59
void removeAt(int at)
Definition storage.hpp:66
void append(T &&v)
Definition storage.hpp:52
void removeLast()
Definition storage.hpp:65
decltype(auto) first() const
Definition storage.hpp:27
Vector(std::vector< T > &&v)
Definition storage.hpp:25
void fill(const T &v)
Definition storage.hpp:67
Vector & operator<<(const T &v)
Definition storage.hpp:43
bool isEmpty() const
Definition storage.hpp:50
bool contains(const T &v) const
Definition storage.hpp:69
void fill(const T &v, std::size_t size)
Definition storage.hpp:68
Vector mid(std::ptrdiff_t at, std::ptrdiff_t count=-1) const
Definition storage.hpp:31
void append(const Vector &v)
Definition storage.hpp:37
const T * constData() const
Definition storage.hpp:30
Vector(const std::vector< T > &v)
Definition storage.hpp:24
std::ptrdiff_t size() const noexcept
Definition storage.hpp:49
T takeLast()
Definition storage.hpp:53
void append(const T &v)
Definition storage.hpp:51
decltype(auto) last()
Definition storage.hpp:28
Vector & operator+=(const Vector &v)
Definition storage.hpp:38
decltype(auto) first()
Definition storage.hpp:26
int begin
Definition constraints.cpp:103
int end
Definition constraints.cpp:103
size_t i
Definition contourjob.cpp:30
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:95
ArrowPlacement p
Definition linesymbollayer.cpp:29
int k
Definition mesh2dresultsexport.cpp:694
Definition qtcdtstorage.h:9
ScopeExit< F > scopeExit(F f)
Definition storage.hpp:191
int at
Definition constraintaudit.cpp:156
double value
Definition rasterfluxintegration.cpp:27
std::size_t operator()(const std::pair< A, B > &p) const
Definition storage.hpp:77
Definition storage.hpp:74
Definition storage.hpp:167
static String message(const char *s)
Definition storage.hpp:176
static String invalidPointMessage(int i)
Definition storage.hpp:177
std::string String
Definition storage.hpp:170
std::vector< Point2 > PointInput
Definition storage.hpp:171
double a
Definition terrainerrorfield.cpp:42
double b
Definition terrainerrorfield.cpp:42
quint64 count
Definition terrainerrorfield.cpp:43