Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
logger.h
00001 /*********************************************************************** 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright 2008-2009 Marius Muja (mariusm@cs.ubc.ca). All rights reserved. 00005 * Copyright 2008-2009 David G. Lowe (lowe@cs.ubc.ca). All rights reserved. 00006 * 00007 * THE BSD LICENSE 00008 * 00009 * Redistribution and use in source and binary forms, with or without 00010 * modification, are permitted provided that the following conditions 00011 * are met: 00012 * 00013 * 1. Redistributions of source code must retain the above copyright 00014 * notice, this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright 00016 * notice, this list of conditions and the following disclaimer in the 00017 * documentation and/or other materials provided with the distribution. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 *************************************************************************/ 00030 00031 #ifndef OPENCV_FLANN_LOGGER_H 00032 #define OPENCV_FLANN_LOGGER_H 00033 00034 #include <stdio.h> 00035 #include <stdarg.h> 00036 00037 #include "defines.h" 00038 00039 00040 namespace cvflann 00041 { 00042 00043 class Logger 00044 { 00045 Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {} 00046 00047 ~Logger() 00048 { 00049 if ((stream!=NULL)&&(stream!=stdout)) { 00050 fclose(stream); 00051 } 00052 } 00053 00054 static Logger& instance() 00055 { 00056 static Logger logger; 00057 return logger; 00058 } 00059 00060 void _setDestination(const char* name) 00061 { 00062 if (name==NULL) { 00063 stream = stdout; 00064 } 00065 else { 00066 stream = fopen(name,"w"); 00067 if (stream == NULL) { 00068 stream = stdout; 00069 } 00070 } 00071 } 00072 00073 int _log(int level, const char* fmt, va_list arglist) 00074 { 00075 if (level > logLevel ) return -1; 00076 int ret = vfprintf(stream, fmt, arglist); 00077 return ret; 00078 } 00079 00080 public: 00081 /** 00082 * Sets the logging level. All messages with lower priority will be ignored. 00083 * @param level Logging level 00084 */ 00085 static void setLevel(int level) { instance().logLevel = level; } 00086 00087 /** 00088 * Sets the logging destination 00089 * @param name Filename or NULL for console 00090 */ 00091 static void setDestination(const char* name) { instance()._setDestination(name); } 00092 00093 /** 00094 * Print log message 00095 * @param level Log level 00096 * @param fmt Message format 00097 * @return 00098 */ 00099 static int log(int level, const char* fmt, ...) 00100 { 00101 va_list arglist; 00102 va_start(arglist, fmt); 00103 int ret = instance()._log(level,fmt,arglist); 00104 va_end(arglist); 00105 return ret; 00106 } 00107 00108 #define LOG_METHOD(NAME,LEVEL) \ 00109 static int NAME(const char* fmt, ...) \ 00110 { \ 00111 va_list ap; \ 00112 va_start(ap, fmt); \ 00113 int ret = instance()._log(LEVEL, fmt, ap); \ 00114 va_end(ap); \ 00115 return ret; \ 00116 } 00117 00118 LOG_METHOD(fatal, FLANN_LOG_FATAL) 00119 LOG_METHOD(error, FLANN_LOG_ERROR) 00120 LOG_METHOD(warn, FLANN_LOG_WARN) 00121 LOG_METHOD(info, FLANN_LOG_INFO) 00122 00123 private: 00124 FILE* stream; 00125 int logLevel; 00126 }; 00127 00128 } 00129 00130 #endif //OPENCV_FLANN_LOGGER_H 00131
Generated on Tue Jul 12 2022 16:42:38 by
1.7.2