PICout improvement:

* renamed private members for more clear code
 * registerExternalBufferID() method to obtain unique ID for withExternalBuffer()
 * PICoutManipulators::PICoutStdStream enum for select stream (stdout or stderr)
 * Constructors now accept optional stream
 * piCerr and piCerrObj macros

PIDir::temporary() moved to "mkdtemp"

PILog:
 * now 4 levels
 * you can set max level
 * Error writes to piCerr
This commit is contained in:
2024-09-16 16:06:07 +03:00
parent 9d4357c066
commit 000ce2a54d
11 changed files with 357 additions and 320 deletions

View File

@@ -40,10 +40,14 @@
# define piCoutObj
#else
# define piCout PICout(piDebug)
# define piCoutObj \
PICout(piDebug && debug()) << (PIStringAscii("[") + className() + \
(name().isEmpty() ? "]" : PIStringAscii(" \"") + name() + PIStringAscii("\"]")))
# define piCout PICout(piDebug, PICoutManipulators::StdOut)
# define piCoutObj \
PICout(piDebug && debug(), PICoutManipulators::StdOut) \
<< (PIStringAscii("[") + className() + (name().isEmpty() ? "]" : PIStringAscii(" \"") + name() + PIStringAscii("\"]")))
# define piCerr PICout(piDebug, PICoutManipulators::StdErr)
# define piCerrObj \
PICout(piDebug && debug(), PICoutManipulators::StdErr) \
<< (PIStringAscii("[") + className() + (name().isEmpty() ? "]" : PIStringAscii(" \"") + name() + PIStringAscii("\"]")))
#endif
@@ -55,6 +59,7 @@ class PIObject;
//! \~russian Пространство имен содержит перечисления для контроля PICout
namespace PICoutManipulators {
//! \~english Enum contains special characters
//! \~russian Перечисление со спецсимволами
enum PICoutSpecialChar {
@@ -65,6 +70,7 @@ enum PICoutSpecialChar {
Quote /*! \~english Quote character, '\"' \~russian Кавычки, '\"' */
};
//! \~english Enum contains immediate action
//! \~russian Перечисление с немедленными действиями
enum PICoutAction {
@@ -79,6 +85,7 @@ enum PICoutAction {
restoreControl() */
};
//! \~english Enum contains control of PICout
//! \~russian Перечисление с управлением PICout
enum PICoutControl {
@@ -91,6 +98,7 @@ enum PICoutControl {
NoLock /*! \~english Don`t use mutex for output \~russian Не использовать мьютекс при выводе */ = 0x100,
};
//! \~english Enum contains output format
//! \~russian Перечисление с форматом вывода
enum PICoutFormat {
@@ -122,7 +130,17 @@ enum PICoutFormat {
Default /*! \~english Default format \~russian Формат по умолчанию */ = 0x4000000
};
//! \~english Enum contains console streams
//! \~russian Перечисление с потоками консоли
enum PICoutStdStream {
StdOut /*! \~english Standard output stream \~russian Стандартный поток вывода */ = 0,
StdErr /*! \~english Standard error stream \~russian Стандартный поток ошибок */ = 1,
};
typedef PIFlags<PICoutControl> PICoutControls;
} // namespace PICoutManipulators
@@ -134,11 +152,11 @@ class PIP_EXPORT PICout {
public:
//! \~english Default constructor with default features (AddSpaces and AddNewLine)
//! \~russian Конструктор по умолчанию (AddSpaces и AddNewLine)
PICout(int controls = PICoutManipulators::DefaultControls);
PICout(int controls = PICoutManipulators::DefaultControls, PICoutManipulators::PICoutStdStream stream = PICoutManipulators::StdOut);
//! \~english Construct with default features (AddSpaces and AddNewLine), but if \"active\" is false does nothing
//! \~russian Конструктор по умолчанию (AddSpaces и AddNewLine), но если не \"active\" то будет неактивным
PICout(bool active);
PICout(bool active, PICoutManipulators::PICoutStdStream stream = PICoutManipulators::StdOut);
PICout(const PICout & other);
@@ -146,6 +164,8 @@ public:
class PIP_EXPORT Notifier {
friend class PICout;
public:
//! \~english Singleton access to %PICout::Notifier
//! \~russian Синглтон класса %PICout::Notifier
@@ -158,15 +178,17 @@ public:
private:
Notifier();
PIObject * o;
std::atomic_int new_id = {1};
};
//! \~english Enum contains output devices of %PICout
//! \~russian Перечисление с устройствами вывода для %PICout
enum OutputDevice {
NoDevices /** \~english %PICout is disabled \~russian %PICout неактивен */ = 0x0,
StdOut /** \~english Standard console output \~russian Стандартный вывод в консоль */ = 0x1,
Buffer /** \~english Internal buffer \~russian Внутренний буфер */ = 0x2,
AllDevices /** \~english All \~russian Все */ = 0xFFFF,
NoDevices /** \~english %PICout is disabled \~russian %PICout неактивен */ = 0x0,
Console /** \~english Standard console output \~russian Стандартный вывод в консоль */ = 0x1,
StdOut DEPRECATEDM("use PICout::Console") = Console,
Buffer /** \~english Internal buffer \~russian Внутренний буфер */ = 0x2,
AllDevices /** \~english All \~russian Все */ = 0xFFFF,
};
typedef PIFlags<OutputDevice> OutputDevices;
@@ -261,25 +283,15 @@ public:
//! \~english Set control flag "c" is "on" state
//! \~russian Установить флаг "c" в "on" состояние
PICout & setControl(PICoutManipulators::PICoutControl c, bool on = true) {
co_.setFlag(c, on);
return *this;
}
PICout & setControl(PICoutManipulators::PICoutControl c, bool on = true);
//! \~english Set control flags "c"
//! \~russian Установить флаги "c"
PICout & setControls(PICoutManipulators::PICoutControls c) {
co_ = c;
return *this;
}
PICout & setControls(PICoutManipulators::PICoutControls c);
//! \~english Exec \a saveControls() and set control flags to "c"
//! \~russian Иыполнить \a saveControls() и Установить флаги "c"
PICout & saveAndSetControls(PICoutManipulators::PICoutControls c) {
saveControls();
co_ = c;
return *this;
}
PICout & saveAndSetControls(PICoutManipulators::PICoutControls c);
//! \~english Save control flags to internal stack
//! \~russian Сохраняет состояние флагов во внутренний стек
@@ -321,7 +333,7 @@ public:
//! \~english Output \a PIString to stdout
//! \~russian Вывод \a PIString в stdout
static void stdoutPIString(const PIString & s);
static void stdoutPIString(const PIString & str, PICoutManipulators::PICoutStdStream s = PICoutManipulators::StdOut);
//! \~english Returns internal PIString buffer
//! \~russian Возвращает внутренний PIString буфер
@@ -368,19 +380,25 @@ public:
PIFlags<PICoutManipulators::PICoutControl> controls = PICoutManipulators::AddSpaces |
PICoutManipulators::AddNewLine);
//! \~english Returns unique external buffer ID for later use in \a withExternalBuffer()
//! \~russian Возвращает уникальный ID для внешнего буфера для дальнейшего использования в \a withExternalBuffer()
static int registerExternalBufferID();
static PIMutex & __mutex__();
static PIString & __string__();
private:
void init();
void applyFormat(PICoutManipulators::PICoutFormat f);
void writeChar(char c);
static OutputDevices devs;
PRIVATE_DECLARATION(PIP_EXPORT)
bool fo_, cc_, fc_, act_;
int cnb_, attr_, id_;
PIString * buffer_;
PICoutManipulators::PICoutControls co_;
bool first_out_ = true, is_copy_ = false, format_changed_ = false, actve_ = true;
int int_base_ = 10, win_attr_ = 0, id_ = 0;
PIString * buffer_ = nullptr;
PICoutManipulators::PICoutControls ctrl_ = PICoutManipulators::DefaultControls;
PICoutManipulators::PICoutStdStream stream_ = PICoutManipulators::StdOut;
};
#endif // PICOUT_H