From e13616b5c40f912853be99f0603f0e4c97b22062 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 3 Apr 2019 21:56:51 +0800 Subject: *misc --- source/modules/asura-utils/io/compressor.h | 2 -- source/modules/asura-utils/io/data_buffer.h | 16 ++++++++-------- source/modules/asura-utils/io/file_data.cpp | 9 ++++++++- source/modules/asura-utils/io/io_task.cpp | 6 ++++++ source/modules/asura-utils/io/io_task.h | 7 +++---- source/modules/asura-utils/scripting/portable.hpp | 10 +++++----- source/modules/asura-utils/threading/task.h | 3 +-- source/modules/asura-utils/threading/thread.cpp | 4 ++++ source/modules/asura-utils/type.h | 2 ++ source/modules/asura-utils/utils_module.cpp | 2 +- 10 files changed, 38 insertions(+), 23 deletions(-) (limited to 'source/modules/asura-utils') diff --git a/source/modules/asura-utils/io/compressor.h b/source/modules/asura-utils/io/compressor.h index 30a074c..65fd88a 100644 --- a/source/modules/asura-utils/io/compressor.h +++ b/source/modules/asura-utils/io/compressor.h @@ -20,8 +20,6 @@ namespace AsuraEngine LUAX_DECL_METHOD(_Compress); LUAX_DECL_METHOD(_Decompress); - - }; } diff --git a/source/modules/asura-utils/io/data_buffer.h b/source/modules/asura-utils/io/data_buffer.h index 61d158b..c60444e 100644 --- a/source/modules/asura-utils/io/data_buffer.h +++ b/source/modules/asura-utils/io/data_buffer.h @@ -56,6 +56,14 @@ namespace AsuraEngine private: + LUAX_DECL_METHOD(_New); + LUAX_DECL_METHOD(_GetData); + LUAX_DECL_METHOD(_GetSize); + LUAX_DECL_METHOD(_GetCapacity); + LUAX_DECL_METHOD(_Refactor); + LUAX_DECL_METHOD(_Load); + LUAX_DECL_METHOD(_Clear); + /// /// Buffer首地址和里面数据的长度 /// @@ -69,14 +77,6 @@ namespace AsuraEngine AEThreading::Mutex mMutex; - LUAX_DECL_METHOD(_New); - LUAX_DECL_METHOD(_GetData); - LUAX_DECL_METHOD(_GetSize); - LUAX_DECL_METHOD(_GetCapacity); - LUAX_DECL_METHOD(_Refactor); - LUAX_DECL_METHOD(_Load); - LUAX_DECL_METHOD(_Clear); - }; } diff --git a/source/modules/asura-utils/io/file_data.cpp b/source/modules/asura-utils/io/file_data.cpp index 92333cf..ad58db9 100644 --- a/source/modules/asura-utils/io/file_data.cpp +++ b/source/modules/asura-utils/io/file_data.cpp @@ -21,6 +21,8 @@ namespace AsuraEngine FileData::~FileData() { + if (mData) + mData->Release(); } const std::string& FileData::GetFileName() @@ -40,7 +42,12 @@ namespace AsuraEngine void FileData::BindData(ASURA_MOVE DataBuffer* buffer) { + if (!buffer) + return; + if (mData) + mData->Release(); mData = buffer; + mData->Retain(); } DataBuffer* FileData::GetDataBuffer() @@ -49,4 +56,4 @@ namespace AsuraEngine } } -} +} \ No newline at end of file diff --git a/source/modules/asura-utils/io/io_task.cpp b/source/modules/asura-utils/io/io_task.cpp index 5f0e1c8..ca03b09 100644 --- a/source/modules/asura-utils/io/io_task.cpp +++ b/source/modules/asura-utils/io/io_task.cpp @@ -15,10 +15,14 @@ namespace AsuraEngine : mPath(path) , mBuffer(buffer) { + if (buffer) + buffer->Retain(); } IOTask::~IOTask() { + if (mBuffer) + mBuffer->Release(); } bool IOTask::Execute() @@ -31,6 +35,8 @@ namespace AsuraEngine // 从path读取内容保存在mBuffer中 else if (mType == IOTASK_TYPE_READ) { + if (!mBuffer) + return false; file.Open(File::FILE_MODE_READ); file.ReadAll(mBuffer); file.Close(); diff --git a/source/modules/asura-utils/io/io_task.h b/source/modules/asura-utils/io/io_task.h index 09c8798..0cf5023 100644 --- a/source/modules/asura-utils/io/io_task.h +++ b/source/modules/asura-utils/io/io_task.h @@ -24,8 +24,7 @@ namespace AsuraEngine /// 读取文件任务。 /// class IOTask ASURA_FINAL - : public AEThreading::Task - , public AEScripting::Portable + : public AEScripting::Portable { public: @@ -46,8 +45,8 @@ namespace AsuraEngine std::string mPath; IOTaskType mType; - asura_ref DataBuffer* mBuffer; - Luax::LuaxMemberRef mBufferRef; + DataBuffer* mBuffer; + Luax::LuaxMemberRef mBufferRef; }; diff --git a/source/modules/asura-utils/scripting/portable.hpp b/source/modules/asura-utils/scripting/portable.hpp index ffed49e..1c05163 100644 --- a/source/modules/asura-utils/scripting/portable.hpp +++ b/source/modules/asura-utils/scripting/portable.hpp @@ -15,15 +15,15 @@ namespace AsuraEngine { /// - /// 要注册给lua的native类需要继承此模板。 + /// 需要作为基类,访问userdata和member ref的类继承此类,注意必须是虚继承。 /// - template - using Portable = Luax::LuaxNativeClass; + using Object = Luax::LuaxObject; /// - /// 需要作为基类,访问userdata和member ref的类继承此类,注意必须是虚继承。 + /// 要注册给lua的native类需要继承此模板。 /// - using NativeAccessor = Luax::ILuaxNativeAccessor; + template + using Portable = Luax::LuaxNativeClass; } } diff --git a/source/modules/asura-utils/threading/task.h b/source/modules/asura-utils/threading/task.h index 3b3a79c..9073045 100644 --- a/source/modules/asura-utils/threading/task.h +++ b/source/modules/asura-utils/threading/task.h @@ -12,8 +12,7 @@ namespace AsuraEngine /// /// 希望放在另一个线程处理的任务,继承Task并重写Execute方法。 /// - ASURA_ABSTRACT class Task - : public virtual AEScripting::NativeAccessor + ASURA_ABSTRACT class Task : public AEScripting::Object { public: diff --git a/source/modules/asura-utils/threading/thread.cpp b/source/modules/asura-utils/threading/thread.cpp index fc397d2..0899485 100644 --- a/source/modules/asura-utils/threading/thread.cpp +++ b/source/modules/asura-utils/threading/thread.cpp @@ -43,6 +43,7 @@ namespace AsuraEngine { lock(mTaskQueueMutex) { + task->Retain(); mTaskQueue.push(task); } return true; @@ -207,6 +208,7 @@ namespace AsuraEngine if (mType == THREAD_TYPE_DEFERRED) { mFinishedMutex.Lock(); + task->Retain(); mFinishedTasks.push(task); mFinishedMutex.Unlock(); } @@ -218,6 +220,7 @@ namespace AsuraEngine } mTaskQueueMutex.Lock(); mTaskQueue.pop(); + task->Release(); mTaskQueueMutex.Unlock(); } } @@ -262,6 +265,7 @@ namespace AsuraEngine this->LuaxRelease(state, task); mFinishedMutex.Lock(); mFinishedTasks.pop(); + task->Release(); mFinishedMutex.Unlock(); } } diff --git a/source/modules/asura-utils/type.h b/source/modules/asura-utils/type.h index 7f80bfa..738c4f1 100644 --- a/source/modules/asura-utils/type.h +++ b/source/modules/asura-utils/type.h @@ -70,6 +70,8 @@ namespace AsuraEngine /// 表明移动指针所有权 /// #define ASURA_MOVE + +#define ASURA_DEBUG 1 //--------------------------------------------------------------------------------// diff --git a/source/modules/asura-utils/utils_module.cpp b/source/modules/asura-utils/utils_module.cpp index 61780e6..5616be4 100644 --- a/source/modules/asura-utils/utils_module.cpp +++ b/source/modules/asura-utils/utils_module.cpp @@ -10,10 +10,10 @@ namespace AsuraEngine { // IO LUAX_REGISTER_SINGLETON(state, Filesystem); + LUAX_REGISTER_FACTORY(state, IOTask); LUAX_REGISTER_FACTORY(state, DataBuffer); LUAX_REGISTER_FACTORY(state, FileData); LUAX_REGISTER_FACTORY(state, File); - LUAX_REGISTER_FACTORY(state, IOTask); // Threading LUAX_REGISTER_FACTORY(state, Thread); } -- cgit v1.1-26-g67d0