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

其他游戏

开发平台:

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_FILESYSTEM
  9. #define HK_FILESYSTEM
  10. class hkStreamReader;
  11. class hkStreamWriter;
  12. /// Interface for hkStreamReader/hkStreamWriter creation and filesystem browsing.
  13. /// When streams and archives are given a resource to open by name, they
  14. /// ask the FileSystem to open it for them. The user may wish to
  15. /// replace the default factory with one which reads from packed files
  16. /// or searches in several locations for instance.
  17. class hkFileSystem : public hkReferencedObject, public hkSingleton<hkFileSystem>
  18. {
  19. public:
  20. hkFileSystem() {}
  21. /// Havok has two 'standard' console streams - stdout and stderr.
  22. enum StdStream { STDOUT=1, STDERR };
  23. /// Returns a stream reader for file 'name' or null if unable.
  24. virtual hkStreamReader* openReader(const char* name) = 0;
  25. /// Returns a stream reader for file 'name' or null if unable.
  26. virtual hkStreamWriter* openWriter(const char* name) = 0;
  27. enum FlagValues
  28. {
  29. F_ISFILE = 1,
  30. F_ISDIR = 2
  31. };
  32. typedef hkFlags<FlagValues, hkUint32> Flags;
  33. struct Entry
  34. {
  35. hkBool32 isDir() const { return flags.get(F_ISDIR); }
  36. hkBool32 isFile() const { return flags.get(F_ISFILE); }
  37. char* name;
  38. unsigned int timeModified;
  39. Flags flags;
  40. };
  41. struct DirectoryListing
  42. {
  43. ~DirectoryListing() 
  44. clear();
  45. }
  46. void swap(DirectoryListing& d )
  47. {
  48. m_entries.swap( d.m_entries );
  49. }
  50. void clear() 
  51. {
  52. for (int i=0; i < m_entries.getSize(); ++i)
  53. {
  54. hkDeallocate( m_entries[i].name );
  55. }
  56. m_entries.clear();
  57. }
  58. void addEntry(const Entry& ent) 
  59. {
  60. Entry& e = m_entries.expandOne();
  61. e.name = hkString::strDup(ent.name); 
  62. e.flags = ent.flags;
  63. }
  64. void addEntry(const char* name, Flags f, unsigned int timeModified = 0) 
  65. {
  66. Entry& e = m_entries.expandOne();
  67. e.name = hkString::strDup(name); 
  68. e.flags = f;
  69. e.timeModified = timeModified;
  70. }
  71. void addDirectory(const char* name) 
  72. {
  73. addEntry(name, F_ISDIR);
  74. }
  75. /// adds a copy of name to the file names list
  76. /// Also stores the last modified time stamp (default 0)
  77. void addFile(const char* name, unsigned int timeModified = 0) 
  78. {
  79. addEntry(name, F_ISFILE, timeModified);
  80. }
  81. const hkArray<Entry>& getEntries() const
  82. {
  83. return m_entries;
  84. }
  85. hkBool isEmpty() const { return m_entries.isEmpty(); }
  86. private:
  87. hkArray<Entry> m_entries;
  88. }; // DirectoryListing
  89. /// list all the directories and files in the "path" directory, returns HK_FAILURE if the path is not valid
  90. virtual hkResult listDirectory(const char* basePath, DirectoryListing& listingOut) { return HK_FAILURE; }
  91. };
  92. #endif //HK_FILESYSTEM
  93. /*
  94. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  95. * Confidential Information of Havok.  (C) Copyright 1999-2009
  96. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  97. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  98. * rights, and intellectual property rights in the Havok software remain in
  99. * Havok and/or its suppliers.
  100. * Use of this software for evaluation purposes is subject to and indicates
  101. * acceptance of the End User licence Agreement for this product. A copy of
  102. * the license is included with this software and is also available at www.havok.com/tryhavok.
  103. */