diff options
Diffstat (limited to 'source/modules/asura-utils')
-rw-r--r-- | source/modules/asura-utils/io/compressor.h | 2 | ||||
-rw-r--r-- | source/modules/asura-utils/io/data_buffer.h | 16 | ||||
-rw-r--r-- | source/modules/asura-utils/io/file_data.cpp | 9 | ||||
-rw-r--r-- | source/modules/asura-utils/io/io_task.cpp | 6 | ||||
-rw-r--r-- | source/modules/asura-utils/io/io_task.h | 7 | ||||
-rw-r--r-- | source/modules/asura-utils/scripting/portable.hpp | 10 | ||||
-rw-r--r-- | source/modules/asura-utils/threading/task.h | 3 | ||||
-rw-r--r-- | source/modules/asura-utils/threading/thread.cpp | 4 | ||||
-rw-r--r-- | source/modules/asura-utils/type.h | 2 | ||||
-rw-r--r-- | source/modules/asura-utils/utils_module.cpp | 2 |
10 files changed, 38 insertions, 23 deletions
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ַݵij /// @@ -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<IOTask> + : public AEScripting::Portable<IOTask, AEThreading::Task> { 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 { /// - /// ҪעluanativeҪ̳дģ塣 + /// ҪΪ࣬userdatamember ref̳д࣬ע̳С /// - template<typename T> - using Portable = Luax::LuaxNativeClass<T>; + using Object = Luax::LuaxObject; /// - /// ҪΪ࣬userdatamember ref̳д࣬ע̳С + /// ҪעluanativeҪ̳дģ塣 /// - using NativeAccessor = Luax::ILuaxNativeAccessor; + template<typename TYPE, typename BASE = Luax::LuaxObject> + using Portable = Luax::LuaxNativeClass<TYPE, BASE>; } } 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<Task>(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); } |