210 lines
8 KiB
C++
210 lines
8 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
/// \file ealfiledll.cpp DLL wrapper implementation for the EAL (file).
|
|
//
|
|
// For any questions/feedback please email gearsupport@ubisoft.com.
|
|
//
|
|
// See file ealdef.h for details on how to use the various EAL APIs.
|
|
//
|
|
// ONLY INCLUDE THIS FILE IN YOUR PROJECT IF YOU ARE USING DLLs.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ealfile.h"
|
|
|
|
#if defined(EAL_DLL) || defined(EAL_IMPORT_DLL)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// DLL Side
|
|
|
|
static eal_file_dll_interface gEalFileDllInterface = {0};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void EalFileDllInitInterface(const eal_file_dll_interface& Interface)
|
|
{
|
|
gEalFileDllInterface = Interface;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool EalFileLibInit(eal_u32 Version)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileLibInit)(Version);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void EalFileLibShutdown()
|
|
{
|
|
(*gEalFileDllInterface.pEalFileLibShutdown)();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file* EalFileOpen(eal_id Tag, const char* pFileName, eal_file_flags OpenFlags, eal_file_status& Status)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileOpen)(Tag, pFileName, OpenFlags, Status);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void EalFileClose(eal_file* pFile)
|
|
{
|
|
(*gEalFileDllInterface.pEalFileClose)(pFile);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool EalFileExists(eal_id Tag, const char* pPath)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileExists)(Tag, pPath);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileRead(eal_file* pFile,
|
|
void* pBuffer,
|
|
const eal_u64& Position,
|
|
eal_u32 BufferSize,
|
|
eal_u32& SizeRead,
|
|
eal_file_priority Priority)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileRead)(pFile,
|
|
pBuffer,
|
|
Position,
|
|
BufferSize,
|
|
SizeRead,
|
|
Priority);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileAsyncRead(eal_file* pFile,
|
|
void* pBuffer,
|
|
eal_u32 Size,
|
|
const eal_u64& Pos,
|
|
eal_async_cb Callback,
|
|
void* pCookie,
|
|
eal_file_priority Priority)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileAsyncRead)(pFile,
|
|
pBuffer,
|
|
Size,
|
|
Pos,
|
|
Callback,
|
|
pCookie,
|
|
Priority);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileWrite(eal_file* pFile,
|
|
const void* pBuffer,
|
|
const eal_u64& Position,
|
|
eal_u32 BufferSize,
|
|
eal_u32& SizeWritten)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileWrite)(pFile, pBuffer, Position, BufferSize, SizeWritten);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_u64 EalFileGetSize(eal_file* pFile)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileGetSize)(pFile);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileFlush(eal_file* pFile)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileFlush)(pFile);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_u32 EalFileGetBufferAlignment(eal_file* pFile)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileGetBufferAlignment)(pFile);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_u32 EalFileGetSectorSize(eal_file* pFile)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileGetSectorSize)(pFile);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
char EalFileGetSeparator()
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileGetSeparator)();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// New since version 3.0
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileExistsWithStatus(eal_id Tag,
|
|
const char* pPath)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileExistsWithStatus)(Tag, pPath);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileAsyncWrite(eal_file* pFile,
|
|
const void* pBuffer,
|
|
eal_u32 Size,
|
|
const eal_u64& Pos,
|
|
eal_async_cb Callback,
|
|
void* pCookie,
|
|
eal_file_priority Priority)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileAsyncWrite)(pFile, pBuffer, Size, Pos, Callback, pCookie, Priority);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
eal_file_status EalFileGetSizeWithStatus(eal_file* pFile,
|
|
eal_u64& FileSize)
|
|
{
|
|
return (*gEalFileDllInterface.pEalFileGetSizeWithStatus)(pFile, FileSize);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#else
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Engine Side
|
|
|
|
void EalFileDllPopulateInterface(eal_file_dll_interface& Interface)
|
|
{
|
|
Interface.pEalFileLibInit = EalFileLibInit;
|
|
Interface.pEalFileLibShutdown = EalFileLibShutdown;
|
|
Interface.pEalFileOpen = EalFileOpen;
|
|
Interface.pEalFileClose = EalFileClose;
|
|
Interface.pEalFileExists = EalFileExists;
|
|
Interface.pEalFileRead = EalFileRead;
|
|
Interface.pEalFileAsyncRead = EalFileAsyncRead;
|
|
Interface.pEalFileWrite = EalFileWrite;
|
|
Interface.pEalFileGetSize = EalFileGetSize;
|
|
Interface.pEalFileFlush = EalFileFlush;
|
|
Interface.pEalFileGetBufferAlignment = EalFileGetBufferAlignment;
|
|
Interface.pEalFileGetSectorSize = EalFileGetSectorSize;
|
|
Interface.pEalFileGetSeparator = EalFileGetSeparator;
|
|
|
|
// New since version 3.0
|
|
Interface.pEalFileExistsWithStatus = EalFileExistsWithStatus;
|
|
Interface.pEalFileAsyncWrite = EalFileAsyncWrite;
|
|
Interface.pEalFileGetSizeWithStatus = EalFileGetSizeWithStatus;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif
|