git-svn-id: svn://db.shs.com.ru/pip@621 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -54,7 +54,7 @@ using namespace PICoutManipulators;
|
|||||||
PIMutex & PICout::__mutex__() {static PIMutex ret; return ret;}
|
PIMutex & PICout::__mutex__() {static PIMutex ret; return ret;}
|
||||||
PIString & PICout::__string__() {static PIString 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)
|
PRIVATE_DEFINITION_START(PICout)
|
||||||
PIStack<PICoutControls> cos_;
|
PIStack<PICoutControls> cos_;
|
||||||
@@ -105,11 +105,11 @@ PICout PICout::operator <<(const PICoutAction v) {
|
|||||||
#endif
|
#endif
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case PICoutManipulators::Flush:
|
case PICoutManipulators::Flush:
|
||||||
if (!PICout::buffer_)
|
if (isOutputDeviceActive(StdOut))
|
||||||
std::cout << std::flush;
|
std::cout << std::flush;
|
||||||
break;
|
break;
|
||||||
case PICoutManipulators::Backspace:
|
case PICoutManipulators::Backspace:
|
||||||
if (!PICout::buffer_) {
|
if (isOutputDeviceActive(StdOut)) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
|
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
|
||||||
coord = sbi.dwCursorPosition;
|
coord = sbi.dwCursorPosition;
|
||||||
@@ -123,7 +123,7 @@ PICout PICout::operator <<(const PICoutAction v) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PICoutManipulators::ShowCursor:
|
case PICoutManipulators::ShowCursor:
|
||||||
if (!PICout::buffer_) {
|
if (isOutputDeviceActive(StdOut)) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
|
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
|
||||||
curinfo.bVisible = true;
|
curinfo.bVisible = true;
|
||||||
@@ -134,7 +134,7 @@ PICout PICout::operator <<(const PICoutAction v) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PICoutManipulators::HideCursor:
|
case PICoutManipulators::HideCursor:
|
||||||
if (!PICout::buffer_) {
|
if (isOutputDeviceActive(StdOut)) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
|
GetConsoleCursorInfo(__Private__::hOut, &curinfo);
|
||||||
curinfo.bVisible = false;
|
curinfo.bVisible = false;
|
||||||
@@ -145,7 +145,7 @@ PICout PICout::operator <<(const PICoutAction v) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PICoutManipulators::ClearLine:
|
case PICoutManipulators::ClearLine:
|
||||||
if (!PICout::buffer_) {
|
if (isOutputDeviceActive(StdOut)) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
|
GetConsoleScreenBufferInfo(__Private__::hOut, &sbi);
|
||||||
coord = sbi.dwCursorPosition;
|
coord = sbi.dwCursorPosition;
|
||||||
@@ -166,7 +166,7 @@ PICout PICout::operator <<(const PICoutAction v) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PICoutManipulators::ClearScreen:
|
case PICoutManipulators::ClearScreen:
|
||||||
if (!PICout::buffer_) {
|
if (isOutputDeviceActive(StdOut)) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
/// TODO : wondows ClearScreen !!!
|
/// TODO : wondows ClearScreen !!!
|
||||||
/*GetConsoleCursorInfo(__Private__::hOut, &curinfo);
|
/*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 PICOUTTOTARGET(v) { \
|
||||||
#define PICOUTTOTARGETS(v) {if (PICout::buffer_) PICout::__string__() << (v); else std::cout << (v).dataConsole();}
|
if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v);\
|
||||||
//#define PICOUTTOTARGETS(v) {if (PICout::buffer_) PICout::__string__() << (v); else printf("%s", (v).dataConsole());}
|
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_))
|
#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 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;}
|
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) {
|
PICout PICout::operator <<(const PICoutSpecialChar v) {
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case Null:
|
case Null:
|
||||||
if (PICout::buffer_) PICout::__string__() << PIChar(0);
|
if (isOutputDeviceActive(StdOut)) std::cout << char(0);
|
||||||
else std::cout << char(0);
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(0);
|
||||||
break;
|
break;
|
||||||
case NewLine:
|
case NewLine:
|
||||||
if (PICout::buffer_) PICout::__string__() << "\n";
|
if (isOutputDeviceActive(StdOut)) std::cout << '\n';
|
||||||
else std::cout << '\n';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\n";
|
||||||
fo_ = true;
|
fo_ = true;
|
||||||
break;
|
break;
|
||||||
case Tab:
|
case Tab:
|
||||||
if (PICout::buffer_) PICout::__string__() << "\t";
|
if (isOutputDeviceActive(StdOut)) std::cout << '\t';
|
||||||
else std::cout << '\t';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\t";
|
||||||
break;
|
break;
|
||||||
case Esc:
|
case Esc:
|
||||||
#ifdef CC_VC
|
#ifdef CC_VC
|
||||||
if (PICout::buffer_) PICout::__string__() << PIChar(27);
|
if (isOutputDeviceActive(StdOut)) std::cout << char(27);
|
||||||
else std::cout << char(27);
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(27);
|
||||||
#else
|
#else
|
||||||
if (PICout::buffer_) PICout::__string__() << "\e";
|
if (isOutputDeviceActive(StdOut)) std::cout << '\e';
|
||||||
else std::cout << '\e';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\e";
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case Quote:
|
case Quote:
|
||||||
if (PICout::buffer_) PICout::__string__() << "\"";
|
if (isOutputDeviceActive(StdOut)) std::cout << '"';
|
||||||
else std::cout << '"';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\"";
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
return *this;
|
return *this;
|
||||||
@@ -294,8 +300,8 @@ PICout & PICout::restoreControl() {
|
|||||||
|
|
||||||
PICout & PICout::space() {
|
PICout & PICout::space() {
|
||||||
if (!fo_ && co_[AddSpaces]) {
|
if (!fo_ && co_[AddSpaces]) {
|
||||||
if (PICout::buffer_) PICout::__string__() << " ";
|
if (isOutputDeviceActive(StdOut)) std::cout << ' ';
|
||||||
else std::cout << ' ';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << " ";
|
||||||
}
|
}
|
||||||
fo_ = false;
|
fo_ = false;
|
||||||
return *this;
|
return *this;
|
||||||
@@ -303,8 +309,8 @@ PICout & PICout::space() {
|
|||||||
|
|
||||||
PICout & PICout::quote() {
|
PICout & PICout::quote() {
|
||||||
if (co_[AddQuotes]) {
|
if (co_[AddQuotes]) {
|
||||||
if (PICout::buffer_) PICout::__string__() << "\"";
|
if (isOutputDeviceActive(StdOut)) std::cout << '"';
|
||||||
else std::cout << '"';
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\"";
|
||||||
}
|
}
|
||||||
fo_ = false;
|
fo_ = false;
|
||||||
return *this;
|
return *this;
|
||||||
@@ -312,8 +318,8 @@ PICout & PICout::quote() {
|
|||||||
|
|
||||||
PICout & PICout::newLine() {
|
PICout & PICout::newLine() {
|
||||||
if (co_[AddNewLine]) {
|
if (co_[AddNewLine]) {
|
||||||
if (PICout::buffer_) PICout::__string__() << "\n";
|
if (isOutputDeviceActive(StdOut)) std::cout << std::endl;
|
||||||
else std::cout << std::endl;
|
if (isOutputDeviceActive(Buffer)) PICout::__string__() << "\n";
|
||||||
}
|
}
|
||||||
fo_ = false;
|
fo_ = false;
|
||||||
return *this;
|
return *this;
|
||||||
@@ -321,7 +327,7 @@ PICout & PICout::newLine() {
|
|||||||
|
|
||||||
|
|
||||||
void PICout::applyFormat(PICoutFormat f) {
|
void PICout::applyFormat(PICoutFormat f) {
|
||||||
if (PICout::buffer_) return;
|
if (!isOutputDeviceActive(StdOut)) return;
|
||||||
fc_ = true;
|
fc_ = true;
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
static int mask_fore = ~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
|
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) {
|
bool PICout::setBufferActive(bool on, bool clear) {
|
||||||
PIMutexLocker ml(PICout::__mutex__());
|
PIMutexLocker ml(PICout::__mutex__());
|
||||||
bool ret = PICout::buffer_;
|
bool ret = isBufferActive();
|
||||||
if (clear) PICout::__string__().clear();
|
if (clear) PICout::__string__().clear();
|
||||||
PICout::buffer_ = on;
|
setOutputDevice(Buffer, on);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PICout::isBufferActive() {
|
bool PICout::isBufferActive() {
|
||||||
return PICout::buffer_;
|
return isOutputDeviceActive(Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -407,3 +413,18 @@ void PICout::clearBuffer() {
|
|||||||
PIMutexLocker ml(PICout::__mutex__());
|
PIMutexLocker ml(PICout::__mutex__());
|
||||||
PICout::__string__().clear();
|
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];
|
||||||
|
}
|
||||||
|
|||||||
@@ -116,6 +116,15 @@ public:
|
|||||||
|
|
||||||
~PICout();
|
~PICout();
|
||||||
|
|
||||||
|
//! \brief Enum contains output devices of PICout
|
||||||
|
enum OutputDevice {
|
||||||
|
NoDevices /** PICout is disabled */ = 0x0,
|
||||||
|
StdOut /** Standard console output */ = 0x1,
|
||||||
|
Buffer /** Internal buffer */ = 0x2,
|
||||||
|
AllDevices /** All */ = 0xFFFF,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef PIFlags<OutputDevice> OutputDevices;
|
||||||
|
|
||||||
//! Output operator for strings with <tt>"const char * "</tt> type
|
//! Output operator for strings with <tt>"const char * "</tt> type
|
||||||
PICout operator <<(const char * v);
|
PICout operator <<(const char * v);
|
||||||
@@ -249,13 +258,17 @@ public:
|
|||||||
static PIString buffer(bool clear = false);
|
static PIString buffer(bool clear = false);
|
||||||
static void clearBuffer();
|
static void clearBuffer();
|
||||||
|
|
||||||
|
static bool setOutputDevice(OutputDevice d, bool on = true);
|
||||||
|
static void setOutputDevices(OutputDevices d);
|
||||||
|
static bool isOutputDeviceActive(OutputDevice d);
|
||||||
|
|
||||||
static PIMutex & __mutex__();
|
static PIMutex & __mutex__();
|
||||||
static PIString & __string__();
|
static PIString & __string__();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void applyFormat(PICoutManipulators::PICoutFormat f);
|
void applyFormat(PICoutManipulators::PICoutFormat f);
|
||||||
|
|
||||||
static bool buffer_;
|
static OutputDevices devs;
|
||||||
PRIVATE_DECLARATION
|
PRIVATE_DECLARATION
|
||||||
bool fo_, cc_, fc_;
|
bool fo_, cc_, fc_;
|
||||||
int cnb_, attr_;
|
int cnb_, attr_;
|
||||||
|
|||||||
Reference in New Issue
Block a user