mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Make FileAccess and DirAccess classes reference counted.
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
#define FILE_ACCESS_H
|
||||
|
||||
#include "core/math/math_defs.h"
|
||||
#include "core/object/ref_counted.h"
|
||||
#include "core/os/memory.h"
|
||||
#include "core/string/ustring.h"
|
||||
#include "core/typedefs.h"
|
||||
@@ -40,7 +41,7 @@
|
||||
* Multi-Platform abstraction for accessing to files.
|
||||
*/
|
||||
|
||||
class FileAccess {
|
||||
class FileAccess : public RefCounted {
|
||||
public:
|
||||
enum AccessType {
|
||||
ACCESS_RESOURCES,
|
||||
@@ -51,7 +52,7 @@ public:
|
||||
|
||||
typedef void (*FileCloseFailNotify)(const String &);
|
||||
|
||||
typedef FileAccess *(*CreateFunc)();
|
||||
typedef Ref<FileAccess> (*CreateFunc)();
|
||||
bool big_endian = false;
|
||||
bool real_is_double = false;
|
||||
|
||||
@@ -71,7 +72,7 @@ private:
|
||||
AccessType _access_type = ACCESS_FILESYSTEM;
|
||||
static CreateFunc create_func[ACCESS_MAX]; /** default file access creation function for a platform */
|
||||
template <class T>
|
||||
static FileAccess *_create_builtin() {
|
||||
static Ref<FileAccess> _create_builtin() {
|
||||
return memnew(T);
|
||||
}
|
||||
|
||||
@@ -148,9 +149,9 @@ public:
|
||||
|
||||
virtual Error reopen(const String &p_path, int p_mode_flags); ///< does not change the AccessType
|
||||
|
||||
static FileAccess *create(AccessType p_access); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static FileAccess *create_for_path(const String &p_path);
|
||||
static FileAccess *open(const String &p_path, int p_mode_flags, Error *r_error = nullptr); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static Ref<FileAccess> create(AccessType p_access); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static Ref<FileAccess> create_for_path(const String &p_path);
|
||||
static Ref<FileAccess> open(const String &p_path, int p_mode_flags, Error *r_error = nullptr); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static CreateFunc get_create_func(AccessType p_access);
|
||||
static bool exists(const String &p_name); ///< return true if a file exists
|
||||
static uint64_t get_modified_time(const String &p_file);
|
||||
@@ -176,27 +177,4 @@ public:
|
||||
virtual ~FileAccess() {}
|
||||
};
|
||||
|
||||
struct FileAccessRef {
|
||||
_FORCE_INLINE_ FileAccess *operator->() {
|
||||
return f;
|
||||
}
|
||||
|
||||
operator bool() const { return f != nullptr; }
|
||||
|
||||
FileAccess *f = nullptr;
|
||||
|
||||
operator FileAccess *() { return f; }
|
||||
|
||||
FileAccessRef(FileAccess *fa) { f = fa; }
|
||||
FileAccessRef(FileAccessRef &&other) {
|
||||
f = other.f;
|
||||
other.f = nullptr;
|
||||
}
|
||||
~FileAccessRef() {
|
||||
if (f) {
|
||||
memdelete(f);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif // FILE_ACCESS_H
|
||||
|
||||
Reference in New Issue
Block a user