diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b5e0fcb..efb7d041 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(pip) set(pip_MAJOR 2) set(pip_MINOR 94) -set(pip_REVISION 0) +set(pip_REVISION 1) set(pip_SUFFIX ) set(pip_COMPANY SHS) set(pip_DOMAIN org.SHS) diff --git a/libs/main/containers/picontainers.cpp b/libs/main/containers/picontainers.cpp index f887160a..cf69434f 100644 --- a/libs/main/containers/picontainers.cpp +++ b/libs/main/containers/picontainers.cpp @@ -20,11 +20,11 @@ #include "picontainers.h" -const ssize_t minAlloc = 64; +const size_t minAlloc = 64; -ssize_t _PIContainerConstantsBase::calcMinCountPoT(ssize_t szof) { - ssize_t ret = 0, elc = 1; +size_t _PIContainerConstantsBase::calcMinCountPoT(size_t szof) { + size_t ret = 0, elc = 1; while (elc * szof < minAlloc) { elc *= 2; ++ret; diff --git a/libs/main/containers/picontainers.h b/libs/main/containers/picontainers.h index c917494a..d0057302 100644 --- a/libs/main/containers/picontainers.h +++ b/libs/main/containers/picontainers.h @@ -65,13 +65,13 @@ private: class PIP_EXPORT _PIContainerConstantsBase { public: - static ssize_t calcMinCountPoT(ssize_t szof); + static size_t calcMinCountPoT(size_t szof); }; template class _PIContainerConstants { public: - static ssize_t minCountPoT() {static ssize_t ret = _PIContainerConstantsBase::calcMinCountPoT(sizeof(T)); return ret;} + static size_t minCountPoT() {static size_t ret = _PIContainerConstantsBase::calcMinCountPoT(sizeof(T)); return ret;} }; diff --git a/libs/main/containers/pideque.h b/libs/main/containers/pideque.h index 391a6ee0..a90b6419 100644 --- a/libs/main/containers/pideque.h +++ b/libs/main/containers/pideque.h @@ -689,7 +689,7 @@ public: //! \endcode //! \~\sa \a every(), \a contains(), \a entries(), \a forEach() inline bool any(std::function test) const { - for (ssize_t i = pid_start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start; i < pid_start + pid_size; ++i) { if (test(pid_data[i])) return true; } return false; @@ -714,7 +714,7 @@ public: //! \endcode //! \~\sa \a any(), \a contains(), \a entries(), \a forEach() inline bool every(std::function test) const { - for (ssize_t i = pid_start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start; i < pid_start + pid_size; ++i) { if (!test(pid_data[i])) return false; } return true; @@ -825,7 +825,7 @@ public: start = pid_size + start; if (start < 0) start = 0; } - for (ssize_t i = pid_start + start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start + size_t(start); i < pid_start + pid_size; ++i) { if (e == pid_data[i]) return true; } return false; @@ -856,13 +856,13 @@ public: //! piCout << v.entries(2, -4); // 2 //! \endcode //! \~\sa \a every(), \a any(), \a contains(), \a forEach(), \a indexOf() - inline int entries(const T & e, size_t start = 0) const { + inline int entries(const T & e, ssize_t start = 0) const { int ec = 0; if (start < 0) { start = pid_size + start; if (start < 0) start = 0; } - for (ssize_t i = pid_start + start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start + size_t(start); i < pid_start + pid_size; ++i) { if (e == pid_data[i]) ++ec; } return ec; @@ -890,13 +890,13 @@ public: //! Обратите внимание: если индекс отрицателен, массив всё равно просматривается от начала к концу. //! Значение по умолчанию равно 0, что означает, что просматривается весь массив. //! \~\sa \a every(), \a any(), \a contains(), \a forEach(), \a indexWhere() - inline int entries(std::function test, size_t start = 0) const { + inline int entries(std::function test, ssize_t start = 0) const { int ec = 0; if (start < 0) { start = pid_size + start; if (start < 0) start = 0; } - for (ssize_t i = pid_start + start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start + size_t(start); i < pid_start + pid_size; ++i) { if (test(pid_data[i])) ++ec; } return ec; @@ -931,14 +931,14 @@ public: //! piCout << v.indexOf(2, -3); // 0 //! \endcode //! \~\sa \a indexWhere(), \a lastIndexOf(), \a lastIndexWhere(), \a contains() - inline ssize_t indexOf(const T & e, size_t start = 0) const { + inline ssize_t indexOf(const T & e, ssize_t start = 0) const { if (start < 0) { start = pid_size + start; if (start < 0) start = 0; } - for (ssize_t i = pid_start + start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start + size_t(start); i < pid_start + pid_size; ++i) { if (e == pid_data[i]) { - return i - pid_start; + return ssize_t(i) - pid_start; } } return -1; @@ -972,14 +972,14 @@ public: //! piCout << v.indexWhere([](const PIString & s){return s.startsWith('k');}); // -1 //! \endcode //! \~\sa \a indexOf(), \a lastIndexOf(), \a lastIndexWhere(), \a contains() - inline ssize_t indexWhere(std::function test, size_t start = 0) const { + inline ssize_t indexWhere(std::function test, ssize_t start = 0) const { if (start < 0) { start = pid_size + start; if (start < 0) start = 0; } - for (ssize_t i = pid_start + start; i < pid_start + (ssize_t)pid_size; ++i) { + for (size_t i = pid_start + size_t(start); i < pid_start + pid_size; ++i) { if (test(pid_data[i])) { - return i - pid_start; + return ssize_t(i) - pid_start; } } return -1; @@ -1022,9 +1022,9 @@ public: inline ssize_t lastIndexOf(const T & e, ssize_t start = -1) const { if (start >= size_s()) start = pid_size - 1; if (start < 0) start = pid_size + start; - for (ssize_t i = pid_start + start; i >= pid_start; --i) { + for (size_t i = pid_start + size_t(start); i >= pid_start; --i) { if (e == pid_data[i]) { - return i - pid_start; + return ssize_t(i) - pid_start; } } return -1; @@ -1058,9 +1058,9 @@ public: inline ssize_t lastIndexWhere(std::function test, ssize_t start = -1) const { if (start >= size_s()) start = pid_size - 1; if (start < 0) start = pid_size + start; - for (ssize_t i = pid_start + start; i >= pid_start; --i) { + for (size_t i = pid_start + size_t(start); i >= pid_start; --i) { if (test(pid_data[i])) { - return i - pid_start; + return ssize_t(i) - pid_start; } } return -1; @@ -1406,7 +1406,7 @@ public: inline PIDeque & insert(size_t index, std::initializer_list init_list) { bool dir = pid_rsize <= 2 ? true : (index >= pid_rsize / 2 ? true : false); if (dir) { - ssize_t os = pid_size - index; + ssize_t os = ssize_t(pid_size) - index; alloc_forward(pid_size + init_list.size()); if (os > 0) { memmove((void*)(&(pid_data[index + pid_start + init_list.size()])), (const void*)(&(pid_data[index + pid_start])), os * sizeof(T)); @@ -1461,7 +1461,7 @@ public: piSwap(pid_data, other.pid_data); piSwap(pid_size, other.pid_size); piSwap(pid_rsize, other.pid_rsize); - piSwap(pid_start, other.pid_start); + piSwap(pid_start, other.pid_start); } //! \~english Sorts the elements in non-descending order. @@ -1608,7 +1608,7 @@ public: //! \endcode //! \~\sa \a remove(), \a removeOne(), \a removeWhere() inline PIDeque & removeAll(const T & e) { - for (ssize_t i = 0; i < ssize_t(pid_size); ++i) { + for (size_t i = 0; i < pid_size; ++i) { if (pid_data[i + pid_start] == e) { remove(i); --i; @@ -1629,7 +1629,7 @@ public: //! \endcode //! \~\sa \a remove(), \a removeOne(), \a removeWhere() inline PIDeque & removeWhere(std::function test) { - for (ssize_t i = 0; i < ssize_t(pid_size); ++i) { + for (size_t i = 0; i < pid_size; ++i) { if (test(pid_data[i + pid_start])) { remove(i); --i; @@ -1938,7 +1938,7 @@ public: //! Добавляет элементы из //! [списка инициализации C++11](https://ru.cppreference.com/w/cpp/utility/initializer_list). //! \~\sa \a append() - inline PIDeque & prepend(std::initializer_list init_list) {return prepend(init_list);} + inline PIDeque & prepend(std::initializer_list init_list) {return push_front(init_list);} //! \~english Remove one element from the end of the array. //! \~russian Удаляет один элемент с конца массива. @@ -2280,7 +2280,8 @@ private: if (pid_rsize + pid_rsize >= size_t(s) && pid_rsize < size_t(s)) { return pid_rsize + pid_rsize; } - ssize_t t = _PIContainerConstants::minCountPoT(), s_ = s - 1; + size_t t = _PIContainerConstants::minCountPoT(); + size_t s_ = s - 1; while (s_ >> t) ++t; return (1 << t); @@ -2348,8 +2349,8 @@ private: inline void checkMove() { if (pid_size >= 4) { if (pid_size < pid_rsize / 6) { - if (pid_start < ssize_t(pid_size + pid_size) || pid_start > (ssize_t(pid_rsize) - ssize_t(pid_size) - ssize_t(pid_size))) { - ssize_t ns = (pid_rsize - pid_size) / 2; + if (pid_start < (pid_size + pid_size) || ssize_t(pid_start) > (ssize_t(pid_rsize) - ssize_t(pid_size) - ssize_t(pid_size))) { + size_t ns = (pid_rsize - pid_size) / 2; if (pid_start != ns) { memmove((void*)(pid_data + ns), (const void*)(pid_data + pid_start), pid_size * sizeof(T)); pid_start = ns; @@ -2357,7 +2358,7 @@ private: } } } else { - ssize_t ns = (pid_rsize - pid_size) / 2; + size_t ns = (pid_rsize - pid_size) / 2; if (pid_start != ns) { memmove((void*)(pid_data + ns), (const void*)(pid_data + pid_start), pid_size * sizeof(T)); pid_start = ns; @@ -2387,14 +2388,14 @@ private: } inline void alloc_backward(size_t new_size, ssize_t start_offset = 0) { //alloc backward size_t as; - if (pid_start + start_offset < 0) { + if (ssize_t(pid_start) + start_offset < 0) { as = asize(pid_rsize - start_offset); } else { as = pid_rsize; } if (as > pid_rsize) { T * td = (T*)(malloc(as * sizeof(T))); - ssize_t ns = pid_start + as - pid_rsize; + size_t ns = pid_start + as - pid_rsize; PIINTROSPECTION_CONTAINER_ALLOC(T, (as-pid_rsize)) if (pid_rsize > 0 && pid_data != 0) { memcpy((void*)(td + ns), (const void*)(pid_data + pid_start), pid_size * sizeof(T)); @@ -2410,8 +2411,9 @@ private: } T * pid_data; - size_t pid_size, pid_rsize; - ssize_t pid_start; + size_t pid_size; + size_t pid_rsize; + size_t pid_start; }; diff --git a/libs/main/io_devices/pibinarylog.cpp b/libs/main/io_devices/pibinarylog.cpp index 3d9b6522..60a6d302 100644 --- a/libs/main/io_devices/pibinarylog.cpp +++ b/libs/main/io_devices/pibinarylog.cpp @@ -563,6 +563,8 @@ void PIBinaryLog::parseLog(PIFile * f, PIBinaryLog::BinLogInfo * info, PIVector< if (!ok) return; PIByteArray ba; BinLogRecord br; + br.id = 0; + br.size = 0; bool first = true; size_t hdr_size = sizeof(BinLogRecord) - sizeof(PIByteArray); ba.resize(hdr_size); @@ -571,12 +573,9 @@ void PIBinaryLog::parseLog(PIFile * f, PIBinaryLog::BinLogInfo * info, PIVector< { if (f->read(ba.data(), ba.size()) > 0) { ba >> br.id >> br.size >> br.timestamp; - } else - break; - if (info->log_size - f->pos() >= br.size) - f->seek(f->pos() + br.size); - else - break; + } else break; + if (info->log_size - f->pos() >= br.size) f->seek(f->pos() + br.size); + else break; } if (br.id > 0) { if (info) { diff --git a/utils/piterminal/main.cpp b/utils/piterminal/main.cpp index d8283dfc..0256b9ce 100644 --- a/utils/piterminal/main.cpp +++ b/utils/piterminal/main.cpp @@ -211,9 +211,9 @@ public: WriteConsoleInput(cstdin, ir.data(), ir.size_s(), &wrote); } break; case mtResize: { - int rw, rh; + int rw = -1, rh = -1; msg >> rw >> rh; - resizeConsole(rw, rh); + if (rw > 0 && rh > 0) resizeConsole(rw, rh); } break; default: break; }