📄 o_stream.cc.svn-base
字号:
/*****************************************************************************//* Betriebssysteme *//*---------------------------------------------------------------------------*//* *//* O _ S T R E A M *//* *//*---------------------------------------------------------------------------*//* Die Klasse O_Stream enthaelt die Definition des << Operators fuer die *//* wichtigsten der vordefinierten Datentypen und realisiert somit die *//* bekannte Ausgabefunktion der C++ IO_Stream Bibliothek. Zur Zeit wird die *//* Darstellung von Zeichen, Zeichenketten und ganzen Zahlen unterstuetzt. *//* Ein weiterer << Operator erlaubt die Verwendung von Manipulatoren. *//* *//* Neben der Klasse O_Stream sind hier auch die Manipulatoren hex, dec, oct *//* und bin fuer die Wahl der Basis bei der Zahlendarstellung, sowie endl *//* fuer den Zeilenumbruch definiert. *//*****************************************************************************/#include "object/o_stream.h"////////O_Stream::O_Stream() : Stringbuffer(){ m_base = 10;}O_Stream::O_Stream(O_Stream &ostr) : Stringbuffer(ostr){ m_base = ostr.m_base;}O_Stream::~O_Stream(){}O_Stream& O_Stream::operator<< (unsigned char c){ put(c); return *this;}O_Stream& O_Stream::operator<< (char c){ put(c); return *this;}O_Stream& O_Stream::operator<< (unsigned short number){ return (*this) << (unsigned long)number;}O_Stream& O_Stream::operator<< (short number){ return (*this) << (long)number;}O_Stream& O_Stream::operator<< (unsigned int number){ return (*this) << (unsigned long)number;}O_Stream& O_Stream::operator<< (int number){ return (*this) << (long)number;}O_Stream& O_Stream::operator<< (unsigned long number){ if(number == 0) { put('0'); return (*this); } char value[sizeof(unsigned long)*8]; int len = 0; for(; len < (int)sizeof(unsigned long)*8 && number > 0; number /= m_base, len++) value[len] = itoa(number % m_base); for(len--; len >= 0; len--) put(value[len]); return (*this);}O_Stream& O_Stream::operator<< (long number){ if(number < 0 && m_base == 10) { put('-'); return (*this) << (unsigned long)(number >= 0 ? number : -number); } else return (*this) << (unsigned long) number;}O_Stream& O_Stream::operator<< (void* pointer){ // char *n_ptr = (char *)&pointer; // unsigned int base_backup = m_base; // m_base = 16; // for(int i = sizeof(void*) - 1; i >= 0; i--) // (*this) << (unsigned int)n_ptr[i]; // m_base = base_backup; unsigned int *n_ptr = (unsigned int *)&pointer; unsigned int base_backup = m_base; m_base = 16; (*this) << *n_ptr; m_base = base_backup; return (*this);}O_Stream& O_Stream::operator<< (char* text){ while(*text) put(*text++); return (*this);}O_Stream& O_Stream::operator<< (O_Stream& (*fkt) (O_Stream&)){ return fkt(*this);}void O_Stream::setBase(unsigned int base){ if(base > 1) m_base = base;}char O_Stream::itoa(unsigned int value) const{ char result = (value & 0x0f) + '0'; if (result > '9') result = result + ('a' - '0' - 10); return result;}unsigned long O_Stream::abs(long value){ return (value >= 0) ? value : -value;}const unsigned char O_Stream::special_char::line_terminator = '\n';O_Stream& endl (O_Stream& os){ os << O_Stream::special_char::line_terminator; return os;}O_Stream& bin (O_Stream& os){ os.setBase(2); return os;}O_Stream& oct (O_Stream& os){ os.setBase(8); return os;}O_Stream& dec (O_Stream& os){ os.setBase(10); return os;}O_Stream& hex (O_Stream& os){ os.setBase(16); return os;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -