picout and clean

This commit is contained in:
Бычков Андрей
2022-08-08 16:44:37 +03:00
parent 8551499a5e
commit 724a2dffcf
16 changed files with 242 additions and 187 deletions

View File

@@ -154,21 +154,13 @@ DWORD PICout::__Private__::smode = 0;
#endif
PICout::PICout(int controls): fo_(true), cc_(false), fc_(false), act_(true), cnb_(10), co_(controls) {
buffer_ = nullptr;
init();
}
PICout::PICout(bool active): fo_(true), cc_(false), fc_(false), act_(active), cnb_(10), co_(PICoutManipulators::DefaultControls) {
buffer_ = nullptr;
if (act_)
init();
}
PICout::PICout(PIString * buffer, int id, PIFlags<PICoutManipulators::PICoutControl> controls): fo_(true), cc_(false),
fc_(false), act_(true), cnb_(10), co_(controls) {
init();
buffer_ = buffer;
id_ = id;
if (act_) init();
}
@@ -182,14 +174,16 @@ PICout::~PICout() {
if (fc_) applyFormat(PICoutManipulators::Default);
if (cc_) return;
newLine();
if ((co_ & NoLock) != NoLock)
if ((co_ & NoLock) != NoLock) {
PICout::__mutex__().unlock();
if (buffer_)
}
if (buffer_) {
((NotifierObject*)Notifier::object())->finished(id_, buffer_);
}
}
PICout PICout::operator <<(const PICoutAction v) {
PICout & PICout::operator <<(PICoutAction v) {
if (!act_) return *this;
#ifdef WINDOWS
CONSOLE_SCREEN_BUFFER_INFO sbi;
@@ -198,8 +192,9 @@ PICout PICout::operator <<(const PICoutAction v) {
#endif
switch (v) {
case PICoutManipulators::Flush:
if (!buffer_ && isOutputDeviceActive(StdOut))
if (!buffer_ && isOutputDeviceActive(StdOut)) {
std::cout << std::flush;
}
break;
case PICoutManipulators::Backspace:
if (isOutputDeviceActive(StdOut)) {
@@ -275,7 +270,7 @@ PICout PICout::operator <<(const PICoutAction v) {
}
PICout PICout::operator <<(const PICoutManipulators::PICoutFormat v) {
PICout & PICout::operator <<(PICoutManipulators::PICoutFormat v) {
switch (v) {
case PICoutManipulators::Bin: cnb_ = 2; break;
case PICoutManipulators::Oct: cnb_ = 8; break;
@@ -287,7 +282,7 @@ PICout PICout::operator <<(const PICoutManipulators::PICoutFormat v) {
}
PICout PICout::operator <<(const PIFlags<PICoutManipulators::PICoutFormat> & v) {
PICout & PICout::operator <<(PIFlags<PICoutManipulators::PICoutFormat> v) {
if (v[PICoutManipulators::Bin]) cnb_ = 2;
if (v[PICoutManipulators::Oct]) cnb_ = 8;
if (v[PICoutManipulators::Dec]) cnb_ = 10;
@@ -338,40 +333,73 @@ PICout PICout::operator <<(const PIFlags<PICoutManipulators::PICoutFormat> & v)
if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v);\
if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() += PIString::fromNumber(v, 'g');\
}\
}
}\
return *this;
PICout PICout::operator <<(const char * v) {if (!act_ || !v) return *this; if (v[0] == '\0') return *this; space(); quote(); write(v); quote(); return *this;}
PICout & PICout::operator <<(const PIString & v) {
space();
quote();
write(v);
quote();
return *this;
}
PICout PICout::operator <<(const bool v) {if (!act_) return *this; space(); if (v) write("true"); else write("false"); return *this;}
PICout & PICout::operator <<(const char * v) {
if (!act_ || !v) return *this;
if (v[0] == '\0') return *this;
space();
quote();
write(v);
quote();
return *this;
}
PICout PICout::operator <<(const char v) {if (!act_) return *this; space(); write(v); return *this;}
PICout & PICout::operator <<(bool v) {
if (!act_) return *this;
space();
if (v) write("true");
else write("false");
return *this;
}
PICout PICout::operator <<(const uchar v) {PIINTCOUT(ushort(v))}
PICout & PICout::operator <<(char v) {
if (!act_) return *this;
space();
write(v);
return *this;
}
PICout PICout::operator <<(const short int v) {PIINTCOUT(v)}
PICout & PICout::operator <<(uchar v) {PIINTCOUT(ushort(v))}
PICout PICout::operator <<(const ushort v) {PIINTCOUT(v)}
PICout & PICout::operator <<(short int v) {PIINTCOUT(v)}
PICout PICout::operator <<(const int v) {PIINTCOUT(v)}
PICout & PICout::operator <<(ushort v) {PIINTCOUT(v)}
PICout PICout::operator <<(const uint v) {PIINTCOUT(v)}
PICout & PICout::operator <<(int v) {PIINTCOUT(v)}
PICout PICout::operator <<(const long v) {PIINTCOUT(v)}
PICout & PICout::operator <<(uint v) {PIINTCOUT(v)}
PICout PICout::operator <<(const ulong v) {PIINTCOUT(v)}
PICout & PICout::operator <<(long v) {PIINTCOUT(v)}
PICout PICout::operator <<(const llong v) {PIINTCOUT(v)}
PICout & PICout::operator <<(ulong v) {PIINTCOUT(v)}
PICout PICout::operator <<(const ullong v) {PIINTCOUT(v)}
PICout & PICout::operator <<(llong v) {PIINTCOUT(v)}
PICout PICout::operator <<(const float v) {if (!act_) return *this; space(); PIFLOATCOUT(v) return *this;}
PICout & PICout::operator <<(ullong v) {PIINTCOUT(v)}
PICout PICout::operator <<(const double v) {if (!act_) return *this; space(); PIFLOATCOUT(v) return *this;}
PICout & PICout::operator <<(float v) {if (!act_) return *this; space(); PIFLOATCOUT(v)}
PICout PICout::operator <<(const void * v) {if (!act_) return *this; space(); write("0x" + PIString::fromNumber(ullong(v), 16)); return *this;}
PICout & PICout::operator <<(double v) {if (!act_) return *this; space(); PIFLOATCOUT(v)}
PICout PICout::operator <<(const PIObject * v) {
PICout & PICout::operator <<(void * v) {
if (!act_) return *this;
space();
write("0x" + PIString::fromNumber(ullong(v), 16));
return *this;
}
PICout & PICout::operator <<(const PIObject * v) {
if (!act_) return *this;
space();
if (v == 0) write("PIObject*(0x0)");
@@ -382,7 +410,7 @@ PICout PICout::operator <<(const PIObject * v) {
return *this;
}
PICout PICout::operator <<(const PICoutSpecialChar v) {
PICout & PICout::operator <<(PICoutSpecialChar v) {
if (!act_) return *this;
switch (v) {
case Null:
@@ -581,10 +609,10 @@ void PICout::init() {
}
attr_ = __Private__::dattr;
#endif
buffer_ = nullptr;
id_ = 0;
if ((co_ & NoLock) != NoLock)
if ((co_ & NoLock) != NoLock) {
PICout::__mutex__().lock();
}
}
@@ -686,3 +714,11 @@ void PICout::setOutputDevices(PICout::OutputDevices d) {
bool PICout::isOutputDeviceActive(PICout::OutputDevice d) {
return devs[d];
}
PICout PICout::withExternalBuffer(PIString * buffer, int id, PIFlags<PICoutManipulators::PICoutControl> controls) {
PICout c(controls);
c.buffer_ = buffer;
c.id_ = id;
return c;
}