hkNativeFileSystem.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:5k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_DEFAULTFILESYSTEM
  9. #define HK_DEFAULTFILESYSTEM
  10. #include <Common/Base/hkBase.h>
  11. #include <Common/Base/System/Io/Reader/hkStreamReader.h>
  12. #include <Common/Base/System/Io/Writer/hkStreamWriter.h>
  13. #include <Common/Base/System/Io/FileSystem/hkFileSystem.h>
  14. #include <Common/Base/System/Io/Reader/Buffered/hkBufferedStreamReader.h>
  15. #include <Common/Base/System/Io/Writer/Buffered/hkBufferedStreamWriter.h>
  16. # include <Common/Base/System/Io/Reader/Stdio/hkStdioStreamReader.h>
  17. # include <Common/Base/System/Io/Writer/Stdio/hkStdioStreamWriter.h>
  18. # include <Common/Base/System/Io/Directory/Win32/hkWin32ListDirectory.h>
  19. // FileSystem class implementation for native file systems.
  20. // Uses default reader, writer and file system browsers for each platform
  21. // All the paths and file names must be in Havok standard format i.e. the
  22. // only character accepted as a separator is '/'.
  23. // e.g. A valid path is Dir/SubDir/SubSubDir/Filename
  24. class hkNativeFileSystem : public hkFileSystem
  25. {
  26. public:
  27. // Function pointer type for directory listing.
  28. typedef hkResult (HK_CALL *ListDirectoryFunType)( const char* pathIn, hkFileSystem::DirectoryListing& directoryListingOut );
  29. // Function pointer type for converting Havok paths to platform paths.
  30. typedef const char* (HK_CALL *HavokToPlatformConvertPathFunType)( const char* pathIn, hkArray<char>& buffer );
  31. // Function pointer type for converting platform paths to Havok paths.
  32. typedef const char* (HK_CALL *PlatformToHavokConvertPathFunType)( const char* pathIn, hkArray<char>& buffer );
  33. // Function pointer for directory listing.
  34. // Replace the function to modify listDirectory behavior.
  35. static ListDirectoryFunType s_listDirectory;
  36. // Pointer to function for converting Havok paths to platform paths.
  37. // Replace the function to modify havokToPlatformConvertPath behavior.
  38. static HavokToPlatformConvertPathFunType s_havokToPlatformConvert;
  39. // Pointer to function for converting platform paths to Havok paths.
  40. // Replace the function to modify platformToHavokConvertPath behavior.
  41. static PlatformToHavokConvertPathFunType s_platformToHavokConvert;
  42. // Default conversions functions
  43. static const char* HK_CALL nativeHavokToPlatformConvertPath( const char* pathIn, hkArray<char>& buffer );
  44. static const char* HK_CALL nativePlatformToHavokConvertPath( const char* pathIn, hkArray<char>& buffer );
  45. virtual hkStreamReader* openReader( const char* name )
  46. {
  47. hkArray<char> buffer;
  48. hkStreamReader* s = new DefaultFileReader( havokToPlatformConvertPath( name, buffer ) );
  49. if( s->markSupported() == false )
  50. {
  51. hkStreamReader* b = new hkBufferedStreamReader(s);
  52. s->removeReference();
  53. return b;
  54. }
  55. return s;
  56. }
  57. virtual hkStreamWriter* openWriter( const char* name )
  58. {
  59. hkArray<char> buffer;
  60. hkStreamWriter* s = new DefaultFileWriter( havokToPlatformConvertPath( name, buffer ) );
  61. hkStreamWriter* b = new hkBufferedStreamWriter(s);
  62. s->removeReference();
  63. return b;
  64. }
  65. static hkReferencedObject* create()
  66. {
  67. return new hkNativeFileSystem();
  68. }
  69. // Converts a Havok path to platform path. Set s_havokToPlatformConvert
  70. HK_FORCE_INLINE static const char* HK_CALL havokToPlatformConvertPath( const char* pathIn, hkArray<char>& buffer )
  71. {
  72. return s_havokToPlatformConvert( pathIn, buffer );
  73. }
  74. // Converts a platform path to Havok path
  75. HK_FORCE_INLINE static const char* HK_CALL platformToHavokConvertPath( const char* pathIn, hkArray<char>& buffer )
  76. {
  77. return s_platformToHavokConvert( pathIn, buffer );
  78. }
  79. /// list all the directories and files in the "basePath" directory,
  80. /// returns HK_FAILURE if the path is not valid
  81. /// basePath must be in Havok format, all the generated paths and file names
  82. /// in listingOut will be in Havok format too.
  83. virtual hkResult listDirectory(const char* basePath, DirectoryListing& listingOut)
  84. {
  85. return s_listDirectory( basePath, listingOut );
  86. }
  87. };
  88. #endif //HK_DEFAULTFILESYSTEM
  89. /*
  90. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  91. * Confidential Information of Havok.  (C) Copyright 1999-2009
  92. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  93. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  94. * rights, and intellectual property rights in the Havok software remain in
  95. * Havok and/or its suppliers.
  96. * Use of this software for evaluation purposes is subject to and indicates
  97. * acceptance of the End User licence Agreement for this product. A copy of
  98. * the license is included with this software and is also available at www.havok.com/tryhavok.
  99. */