OpenNI 1.0.0

XnLog.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002 *                                                                            *
00003 *  OpenNI 1.0 Alpha                                                          *
00004 *  Copyright (C) 2010 PrimeSense Ltd.                                        *
00005 *                                                                            *
00006 *  This file is part of OpenNI.                                              *
00007 *                                                                            *
00008 *  OpenNI is free software: you can redistribute it and/or modify            *
00009 *  it under the terms of the GNU Lesser General Public License as published  *
00010 *  by the Free Software Foundation, either version 3 of the License, or      *
00011 *  (at your option) any later version.                                       *
00012 *                                                                            *
00013 *  OpenNI is distributed in the hope that it will be useful,                 *
00014 *  but WITHOUT ANY WARRANTY; without even the implied warranty of            *
00015 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
00016 *  GNU Lesser General Public License for more details.                       *
00017 *                                                                            *
00018 *  You should have received a copy of the GNU Lesser General Public License  *
00019 *  along with OpenNI. If not, see <http://www.gnu.org/licenses/>.            *
00020 *                                                                            *
00021 *****************************************************************************/
00022 
00023 
00024 
00025 
00026 #ifndef _XN_LOG_H_
00027 #define _XN_LOG_H_
00028 
00029 //---------------------------------------------------------------------------
00030 // Includes
00031 //---------------------------------------------------------------------------
00032 #include "XnOS.h"
00033 
00034 //---------------------------------------------------------------------------
00035 // Defines
00036 //---------------------------------------------------------------------------
00037 #define XN_LOG_DIR_NAME         "Log"
00038 #define XN_LOG_MASKS_STRING_LEN 600
00039 #define XN_MASK_LOG             "Log"
00040 #define XN_LOG_MASK_ALL         "ALL"
00041 
00042 //---------------------------------------------------------------------------
00043 // Enums
00044 //---------------------------------------------------------------------------
00045 typedef enum XnLogSeverity
00046 {
00047     XN_LOG_VERBOSE,
00048     XN_LOG_INFO,
00049     XN_LOG_WARNING,
00050     XN_LOG_ERROR
00051 } XnLogSeverity;
00052 
00053 typedef enum
00054 {
00055     XN_LOG_WRITE_NONE,
00056     XN_LOG_WRITE_ALL,
00057     XN_LOG_WRITE_MASKS
00058 } XnLogFilteringType;
00059 
00060 //---------------------------------------------------------------------------
00061 // Types
00062 //---------------------------------------------------------------------------
00063 
00064 typedef struct XnDump 
00065 {
00066     XN_FILE_HANDLE hFile;
00067 } XnDump;
00068 
00069 const XnDump XN_DUMP_CLOSED = { XN_INVALID_FILE_HANDLE };
00070  
00071 //---------------------------------------------------------------------------
00072 // Exported Function Declaration
00073 //---------------------------------------------------------------------------
00074 
00078 XN_C_API XnStatus xnLogInitSystem();
00079 
00086 XN_C_API XnStatus xnLogInitFromINIFile(const XnChar* csINIFile, const XnChar* csSectionName);
00087 
00093 XN_C_API XnStatus xnLogInitFromXmlFile(const XnChar* strFileName);
00094 
00098 XN_C_API XnStatus xnLogStartNewFile();
00099 
00103 XN_C_API XnStatus xnLogClose();
00104 
00111 XN_C_API XnStatus xnLogSetMaskState(const XnChar* csMask, XnBool bEnabled);
00112 
00119 XN_C_API XnStatus xnDumpSetMaskState(const XnChar* csMask, XnBool bEnabled);
00120 
00126 XN_C_API XnStatus xnLogSetSeverityFilter(XnLogSeverity nMinSeverity);
00127 
00133 XN_C_API XnStatus xnLogSetConsoleOutput(XnBool bConsoleOutput);
00134 
00140 XN_C_API XnStatus xnLogSetFileOutput(XnBool bFileOutput);
00141 
00147 XN_C_API XnStatus xnLogSetLineInfo(XnBool bLineInfo);
00148 
00154 XN_C_API XnStatus xnLogSetOutputFolder(const XnChar* strOutputFolder);
00155 
00162 XN_C_API XnBool xnLogIsEnabled(const XnChar* csLogMask, XnLogSeverity nSeverity);
00163 
00173 XN_C_API void xnLogWrite(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, const XnChar* csFormat, ...);
00174 
00184 XN_C_API void xnLogWriteNoEntry(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFormat, ...);
00185 
00197 XN_C_API void xnLogWriteBinaryData(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, XnUChar* pBinData, XnUInt32 nDataSize, const XnChar* csFormat, ...);
00198 
00204 XN_C_API XnBool xnLogIsDumpMaskEnabled(const XnChar* csDumpMask);
00205 
00218 XN_C_API void xnDumpInit(XnDump* pDump, const XnChar* csDumpMask, const XnChar* csHeader, const XnChar* csFileNameFormat, ...);
00219 
00231 XN_C_API void xnDumpForceInit(XnDump* pDump, const XnChar* csHeader, const XnChar* csFileNameFormat, ...);
00232 
00239 XN_C_API void xnDumpClose(XnDump* pDump);
00240 
00248 XN_C_API void xnDumpWriteBufferImpl(XnDump dump, const void* pBuffer, XnUInt32 nBufferSize);
00249 
00250 inline void xnDumpWriteBuffer(XnDump dump, const void* pBuffer, XnUInt32 nBufferSize)
00251 {
00252     if (dump.hFile != XN_INVALID_FILE_HANDLE)
00253     {
00254         xnDumpWriteBufferImpl(dump, pBuffer, nBufferSize);
00255     }
00256 }
00257 
00265 XN_C_API void xnDumpWriteStringImpl(XnDump dump, const XnChar* csFormat, ...);
00266 
00267 #if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
00268     #define xnDumpWriteString(dump, csFormat, ...)                  \
00269         if ((dump).hFile != XN_INVALID_FILE_HANDLE) {                   \
00270             xnDumpWriteStringImpl((dump), csFormat, __VA_ARGS__);       \
00271         }
00272 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
00273     #define xnDumpWriteString(dump, csFormat, ...)                  \
00274         if ((dump).hFile != XN_INVALID_FILE_HANDLE) {                   \
00275             xnDumpWriteStringImpl((dump), csFormat, ##__VA_ARGS__); \
00276         }
00277 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
00278     #define xnDumpWriteString(dump, csFormat, args...)              \
00279         if ((dump).hFile != XN_INVALID_FILE_HANDLE) {                   \
00280             xnDumpWriteStringImpl((dump), csFormat, args);          \
00281         }
00282 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
00283     #define xnDumpWriteString(dump, csFormat, arg)                  \
00284         if ((dump).hFile != XN_INVALID_FILE_HANDLE) {                   \
00285             xnDumpWriteStringImpl((dump), csFormat, arg);               \
00286         }
00287 #else
00288     #error Xiron Log - Unknown VAARGS type!
00289 #endif
00290 
00296 XN_C_API void xnDumpFlush(XnDump dump);
00297 
00298 
00299 #if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
00300     #define xnLogVerbose(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00301     #define xnLogInfo(csLogMask, csFormat, ...)     xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00302     #define xnLogWarning(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00303     #define xnLogError(csLogMask, csFormat, ...)    xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, __VA_ARGS__)
00304 
00305     /* Writes to the log and returns nRetVal */
00306     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...)                         \
00307         {                                                                                       \
00308             xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, __VA_ARGS__);        \
00309             return (nRetVal);                                                                   \
00310         }
00311 
00312     /* Logs a warning and returns nRetVal */
00313     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...)                        \
00314         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, __VA_ARGS__)
00315 
00316     /* Logs a warning and returns nRetVal */
00317     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...)                          \
00318         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, __VA_ARGS__)
00319 
00320     /* If nRetVal is not ok, writes to the log and returns nRetVal */
00321     #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat, ...)                   \
00322         if (nRetVal != XN_STATUS_OK)                                                            \
00323         {                                                                                       \
00324             XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, __VA_ARGS__)                 \
00325         }                                                                                       
00326 
00327     /* If nRetVal is not ok, logs a warning and returns nRetVal */
00328     #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat, ...) \
00329         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, __VA_ARGS__)
00330 
00331     /* If nRetVal is not ok, logs an error and returns nRetVal */
00332     #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat, ...) \
00333         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, __VA_ARGS__)
00334 
00335 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
00336     #define xnLogVerbose(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00337     #define xnLogInfo(csLogMask, csFormat, ...)     xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00338     #define xnLogWarning(csLogMask, csFormat, ...)  xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00339     #define xnLogError(csLogMask, csFormat, ...)    xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
00340 
00341     /* Writes to the log and returns nRetVal */
00342     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...)                     \
00343     {                                                                                       \
00344         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, ##__VA_ARGS__);      \
00345         return (nRetVal);                                                                   \
00346     }
00347 
00348     /* Logs a warning and returns nRetVal */
00349     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...)                        \
00350         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, ##__VA_ARGS__)
00351 
00352     /* Logs a warning and returns nRetVal */
00353     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...)                          \
00354         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, ##__VA_ARGS__)
00355 
00356     /* If nRetVal is not ok, writes to the log and returns nRetVal */
00357     #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat, ...)                   \
00358         if (nRetVal != XN_STATUS_OK)                                                            \
00359     {                                                                                       \
00360         XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ##__VA_ARGS__)                   \
00361     }                                                                                       
00362 
00363     /* If nRetVal is not ok, logs a warning and returns nRetVal */
00364     #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat, ...) \
00365         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, ##__VA_ARGS__)
00366 
00367     /* If nRetVal is not ok, logs an error and returns nRetVal */
00368     #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat, ...) \
00369         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, ##__VA_ARGS__)
00370 
00371 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
00372     #define xnLogVerbose(csLogMask, csFormat, args...)  xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, args)
00373     #define xnLogInfo(csLogMask, csFormat, args...)     xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, args)
00374     #define xnLogWarning(csLogMask, csFormat, args...)  xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, args)
00375     #define xnLogError(csLogMask, csFormat, args...)    xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, args)
00376 
00377     /* Writes to the log and returns nRetVal */
00378     #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, args...)                 \
00379     {                                                                                       \
00380         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, args);               \
00381         return (nRetVal);                                                                   \
00382     }
00383 
00384     /* Logs a warning and returns nRetVal */
00385     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, args...)                    \
00386         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
00387 
00388     /* Logs a warning and returns nRetVal */
00389     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, args...)                      \
00390         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
00391 
00392     /* If nRetVal is not ok, writes to the log and returns nRetVal */
00393     #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat, args...)           \
00394         if (nRetVal != XN_STATUS_OK)                                                        \
00395     {                                                                                       \
00396         XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, args)                        \
00397     }                                                                                       
00398 
00399     /* If nRetVal is not ok, logs a warning and returns nRetVal */
00400     #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat, args...) \
00401         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
00402 
00403     /* If nRetVal is not ok, logs an error and returns nRetVal */
00404     #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat, args...) \
00405         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
00406 
00407 #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
00408     #define xnLogVerbose(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, args)
00409     #define xnLogInfo(csLogMask, csFormat, args)    xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, args)
00410     #define xnLogWarning(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, args)
00411     #define xnLogError(csLogMask, csFormat, args)   xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, args)
00412 
00413     /* Writes to the log and returns nRetVal */
00414     #define XN_LOG_RETURN(nRetVal, nSeverity csLogMask, csFormat, args)                     \
00415     {                                                                                       \
00416         xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, args);               \
00417         return (nRetVal);                                                                   \
00418     }
00419 
00420     /* Logs a warning and returns nRetVal */
00421     #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, args)                       \
00422         XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
00423 
00424     /* Logs a warning and returns nRetVal */
00425     #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, args)                         \
00426         XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
00427 
00428     /* If nRetVal is not ok, writes to the log and returns nRetVal */
00429     #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat, args)              \
00430         if (nRetVal != XN_STATUS_OK)                                                        \
00431         {                                                                                   \
00432             XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, args)                    \
00433         }                                                                                       
00434 
00435     /* If nRetVal is not ok, logs a warning and returns nRetVal */
00436     #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat, args) \
00437         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
00438 
00439     /* If nRetVal is not ok, logs an error and returns nRetVal */
00440     #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat, args) \
00441         XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
00442 
00443 #else
00444     #error Xiron Log - Unknown VAARGS type!
00445 #endif
00446 
00447 //#define XN_NO_LOGS
00448 
00449 #if (defined(XN_NO_LOGS) && !defined(XN_LOG_IMPL))
00450     #define xnLogWrite
00451     #define xnLogWriteBinaryData
00452     #define xnLogIsDumpMaskEnabled(mask) FALSE
00453     #define xnDumpInit(dump,mask,header,format,...) NULL
00454     #define xnDumpForceInit(dump,header,format,...) NULL
00455     #define xnDumpClose
00456     #define xnDumpWriteBufferImpl
00457     #define xnDumpWriteStringImpl
00458     #undef xnDumpWriteBuffer
00459     #define xnDumpWriteBuffer
00460     #undef xnDumpWriteString
00461     #define xnDumpWriteString
00462     #undef xnLogVerbose
00463     #define xnLogVerbose
00464     #undef xnLogInfo
00465     #define xnLogInfo
00466     #undef xnLogWarning
00467     #define xnLogWarning
00468     #undef xnLogError
00469     #define xnLogError
00470 #endif
00471 
00472 #endif //_XN_LOG_H_
00473