亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? logger.h

?? 遺傳算法的一個庫
?? H
字號:
#ifndef __GradSoft_Logger_h#define __GradSoft_Logger_h/* * part of GradSoft C++ ToolBox: Logger * (C) GradSoft, Kiev, Ukraine 2000, 2001 * http://www.gradsoft.com.ua * author: Ruslan Shevchenko <Ruslan@Shevchenko.Kiev.UA>, 2000 * $Id: Logger.h,v 1.20 2002/01/17 11:05:59 yad Exp $ */#include <GradSoft/LoggerPostConfig.h>#include <GradSoft/Threading.h>#include <cstddef>#include <string>#include <strstream>#include <fstream>#include <iostream>/** * **/namespace GradSoft { /**  * Types of log events:  *  Debug, Info, Warning, Error, Fatal  **/   enum LogEventType {  ///  Debug=0,  ///  Info=1,  ///  Warning=2,  ///  Error=3,  ///  Fatal=4   }; struct DebugLogEventStruct  {   static const LogEventType tag; }; struct InfoLogEventStruct  {   static const LogEventType tag; }; struct WarningLogEventStruct  {   static const LogEventType tag; }; struct ErrorLogEventStruct  {   static const LogEventType tag; }; struct FatalLogEventStruct {   static const LogEventType tag; }; template<class EventType, bool enabled> class LogStream;/** * lock guard for logger streams. **/template<class EventType, bool enabled>class LogStreamLocker{  Mutex* mutex_p_;public:  /**   * lock logStream to current thread   **/  LogStreamLocker(LogStream<EventType,enabled>& logStream)  {   if (enabled) {     mutex_p_ = logStream.getMutexPtr();     mutex_p_->lock();   }  }  /**   * unlock logStream   **/ ~LogStreamLocker()  {   if (enabled)  mutex_p_->unlock();  }};#ifdef HAVE_PARTIAL_SPECIALIZATIONtemplate<class EventType>class LogStreamLocker<EventType, false>{public:   LogStreamLocker(LogStream<EventType,false>&)  {}   ~LogStreamLocker()  {}};template<class EventType>class LogStreamLocker<EventType, true>{private:   Mutex* mutex_p_;public:   LogStreamLocker(LogStream<EventType,true>& logStream)    {    mutex_p_ = logStream.getMutexPtr();    mutex_p_->lock();   }   ~LogStreamLocker()   {    mutex_p_->unlock();   }};#endif#ifndef _NDEBUG# ifndef LOG_DEBUG_ENABLE/** Are we want to log debug output ? [true/false] * default: true if _NDEBUG is not defined, otherwise false **/#  define LOG_DEBUG_ENABLE false# endif # ifndef LOG_INFO_ENABLE/** Are we want to log info output ? [true/false] * default: true if _NDEBUG is not defined, otherwise false **/#  define LOG_INFO_ENABLE true# endif#else# ifndef LOG_DEBUG_ENABLE#  define LOG_DEBUG_ENABLE false# endif # ifndef LOG_INFO_ENABLE#  define LOG_INFO_ENABLE false# endif#endif#ifndef LOG_WARNING_ENABLE/** Are we want to log warning output ? [true/false] * default: true **/# define LOG_WARNING_ENABLE true#endif#ifndef LOG_ERROR_ENABLE/** Are we want to log error output ? [true/false] * default: true **/# define LOG_ERROR_ENABLE true#endif#ifndef LOG_FATAL_ENABLE/**  * Are we want to log fatal error output ? [true/false] *  default: true **/# define LOG_FATAL_ENABLE true#endif /** * stream for debug output **/typedef LogStream<DebugLogEventStruct, LOG_DEBUG_ENABLE> DebugLogStream;/** * stream for information output **/typedef LogStream<InfoLogEventStruct, LOG_INFO_ENABLE>   InfoLogStream;/** * stream for warning output **/typedef LogStream<WarningLogEventStruct, LOG_WARNING_ENABLE> WarningLogStream;/** * stream for errors output **/typedef LogStream<ErrorLogEventStruct, LOG_ERROR_ENABLE> ErrorLogStream;/** * stream for fatal errors output **/typedef LogStream<FatalLogEventStruct, LOG_FATAL_ENABLE> FatalLogStream;/// /**  * Main class for events log  **/ class Logger {   public:     /**      * Struct, which indicate input/output exception      **/     struct IOException      {       std::string message_;       IOException(const char* message)         :message_(message) {}       ///       const char* what() const { return message_.c_str(); }     };     ///     Logger();     ///     Logger(const char* fname, bool dup_to_stderr=false)                       throw (IOException);     ///     ~Logger();     ///     void setOutputFile(const char* fname) throw (IOException);     ///     void  setCallback(LogEventType evTag, void (*callback)(const char* msg));     /**      * set property:  dup output to standart error stream for all streams      **/     void  setDuppedToStderr(bool x);     /**      * set output to syslog: if true we log to syslog, if false - no.      * by default, output to syslog is enabled.      **/     void  setSyslogOutput(bool x)       { syslogEnabled_ = x; }               ///     void  put_event(LogEventType evTag,                      const char* value,                      bool dup_to_stderr = false);     ///     DebugLogStream&   debugs() { return *debugStream_mp_; }     ///     const DebugLogStream&   debugs() const { return *debugStream_mp_; }     ///     InfoLogStream&   infos() { return *infoStream_mp_; }     ///     const InfoLogStream&   infos() const { return *infoStream_mp_; }     ///     WarningLogStream&   warnings() { return *warningStream_mp_; }     ///     const WarningLogStream&   warnings() const { return *warningStream_mp_; }     ///     ErrorLogStream&   errors() { return *errorStream_mp_; }     ///     const ErrorLogStream&   errors() const { return *errorStream_mp_; }     ///     FatalLogStream&   fatals() { return *fatalStream_mp_; }     ///     const FatalLogStream&   fatals() const { return *fatalStream_mp_; }     ///     static const char* getStringEventType(LogEventType ev);    /**     * type for Debug LogStream lock guard.     **/    typedef LogStreamLocker<DebugLogEventStruct,LOG_DEBUG_ENABLE> DebugLocker;    /**     * type for Info LogStream lock guard.     **/    typedef LogStreamLocker<InfoLogEventStruct, LOG_INFO_ENABLE> InfoLocker;    /**     * type for Warnings LogStream lock guard.     **/    typedef LogStreamLocker<WarningLogEventStruct,LOG_WARNING_ENABLE>                                                                WarningLocker;    /**     * type for Errors LogStream lock guard.     **/    typedef LogStreamLocker<ErrorLogEventStruct,LOG_ERROR_ENABLE> ErrorLocker;    /**     * type for Fatals LogStream lock guard     **/    typedef LogStreamLocker<FatalLogEventStruct,LOG_FATAL_ENABLE>  FatalLocker;   private:     void (*callbacks_[5])(const char* msg);     char* fname_;     std::ofstream  ofs_;     bool   syslogEnabled_;     DebugLogStream*   debugStream_mp_;     InfoLogStream*   infoStream_mp_;     WarningLogStream*   warningStream_mp_;     ErrorLogStream*   errorStream_mp_;     FatalLogStream*   fatalStream_mp_;     Mutex   mutex_;   private:     void init(bool dup_to_stderr=false);       private:     Logger(const Logger&);     Logger& operator=(const Logger&); }; struct LogStreamBase; class LogStreamBuff: public std::streambuf {  private:    Logger&      logger_;    bool         duppedToStderr_;    LogEventType tag_;    bool         enabled_;    std::ostrstream   ostr_;          bool         touched_;          public:    LogStreamBuff(Logger& logger, LogEventType tag,                  bool enabled, bool duppedToStderr);    ~LogStreamBuff()    { sync(); }  protected:    friend LogStreamBase;    std::streamsize xsputn(const char* str, std::streamsize size);    int overflow(int c);    int sync();    bool  isDuppedToStderr() const  { return duppedToStderr_; }    void  setDuppedToStderr(bool x) { duppedToStderr_ = x; }  private:    LogStreamBuff();    LogStreamBuff(const LogStreamBuff&);    LogStreamBuff& operator=(const LogStreamBuff&); }; struct LogStreamBase {  LogStreamBuff buff_;  LogStreamBase(Logger& logger, LogEventType tag,                bool enabled, bool duppedToStderr)   :buff_(logger,tag,enabled,duppedToStderr) {}  void setDuppedToStderr(bool x) { buff_.setDuppedToStderr(x); }  bool isDuppedToStderr() const { return buff_.isDuppedToStderr(); } }; using std::ostream;  // bug in MSVC templates implementation /**  * Stream-like class for output to logger.  * Example of usage:  * \begin{verbatim}  *  logStream << "can't open file " << fname << endl;  * \end{verbatim}  * Stream have 2 compile-time attributes:  *\begin{itemize}  *  \item EventType - type of events, which this stream can receive.  *  \item enabled  - true, if we use output of this stream:  *\end{itemize}  *   operations with LogStream<evt,true> are really logging to stream,  *   all operations with LogStream<evt,false> do nothing.  **/ template<class EventType, bool enabled> class LogStream: private LogStreamBase, public ostream {  private:     Mutex mutex_;  public:          // public, as implementation effects:      //   bug in template friends in C++ compilers.     LogStream(Logger& logger, bool duppedToStderr)      :LogStreamBase(logger,EventType::tag,enabled, duppedToStderr),       ostream(&buff_),       mutex_()     {}  public:     ///     void  setDuppedToStderr(bool x)       { LogStreamBase::setDuppedToStderr(x); }     ///     bool  isDuppedToStderr() const       { return LogStreamBase::isDuppedToStderr(x); }     // public, as implementation effects:      //   bug in template friends in C++ compilers.     Mutex*  getMutexPtr() { return &mutex_; }  private:     LogStream();     LogStream(const LogStream&);     LogStream& operator=(const LogStream&); };#if defined(HAVE_PARTIAL_SPECIALIZATION) && !defined(__SUNPRO_CC)class DummyLogStreamBuff: public std::streambuf{public:  DummyLogStreamBuff() {}  int xsputn(char const *, int ) { return 0; };  int overflow(int c) { return c; }  int sync() { return 0; }};struct DummyLogStreamBase{ DummyLogStreamBuff buff_;};template<class EventType>class LogStream<EventType, false>: private DummyLogStreamBase,                                    public std::ostream{public:     LogStream(Logger& logger, bool duppedToStderr)      :std::ostream(&buff_) {}     void  setDuppedToStderr(bool x) {}     bool  isDuppedToStderr() const { return false; }     Mutex*  getMutexPtr() { return NULL; }};#endif inlineLogger::Logger(const char* fname, bool dup_to_stderr)                                       throw (Logger::IOException){  // must be defined here, becous it's depend from compile-time settings.  // note1: we have no code-bloat, becouse usially only one instance of logger  // is situated in program.  // note2: all method of logger with touch stream instances must be here.  setOutputFile(fname);    init(dup_to_stderr);}inlinevoid Logger::init(bool dup_to_stderr){  for(int i=0; i<5; ++i)  {    callbacks_[i]=NULL;  }   debugStream_mp_ = new DebugLogStream(*this, dup_to_stderr);  infoStream_mp_ = new InfoLogStream(*this, dup_to_stderr);  warningStream_mp_ = new WarningLogStream(*this, dup_to_stderr);  errorStream_mp_ = new ErrorLogStream(*this, dup_to_stderr);  fatalStream_mp_ = new FatalLogStream(*this, dup_to_stderr);  syslogEnabled_ = true;}inline Logger::Logger(){ init();}inline     Logger::~Logger(){  if (ofs_) ofs_.close();  delete debugStream_mp_;  delete infoStream_mp_;  delete warningStream_mp_;  delete errorStream_mp_;  delete fatalStream_mp_;}inlinevoid  Logger::setDuppedToStderr(bool x){ MutexLocker ml(mutex_); debugStream_mp_->setDuppedToStderr(x); infoStream_mp_->setDuppedToStderr(x); warningStream_mp_->setDuppedToStderr(x); errorStream_mp_->setDuppedToStderr(x); fatalStream_mp_->setDuppedToStderr(x);}}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女一区二区视频| 亚洲色图视频网| 成人精品gif动图一区| 一区二区免费视频| 国模少妇一区二区三区| 久久久另类综合| 国产精品一区免费视频| 亚洲美女屁股眼交3| 一本久道久久综合中文字幕 | 91久久人澡人人添人人爽欧美| 亚洲蜜桃精久久久久久久| 日韩一区二区中文字幕| 91久久精品一区二区二区| 狠狠色狠狠色综合日日91app| 一级中文字幕一区二区| 国产视频一区不卡| 欧美婷婷六月丁香综合色| 国产99久久久国产精品潘金网站| 亚洲午夜羞羞片| 亚洲欧美一区二区久久| 久久亚区不卡日本| 欧美综合欧美视频| 日本道精品一区二区三区 | 亚洲图片一区二区| 精品日韩一区二区三区| 国产一区二区精品久久91| 欧美色窝79yyyycom| 国产精品卡一卡二卡三| 久久精品国产亚洲高清剧情介绍| 69成人精品免费视频| 91污片在线观看| 蜜桃视频第一区免费观看| 欧美xxx久久| 51精品久久久久久久蜜臀| 91丨国产丨九色丨pron| 国产麻豆精品在线观看| 亚洲va在线va天堂| 亚洲人成影院在线观看| 中文一区一区三区高中清不卡| 欧美大片一区二区| 欧美日韩高清不卡| 一区二区在线观看不卡| 欧美一级高清片在线观看| 一本久道中文字幕精品亚洲嫩| 成人免费视频视频| 麻豆成人免费电影| 一区二区欧美视频| 亚洲黄色免费网站| 狠狠色狠狠色综合日日91app| 午夜视频在线观看一区二区| 亚洲日本乱码在线观看| 欧美国产一区视频在线观看| 日韩欧美www| www激情久久| 精品国产电影一区二区| 精品国产污污免费网站入口 | 麻豆精品精品国产自在97香蕉| 亚洲成av人影院在线观看网| 亚洲国产精品一区二区www| 亚洲成人激情av| 午夜伊人狠狠久久| 日韩国产一二三区| 日韩欧美国产一区二区在线播放 | 9191久久久久久久久久久| 91美女福利视频| 国产精品99久| av亚洲精华国产精华精华 | 日本中文字幕不卡| 免费成人性网站| 国内外精品视频| 国产成人在线免费| 9色porny自拍视频一区二区| 91亚洲精华国产精华精华液| 色综合久久久久综合体桃花网| 94色蜜桃网一区二区三区| 色丁香久综合在线久综合在线观看| 91视频精品在这里| 欧美色图片你懂的| 欧美性videosxxxxx| 91精品啪在线观看国产60岁| 91精品国产一区二区| 亚洲精品一区二区三区在线观看| 色欧美日韩亚洲| 亚洲成人免费观看| 日本亚洲天堂网| 久久99在线观看| 波多野结衣亚洲一区| 91国在线观看| 日韩欧美激情在线| 久久久久久久久久电影| 中文字幕欧美国产| 亚洲成国产人片在线观看| 久久精品久久久精品美女| a级高清视频欧美日韩| 91色在线porny| 日韩精品一区二区三区视频在线观看| 精品国产伦一区二区三区观看体验| 日本一区二区三区四区| 国产精品传媒入口麻豆| 99久久er热在这里只有精品15 | 欧美亚洲国产怡红院影院| 日本韩国一区二区三区视频| 精品少妇一区二区三区免费观看 | 91亚洲永久精品| 欧美日韩在线精品一区二区三区激情| 91精品国产色综合久久不卡蜜臀 | 一本色道久久加勒比精品 | 欧美激情综合五月色丁香小说| 一区二区三区在线视频免费观看| 久久99国内精品| 在线观看视频一区| 久久久久久99精品| 三级影片在线观看欧美日韩一区二区| 国产精品一卡二| 91精品国产91久久综合桃花| 日本久久电影网| 麻豆视频观看网址久久| 99在线视频精品| 日韩欧美在线网站| 97精品国产露脸对白| 夜夜爽夜夜爽精品视频| 成人精品在线视频观看| 日韩免费一区二区| 欧美精品日韩一区| 国产精品成人免费在线| 国产综合一区二区| 91精品国产91久久综合桃花| 免费观看一级欧美片| 国产.欧美.日韩| 欧美mv和日韩mv国产网站| 亚洲成人免费在线| 在线视频观看一区| 国产精品不卡在线观看| 精品一区二区在线免费观看| 欧美日韩国产高清一区二区三区| 国产精品传媒入口麻豆| 国产成人免费av在线| 久久嫩草精品久久久精品| 欧美aaa在线| 91麻豆精品国产91久久久更新时间 | 久久精品国产99国产精品| 成人网页在线观看| 欧美日韩dvd在线观看| 一区二区三区欧美日韩| www.欧美精品一二区| 国产精品久久夜| 国产精品一区二区在线看| 精品久久久三级丝袜| 日韩黄色片在线观看| 在线视频欧美精品| 国产亚洲精品精华液| 精品一区二区三区久久| 日韩欧美在线影院| 久久99久久久欧美国产| 日韩亚洲电影在线| 精品夜夜嗨av一区二区三区| 欧美一卡二卡三卡四卡| 美女精品一区二区| 国产亚洲精久久久久久| 99精品黄色片免费大全| 亚洲永久免费视频| 日韩欧美在线综合网| 成人一区二区三区中文字幕| 亚洲色图欧美在线| 91精品国产欧美一区二区| 国产中文字幕精品| 国产一区二区三区精品视频| 麻豆精品视频在线观看免费| 欧美大白屁股肥臀xxxxxx| 国产又黄又大久久| 综合av第一页| 欧美精品亚洲一区二区在线播放| 激情综合一区二区三区| 中文字幕一区二区三区av| 欧美精品少妇一区二区三区| 国产成人在线观看| 亚洲成人免费在线| 国产欧美一区视频| 7777精品伊人久久久大香线蕉的 | 丝瓜av网站精品一区二区| 久久午夜免费电影| 91浏览器在线视频| 精品一二线国产| 尤物av一区二区| 久久久高清一区二区三区| 欧美最新大片在线看| 激情综合亚洲精品| 亚洲一卡二卡三卡四卡五卡| www国产精品av| 欧美日韩一区久久| www.日本不卡| 国产一区二区三区在线观看免费视频| 亚洲欧美激情视频在线观看一区二区三区| 一道本成人在线| 欧美精选午夜久久久乱码6080| 国内偷窥港台综合视频在线播放| 欧美一级久久久| 国产中文字幕一区| 欧美日本国产一区| 午夜精品成人在线|