From ef8ffcd02f24c467dd852a7ff7ee7ed0bb050ec1 Mon Sep 17 00:00:00 2001 From: peri4 Date: Wed, 11 May 2022 20:55:51 +0300 Subject: [PATCH] DEPRECATED[M], createMemoryBlock(), text stream ... --- libs/main/core/pibase.h | 10 +++- libs/main/core/pibinarystream.h | 12 ++--- libs/main/core/pibytearray.h | 2 +- libs/main/core/piconstchars.cpp | 7 +++ libs/main/core/piconstchars.h | 4 ++ libs/main/core/pimemoryblock.h | 3 ++ libs/main/core/pitextstream.h | 47 +++++++++++++++---- .../piintrospection_containers_p.h | 4 +- libs/main/io_devices/pibinarylog.cpp | 4 +- libs/main/math/pievaluator.h | 8 ++-- libs/main/system/pisystemmonitor.h | 8 ++-- main.cpp | 14 +++--- 12 files changed, 84 insertions(+), 39 deletions(-) diff --git a/libs/main/core/pibase.h b/libs/main/core/pibase.h index 0a44cf74..832ea872 100644 --- a/libs/main/core/pibase.h +++ b/libs/main/core/pibase.h @@ -265,13 +265,15 @@ #ifdef CC_GCC # undef DEPRECATED +# undef DEPRECATEDM # define DEPRECATED __attribute__((deprecated)) +# define DEPRECATEDM(msg) __attribute__((deprecated(msg))) # if CC_GCC_VERSION > 0x025F // > 2.95 +# pragma GCC diagnostic warning "-Wdeprecated-declarations" # ifdef LINUX # define HAS_LOCALE # endif # ifdef MAC_OS -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" # pragma GCC diagnostic ignored "-Wundefined-bool-conversion" # pragma GCC diagnostic ignored "-Wc++11-extensions" # endif @@ -287,7 +289,9 @@ #ifdef CC_VC # undef DEPRECATED -# define DEPRECATED +# undef DEPRECATEDM +# define DEPRECATED __declspec(deprecated) +# define DEPRECATEDM(msg) __declspec(deprecated(msg)) # pragma warning(disable: 4018) # pragma warning(disable: 4061) # pragma warning(disable: 4100) @@ -312,7 +316,9 @@ #ifdef CC_OTHER # undef DEPRECATED +# undef DEPRECATEDM # define DEPRECATED +# define DEPRECATEDM(msg) #endif #endif //DOXYGEN diff --git a/libs/main/core/pibinarystream.h b/libs/main/core/pibinarystream.h index a545f6bc..9f3be046 100644 --- a/libs/main/core/pibinarystream.h +++ b/libs/main/core/pibinarystream.h @@ -104,12 +104,8 @@ template inline PIBinaryStream

& operator >>(PIBinary // specify types -template inline PIBinaryStreamTrivialRef

operator <<(PIBinaryStream

& s, const bool v) {s.binaryStreamAppend((uchar)v); return s;} -template inline PIBinaryStreamTrivialRef

operator <<(PIBinaryStream

& s, const char v) {s.binaryStreamAppend((uchar)v); return s;} -template inline PIBinaryStreamTrivialRef

operator <<(PIBinaryStream

& s, const uchar v) {s.binaryStreamAppend((uchar)v); return s;} -template inline PIBinaryStreamTrivialRef

operator >>(PIBinaryStream

& s, bool & v) {v = s.binaryStreamTakeByte(); return s;} -template inline PIBinaryStreamTrivialRef

operator >>(PIBinaryStream

& s, char & v) {v = s.binaryStreamTakeByte(); return s;} -template inline PIBinaryStreamTrivialRef

operator >>(PIBinaryStream

& s, uchar & v) {v = s.binaryStreamTakeByte(); return s;} +template inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const bool v) {s.binaryStreamAppend((uchar)v); return s;} +template inline PIBinaryStream

& operator >>(PIBinaryStream

& s, bool & v) {v = s.binaryStreamTakeByte(); return s;} template inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const PIMemoryBlock v) { s.binaryStreamAppend(v.data(), v.size()); @@ -128,7 +124,7 @@ template inline PIBinaryStream

& operator >>(PIBinaryStream

& template::value, int>::type = 0> -inline PIBinaryStreamTrivialRef

operator <<(PIBinaryStream

& s, const T & v) { +inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const T & v) { //piCout << "<< enum"; s.binaryStreamAppend((int)v); return s; @@ -231,7 +227,7 @@ inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const PIPair::value, int>::type = 0> -inline PIBinaryStreamTrivialRef

operator >>(PIBinaryStream

& s, T & v) { +inline PIBinaryStream

& operator >>(PIBinaryStream

& s, T & v) { //piCout << ">> enum"; v = (T)s.binaryStreamTakeInt(); return s; diff --git a/libs/main/core/pibytearray.h b/libs/main/core/pibytearray.h index 009f8ac0..9a4aed33 100644 --- a/libs/main/core/pibytearray.h +++ b/libs/main/core/pibytearray.h @@ -41,7 +41,7 @@ class PIByteArray; class PIP_EXPORT PIByteArray: public PIDeque, public PIBinaryStream { public: - typedef ::PIMemoryBlock RawData; + typedef ::PIMemoryBlock RawData DEPRECATEDM("use PIMemoryBlock instead"); //! \~english Constructs an empty byte array //! \~russian Создает пустой байтовый массив diff --git a/libs/main/core/piconstchars.cpp b/libs/main/core/piconstchars.cpp index 90d057eb..bc978a2a 100644 --- a/libs/main/core/piconstchars.cpp +++ b/libs/main/core/piconstchars.cpp @@ -42,6 +42,13 @@ //! +bool PIConstChars::contains(char c) const { + for (int i = 0; i < (int)len; ++i) + if (str[i] == c) return true; + return false; +} + + bool PIConstChars::startsWith(const PIConstChars & str) const { if (size() < str.size()) return false; return str == left(str.size()); diff --git a/libs/main/core/piconstchars.h b/libs/main/core/piconstchars.h index 3f6ec6d1..1a00bfd6 100644 --- a/libs/main/core/piconstchars.h +++ b/libs/main/core/piconstchars.h @@ -86,6 +86,10 @@ public: //! \~russian Возвращает \c true если строка непустая, т.е. длина > 0. inline bool isNotEmpty() const {return len > 0;} + //! \~english Returns \c true if string contains character "c". + //! \~russian Возвращает \c true если строка содержит символ "c". + bool contains(char c) const; + //! \~english Returns characters length of string. //! \~russian Возвращает длину строки в символах. inline size_t length() const {return len;} diff --git a/libs/main/core/pimemoryblock.h b/libs/main/core/pimemoryblock.h index 33753955..133d6ae0 100644 --- a/libs/main/core/pimemoryblock.h +++ b/libs/main/core/pimemoryblock.h @@ -57,4 +57,7 @@ private: }; +template +PIMemoryBlock createMemoryBlock(const T * ptr) {return PIMemoryBlock(ptr, sizeof(T));} + #endif // PIMEMORYBLOCK_H diff --git a/libs/main/core/pitextstream.h b/libs/main/core/pitextstream.h index edac6546..8f39349b 100644 --- a/libs/main/core/pitextstream.h +++ b/libs/main/core/pitextstream.h @@ -38,8 +38,8 @@ class PITextStream { public: PITextStream(PIBinaryStream

* stream): s(stream) {} - PITextStream

& newLine() {s->binaryStreamAppend('\n'); return *this;} PITextStream

& space() {s->binaryStreamAppend(' '); return *this;} + PITextStream

& newLine() {s->binaryStreamAppend('\n'); return *this;} void append(const PIString & v) { if (v.isEmpty()) return; auto utf8 = v.toUTF8(); @@ -56,24 +56,53 @@ public: char takeChar(bool * ok) {return (char)s->binaryStreamTakeByte(ok);} - bool skipSpaces() { - - //if () - } PIString takeLine() { - PIByteArray line; + PIByteArray ret; bool ok = true; for (;;) { char b = takeChar(&ok); if (!ok || b == '\n') break; if (b != '\r') - line.append((uchar)b); + ret.append((uchar)b); } - return PIString::fromUTF8(line); + return PIString::fromUTF8(ret); + } + PIString takeWord() { + static PIConstChars spaces(" \t\n\r"); + return takeUntil(spaces); + } + PIString takeCWord() { + static PIConstChars chars(" \t\n\r:;%$&#@!?~/*-+=.,\\\"'`[](){}<>"); + return takeUntil(chars); } - PIString takeWord(); private: + PIString takeUntil(const PIConstChars & chars) { + static PIConstChars spaces(" \t\n\r"); + bool ok = true; + char c = skipWhile(spaces, &ok); + if (!ok || chars.contains(c)) return PIString(); + PIByteArray ret; + ret.append((uchar)c); + for (;;) { + c = takeChar(&ok); + if (!ok || chars.contains(c)) break; + ret.append((uchar)c); + } + return PIString::fromUTF8(ret); + } + // returns first non-"chars" char + char skipWhile(const PIConstChars & chars, bool * rok) { + bool ok = true; + char c = 0; + for (;;) { + c = takeChar(&ok); + if (!ok || !chars.contains(c)) break; + } + if (rok) *rok = ok; + return c; + } + PIBinaryStream

* s; }; diff --git a/libs/main/introspection/piintrospection_containers_p.h b/libs/main/introspection/piintrospection_containers_p.h index 9488b93d..da0049be 100644 --- a/libs/main/introspection/piintrospection_containers_p.h +++ b/libs/main/introspection/piintrospection_containers_p.h @@ -67,11 +67,11 @@ public: BINARY_STREAM_WRITE(PIIntrospectionContainers::TypeInfo) { - s << PIByteArray::RawData(&v, sizeof(PIIntrospectionContainers::_Type)) << v.name; + s << PIMemoryBlock(&v, sizeof(PIIntrospectionContainers::_Type)) << v.name; return s; } BINARY_STREAM_READ(PIIntrospectionContainers::TypeInfo) { - s >> PIByteArray::RawData(&v, sizeof(PIIntrospectionContainers::_Type)) >> v.name; + s >> PIMemoryBlock(&v, sizeof(PIIntrospectionContainers::_Type)) >> v.name; return s; } diff --git a/libs/main/io_devices/pibinarylog.cpp b/libs/main/io_devices/pibinarylog.cpp index 5d30d59f..ac308a1d 100644 --- a/libs/main/io_devices/pibinarylog.cpp +++ b/libs/main/io_devices/pibinarylog.cpp @@ -316,7 +316,7 @@ int PIBinaryLog::writeBinLog(int id, const void *data, int size) { return 0; } PIByteArray logdata; - logdata << id << size << (PISystemTime::current() - startlogtime) << PIByteArray::RawData(data, size); + logdata << id << size << (PISystemTime::current() - startlogtime) << PIMemoryBlock(data, size); int res = file.write(logdata.data(), logdata.size()); file.flush(); write_count++; @@ -330,7 +330,7 @@ int PIBinaryLog::writeBinLog(int id, const void *data, int size) { int PIBinaryLog::writeBinLog_raw(int id, const PISystemTime &time, const void *data, int size) { if (size <= 0 || !canWrite()) return -1; PIByteArray logdata; - logdata << id << size << time << PIByteArray::RawData(data, size); + logdata << id << size << time << PIMemoryBlock(data, size); logmutex.lock(); int res = file.write(logdata.data(), logdata.size()); file.flush(); diff --git a/libs/main/math/pievaluator.h b/libs/main/math/pievaluator.h index f83ba741..89835ac3 100644 --- a/libs/main/math/pievaluator.h +++ b/libs/main/math/pievaluator.h @@ -228,11 +228,11 @@ private: inline bool operator ==(PIEvaluatorTypes::Element e1, PIEvaluatorTypes::Element e2) {return (e1.type == e2.type && e1.num == e2.num);} inline bool operator !=(PIEvaluatorTypes::Element e1, PIEvaluatorTypes::Element e2) {return (e1.type != e2.type || e1.num != e2.num);} -BINARY_STREAM_WRITE(PIEvaluatorTypes::Instruction) {s << PIByteArray::RawData(&v, sizeof(v) - sizeof(v.operators)) << v.operators; return s;} -BINARY_STREAM_READ (PIEvaluatorTypes::Instruction) {s >> PIByteArray::RawData(&v, sizeof(v) - sizeof(v.operators)) >> v.operators; return s;} +BINARY_STREAM_WRITE(PIEvaluatorTypes::Instruction) {s << PIMemoryBlock(&v, sizeof(v) - sizeof(v.operators)) << v.operators; return s;} +BINARY_STREAM_READ (PIEvaluatorTypes::Instruction) {s >> PIMemoryBlock(&v, sizeof(v) - sizeof(v.operators)) >> v.operators; return s;} -BINARY_STREAM_WRITE(PIEvaluatorTypes::Element) {s << PIByteArray::RawData(&v, sizeof(v)); return s;} -BINARY_STREAM_READ (PIEvaluatorTypes::Element) {s >> PIByteArray::RawData(&v, sizeof(v)); return s;} +BINARY_STREAM_WRITE(PIEvaluatorTypes::Element) {s << createMemoryBlock(&v); return s;} +BINARY_STREAM_READ (PIEvaluatorTypes::Element) {s >> createMemoryBlock(&v); return s;} BINARY_STREAM_WRITE(PIEvaluatorTypes::Variable) {s << v.name << v.value; return s;} BINARY_STREAM_READ (PIEvaluatorTypes::Variable) {s >> v.name >> v.value; return s;} diff --git a/libs/main/system/pisystemmonitor.h b/libs/main/system/pisystemmonitor.h index bcc92a8a..e03e379d 100644 --- a/libs/main/system/pisystemmonitor.h +++ b/libs/main/system/pisystemmonitor.h @@ -294,7 +294,7 @@ inline PICout operator <<(PICout s, const PISystemMonitor::ThreadStats & v) { //! \~english Store operator //! \~russian Оператор сохранения BINARY_STREAM_WRITE(PISystemMonitor::ProcessStats) { - s << PIByteArray::RawData(&v, sizeof(PISystemMonitor::ProcessStatsFixed)) + s << PIMemoryBlock(&v, sizeof(PISystemMonitor::ProcessStatsFixed)) << v.exec_name << v.state; return s; } @@ -302,7 +302,7 @@ BINARY_STREAM_WRITE(PISystemMonitor::ProcessStats) { //! \~english Restore operator //! \~russian Оператор извлечения BINARY_STREAM_READ (PISystemMonitor::ProcessStats) { - s >> PIByteArray::RawData(&v, sizeof(PISystemMonitor::ProcessStatsFixed)) + s >> PIMemoryBlock(&v, sizeof(PISystemMonitor::ProcessStatsFixed)) >> v.exec_name >> v.state; v.makeStrings(); return s; @@ -311,7 +311,7 @@ BINARY_STREAM_READ (PISystemMonitor::ProcessStats) { //! \~english Store operator //! \~russian Оператор сохранения BINARY_STREAM_WRITE(PISystemMonitor::ThreadStats) { - s << PIByteArray::RawData(&v, sizeof(PISystemMonitor::ThreadStatsFixed)) + s << PIMemoryBlock(&v, sizeof(PISystemMonitor::ThreadStatsFixed)) << v.name; return s; } @@ -319,7 +319,7 @@ BINARY_STREAM_WRITE(PISystemMonitor::ThreadStats) { //! \~english Restore operator //! \~russian Оператор извлечения BINARY_STREAM_READ (PISystemMonitor::ThreadStats) { - s >> PIByteArray::RawData(&v, sizeof(PISystemMonitor::ThreadStatsFixed)) + s >> PIMemoryBlock(&v, sizeof(PISystemMonitor::ThreadStatsFixed)) >> v.name; return s; } diff --git a/main.cpp b/main.cpp index 20a7375c..3789cd77 100644 --- a/main.cpp +++ b/main.cpp @@ -35,19 +35,19 @@ PICout operator << (PICout c, const TS & v) {c << '{' << v.i << ", " << v.f << ' template inline PIBinaryStream

& operator <<(PIBinaryStream

& s, const TS & v) {s << v.i; return s;} template inline PIBinaryStream

& operator >>(PIBinaryStream

& s, TS & v) {s >> v.i; return s;} - int main(int argc, char * argv[]) { - PIFile f; + /*PIFile f; f.open("_test.h", PIIODevice::ReadOnly); PIIOTextStream ts(&f); while (!f.isEnd()) - piCout << ts.takeLine(); + piCout << ts.takeCWord();*/ - //PIIOByteArray ioba(&ba); + PIByteArray ba; + PIIOByteArray ioba(&ba); //PIIOBinaryStream stream(&ioba); - /*ProcessStatsFixed_ ps; - ba << ps; - piCout << "s" << ba.data;*/ + PISystemMonitor::ProcessStatsFixed ps; + ba << PIByteArray::RawData("123", 3); + piCout << "s" << ba; //File f; //f.file.open("_", PIIODevice::ReadWrite); //f.file.clear();