NdbOut.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_global.h>
  14. #include <NdbOut.hpp>
  15. #include <OutputStream.hpp>
  16. static FileOutputStream ndbouts_fileoutputstream(stdout);
  17. NdbOut ndbout(ndbouts_fileoutputstream);
  18. static const char * fms[] = {
  19.   "%d", "0x%02x",      // Int8
  20.   "%u", "0x%02x",      // Uint8
  21.   "%d", "0x%04x",      // Int16
  22.   "%u", "0x%04x",      // Uint16
  23.   "%d", "0x%08x",      // Int32
  24.   "%u", "0x%08x",      // Uint32
  25.   "%lld", "0x%016llx", // Int64
  26.   "%llu", "0x%016llx"  // Uint64
  27.   "%llu", "0x%016llx"  // UintPtr
  28. };
  29. NdbOut& 
  30. NdbOut::operator<<(Int8 v)   { m_out->print(fms[0+isHex],(int)v); return *this;}
  31. NdbOut& 
  32. NdbOut::operator<<(Uint8 v)  { m_out->print(fms[2+isHex],(int)v); return *this;}
  33. NdbOut& 
  34. NdbOut::operator<<(Int16 v)  { m_out->print(fms[4+isHex],(int)v); return *this;}
  35. NdbOut& 
  36. NdbOut::operator<<(Uint16 v) { m_out->print(fms[6+isHex],(int)v); return *this;}
  37. NdbOut& 
  38. NdbOut::operator<<(Int32 v)  { m_out->print(fms[8+isHex], v); return *this;}
  39. NdbOut& 
  40. NdbOut::operator<<(Uint32 v) { m_out->print(fms[10+isHex], v); return *this;}
  41. NdbOut& 
  42. NdbOut::operator<<(Int64 v)  { m_out->print(fms[12+isHex], v); return *this;}
  43. NdbOut& 
  44. NdbOut::operator<<(Uint64 v) { m_out->print(fms[14+isHex], v); return *this;}
  45. NdbOut& 
  46. NdbOut::operator<<(unsigned long int v) { return *this << (Uint64) v; }
  47. NdbOut& 
  48. NdbOut::operator<<(const char* val){ m_out->print("%s", val ? val : "(null)"); return * this; }
  49. NdbOut& 
  50. NdbOut::operator<<(const void* val){ m_out->print("%p", val); return * this; }
  51. NdbOut&
  52. NdbOut::operator<<(BaseString &val){ return *this << val.c_str(); }
  53. NdbOut& 
  54. NdbOut::operator<<(float val){ m_out->print("%f", (double)val); return * this;}
  55. NdbOut& 
  56. NdbOut::operator<<(double val){ m_out->print("%f", val); return * this; }
  57. NdbOut& NdbOut::endline()
  58. {
  59.   isHex = 0; // Reset hex to normal, if user forgot this
  60.   m_out->println("");
  61.   m_out->flush();
  62.   return *this;
  63. }
  64. NdbOut& NdbOut::flushline()
  65. {
  66.   m_out->flush();
  67.   return *this;
  68. }
  69. NdbOut& NdbOut::setHexFormat(int _format)
  70. {
  71.   isHex = (_format == 0 ? 0 : 1);
  72.   return *this;
  73. }
  74. NdbOut::NdbOut(OutputStream & out) 
  75.   : m_out(& out)
  76. {
  77.   isHex = 0;
  78. }
  79. NdbOut::~NdbOut()
  80. {
  81. }
  82. void
  83. NdbOut::print(const char * fmt, ...){
  84.   va_list ap;
  85.   char buf[1000];
  86.   
  87.   va_start(ap, fmt);
  88.   if (fmt != 0)
  89.     BaseString::vsnprintf(buf, sizeof(buf)-1, fmt, ap);
  90.   ndbout << buf;
  91.   va_end(ap);
  92. }
  93. void
  94. NdbOut::println(const char * fmt, ...){
  95.   va_list ap;
  96.   char buf[1000];
  97.   
  98.   va_start(ap, fmt);
  99.   if (fmt != 0)
  100.     BaseString::vsnprintf(buf, sizeof(buf)-1, fmt, ap);
  101.   ndbout << buf << endl;
  102.   va_end(ap);
  103. }
  104. extern "C"
  105. void 
  106. ndbout_c(const char * fmt, ...){
  107.   va_list ap;
  108.   char buf[1000];
  109.   
  110.   va_start(ap, fmt);
  111.   if (fmt != 0)
  112.     BaseString::vsnprintf(buf, sizeof(buf)-1, fmt, ap);
  113.   ndbout << buf << endl;
  114.   va_end(ap);
  115. }
  116. FilteredNdbOut::FilteredNdbOut(OutputStream & out, 
  117.        int threshold, int level)
  118.   : NdbOut(out) {
  119.   m_level = level;
  120.   m_threshold = threshold;
  121.   m_org = &out;
  122.   m_null = new NullOutputStream();
  123.   setLevel(level);
  124. }
  125. FilteredNdbOut::~FilteredNdbOut(){
  126.   delete m_null;
  127. }
  128. void
  129. FilteredNdbOut::setLevel(int i){
  130.   m_level = i;
  131.   if(m_level >= m_threshold){
  132.     m_out = m_org;
  133.   } else {
  134.     m_out = m_null;
  135.   }
  136. }
  137. void
  138. FilteredNdbOut::setThreshold(int i){
  139.   m_threshold = i;
  140.   setLevel(m_level);
  141. }
  142. int
  143. FilteredNdbOut::getLevel() const {
  144.   return m_level;
  145. }
  146. int
  147. FilteredNdbOut::getThreshold() const {
  148.   return m_threshold;
  149. }