mirror of https://github.com/qt/qtdatavis3d.git
127 lines
3.4 KiB
C++
127 lines
3.4 KiB
C++
#ifndef __XN_DUMP_WRITERS_H__
|
|
#define __XN_DUMP_WRITERS_H__
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Includes
|
|
//---------------------------------------------------------------------------
|
|
#include "XnDump.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Types
|
|
//---------------------------------------------------------------------------
|
|
typedef struct XnDumpWriterFileHandle
|
|
{
|
|
void* pInternal;
|
|
} XnDumpWriterFileHandle;
|
|
|
|
typedef struct XnDumpWriter
|
|
{
|
|
void* pCookie;
|
|
XnDumpWriterFileHandle (XN_CALLBACK_TYPE* OpenFile)(void* pCookie, const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName);
|
|
void (XN_CALLBACK_TYPE* Write)(void* pCookie, XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize);
|
|
void (XN_CALLBACK_TYPE* CloseFile)(void* pCookie, XnDumpWriterFileHandle hFile);
|
|
} XnDumpWriter;
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Functions
|
|
//---------------------------------------------------------------------------
|
|
XN_C_API XnStatus XN_C_DECL xnDumpRegisterWriter(XnDumpWriter* pWriter);
|
|
|
|
XN_C_API void XN_C_DECL xnDumpUnregisterWriter(XnDumpWriter* pWriter);
|
|
|
|
XN_C_API XnStatus XN_C_DECL xnDumpSetFilesOutput(XnBool bOn);
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Helpers
|
|
//---------------------------------------------------------------------------
|
|
#ifdef __cplusplus
|
|
|
|
class XnDumpWriterBase
|
|
{
|
|
public:
|
|
XnDumpWriterBase() : m_bRegistered(FALSE)
|
|
{
|
|
m_cObject.pCookie = this;
|
|
m_cObject.OpenFile = OpenFileCallback;
|
|
m_cObject.Write = WriteCallback;
|
|
m_cObject.CloseFile = CloseFileCallback;
|
|
}
|
|
|
|
virtual ~XnDumpWriterBase()
|
|
{
|
|
Unregister();
|
|
}
|
|
|
|
XnStatus Register()
|
|
{
|
|
XnStatus nRetVal = XN_STATUS_OK;
|
|
|
|
if (!m_bRegistered)
|
|
{
|
|
OnRegister();
|
|
|
|
nRetVal = xnDumpRegisterWriter(&m_cObject);
|
|
if (nRetVal != XN_STATUS_OK)
|
|
{
|
|
OnUnregister();
|
|
return (nRetVal);
|
|
}
|
|
|
|
m_bRegistered = TRUE;
|
|
}
|
|
|
|
return (XN_STATUS_OK);
|
|
}
|
|
|
|
void Unregister()
|
|
{
|
|
if (m_bRegistered)
|
|
{
|
|
xnDumpUnregisterWriter(&m_cObject);
|
|
m_bRegistered = FALSE;
|
|
|
|
OnUnregister();
|
|
}
|
|
}
|
|
|
|
inline XnBool IsRegistered() { return m_bRegistered; }
|
|
|
|
virtual XnDumpWriterFileHandle OpenFile(const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName) = 0;
|
|
virtual void Write(XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize) = 0;
|
|
virtual void CloseFile(XnDumpWriterFileHandle hFile) = 0;
|
|
|
|
operator const XnDumpWriter*() const
|
|
{
|
|
return &m_cObject;
|
|
}
|
|
|
|
protected:
|
|
virtual void OnRegister() {}
|
|
virtual void OnUnregister() {}
|
|
|
|
private:
|
|
static XnDumpWriterFileHandle XN_CALLBACK_TYPE OpenFileCallback(void* pCookie, const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName)
|
|
{
|
|
XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie;
|
|
return pThis->OpenFile(strDumpName, bSessionDump, strFileName);
|
|
}
|
|
|
|
static void XN_CALLBACK_TYPE WriteCallback(void* pCookie, XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize)
|
|
{
|
|
XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie;
|
|
return pThis->Write(hFile, pBuffer, nBufferSize);
|
|
}
|
|
|
|
static void XN_CALLBACK_TYPE CloseFileCallback(void* pCookie, XnDumpWriterFileHandle hFile)
|
|
{
|
|
XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie;
|
|
return pThis->CloseFile(hFile);
|
|
}
|
|
|
|
XnDumpWriter m_cObject;
|
|
XnBool m_bRegistered;
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif // __XN_DUMP_WRITERS_H__
|