From d1a33a841d3e0d60315718cde3f6949d0877e984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Wed, 19 Apr 2017 13:25:02 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@402 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- main.cpp | 21 ++++++- src_main/core/pistring.cpp | 113 +++++++++++++++++++++++++++++----- src_main/core/pistring.h | 78 ++--------------------- src_main/io/pidiagnostics.cpp | 25 +++++--- src_main/io/pifile.cpp | 1 - src_main/piversion.h | 2 +- 6 files changed, 140 insertions(+), 100 deletions(-) diff --git a/main.cpp b/main.cpp index 727bab72..7407a035 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,4 @@ -#include "piobject.h" +#include "pip.h" /* struct __S__ { PIString text; @@ -31,7 +31,26 @@ const char pult_config[] = connectionmodel = AAAM2Xja7VXLTttAFD12QpsikKjUSixYlLbKEpIUtVIlVEfqhk2FWuiGRRolUYtoHgrmpYiv6IItf8AveMMH9E/YsG6Ph3sde5hGoQoblLGuPHfunTPjc49nADxDA110+LTYC7FrPCAPeAO+vZu+aX7c/8PGd45WCJC0OGcfT6FDnmfSTPtwhZFt3HjgDs/Qtu5jPbZHtI/x50XfIzMQbdwEolbg9INP4ku++myPaUtCHYRaT2j1ldIh3VP60/Qff8vSfXLu9BP6JX9K/0TVH6jqVe22P1X/fao/oddWu/paDs1vBf9Jv/EZ91clbyHqv7BL6sscDOd4v4WTqs6jzaHGJ8QJerxlpJSpdZ7IWFJvDW7I2JxZqIM62k6A57RZmMQGmlyrxdV+WGBnmR01mXPI267hBKwp4FeBeo9VPtssxyb7rzHg1B7T9nCMU45U8BZlWuVWtIcD/CRGOqtsbW09851tXsHN0UTlLIAdASjSXnLyLn+H7L2+xbGYvC63Ezqg543egkLmn8qnRF6USbM4Qp9godkhzI777Ne5bCIt/5UtGz2o/yGby0nKpjqmbOa1ynkjmyzIrzvIZUeBPjvlUmbh32EFJbGyJZhR8YcvlS+3TpjhqeWSyvUkpbI9plSWtcKLcsK05beOJVEnhaEFfHEH+RwpeMcpn1JKGqWMNOL+G6wZyahlpdVOtufKfbDS+guLke9O\n\ "; */ +int asize(ssize_t s, size_t pid_rsize) { + if (s <= 0) return 0; + if (pid_rsize + pid_rsize >= size_t(s) && pid_rsize < size_t(s)) + return pid_rsize + pid_rsize; + ssize_t t = 0, s_ = ssize_t(s) - 1; + while (s_ >> t) ++t; + return (1 << t); +} int main(int argc, char *argv[]) { + PIDiagnostics d; + piCout << d.receiveBytesPerSec(); + piSleep(3); + piCout << d.receiveBytesPerSec(); +// PIVector in; +// for (int i = 0; i < 50; ++i) +// in << i%10; +// PIFFTWf fft; +// fft.preparePlan(50, PIFFTWf::foReal); +// PIVector out = fft.calcFFT(in); +// piCout << out; /*for (int i = 0; i < 16; ++i) { piCout << asize(i, 100); } diff --git a/src_main/core/pistring.cpp b/src_main/core/pistring.cpp index ef2edcf1..833b1453 100755 --- a/src_main/core/pistring.cpp +++ b/src_main/core/pistring.cpp @@ -78,6 +78,7 @@ const int PIString::fromBaseN[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + #ifndef CC_VC # define pisprintf(f, v) char ch[256]; memset(ch, 0, 256); sprintf(ch, f, v); #else @@ -86,7 +87,6 @@ const int PIString::fromBaseN[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - #ifdef ANDROID int wctomb(char * c, wchar_t w) {*c = ((char * )&w)[0]; return 1;} #endif - PIString PIString::itos(const int num) {pisprintf("%d", num); return PIString(ch);} PIString PIString::ltos(const long num) {pisprintf("%ld", num); return PIString(ch);} PIString PIString::lltos(const llong num) {pisprintf("%lld", num); return PIString(ch);} @@ -95,10 +95,88 @@ PIString PIString::ultos(const ulong num) {pisprintf("%lu", num); return PIStrin PIString PIString::ulltos(const ullong num) {pisprintf("%llu", num); return PIString(ch);} PIString PIString::ftos(const float num) {pisprintf("%.8f", num); return PIString(ch);} PIString PIString::dtos(const double num) {pisprintf("%.8f", num); return PIString(ch);} - #undef pisprintf + +PIString PIString::fromNumberBaseS(const llong value, int base, bool * ok) { + if (value == 0LL) return PIString("0"); + if (base < 2 || base > 40) {if (ok != 0) *ok = false; return PIString();} + if (ok != 0) *ok = true; + if (base == 10) return lltos(value); + PIString ret; + llong v = value < 0 ? -value : value, cn; + int b = base; + while (v >= llong(base)) { + cn = v % b; + v /= b; + //cout << int(cn) << ", " << int(v) << endl; + ret.push_front(PIChar(toBaseN[cn])); + } + if (v > 0) ret.push_front(PIChar(toBaseN[v])); + if (value < 0) ret.push_front('-'); + return ret; +} + +PIString PIString::fromNumberBaseU(const ullong value, int base, bool * ok) { + if (value == 0ULL) return PIString("0"); + if (base < 2 || base > 40) {if (ok != 0) *ok = false; return PIString();} + if (ok != 0) *ok = true; + if (base == 10) return ulltos(value); + PIString ret; + ullong v = value, cn; + int b = base; + while (v >= ullong(base)) { + cn = v % b; + v /= b; + //cout << int(cn) << ", " << int(v) << endl; + ret.push_front(PIChar(toBaseN[cn])); + } + if (v > 0) ret.push_front(PIChar(toBaseN[v])); + return ret; +} + + +llong PIString::toNumberBase(const PIString & value, int base, bool * ok) { + PIString v = value.trimmed(); + if (base < 0) { + int ind = v.find("0x"); + if (ind == 0 || ind == 1) {v.remove(ind, 2); base = 16;} + else base = 10; + } else + if (base < 2 || base > 40) {if (ok != 0) *ok = false; return 0;} + //v.reverse(); + if (ok) *ok = true; + PIVector digits; + llong ret = 0, m = 1; + bool neg = false; + int cs; + for (int i = 0; i < v.size_s(); ++i) { + if (v[i] == PIChar('-')) {neg = !neg; continue;} + cs = fromBaseN[int(v[i].toAscii())]; + if (cs < 0 || cs >= base) { + if (ok) *ok = false; + break; + } + digits << cs; + } + for (int i = digits.size_s() - 1; i >= 0; --i) { + ret += digits[i] * m; + m *= base; + } + if (neg) ret = -ret; + /*piForeachC (PIChar & i, v) { + if (i == PIChar('-')) {ret = -ret; continue;} + cs = fromBaseN[int(i.toAscii())]; + cout << i << " = " << cs << endl; + if (cs < 0 || cs >= base) return ret; + ret += cs * m; + m *= base; + }*/ + return ret; +} + + void PIString::appendFromChars(const char * c, int s, const char * cp) { if (s <= 0) return; #ifdef PIP_ICU @@ -127,21 +205,21 @@ void PIString::appendFromChars(const char * c, int s, const char * cp) { sz = mbtowc(&wc, &(c[i]), 4); //cout << sz << endl; switch (sz) { - case 4: - push_back(PIChar(*(int*)&(c[i]))); - i += 3; + case 4: + push_back(PIChar(*(int*)&(c[i]))); + i += 3; continue; - case 3: - push_back(PIChar(*(int*)&(c[i]))); - back().ch &= 0xFFFFFF; - i += 2; + case 3: + push_back(PIChar(*(int*)&(c[i]))); + back().ch &= 0xFFFFFF; + i += 2; continue; - case 2: - push_back(PIChar(*(short * )&(c[i]))); - ++i; + case 2: + push_back(PIChar(*(short * )&(c[i]))); + ++i; continue; - default: - push_back(PIChar(c[i])); + default: + push_back(PIChar(c[i])); break; } } @@ -208,6 +286,13 @@ PIString PIString::fromCodepage(const char * s, const char * c) { } +PIString PIString::readableSize(llong bytes) { + PIString s; + s.setReadableSize(bytes); + return s; +} + + void PIString::buildData(const char * cp) const { data_.clear(); #ifdef PIP_ICU diff --git a/src_main/core/pistring.h b/src_main/core/pistring.h index a0215dc5..445088e0 100755 --- a/src_main/core/pistring.h +++ b/src_main/core/pistring.h @@ -683,7 +683,7 @@ public: //! \brief Return string contains human readable size in B/kB/MB/GB/TB //! \details Example: \snippet pistring.cpp PIString::readableSize - static PIString readableSize(llong bytes) {PIString s; s.setReadableSize(bytes); return s;} + static PIString readableSize(llong bytes); PIString & removeAll(char v) {replaceAll(v, ""); return *this;} PIString & removeAll(const PIString & v) {replaceAll(v, ""); return *this;} @@ -700,79 +700,9 @@ private: static PIString ulltos(const ullong num); static PIString ftos(const float num); static PIString dtos(const double num); - static PIString fromNumberBaseS(const llong value, int base = 10, bool * ok = 0) { - if (value == 0) return PIString("0"); - if (base < 2 || base > 40) {if (ok != 0) *ok = false; return PIString();} - if (ok != 0) *ok = true; - if (base == 10) return lltos(value); - PIString ret; - llong v = value < 0 ? -value : value, cn; - int b = base; - while (v >= llong(base)) { - cn = v % b; - v /= b; - //cout << int(cn) << ", " << int(v) << endl; - ret.push_front(PIChar(toBaseN[cn])); - } - if (v > 0) ret.push_front(PIChar(toBaseN[v])); - if (value < 0) ret.push_front('-'); - return ret; - } - static PIString fromNumberBaseU(const ullong value, int base = 10, bool * ok = 0) { - if (value == 0) return PIString("0"); - if (base < 2 || base > 40) {if (ok != 0) *ok = false; return PIString();} - if (ok != 0) *ok = true; - if (base == 10) return ulltos(value); - PIString ret; - ullong v = value, cn; - int b = base; - while (v >= ullong(base)) { - cn = v % b; - v /= b; - //cout << int(cn) << ", " << int(v) << endl; - ret.push_front(PIChar(toBaseN[cn])); - } - if (v > 0) ret.push_front(PIChar(toBaseN[v])); - return ret; - } - static llong toNumberBase(const PIString & value, int base = -1, bool * ok = 0) { - PIString v = value.trimmed(); - if (base < 0) { - int ind = v.find("0x"); - if (ind == 0 || ind == 1) {v.remove(ind, 2); base = 16;} - else base = 10; - } else - if (base < 2 || base > 40) {if (ok != 0) *ok = false; return 0;} - //v.reverse(); - if (ok) *ok = true; - PIVector digits; - llong ret = 0, m = 1; - bool neg = false; - int cs; - for (int i = 0; i < v.size_s(); ++i) { - if (v[i] == PIChar('-')) {neg = !neg; continue;} - cs = fromBaseN[int(v[i].toAscii())]; - if (cs < 0 || cs >= base) { - if (ok) *ok = false; - break; - } - digits << cs; - } - for (int i = digits.size_s() - 1; i >= 0; --i) { - ret += digits[i] * m; - m *= base; - } - if (neg) ret = -ret; - /*piForeachC (PIChar & i, v) { - if (i == PIChar('-')) {ret = -ret; continue;} - cs = fromBaseN[int(i.toAscii())]; - cout << i << " = " << cs << endl; - if (cs < 0 || cs >= base) return ret; - ret += cs * m; - m *= base; - }*/ - return ret; - } + static PIString fromNumberBaseS(const llong value, int base = 10, bool * ok = 0); + static PIString fromNumberBaseU(const ullong value, int base = 10, bool * ok = 0); + static llong toNumberBase(const PIString & value, int base = -1, bool * ok = 0); void appendFromChars(const char * c, int s, const char * cp = 0); void buildData(const char * cp = 0) const; void trimsubstr(int &st, int &fn) const; diff --git a/src_main/io/pidiagnostics.cpp b/src_main/io/pidiagnostics.cpp index fad39985..ca9bd7ed 100755 --- a/src_main/io/pidiagnostics.cpp +++ b/src_main/io/pidiagnostics.cpp @@ -105,14 +105,21 @@ void PIDiagnostics::tick(void * , int ) { float itr = disconn_ * (float(tcnt_recv) / history_rec.size()); float its = disconn_ * (float(tcnt_send) / history_send.size()); float hz = interval() / 1000.f; - if (tcnt_recv == 0) integral_freq = 0; -// piCoutObj << itr << tcnt_recv << history_rec.size(); - else integral_freq = recv.cnt_ok / itr; - packets_recv_sec = ullong(float(recv.cnt_ok) / itr); - packets_send_sec = ullong(float(send.cnt_ok) / its); - bytes_recv_sec = ullong(double(recv.bytes_ok) / itr); - bytes_send_sec = ullong(double(send.bytes_ok) / its); - immediate_freq = double(history_rec.front().cnt_ok) / hz; + if (tcnt_recv == 0) { + integral_freq = immediate_freq = 0; + packets_recv_sec = bytes_recv_sec = 0; + } else { + integral_freq = recv.cnt_ok / itr; + packets_recv_sec = ullong(float(recv.cnt_ok) / itr); + bytes_recv_sec = ullong(double(recv.bytes_ok) / itr); + immediate_freq = double(history_rec.front().cnt_ok) / hz; + } + if (tcnt_send == 0) { + packets_send_sec = bytes_send_sec = 0; + } else { + packets_send_sec = ullong(float(send.cnt_ok) / its); + bytes_send_sec = ullong(double(send.bytes_ok) / its); + } // piCoutObj << "tick" << recv.cnt_ok << send.cnt_ok; // speedRecv = PIString::readableSize(ullong(double(history_rec.front().bytes_ok) / hz)) + "/s"; // speedSend = PIString::readableSize(ullong(double(history_send.front().bytes_ok) / hz)) + "/s"; @@ -174,7 +181,7 @@ void PIDiagnostics::changeDisconnectTimeout(float disct) { lock(); disconn_ = piMaxf(disct, interval() / 1000.f); if (interval() > 0) { - int hist_size = piMaxi(int(disconn_ * 1000. / interval()), 1); + int hist_size = piClampi(int(disconn_ * 1000.f / float(interval())), 1, 65536); //piCoutObj << hist_size << interval(); history_rec.resize(hist_size); history_send.resize(hist_size); diff --git a/src_main/io/pifile.cpp b/src_main/io/pifile.cpp index bf945ac5..07d4b9d9 100755 --- a/src_main/io/pifile.cpp +++ b/src_main/io/pifile.cpp @@ -34,7 +34,6 @@ # define S_IFCHR 0x10 # define S_IFSOCK 0x20 #else -# include # include # include # include diff --git a/src_main/piversion.h b/src_main/piversion.h index e4b2411d..af31f51b 100644 --- a/src_main/piversion.h +++ b/src_main/piversion.h @@ -5,6 +5,6 @@ #define PIP_VERSION_MAJOR 1 #define PIP_VERSION_MINOR 0 #define PIP_VERSION_REVISION 0 -#define PIP_VERSION_SUFFIX "_prealpha" +#define PIP_VERSION_SUFFIX "_alpha" #endif // PIVERSION_H