From fa19ad1093f7d7eb4058f81b70c08675cb194924 Mon Sep 17 00:00:00 2001 From: peri4 Date: Wed, 11 May 2022 12:39:36 +0300 Subject: [PATCH] text stream ... --- libs/main/containers/pipair.h | 8 ++++++++ libs/main/core/pitextstream.h | 26 +++++++++++++++++--------- libs/main/io_devices/piiostream.h | 18 ++++++++++++++++++ main.cpp | 15 ++++----------- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/libs/main/containers/pipair.h b/libs/main/containers/pipair.h index 40999910..d373e276 100644 --- a/libs/main/containers/pipair.h +++ b/libs/main/containers/pipair.h @@ -132,6 +132,10 @@ template< class T1, class T2 > PIPair createPIPair(const T1 & f, const T2 & s) { return PIPair(f, s); } +template< class T1, class T2 > +PIPair makePIPair(const T1 & f, const T2 & s) { + return PIPair(f, s); +} //! \~english Creates \a PIPair object, deducing the target type from the types of arguments. //! \~russian Создает \a PIPair выводя типы из аргументов. @@ -140,5 +144,9 @@ template< class T1, class T2 > PIPair createPIPair(T1 && f, T2 && s) { return PIPair(std::move(f), std::move(s)); } +template< class T1, class T2 > +PIPair makePIPair(T1 && f, T2 && s) { + return PIPair(std::move(f), std::move(s)); +} #endif // PIPAIR_H diff --git a/libs/main/core/pitextstream.h b/libs/main/core/pitextstream.h index 2abe38f9..edac6546 100644 --- a/libs/main/core/pitextstream.h +++ b/libs/main/core/pitextstream.h @@ -1,12 +1,12 @@ /*! \file pitextstream.h * \ingroup Core * \~\brief - * \~english Text serialization interface - * \~russian Интерфейс текстовой сериализации + * \~english Text serialization functionality over PIBinaryStream + * \~russian Функциональность текстовой сериализации поверх PIBinaryStream */ /* PIP - Platform Independent Primitives - Text serialization interface + Text serialization functionality over PIBinaryStream Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify @@ -31,8 +31,8 @@ //! \ingroup Core //! \~\brief -//! \~english Text serialization interface. -//! \~russian Интерфейс текстовой сериализации. +//! \~english Text serialization functionality over PIBinaryStream. +//! \~russian Функциональность текстовой сериализации поверх PIBinaryStream. template class PITextStream { public: @@ -56,14 +56,22 @@ public: char takeChar(bool * ok) {return (char)s->binaryStreamTakeByte(ok);} - bool textStreamSkipSpaces() { + bool skipSpaces() { //if () } - PIString textStreamTakeLine() { - + PIString takeLine() { + PIByteArray line; + bool ok = true; + for (;;) { + char b = takeChar(&ok); + if (!ok || b == '\n') break; + if (b != '\r') + line.append((uchar)b); + } + return PIString::fromUTF8(line); } - PIString textStreamTakeWord(); + PIString takeWord(); private: PIBinaryStream

* s; diff --git a/libs/main/io_devices/piiostream.h b/libs/main/io_devices/piiostream.h index 70e23ec0..435a4ea6 100644 --- a/libs/main/io_devices/piiostream.h +++ b/libs/main/io_devices/piiostream.h @@ -27,6 +27,7 @@ #define PIIOSTREAM_H #include "piiodevice.h" +#include "pitextstream.h" //! \ingroup IO @@ -56,4 +57,21 @@ private: }; +//! \ingroup IO +//! \~\brief +//! \~english PITextStream functionality for PIIODevice. +//! \~russian Функциональность PITextStream для PIIODevice. +class PIP_EXPORT PIIOTextStream: public PITextStream { +public: + + //! \~english Contructs %PIIOTextStream for "device" device + //! \~russian Создает %PIIOTextStream для устройства "device" + PIIOTextStream(PIIODevice * device): PITextStream(&bin_stream), bin_stream(device){} + +private: + PIIOBinaryStream bin_stream; + +}; + + #endif // PIIOSTREAM_H diff --git a/main.cpp b/main.cpp index f409fc61..20a7375c 100644 --- a/main.cpp +++ b/main.cpp @@ -37,19 +37,12 @@ template inline PIBinaryStream

& operator >>(PIBinaryStream

& int main(int argc, char * argv[]) { - PIByteArray ba; PIFile f; - f.open("_", PIIODevice::ReadWrite); - f.clear(); - PIIOBinaryStream ios(&f); - auto ts = createPITextStream(&ios); + f.open("_test.h", PIIODevice::ReadOnly); + PIIOTextStream ts(&f); + while (!f.isEnd()) + piCout << ts.takeLine(); - ts << "hello" << uchar('1'); - ts.space(); - (ts << PIString::fromUTF8("№") << 123).space() << -0.1f; - ts.newLine(); - - piCout << PIString(ba); //PIIOByteArray ioba(&ba); //PIIOBinaryStream stream(&ioba); /*ProcessStatsFixed_ ps;