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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 | #pragma once
#include <cassert><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <iostream><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <valarray><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <algorithm><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <type_traits><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <iterator><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <initializer_list><--- Include file: not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include "internal/dev_env.hpp"
#include "internal/types.hpp"
#include "adaptor/internal/advanced_container.hpp"
namespace uni {
template<class T> struct valarray : internal::advanced_container<std::valarray<T>> {
private:
using base = internal::advanced_container<std::valarray<T>>;
public:
using size_type = internal::size_t;
using iterator = T*;
using const_iterator = const T*;
protected:
inline bool _validate_index_in_right_open([[maybe_unused]] const size_type p) const noexcept(NO_EXCEPT) {
return 0 <= p and p < this->size();<--- Unsigned positive
}
inline bool _validate_index_in_closed([[maybe_unused]] const size_type p) const noexcept(NO_EXCEPT) {
return 0 <= p and p <= this->size();<--- Unsigned positive
}
inline bool _validate_rigth_open_interval([[maybe_unused]] const size_type l, [[maybe_unused]] const size_type r) const noexcept(NO_EXCEPT) {
return 0 <= l and l <= r and r <= this->size();<--- Unsigned positive
}
inline size_type _positivize_index(const size_type p) const noexcept(NO_EXCEPT) {
return p < 0 ? this->size() + p : p;<--- Unsigned less than zero
}
public:
valarray() noexcept(NO_EXCEPT) {}
explicit valarray(const std::size_t length, const T& val = T{}) noexcept(NO_EXCEPT) : base(val, length) {}
template<std::input_iterator I, std::sentinel_for<I> S>
valarray(I first, S last) noexcept(NO_EXCEPT) : base(std::ranges::distance(first, last)) { std::ranges::copy(first, last, std::ranges::begin(*this)); }
template<class U> valarray(const U* pointer, const size_t n) noexcept(NO_EXCEPT) : base(pointer, n) {};
valarray(const std::slice_array<T>& arr) noexcept(NO_EXCEPT) : base(arr) {};<--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
valarray(const std::gslice_array<T>& arr) noexcept(NO_EXCEPT) : base(arr) {};<--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
valarray(const std::mask_array<T>& arr) noexcept(NO_EXCEPT) : base(arr) {};<--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
valarray(const std::indirect_array<T>& arr) noexcept(NO_EXCEPT) : base(arr) {};<--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
valarray(const std::initializer_list<T>& init) noexcept(NO_EXCEPT) : base(init) {}
valarray(const internal::advanced_container<std::valarray<T>>& arr) noexcept(NO_EXCEPT) : base(arr) {}<--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
#ifdef __GNUC__
template<class Dom> valarray(const std::_Expr<Dom,T>& expr) noexcept(NO_EXCEPT) : base(expr) {}<--- Struct 'valarray' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < bool >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: uint32_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < std :: int64_t >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions. <--- Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. [+]Struct 'valarray < unsigned int >' has a constructor with 1 argument that is not explicit. Such, so called "Converting constructors", should in general be explicit for type safety reasons as that prevents unintended implicit conversions.
#endif
inline auto size() const noexcept(NO_EXCEPT) { return static_cast<size_type>(this->base::size()); }
inline void reserve(const size_type) noexcept(NO_EXCEPT) { /* do nothing */ }
template<std::input_iterator I, std::sentinel_for<I> S>
inline void assign(I first, S last) noexcept(NO_EXCEPT) {
this->resize(std::ranges::distance(first, last));
std::ranges::copy(first, last, std::ranges::begin(*this));
}
inline void assign(const std::size_t length, const T& val = T{}) noexcept(NO_EXCEPT) {
this->base::resize(length, val);
}
inline void resize(const std::size_t length, const T& val = T{}) noexcept(NO_EXCEPT) {
base temp = *this;
this->assign(length, val);
std::move(std::begin(temp), std::min(std::end(temp), std::next(std::begin(temp), length)), std::begin(*this));
}
inline const T& operator[](size_type pos) const noexcept(NO_EXCEPT) {<--- Derived function 'valarray < std :: int32_t >::operator[]'<--- Derived function 'valarray < std :: int32_t >::operator[]'<--- Derived function 'valarray < bool >::operator[]'<--- Derived function 'valarray < bool >::operator[]'<--- Derived function 'valarray < std :: uint32_t >::operator[]'<--- Derived function 'valarray < std :: uint32_t >::operator[]'<--- Derived function 'valarray < std :: int64_t >::operator[]'<--- Derived function 'valarray < std :: int64_t >::operator[]'<--- Derived function 'valarray < unsigned int >::operator[]'<--- Derived function 'valarray < unsigned int >::operator[]'
pos = this->_positivize_index(pos), assert(this->_validate_index_in_right_open(pos));
return this->base::operator[](pos);
}
inline T& operator[](size_type pos) noexcept(NO_EXCEPT) {<--- Derived function 'valarray < std :: int32_t >::operator[]'<--- Derived function 'valarray < std :: int32_t >::operator[]'<--- Derived function 'valarray < bool >::operator[]'<--- Derived function 'valarray < bool >::operator[]'<--- Derived function 'valarray < std :: uint32_t >::operator[]'<--- Derived function 'valarray < std :: uint32_t >::operator[]'<--- Derived function 'valarray < std :: int64_t >::operator[]'<--- Derived function 'valarray < std :: int64_t >::operator[]'<--- Derived function 'valarray < unsigned int >::operator[]'<--- Derived function 'valarray < unsigned int >::operator[]'
pos = this->_positivize_index(pos), assert(this->_validate_index_in_right_open(pos));
return this->base::operator[](pos);
}
inline const T& back() const noexcept(NO_EXCEPT) { return *std::prev(this->end()); }
inline T& back() noexcept(NO_EXCEPT) { return *std::prev(this->end()); }
inline const T& front() const noexcept(NO_EXCEPT) { return *this->begin(); }
inline T& front() noexcept(NO_EXCEPT) { return *this->begin(); }
inline auto rbegin() noexcept(NO_EXCEPT) { return std::make_reverse_iterator(std::ranges::end(*this)); }
inline auto rend() noexcept(NO_EXCEPT) { return std::make_reverse_iterator(std::ranges::begin(*this)); }
inline auto rbegin() const noexcept(NO_EXCEPT) { return std::make_reverse_iterator(std::ranges::end(*this)); }
inline auto rend() const noexcept(NO_EXCEPT) { return std::make_reverse_iterator(std::ranges::begin(*this)); }
};
} // namespace uni
|