Files
pip/libs/main/io_devices/piiostring.h
T
2026-03-12 14:46:57 +03:00

107 lines
4.3 KiB
C++

//! \~\ingroup IO
//! \~\{
//! \~\file piiostring.h
//! \~\brief
//! \~english PIIODevice wrapper around PIString
//! \~russian Обертка PIIODevice вокруг PIString
//! \~\}
/*
PIP - Platform Independent Primitives
PIIODevice wrapper around PIString
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PIIOSTRING_H
#define PIIOSTRING_H
#include "piiodevice.h"
//! \~\ingroup IO
//! \~\brief
//! \~english PIIODevice wrapper around PIString.
//! \~russian Обёртка PIIODevice вокруг PIString.
//! \~\details
//! \~english PIIOString provides a PIIODevice interface for reading from and writing to PIString objects.
//! \~russian PIIOString предоставляет интерфейс PIIODevice для чтения и записи объектов PIString.
class PIP_EXPORT PIIOString: public PIIODevice {
PIIODEVICE(PIIOString, "");
public:
//! \~english Constructs %PIIOString with "string" content and "mode" open mode.
//! \~russian Создает %PIIOString с содержимым "string" и режимом открытия "mode".
explicit PIIOString(PIString * string = 0, PIIODevice::DeviceMode mode = PIIODevice::ReadOnly);
//! \~english Constructs %PIIOString with "string" content only for read.
//! \~russian Создает %PIIOString с содержимым "string" только для чтения.
explicit PIIOString(const PIString & string);
//! \~english Returns content
//! \~russian Возвращает содержимое
PIString * string() const { return str; }
//! \~english Clear content string
//! \~russian Очищает содержимое строки
void clear();
//! \~english Open "string" content with "mode" open mode
//! \~russian Открывает содержимое "string" с режимом открытия "mode"
bool open(PIString * string, PIIODevice::DeviceMode mode = PIIODevice::ReadWrite);
//! \~english Open "string" content only for read
//! \~russian Открывает содержимое "string" только для чтения
bool open(const PIString & string);
//! \~english Returns if position is at the end of content.
//! \~russian Возвращает, находится ли позиция в конце содержимого.
bool isEnd() const;
//! \~english Move read/write position to "position"
//! \~russian Перемещает позицию чтения/записи на "position"
void seek(llong position) { pos = position; }
//! \~english Move read/write position to the beginning of the string
//! \~russian Перемещает позицию чтения/записи на начало строки
void seekToBegin();
//! \~english Move read/write position to the end of the string
//! \~russian Перемещает позицию чтения/записи на конец строки
void seekToEnd();
//! \~english Reads one text line and returns it.
//! \~russian Читает одну текстовую строку и возвращает её.
PIString readLine();
//! \~english Inserts string "string" into content at current position.
//! \~russian Вставляет строку "string" в содержимое буфера в текущую позицию.
int writeString(const PIString & string);
ssize_t bytesAvailable() const override;
protected:
bool openDevice() override;
ssize_t readDevice(void * read_to, ssize_t max_size) override;
ssize_t writeDevice(const void * data, ssize_t max_size) override;
DeviceInfoFlags deviceInfoFlags() const override { return PIIODevice::Sequential | PIIODevice::Reliable; }
ssize_t pos = 0;
PIString * str = nullptr;
};
#endif // PIIOSTRING_H