PIVector: any, every, indexWhere, lastIndexWhere
start arg in indexOf, entries, lastIndexOf and some code brush
This commit is contained in:
@@ -175,6 +175,18 @@ public:
|
|||||||
inline size_t capacity() const {return piv_rsize;}
|
inline size_t capacity() const {return piv_rsize;}
|
||||||
inline bool isEmpty() const {return (piv_size == 0);}
|
inline bool isEmpty() const {return (piv_size == 0);}
|
||||||
inline bool isNotEmpty() const {return (piv_size > 0);}
|
inline bool isNotEmpty() const {return (piv_size > 0);}
|
||||||
|
inline bool any(std::function<bool(const T &)> test) const {
|
||||||
|
for (uint i = 0; i < piv_size; ++i) {
|
||||||
|
if (test(piv_data[i])) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
inline bool every(std::function<bool(const T &)> test) const {
|
||||||
|
for (uint i = 0; i < piv_size; ++i) {
|
||||||
|
if (!test(piv_data[i])) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
inline T & operator [](size_t index) {return piv_data[index];}
|
inline T & operator [](size_t index) {return piv_data[index];}
|
||||||
inline const T & operator [](size_t index) const {return piv_data[index];}
|
inline const T & operator [](size_t index) const {return piv_data[index];}
|
||||||
@@ -184,48 +196,87 @@ public:
|
|||||||
inline T & front() {return piv_data[0];}
|
inline T & front() {return piv_data[0];}
|
||||||
inline const T & front() const {return piv_data[0];}
|
inline const T & front() const {return piv_data[0];}
|
||||||
inline bool operator ==(const PIVector<T> & t) const {
|
inline bool operator ==(const PIVector<T> & t) const {
|
||||||
if (piv_size != t.piv_size)
|
if (piv_size != t.piv_size) {
|
||||||
return false;
|
return false;
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
}
|
||||||
if (t[i] != piv_data[i])
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
|
if (t[i] != piv_data[i]) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
inline bool operator !=(const PIVector<T> & t) const {return !(*this == t);}
|
inline bool operator !=(const PIVector<T> & t) const {return !(*this == t);}
|
||||||
inline bool operator <(const PIVector<T> & t) const {
|
inline bool operator <(const PIVector<T> & t) const {
|
||||||
if (piv_size != t.piv_size) return piv_size < t.piv_size;
|
if (piv_size != t.piv_size) return piv_size < t.piv_size;
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
if ((*this)[i] != t[i]) return (*this)[i] < t[i];
|
if ((*this)[i] != t[i]) return (*this)[i] < t[i];
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
inline bool operator >(const PIVector<T> & t) const {
|
inline bool operator >(const PIVector<T> & t) const {
|
||||||
if (piv_size != t.piv_size) return piv_size > t.piv_size;
|
if (piv_size != t.piv_size) return piv_size > t.piv_size;
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
if ((*this)[i] != t[i]) return (*this)[i] > t[i];
|
if ((*this)[i] != t[i]) return (*this)[i] > t[i];
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
inline bool contains(const T & v) const {
|
inline bool contains(const T & v) const {
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
if (v == piv_data[i])
|
if (v == piv_data[i]) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
inline int etries(const T & v) const {
|
inline int etries(const T & v, size_t start = 0) const {
|
||||||
int ec = 0;
|
int ec = 0;
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = start; i < piv_size; ++i) {
|
||||||
if (v == piv_data[i]) ++ec;
|
if (v == piv_data[i]) ++ec;
|
||||||
|
}
|
||||||
return ec;
|
return ec;
|
||||||
}
|
}
|
||||||
inline ssize_t indexOf(const T & v) const {
|
inline int etries(std::function<bool(const T &)> test, size_t start = 0) const {
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
int ec = 0;
|
||||||
if (v == piv_data[i])
|
for (size_t i = start; i < piv_size; ++i) {
|
||||||
|
if (test(piv_data[i])) ++ec;
|
||||||
|
}
|
||||||
|
return ec;
|
||||||
|
}
|
||||||
|
inline ssize_t indexOf(const T & v, size_t start = 0) const {
|
||||||
|
for (size_t i = start; i < piv_size; ++i) {
|
||||||
|
if (v == piv_data[i]) {
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
inline ssize_t lastIndexOf(const T & v) const {
|
inline ssize_t indexWhere(std::function<bool(const T &)> test, size_t start = 0) const {
|
||||||
for (ssize_t i = piv_size - 1; i >= 0; --i)
|
for (size_t i = start; i < piv_size; ++i) {
|
||||||
if (v == piv_data[i])
|
if (test(piv_data[i])) {
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
inline ssize_t lastIndexOf(const T & v, ssize_t start = -1) const {
|
||||||
|
if (start < 0) start = piv_size - 1;
|
||||||
|
else start = piMin<ssize_t>(piv_size - 1, start);
|
||||||
|
for (ssize_t i = start; i >= 0; --i) {
|
||||||
|
if (v == piv_data[i]) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
inline ssize_t lastIndexWhere(std::function<bool(const T &)> test, ssize_t start = -1) const {
|
||||||
|
if (start < 0) start = piv_size - 1;
|
||||||
|
else start = piMin<ssize_t>(piv_size - 1, start);
|
||||||
|
for (ssize_t i = start; i >= 0; --i) {
|
||||||
|
if (test(piv_data[i])) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,15 +302,17 @@ public:
|
|||||||
inline PIVector<T> & fill(const T & f = T()) {
|
inline PIVector<T> & fill(const T & f = T()) {
|
||||||
deleteT(piv_data, piv_size);
|
deleteT(piv_data, piv_size);
|
||||||
PIINTROSPECTION_CONTAINER_USED(T, piv_size)
|
PIINTROSPECTION_CONTAINER_USED(T, piv_size)
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
elementNew(piv_data + i, f);
|
elementNew(piv_data + i, f);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
inline PIVector<T> & fill(std::function<T(size_t)> f) {
|
inline PIVector<T> & fill(std::function<T(size_t)> f) {
|
||||||
deleteT(piv_data, piv_size);
|
deleteT(piv_data, piv_size);
|
||||||
PIINTROSPECTION_CONTAINER_USED(T, piv_size)
|
PIINTROSPECTION_CONTAINER_USED(T, piv_size)
|
||||||
for (size_t i = 0; i < piv_size; ++i)
|
for (size_t i = 0; i < piv_size; ++i) {
|
||||||
elementNew(piv_data + i, f(i));
|
elementNew(piv_data + i, f(i));
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
inline PIVector<T> & assign(const T & f = T()) {return fill(f);}
|
inline PIVector<T> & assign(const T & f = T()) {return fill(f);}
|
||||||
|
|||||||
10
main.cpp
10
main.cpp
@@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
|
PIVector<int> x(20, [](int i) {return i/2+1;});
|
||||||
|
piCout << x;
|
||||||
|
piCout << x.any([](int v) {return v == 20;});
|
||||||
|
piCout << x.every([](int v) {return v > 0;});
|
||||||
|
piCout << x.etries([](int v) {return v % 5 == 0;});
|
||||||
|
piCout << x.indexWhere([](int v) {return v % 8 == 0;});
|
||||||
|
piCout << x.indexOf(4, -1);
|
||||||
|
piCout << x.lastIndexOf(1, 0);
|
||||||
|
piCout << x.lastIndexWhere([](int v) {return v % 8 == 0;});
|
||||||
|
return 0;
|
||||||
PIByteArray rnd;
|
PIByteArray rnd;
|
||||||
rnd.resize(1024*1024, 'x');
|
rnd.resize(1024*1024, 'x');
|
||||||
PICLI cli(argc, argv);
|
PICLI cli(argc, argv);
|
||||||
|
|||||||
Reference in New Issue
Block a user