git-svn-id: svn://db.shs.com.ru/pip@621 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2018-06-28 11:24:24 +00:00
parent afee38f094
commit 5ce2499968
2 changed files with 68 additions and 34 deletions

View File

@@ -54,7 +54,7 @@ using namespace PICoutManipulators;
PIMutex & PICout::__mutex__() {static PIMutex ret; return ret;}
PIString & PICout::__string__() {static PIString ret; return ret;}
bool PICout::buffer_ = false;
PICout::OutputDevices PICout::devs = PICout::StdOut;
PRIVATE_DEFINITION_START(PICout)
PIStack<PICoutControls> cos_;
@@ -105,11 +105,11 @@ PICout PICout::operator <<(const PICoutAction v) {
#endif
switch (v) {
case PICoutManipulators::Flush:
if (!PICout::buffer_)
if (isOutputDeviceActive(StdOut))
std::cout << std::flush;
break;
case PICoutManipulators::Backspace:
if (!PICout::buffer_) {
if (isOutputDeviceActive(StdOut)) {
#ifdef WINDOWS
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
coord = sbi.dwCursorPosition;
@@ -123,7 +123,7 @@ PICout PICout::operator <<(const PICoutAction v) {
}
break;
case PICoutManipulators::ShowCursor:
if (!PICout::buffer_) {
if (isOutputDeviceActive(StdOut)) {
#ifdef WINDOWS
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
curinfo.bVisible = true;
@@ -134,7 +134,7 @@ PICout PICout::operator <<(const PICoutAction v) {
}
break;
case PICoutManipulators::HideCursor:
if (!PICout::buffer_) {
if (isOutputDeviceActive(StdOut)) {
#ifdef WINDOWS
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
curinfo.bVisible = false;
@@ -145,7 +145,7 @@ PICout PICout::operator <<(const PICoutAction v) {
}
break;
case PICoutManipulators::ClearLine:
if (!PICout::buffer_) {
if (isOutputDeviceActive(StdOut)) {
#ifdef WINDOWS
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
coord = sbi.dwCursorPosition;
@@ -166,7 +166,7 @@ PICout PICout::operator <<(const PICoutAction v) {
}
break;
case PICoutManipulators::ClearScreen:
if (!PICout::buffer_) {
if (isOutputDeviceActive(StdOut)) {
#ifdef WINDOWS
/// TODO : wondows ClearScreen !!!
/*GetConsoleCursorInfo(__Private__::hOut, &curinfo);
@@ -189,15 +189,21 @@ PICout PICout::operator <<(const PICoutAction v) {
}
#define PICOUTTOTARGET(v) {if (PICout::buffer_) PICout::__string__() << (v); else std::cout << (v);}
#define PICOUTTOTARGETS(v) {if (PICout::buffer_) PICout::__string__() << (v); else std::cout << (v).dataConsole();}
//#define PICOUTTOTARGETS(v) {if (PICout::buffer_) PICout::__string__() << (v); else printf("%s", (v).dataConsole());}
#define PICOUTTOTARGET(v) { \
if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v);\
if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\
}
#define PICOUTTOTARGETS(v) { \
if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v).dataConsole();\
if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\
}
//#define PICOUTTOTARGETS(v) {if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v); else printf("%s", (v).dataConsole());}
#define PINUMERICCOUT if (cnb_ == 10) PICOUTTOTARGET(v) else PICOUTTOTARGETS(PIString::fromNumber(v, cnb_))
PICout PICout::operator <<(const char * v) {if (v[0] == '\0') return *this; space(); quote(); PICOUTTOTARGET(v) quote(); return *this;}
//PICout PICout::operator <<(const std::string & v) {space(); quote(); if (PICout::buffer_) PICout::__string__() << StdString2PIString(v); else std::cout << (v); quote(); return *this;}
//PICout PICout::operator <<(const std::string & v) {space(); quote(); if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << StdString2PIString(v); else std::cout << (v); quote(); return *this;}
PICout PICout::operator <<(const bool v) {space(); if (v) PICOUTTOTARGET("true") else PICOUTTOTARGET("false") return *this;}
@@ -244,30 +250,30 @@ PICout PICout::operator <<(const PIObject * v) {
PICout PICout::operator <<(const PICoutSpecialChar v) {
switch (v) {
case Null:
if (PICout::buffer_) PICout::__string__() << PIChar(0);
else std::cout << char(0);
if (isOutputDeviceActive(StdOut)) std::cout << char(0);
if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(0);
break;
case NewLine:
if (PICout::buffer_) PICout::__string__() << "\n";
else std::cout << '\n';
if (isOutputDeviceActive(StdOut)) std::cout << '\n';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\n";
fo_ = true;
break;
case Tab:
if (PICout::buffer_) PICout::__string__() << "\t";
else std::cout << '\t';
if (isOutputDeviceActive(StdOut)) std::cout << '\t';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\t";
break;
case Esc:
#ifdef CC_VC
if (PICout::buffer_) PICout::__string__() << PIChar(27);
else std::cout << char(27);
if (isOutputDeviceActive(StdOut)) std::cout << char(27);
if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(27);
#else
if (PICout::buffer_) PICout::__string__() << "\e";
else std::cout << '\e';
if (isOutputDeviceActive(StdOut)) std::cout << '\e';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\e";
#endif
break;
case Quote:
if (PICout::buffer_) PICout::__string__() << "\"";
else std::cout << '"';
if (isOutputDeviceActive(StdOut)) std::cout << '"';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\"";
break;
};
return *this;
@@ -294,8 +300,8 @@ PICout & PICout::restoreControl() {
PICout & PICout::space() {
if (!fo_ && co_[AddSpaces]) {
if (PICout::buffer_) PICout::__string__() << " ";
else std::cout << ' ';
if (isOutputDeviceActive(StdOut)) std::cout << ' ';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << " ";
}
fo_ = false;
return *this;
@@ -303,8 +309,8 @@ PICout & PICout::space() {
PICout & PICout::quote() {
if (co_[AddQuotes]) {
if (PICout::buffer_) PICout::__string__() << "\"";
else std::cout << '"';
if (isOutputDeviceActive(StdOut)) std::cout << '"';
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\"";
}
fo_ = false;
return *this;
@@ -312,8 +318,8 @@ PICout & PICout::quote() {
PICout & PICout::newLine() {
if (co_[AddNewLine]) {
if (PICout::buffer_) PICout::__string__() << "\n";
else std::cout << std::endl;
if (isOutputDeviceActive(StdOut)) std::cout << std::endl;
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\n";
}
fo_ = false;
return *this;
@@ -321,7 +327,7 @@ PICout & PICout::newLine() {
void PICout::applyFormat(PICoutFormat f) {
if (PICout::buffer_) return;
if (!isOutputDeviceActive(StdOut)) return;
fc_ = true;
#ifdef WINDOWS
static int mask_fore = ~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
@@ -383,15 +389,15 @@ void PICout::applyFormat(PICoutFormat f) {
bool PICout::setBufferActive(bool on, bool clear) {
PIMutexLocker ml(PICout::__mutex__());
bool ret = PICout::buffer_;
bool ret = isBufferActive();
if (clear) PICout::__string__().clear();
PICout::buffer_ = on;
setOutputDevice(Buffer, on);
return ret;
}
bool PICout::isBufferActive() {
return PICout::buffer_;
return isOutputDeviceActive(Buffer);
}
@@ -407,3 +413,18 @@ void PICout::clearBuffer() {
PIMutexLocker ml(PICout::__mutex__());
PICout::__string__().clear();
}
bool PICout::setOutputDevice(PICout::OutputDevice d, bool on) {
devs.setFlag(d, on);
}
void PICout::setOutputDevices(PICout::OutputDevices d) {
devs = d;
}
bool PICout::isOutputDeviceActive(PICout::OutputDevice d) {
return devs[d];
}