summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-utils')
-rw-r--r--source/modules/asura-utils/Classes.h9
-rw-r--r--source/modules/asura-utils/Exceptions/Exception.cpp40
-rw-r--r--source/modules/asura-utils/Exceptions/Exception.h30
-rw-r--r--source/modules/asura-utils/IO/Compressor.cpp11
-rw-r--r--source/modules/asura-utils/IO/Compressor.h28
-rw-r--r--source/modules/asura-utils/IO/DataBuffer.cpp (renamed from source/modules/asura-utils/io/data_buffer.cpp)2
-rw-r--r--source/modules/asura-utils/IO/DataBuffer.h (renamed from source/modules/asura-utils/io/data_buffer.h)8
-rw-r--r--source/modules/asura-utils/IO/DecodedData.h (renamed from source/modules/asura-utils/io/decoded_data.h)10
-rw-r--r--source/modules/asura-utils/IO/File.cpp294
-rw-r--r--source/modules/asura-utils/IO/File.h146
-rw-r--r--source/modules/asura-utils/IO/FileData.cpp (renamed from source/modules/asura-utils/io/file_data.cpp)2
-rw-r--r--source/modules/asura-utils/IO/FileData.h (renamed from source/modules/asura-utils/io/file_data.h)8
-rw-r--r--source/modules/asura-utils/IO/FileSystem.cpp (renamed from source/modules/asura-utils/io/file_system.cpp)6
-rw-r--r--source/modules/asura-utils/IO/FileSystem.h (renamed from source/modules/asura-utils/io/file_system.h)14
-rw-r--r--source/modules/asura-utils/IO/IOBatchTask.cpp (renamed from source/modules/asura-utils/io/io_batch_task.cpp)0
-rw-r--r--source/modules/asura-utils/IO/IOBatchTask.h (renamed from source/modules/asura-utils/io/io_batch_task.h)6
-rw-r--r--source/modules/asura-utils/IO/IOTask.cpp (renamed from source/modules/asura-utils/io/io_task.cpp)4
-rw-r--r--source/modules/asura-utils/IO/IOTask.h (renamed from source/modules/asura-utils/io/io_task.h)10
-rw-r--r--source/modules/asura-utils/IO/Renewable.h29
-rw-r--r--source/modules/asura-utils/IO/binding/_compressor.cpp (renamed from source/modules/asura-utils/math/ranged_value.cpp)0
-rw-r--r--source/modules/asura-utils/IO/binding/_data_buffer.cpp132
-rw-r--r--source/modules/asura-utils/IO/binding/_file.cpp223
-rw-r--r--source/modules/asura-utils/IO/binding/_file_data.cpp60
-rw-r--r--source/modules/asura-utils/IO/binding/_file_system.cpp265
-rw-r--r--source/modules/asura-utils/IO/binding/_io_task.cpp46
-rw-r--r--source/modules/asura-utils/Manager.hpp14
-rw-r--r--source/modules/asura-utils/Math/Curve.cpp (renamed from source/modules/asura-utils/math/ranged_value.h)0
-rw-r--r--source/modules/asura-utils/Math/Curve.h (renamed from source/modules/asura-utils/threading/thread_impl_sdl.cpp)0
-rw-r--r--source/modules/asura-utils/Math/Functions.cpp (renamed from source/modules/asura-utils/threading/thread_impl_sdl.h)0
-rw-r--r--source/modules/asura-utils/Math/Functions.h (renamed from source/modules/asura-utils/threading/thread_impl_std.cpp)0
-rw-r--r--source/modules/asura-utils/Math/Matrix44.cpp217
-rw-r--r--source/modules/asura-utils/Math/Matrix44.h98
-rw-r--r--source/modules/asura-utils/Math/Quaternion.cpp0
-rw-r--r--source/modules/asura-utils/Math/Quaternion.h0
-rw-r--r--source/modules/asura-utils/Math/Rand/Rand.h89
-rw-r--r--source/modules/asura-utils/Math/Rand/Random.h9
-rw-r--r--source/modules/asura-utils/Math/RangedValue.cpp0
-rw-r--r--source/modules/asura-utils/Math/RangedValue.h0
-rw-r--r--source/modules/asura-utils/Math/Rect.hpp50
-rw-r--r--source/modules/asura-utils/Math/Rect.inc (renamed from source/modules/asura-utils/math/rect.inl)0
-rw-r--r--source/modules/asura-utils/Math/Transform.cpp0
-rw-r--r--source/modules/asura-utils/Math/Transform.h30
-rw-r--r--source/modules/asura-utils/Math/Vector2.hpp72
-rw-r--r--source/modules/asura-utils/Math/Vector2.inc (renamed from source/modules/asura-utils/math/vector2.inl)0
-rw-r--r--source/modules/asura-utils/Math/Vector3.hpp233
-rw-r--r--source/modules/asura-utils/Math/Vector3.inc (renamed from source/modules/asura-utils/math/vector3.inl)0
-rw-r--r--source/modules/asura-utils/Math/Vector4.h234
-rw-r--r--source/modules/asura-utils/Math/Vector4.inc (renamed from source/modules/asura-utils/math/vector4.inl)0
-rw-r--r--source/modules/asura-utils/Module.h32
-rw-r--r--source/modules/asura-utils/Scripting/Portable.hpp31
-rw-r--r--source/modules/asura-utils/Singleton.hpp59
-rw-r--r--source/modules/asura-utils/StringMap.cpp0
-rw-r--r--source/modules/asura-utils/StringMap.hpp29
-rw-r--r--source/modules/asura-utils/Threads/Conditional.cpp (renamed from source/modules/asura-utils/threading/conditional.cpp)4
-rw-r--r--source/modules/asura-utils/Threads/Conditional.h (renamed from source/modules/asura-utils/threading/conditional.h)12
-rw-r--r--source/modules/asura-utils/Threads/Coroutine.cpp (renamed from source/modules/asura-utils/threading/coroutine.cpp)2
-rw-r--r--source/modules/asura-utils/Threads/Coroutine.h (renamed from source/modules/asura-utils/threading/coroutine.h)12
-rw-r--r--source/modules/asura-utils/Threads/Mutex.cpp (renamed from source/modules/asura-utils/threading/mutex.cpp)6
-rw-r--r--source/modules/asura-utils/Threads/Mutex.h (renamed from source/modules/asura-utils/threading/mutex.h)14
-rw-r--r--source/modules/asura-utils/Threads/Semaphore.cpp (renamed from source/modules/asura-utils/threading/semaphore.cpp)10
-rw-r--r--source/modules/asura-utils/Threads/Semaphore.h (renamed from source/modules/asura-utils/threading/semaphore.h)8
-rw-r--r--source/modules/asura-utils/Threads/Task.cpp (renamed from source/modules/asura-utils/threading/task.cpp)4
-rw-r--r--source/modules/asura-utils/Threads/Task.h (renamed from source/modules/asura-utils/threading/task.h)14
-rw-r--r--source/modules/asura-utils/Threads/Thread.cpp (renamed from source/modules/asura-utils/threading/thread.cpp)12
-rw-r--r--source/modules/asura-utils/Threads/Thread.h (renamed from source/modules/asura-utils/threading/thread.h)16
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplPosix.cpp0
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplPosix.h2
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplSDL.cpp0
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplSDL.h0
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplStd.cpp0
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplStd.h (renamed from source/modules/asura-utils/threading/thread_impl_std.h)12
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplWin32.cpp (renamed from source/modules/asura-utils/threading/thread_impl_win32.cpp)6
-rw-r--r--source/modules/asura-utils/Threads/ThreadImplWin32.h (renamed from source/modules/asura-utils/threading/thread_impl_win32.h)10
-rw-r--r--source/modules/asura-utils/Threads/Threadable.h (renamed from source/modules/asura-utils/threading/threadable.h)8
-rw-r--r--source/modules/asura-utils/Threads/binding/_coroutine.cpp (renamed from source/modules/asura-utils/threading/binding/_coroutine.cpp)4
-rw-r--r--source/modules/asura-utils/Threads/binding/_thread.cpp (renamed from source/modules/asura-utils/threading/binding/_thread.cpp)4
-rw-r--r--source/modules/asura-utils/Type.h34
-rw-r--r--source/modules/asura-utils/Utils.h6
-rw-r--r--source/modules/asura-utils/UtilsConfig.h (renamed from source/modules/asura-utils/utils_config.h)6
-rw-r--r--source/modules/asura-utils/UtilsModule.cpp (renamed from source/modules/asura-utils/utils_module.cpp)6
-rw-r--r--source/modules/asura-utils/UtilsModule.h34
-rw-r--r--source/modules/asura-utils/classes.h4
-rw-r--r--source/modules/asura-utils/exceptions/exception.h4
-rw-r--r--source/modules/asura-utils/io/binding/_data_buffer.cpp2
-rw-r--r--source/modules/asura-utils/io/binding/_file_data.cpp2
-rw-r--r--source/modules/asura-utils/io/binding/_file_system.cpp2
-rw-r--r--source/modules/asura-utils/io/binding/_io_task.cpp2
-rw-r--r--source/modules/asura-utils/io/compressor.cpp2
-rw-r--r--source/modules/asura-utils/io/compressor.h6
-rw-r--r--source/modules/asura-utils/io/file.cpp4
-rw-r--r--source/modules/asura-utils/io/file.h10
-rw-r--r--source/modules/asura-utils/io/renewable.h2
-rw-r--r--source/modules/asura-utils/manager.hpp4
-rw-r--r--source/modules/asura-utils/math/matrix44.cpp2
-rw-r--r--source/modules/asura-utils/math/matrix44.h6
-rw-r--r--source/modules/asura-utils/math/rect.hpp6
-rw-r--r--source/modules/asura-utils/math/transform.h6
-rw-r--r--source/modules/asura-utils/math/vector2.hpp6
-rw-r--r--source/modules/asura-utils/math/vector3.hpp6
-rw-r--r--source/modules/asura-utils/math/vector4.h6
-rw-r--r--source/modules/asura-utils/module.h8
-rw-r--r--source/modules/asura-utils/scripting/portable.hpp18
-rw-r--r--source/modules/asura-utils/singleton.hpp8
-rw-r--r--source/modules/asura-utils/stringmap.hpp4
-rw-r--r--source/modules/asura-utils/threading/thread_impl_posix.cpp9
-rw-r--r--source/modules/asura-utils/threading/thread_impl_posix.h2
-rw-r--r--source/modules/asura-utils/type.h8
-rw-r--r--source/modules/asura-utils/utils.h6
-rw-r--r--source/modules/asura-utils/utils_module.h34
109 files changed, 2773 insertions, 232 deletions
diff --git a/source/modules/asura-utils/Classes.h b/source/modules/asura-utils/Classes.h
new file mode 100644
index 0000000..d92c3d4
--- /dev/null
+++ b/source/modules/asura-utils/Classes.h
@@ -0,0 +1,9 @@
+#ifndef _ASURAENGINE_CLASSES_H_
+#define _ASURAENGINE_CLASSES_H_
+
+#define GET_SET(TYPE,PROP_NAME,VAR_NAME) void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } const TYPE Get##PROP_NAME () const {return (const TYPE)VAR_NAME; }
+
+#define namespace_begin(NAMESPACE) namespace NAMESPACE {
+#define namespace_end }
+
+#endif
diff --git a/source/modules/asura-utils/Exceptions/Exception.cpp b/source/modules/asura-utils/Exceptions/Exception.cpp
new file mode 100644
index 0000000..5240c49
--- /dev/null
+++ b/source/modules/asura-utils/Exceptions/Exception.cpp
@@ -0,0 +1,40 @@
+#include "Exception.h"
+
+#include <cstdarg>
+#include <iostream>
+
+namespace AsuraEngine
+{
+
+ Exception::Exception(const char *fmt, ...)
+ {
+ va_list args;
+ int size_buffer = 256, size_out;
+ char *buffer;
+ while (true)
+ {
+ buffer = new char[size_buffer];
+ memset(buffer, 0, size_buffer);
+
+ va_start(args, fmt);
+ size_out = vsnprintf(buffer, size_buffer, fmt, args);
+ va_end(args);
+
+ if (size_out == size_buffer || size_out == -1 || size_out == size_buffer - 1)
+ size_buffer *= 2;
+ else if (size_out > size_buffer)
+ size_buffer = size_out + 2;
+ else
+ break;
+
+ delete[] buffer;
+ }
+ message = std::string(buffer);
+ delete[] buffer;
+ }
+
+ Exception::~Exception() throw()
+ {
+ }
+
+}
diff --git a/source/modules/asura-utils/Exceptions/Exception.h b/source/modules/asura-utils/Exceptions/Exception.h
new file mode 100644
index 0000000..73c0861
--- /dev/null
+++ b/source/modules/asura-utils/Exceptions/Exception.h
@@ -0,0 +1,30 @@
+#ifndef _ASURA_ENGINE_EXCEPTION_H_
+#define _ASURA_ENGINE_EXCEPTION_H_
+
+#include <string>
+#include <exception>
+
+namespace AsuraEngine
+{
+
+class Exception : public std::exception
+{
+public:
+
+ Exception(const char *fmt, ...);
+ virtual ~Exception() throw();
+
+ inline virtual const char *what() const throw()
+ {
+ return message.c_str();
+ }
+
+private:
+
+ std::string message;
+
+}; // Exception
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/Compressor.cpp b/source/modules/asura-utils/IO/Compressor.cpp
new file mode 100644
index 0000000..4202263
--- /dev/null
+++ b/source/modules/asura-utils/IO/Compressor.cpp
@@ -0,0 +1,11 @@
+#include "Compressor.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/Compressor.h b/source/modules/asura-utils/IO/Compressor.h
new file mode 100644
index 0000000..dc25e2a
--- /dev/null
+++ b/source/modules/asura-utils/IO/Compressor.h
@@ -0,0 +1,28 @@
+#ifndef _ASURA_COMPRESSOR_H_
+#define _ASURA_COMPRESSOR_H_
+
+#include "../Scripting/Portable.hpp"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ class Compressor ASURA_FINAL
+ : public AEScripting::Portable<Compressor>
+ {
+ public:
+
+ LUAX_DECL_SINGLETON(Compressor);
+
+ private:
+
+ LUAX_DECL_METHOD(_Compress);
+ LUAX_DECL_METHOD(_Decompress);
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/io/data_buffer.cpp b/source/modules/asura-utils/IO/DataBuffer.cpp
index 37f749c..6660a94 100644
--- a/source/modules/asura-utils/io/data_buffer.cpp
+++ b/source/modules/asura-utils/IO/DataBuffer.cpp
@@ -1,6 +1,6 @@
#include <cstdlib>
#include <cstring>
-#include "data_buffer.h"
+#include "DataBuffer.h"
using namespace AEThreading;
diff --git a/source/modules/asura-utils/io/data_buffer.h b/source/modules/asura-utils/IO/DataBuffer.h
index 53ed603..93fac6e 100644
--- a/source/modules/asura-utils/io/data_buffer.h
+++ b/source/modules/asura-utils/IO/DataBuffer.h
@@ -1,10 +1,10 @@
-#ifndef __ASURA_ENGINE_DATABUFFER_H__
-#define __ASURA_ENGINE_DATABUFFER_H__
+#ifndef _ASURA_ENGINE_DATABUFFER_H_
+#define _ASURA_ENGINE_DATABUFFER_H_
#include <cstdlib>
-#include "../scripting/portable.hpp"
-#include "../threading/mutex.h"
+#include "../Scripting/Portable.hpp"
+#include "../Threads/Mutex.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/decoded_data.h b/source/modules/asura-utils/IO/DecodedData.h
index 882556c..73a2f74 100644
--- a/source/modules/asura-utils/io/decoded_data.h
+++ b/source/modules/asura-utils/IO/DecodedData.h
@@ -1,13 +1,13 @@
-#ifndef __ASURA_ENGINE_DATA_H__
-#define __ASURA_ENGINE_DATA_H__
+#ifndef _ASURA_ENGINE_DATA_H_
+#define _ASURA_ENGINE_DATA_H_
#include <cstdlib>
-#include <asura-utils/threading/thread.h>
+#include <asura-utils/Threads/Thread.h>
-#include "../scripting/portable.hpp"
+#include "../Scripting/Portable.hpp"
-#include "data_buffer.h"
+#include "DataBuffer.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/IO/File.cpp b/source/modules/asura-utils/IO/File.cpp
new file mode 100644
index 0000000..6d5f4eb
--- /dev/null
+++ b/source/modules/asura-utils/IO/File.cpp
@@ -0,0 +1,294 @@
+#include <physfs/physfs.h>
+
+#include <asura-utils/Exceptions/Exception.h>
+
+#include "File.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ File::File(const std::string& filename)
+ : m_FileName(filename)
+ , m_FileHandle(nullptr)
+ , m_Mode(FILE_MODE_CLOSED)
+ , m_BufferMode(BUFFER_MODE_NONE)
+ , m_BufferSize(0)
+ {
+ size_t dot = filename.rfind('.');
+ if (dot != std::string::npos)
+ {
+ m_Extension = filename.substr(dot + 1);
+ m_Name = filename.substr(0, dot);
+ }
+ else
+ m_Name = filename;
+ }
+
+ File::~File()
+ {
+ if (m_Mode != FILE_MODE_CLOSED)
+ Close();
+ }
+
+ bool File::Open(FileMode mode)
+ {
+ if (!PHYSFS_isInit())
+ throw Exception("Physfs is NOT initialized.");
+
+ if (mode == FILE_MODE_CLOSED)
+ return false;
+
+ if (mode == FILE_MODE_READ && !PHYSFS_exists(m_FileName.c_str()))
+ throw Exception("Could NOT open file %s. Does not exist.", m_FileName.c_str());
+
+ if (mode == FILE_MODE_APPEND || mode == FILE_MODE_WRITE)
+ {
+ if (!PHYSFS_getWriteDir())
+ {
+ throw Exception("Could NOT set write directory.");
+ }
+ }
+
+ // Ѿ֮ǰ򿪹Ͳٴµhandle
+ if (m_FileHandle != nullptr)
+ return true;
+
+ PHYSFS_getLastErrorCode();
+
+ PHYSFS_File* handle = nullptr;
+
+ switch (mode)
+ {
+ case FILE_MODE_READ:
+ handle = PHYSFS_openRead(m_FileName.c_str());
+ break;
+ case FILE_MODE_APPEND:
+ handle = PHYSFS_openAppend(m_FileName.c_str());
+ break;
+ case FILE_MODE_WRITE:
+ handle = PHYSFS_openWrite(m_FileName.c_str());
+ break;
+ }
+
+ if (handle == nullptr)
+ {
+ const char *err = PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode());
+ if (err == nullptr)
+ err = "unknown error";
+ throw Exception("Could not open file %s (%s)", m_FileName.c_str(), err);
+ }
+
+ m_FileHandle = handle;
+ m_Mode = mode;
+
+ if (m_FileHandle && !SetBuffer(m_BufferMode,m_BufferSize))
+ {
+ m_BufferMode = BUFFER_MODE_NONE;
+ m_BufferSize = 0;
+ }
+
+ return m_FileHandle != nullptr;
+ }
+
+ bool File::Close()
+ {
+ if (m_FileHandle == nullptr || !PHYSFS_close(m_FileHandle))
+ return false;
+ m_Mode = FILE_MODE_CLOSED;
+ m_FileHandle = nullptr;
+ return true;
+ }
+
+ bool File::IsOpen()
+ {
+ return m_Mode != FILE_MODE_CLOSED && m_FileHandle != nullptr;
+ }
+
+ size_t File::GetSize()
+ {
+ if (m_FileHandle == nullptr)
+ {
+ Open(FILE_MODE_READ);
+ size_t size = PHYSFS_fileLength(m_FileHandle);
+ Close();
+ return size;
+ }
+ return PHYSFS_fileLength(m_FileHandle);
+ }
+
+ size_t File::Read(ASURA_OUT DataBuffer* dst, size_t length)
+ {
+ ASSERT(dst);
+
+ if (dst->GetCapacity() < length)
+ throw Exception("Data buffer is too small compares to read length.");
+
+ if (!m_FileHandle || m_Mode != FILE_MODE_READ)
+ throw Exception("File \"%s\" is not opened for reading", m_FileName);
+
+ size_t max = PHYSFS_fileLength(m_FileHandle);
+ length = (length > max) ? max : length;
+
+ if (length < 0)
+ throw Exception("Invalid read size.");
+
+ dst->Lock();
+ size_t size = PHYSFS_readBytes(m_FileHandle, dst->GetData(), length);
+ dst->Unlock();
+ return size;
+ }
+
+ size_t File::ReadAll(ASURA_OUT DataBuffer* dst)
+ {
+ ASSERT(dst);
+
+ if (!m_FileHandle || m_Mode != FILE_MODE_READ)
+ throw Exception("File \"%s\" is not opened for reading", m_FileName);
+
+ size_t length = PHYSFS_fileLength(m_FileHandle);
+
+ if (dst->GetCapacity() < length)
+ throw Exception("Data buffer is too small compares to file length.");
+
+ dst->Lock();
+ byte* data = dst->GetData();
+ size_t size = PHYSFS_readBytes(m_FileHandle, data, length);
+ dst->Move(data, length);
+ dst->Unlock();
+ return size;
+ }
+
+#ifdef ASURA_WINDOWS
+ inline bool test_eof(File *that, PHYSFS_File *)
+ {
+ int64 pos = that->Tell();
+ int64 size = that->GetSize();
+ return pos == -1 || size == -1 || pos >= size;
+ }
+#else
+ inline bool test_eof(File *, PHYSFS_File *file)
+ {
+ return PHYSFS_eof(file);
+ }
+#endif
+
+ bool File::IsEOF()
+ {
+ return m_FileHandle == nullptr || test_eof(this, m_FileHandle);
+ }
+
+ size_t File::Tell()
+ {
+ if (!m_FileHandle)
+ return - 1;
+
+ return PHYSFS_tell(m_FileHandle);
+ }
+
+ bool File::Seek(size_t pos)
+ {
+ return m_FileHandle != nullptr && PHYSFS_seek(m_FileHandle, pos) != 0;
+ }
+
+ bool File::Write(ASURA_REF DataBuffer* src)
+ {
+ if (!m_FileHandle || (m_Mode != FILE_MODE_APPEND && m_Mode != FILE_MODE_WRITE))
+ throw Exception("File is not opened for writing.");
+
+ byte* data = src->GetData();
+ int size = src->GetSize();
+
+ if (size < 0)
+ throw Exception("Invalid write size.");
+
+ size_t written = PHYSFS_writeBytes(m_FileHandle, data, size);
+
+ if (written != src->GetSize())
+ return false;
+
+ // л
+ if (m_BufferSize == BUFFER_MODE_LINE && m_BufferSize > size)
+ {
+ if (memchr(data, '\n', size) != nullptr)
+ Flush();
+ }
+
+ return true;
+ }
+
+ bool File::Flush()
+ {
+ if (!m_FileHandle || (m_Mode != FILE_MODE_WRITE && m_Mode != FILE_MODE_APPEND))
+ throw Exception("File is not opened for writing.");
+
+ return PHYSFS_flush(m_FileHandle) != 0;
+ }
+
+ bool File::SetBuffer(BufferMode mode, size_t size)
+ {
+ if (size < 0)
+ return false;
+
+ // If the file isn't open, we'll make sure the buffer values are set in
+ // File::open.
+ if (!IsOpen())
+ {
+ m_BufferMode = mode;
+ m_BufferSize = size;
+ return true;
+ }
+
+ int ret = 1;
+
+ switch (mode)
+ {
+ case BUFFER_MODE_NONE:
+ default:
+ ret = PHYSFS_setBuffer(m_FileHandle, 0);
+ size = 0;
+ break;
+ case BUFFER_MODE_LINE:
+ case BUFFER_MODE_FULL:
+ ret = PHYSFS_setBuffer(m_FileHandle, size);
+ break;
+ }
+
+ if (ret == 0)
+ return false;
+
+ m_BufferMode = mode;
+ m_BufferSize = size;
+
+ return true;
+ }
+
+ File::BufferMode File::GetBuffer(ASURA_OUT size_t& size)
+ {
+ size = m_BufferSize;
+ return m_BufferMode;
+ }
+
+ const std::string& File::GetFileName()
+ {
+ return m_FileName;
+ }
+
+ const std::string& File::GetName()
+ {
+ return m_Name;
+ }
+
+ const std::string& File::GetExtension()
+ {
+ return m_Extension;
+ }
+
+ File::FileMode File::GetMode()
+ {
+ return m_Mode;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/File.h b/source/modules/asura-utils/IO/File.h
new file mode 100644
index 0000000..d11fa4f
--- /dev/null
+++ b/source/modules/asura-utils/IO/File.h
@@ -0,0 +1,146 @@
+#ifndef _ASURA_ENGINE_FILE_H_
+#define _ASURA_ENGINE_FILE_H_
+
+#include "physfs/physfs.h"
+
+#include "../Scripting/Portable.hpp"
+#include "../Threads/Thread.h"
+
+#include "FileData.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ ///
+ /// ʽļָд㡢Сʹȡʱʹñ࣬ʹFilesystem.read()ֱӶȡļȫ
+ /// ݣһFileData
+ ///
+ class File ASURA_FINAL
+ : public AEScripting::Portable<File>
+ {
+ public:
+
+ LUAX_DECL_FACTORY(File);
+
+ ///
+ /// ļдģʽ
+ ///
+ enum FileMode
+ {
+ FILE_MODE_CLOSED,
+ FILE_MODE_READ,
+ FILE_MODE_WRITE,
+ FILE_MODE_APPEND,
+ };
+
+ ///
+ /// ļдʱΪ
+ ///
+ enum BufferMode
+ {
+ BUFFER_MODE_NONE, ///< ʹû壬дļ
+ BUFFER_MODE_LINE, ///< л壬зߴﵽСʱдļ
+ BUFFER_MODE_FULL, ///< ȫ壬ʱдļ
+ };
+
+ File(const std::string& filename);
+ ~File();
+
+ bool Open(FileMode mode);
+ bool Close();
+ bool IsOpen();
+ FileMode GetMode();
+ size_t GetSize();
+
+ ///
+ /// ȡdata bufferض
+ ///
+ size_t Read(ASURA_OUT DataBuffer* dst, size_t length);
+ size_t ReadAll(ASURA_OUT DataBuffer* dst);
+ size_t ReadAsync(ASURA_OUT DataBuffer* dst);
+
+ ///
+ /// Ƿļβ
+ ///
+ bool IsEOF();
+
+ ///
+ /// data bufferед룬Ƿɹ
+ ///
+ bool Write(ASURA_REF DataBuffer* src);
+
+ ///
+ /// 첽дļдļtaskthreadĶС
+ ///
+ bool WriteAsync(ASURA_REF DataBuffer* src, AEThreading::Thread* thread);
+
+ ///
+ /// ˻壬ǿջдļ
+ ///
+ bool Flush();
+
+ ///
+ /// صǰдλ
+ ///
+ size_t Tell();
+
+ ///
+ /// Ӧλ
+ ///
+ bool Seek(size_t pos);
+
+ ///
+ /// ûСģʽ
+ ///
+ bool SetBuffer(BufferMode mode, size_t size);
+
+ ///
+ /// ȡСģʽ
+ ///
+ BufferMode GetBuffer(ASURA_OUT size_t& size);
+
+ const std::string& GetFileName();
+ const std::string& GetName();
+ const std::string& GetExtension();
+
+ private:
+
+ PHYSFS_File* m_FileHandle; ///< physfs ļ
+ std::string m_FileName; ///< ļ
+ std::string m_Extension; ///< չ
+ std::string m_Name; ///< չļ
+ FileMode m_Mode; ///< ļģʽ
+ BufferMode m_BufferMode; ///< д뻺ģʽ
+ size_t m_BufferSize; ///< д뻺С
+
+ LUAX_DECL_ENUM(FileMode);
+ LUAX_DECL_ENUM(BufferMode);
+
+ LUAX_DECL_METHOD(_New);
+ LUAX_DECL_METHOD(_Open);
+ LUAX_DECL_METHOD(_Close);
+ LUAX_DECL_METHOD(_IsOpen);
+ LUAX_DECL_METHOD(_GetMode);
+ LUAX_DECL_METHOD(_GetSize);
+ LUAX_DECL_METHOD(_Read);
+ LUAX_DECL_METHOD(_Write);
+ LUAX_DECL_METHOD(_ReadAsync);
+ LUAX_DECL_METHOD(_WriteAsync);
+ LUAX_DECL_METHOD(_IsEOF);
+ LUAX_DECL_METHOD(_Flush);
+ LUAX_DECL_METHOD(_Tell);
+ LUAX_DECL_METHOD(_Seek);
+ LUAX_DECL_METHOD(_SetBuffer);
+ LUAX_DECL_METHOD(_GetBuffer);
+ LUAX_DECL_METHOD(_GetFileName);
+ LUAX_DECL_METHOD(_GetExtension);
+ LUAX_DECL_METHOD(_GetName);
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/io/file_data.cpp b/source/modules/asura-utils/IO/FileData.cpp
index 30fa5bf..ca1cce7 100644
--- a/source/modules/asura-utils/io/file_data.cpp
+++ b/source/modules/asura-utils/IO/FileData.cpp
@@ -1,4 +1,4 @@
-#include "file_data.h"
+#include "FileData.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/file_data.h b/source/modules/asura-utils/IO/FileData.h
index ecc072b..f93040c 100644
--- a/source/modules/asura-utils/io/file_data.h
+++ b/source/modules/asura-utils/IO/FileData.h
@@ -1,11 +1,11 @@
-#ifndef __ASURA_ENGINE_FILE_DATA_H__
-#define __ASURA_ENGINE_FILE_DATA_H__
+#ifndef _ASURA_ENGINE_FILE_DATA_H_
+#define _ASURA_ENGINE_FILE_DATA_H_
#include <string>
-#include <asura-utils/scripting/portable.hpp>
+#include <asura-utils/Scripting/Portable.hpp>
-#include "data_buffer.h"
+#include "DataBuffer.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/file_system.cpp b/source/modules/asura-utils/IO/FileSystem.cpp
index f68bad6..9d0acf0 100644
--- a/source/modules/asura-utils/io/file_system.cpp
+++ b/source/modules/asura-utils/IO/FileSystem.cpp
@@ -2,9 +2,9 @@
#include "../exceptions/exception.h"
-#include "file.h"
-#include "file_data.h"
-#include "file_system.h"
+#include "File.h"
+#include "FileData.h"
+#include "FileSystem.h"
using namespace std;
diff --git a/source/modules/asura-utils/io/file_system.h b/source/modules/asura-utils/IO/FileSystem.h
index 9b4c4be..f0ac6ba 100644
--- a/source/modules/asura-utils/io/file_system.h
+++ b/source/modules/asura-utils/IO/FileSystem.h
@@ -1,15 +1,15 @@
-#ifndef __ASURA_ENGINE_FILESYSTEM_H__
-#define __ASURA_ENGINE_FILESYSTEM_H__
+#ifndef _ASURA_ENGINE_FILESYSTEM_H_
+#define _ASURA_ENGINE_FILESYSTEM_H_
#include <map>
#include <string>
-#include "../scripting/portable.hpp"
-#include "../singleton.hpp"
-#include "../type.h"
+#include "../Scripting/Portable.hpp"
+#include "../Singleton.hpp"
+#include "../Type.h"
-#include "file_data.h"
-#include "file.h"
+#include "FileData.h"
+#include "File.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/io_batch_task.cpp b/source/modules/asura-utils/IO/IOBatchTask.cpp
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/io/io_batch_task.cpp
+++ b/source/modules/asura-utils/IO/IOBatchTask.cpp
diff --git a/source/modules/asura-utils/io/io_batch_task.h b/source/modules/asura-utils/IO/IOBatchTask.h
index 0a551e8..a9355d5 100644
--- a/source/modules/asura-utils/io/io_batch_task.h
+++ b/source/modules/asura-utils/IO/IOBatchTask.h
@@ -1,7 +1,7 @@
-#ifndef __ASURA_IO_BATCH_TASK_H__
-#define __ASURA_IO_BATCH_TASK_H__
+#ifndef _ASURA_IO_BATCH_TASK_H_
+#define _ASURA_IO_BATCH_TASK_H_
-#include "io_task.h"
+#include "IOTask.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/io_task.cpp b/source/modules/asura-utils/IO/IOTask.cpp
index 6c323de..bfa6726 100644
--- a/source/modules/asura-utils/io/io_task.cpp
+++ b/source/modules/asura-utils/IO/IOTask.cpp
@@ -1,5 +1,5 @@
-#include "file_system.h"
-#include "io_task.h"
+#include "FileSystem.h"
+#include "IOTask.h"
#include <iostream>
diff --git a/source/modules/asura-utils/io/io_task.h b/source/modules/asura-utils/IO/IOTask.h
index 8026a24..a35fc54 100644
--- a/source/modules/asura-utils/io/io_task.h
+++ b/source/modules/asura-utils/IO/IOTask.h
@@ -1,12 +1,12 @@
-#ifndef __ASURA_IO_TASK_H__
-#define __ASURA_IO_TASK_H__
+#ifndef _ASURA_IO_TASK_H_
+#define _ASURA_IO_TASK_H_
#include <string>
-#include "../scripting/portable.hpp"
-#include "../threading/task.h"
+#include "../Scripting/Portable.hpp"
+#include "../Threads/Task.h"
-#include "data_buffer.h"
+#include "DataBuffer.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/IO/Renewable.h b/source/modules/asura-utils/IO/Renewable.h
new file mode 100644
index 0000000..90867f2
--- /dev/null
+++ b/source/modules/asura-utils/IO/Renewable.h
@@ -0,0 +1,29 @@
+#ifndef __ASURA_ENGINE_RENEWABLE_H__
+#define __ASURA_ENGINE_RENEWABLE_H__
+
+#include "../scripting/portable.hpp"
+
+#include "DecodedData.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ ///
+ /// ¹ݽṹͼƬƵ֣ӽݿֱӹڱ༭
+ /// ¹޸handleֵı䲻߱ƻԣڲıhandleԴ
+ ///
+ ASURA_ABSTRACT class Renewable
+ {
+ public:
+ Renewable() {};
+ virtual ~Renewable() {};
+ };
+
+ }
+}
+
+namespace AEIO = AsuraEngine::IO;
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/ranged_value.cpp b/source/modules/asura-utils/IO/binding/_compressor.cpp
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/math/ranged_value.cpp
+++ b/source/modules/asura-utils/IO/binding/_compressor.cpp
diff --git a/source/modules/asura-utils/IO/binding/_data_buffer.cpp b/source/modules/asura-utils/IO/binding/_data_buffer.cpp
new file mode 100644
index 0000000..9d3f3a0
--- /dev/null
+++ b/source/modules/asura-utils/IO/binding/_data_buffer.cpp
@@ -0,0 +1,132 @@
+#include "../DataBuffer.h"
+
+using namespace Luax;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ LUAX_REGISTRY(DataBuffer)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "GetData", _GetData },
+ { "GetSize", _GetSize },
+ { "GetCapacity", _GetCapacity },
+ { "Refactor", _Refactor },
+ { "Load", _Load },
+ { "Clear", _Clear }
+ );
+ }
+
+ LUAX_POSTPROCESS(DataBuffer)
+ {
+ }
+
+ // databuffer = DataBuffer.New(lstring)
+ // databuffer = DataBuffer.New(capacity)
+ LUAX_IMPL_METHOD(DataBuffer, _New)
+ {
+ LUAX_STATE(L);
+
+ if (state.IsType(1, LUA_TSTRING))
+ {
+ size_t size;
+ const byte* bytes = lua_tolstring(L, 1, &size);
+ DataBuffer* buffer = new DataBuffer(bytes, size);
+ buffer->PushLuaxUserdata(state);
+ return 1;
+ }
+ else if (state.IsType(1, LUA_TNUMBER))
+ {
+ size_t capacity = lua_tonumber(L, 1);
+ DataBuffer* buffer = new DataBuffer(capacity);
+ buffer->PushLuaxUserdata(state);
+ return 1;
+ }
+ else
+ {
+ return state.ErrorType(1, "number or string");
+ }
+ }
+
+ // lsting, len = databuffer:GetData()
+ LUAX_IMPL_METHOD(DataBuffer, _GetData)
+ {
+ LUAX_SETUP(L, "U");
+
+ DataBuffer* self = state.GetUserdata<DataBuffer>(1);
+ lua_pushlstring(L, self->GetData(), self->GetSize());
+ return 1;
+ }
+
+ // length = databuffer:GetSize()
+ LUAX_IMPL_METHOD(DataBuffer, _GetSize)
+ {
+ LUAX_SETUP(L, "U");
+
+ DataBuffer* self = state.GetUserdata<DataBuffer>(1);
+ lua_pushinteger(L, self->GetSize());
+ return 1;
+ }
+
+ // capacity = databuffer:GetCapacity()
+ LUAX_IMPL_METHOD(DataBuffer, _GetCapacity)
+ {
+ LUAX_SETUP(L, "U");
+
+ DataBuffer* self = state.GetUserdata<DataBuffer>(1);
+ lua_pushinteger(L, self->GetCapacity());
+ return 1;
+ }
+
+ // databuffer:Refactor(capacity)
+ LUAX_IMPL_METHOD(DataBuffer, _Refactor)
+ {
+ LUAX_PREPARE(L, DataBuffer);
+
+ size_t capacity = state.CheckValue<int>(2);
+ self->Refactor(capacity);
+ return 0;
+ }
+
+ // size = databuffer:Load(lstring)
+ // size = databuffer:Load(src)
+ LUAX_IMPL_METHOD(DataBuffer, _Load)
+ {
+ LUAX_STATE(L);
+
+ DataBuffer* buffer = state.GetUserdata<DataBuffer>(1);
+ const byte* data;
+ size_t size;
+ if (state.IsType(2, LUA_TSTRING))
+ {
+ data = lua_tolstring(L, 2, &size);
+ buffer->Load(data, size);
+ return 0;
+ }
+ else if(state.IsType(2, LUA_TUSERDATA))
+ {
+ DataBuffer* src = state.CheckUserdata<DataBuffer>(2);
+ buffer->Load(*src);
+ return 0;
+ }
+ else
+ {
+ return state.ErrorType(1, "lstring or DataBuffer");
+ }
+ }
+
+ // databuffer:Clear()
+ LUAX_IMPL_METHOD(DataBuffer, _Clear)
+ {
+ LUAX_SETUP(L, "U");
+
+ DataBuffer* self = state.GetUserdata<DataBuffer>(1);
+ self->Clear();
+ return 0;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/binding/_file.cpp b/source/modules/asura-utils/IO/binding/_file.cpp
new file mode 100644
index 0000000..c44bc90
--- /dev/null
+++ b/source/modules/asura-utils/IO/binding/_file.cpp
@@ -0,0 +1,223 @@
+#include "../file.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ LUAX_REGISTRY(File)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "Open", _Open },
+ { "Close", _Close },
+ { "IsOpen", _IsOpen },
+ { "GetMode", _GetMode },
+ { "GetSize", _GetSize },
+ { "Read", _Read },
+ { "IsEOF", _IsEOF },
+ { "Write", _Write },
+ { "Flush", _Flush },
+ { "Tell", _Tell },
+ { "Seek", _Seek },
+ { "SetBuffer", _SetBuffer },
+ { "GetBuffer", _GetBuffer },
+ { "GetFileName", _GetFileName },
+ { "GetExtension", _GetExtension },
+ { "GetName", _GetName }
+ );
+ }
+
+ LUAX_POSTPROCESS(File)
+ {
+ LUAX_REGISTER_ENUM(state, "EFileMode",
+ { "CLOSED", FILE_MODE_CLOSED },
+ { "READ", FILE_MODE_READ },
+ { "WRITE", FILE_MODE_WRITE },
+ { "APPEND", FILE_MODE_APPEND }
+ );
+
+ LUAX_REGISTER_ENUM(state, "EBufferMode",
+ { "NONE", BUFFER_MODE_NONE},
+ { "LINE", BUFFER_MODE_LINE},
+ { "FULL", BUFFER_MODE_FULL}
+ );
+ }
+
+ // file = File.New(name)
+ LUAX_IMPL_METHOD(File, _New)
+ {
+ LUAX_STATE(L);
+
+ cc8* name = state.CheckValue<cc8*>(1);
+ File* file = new File(name);
+ file->PushLuaxUserdata(state);
+ return 1;
+ }
+
+ // successsed = file:Open(mode)
+ LUAX_IMPL_METHOD(File, _Open)
+ {
+ LUAX_PREPARE(L, File);
+
+ File::FileMode mode = (File::FileMode)state.CheckValue<int>(2);
+ state.Push(self->Open(mode));
+ return 1;
+ }
+
+ // successed = file:Close()
+ LUAX_IMPL_METHOD(File, _Close)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->Close());
+ return 1;
+ }
+
+ // opened = file:IsOpen()
+ LUAX_IMPL_METHOD(File, _IsOpen)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->IsOpen());
+ return 1;
+ }
+
+ // mode = file:GetMode()
+ LUAX_IMPL_METHOD(File, _GetMode)
+ {
+ LUAX_PREPARE(L, File);
+
+ File::FileMode mode = self->GetMode();
+ state.Push((int)mode);
+ return 1;
+ }
+
+ // size = file:GetSize()
+ LUAX_IMPL_METHOD(File, _GetSize)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->GetSize());
+ return 1;
+ }
+
+ // size = file:Read(dst, len)
+ // returns:
+ // size ʵʶĴС
+ // params:
+ // self ļ
+ // dst Ŀ껺
+ // len ĴС
+ LUAX_IMPL_METHOD(File, _Read)
+ {
+ LUAX_PREPARE(L, File);
+
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ if (!db) return state.ErrorType(2, "DataBuffer");
+ int len = state.CheckValue<int>(3);
+ int size = self->Read(db, len);
+ state.Push(size);
+ return 1;
+ }
+
+ // isEOF = file:IsEOF()
+ LUAX_IMPL_METHOD(File, _IsEOF)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->IsEOF());
+ return 1;
+ }
+
+ // isWrite = file:Write(data buffer[, size])
+ LUAX_IMPL_METHOD(File, _Write)
+ {
+ LUAX_PREPARE(L, File);
+
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ if (!db) return state.ErrorType(2, "DataBuffer");
+ state.Push(self->Write(db));
+ return 1;
+ }
+
+ // isFlushed = file:Flush()
+ LUAX_IMPL_METHOD(File, _Flush)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->Flush());
+ return 1;
+ }
+
+ // pos = file:Tell()
+ LUAX_IMPL_METHOD(File, _Tell)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->Tell());
+ return 1;
+ }
+
+ // isSeek = file:Seek(pos)
+ LUAX_IMPL_METHOD(File, _Seek)
+ {
+ LUAX_PREPARE(L, File);
+
+ int pos = state.CheckValue<int>(2);
+ state.Push(self->Seek(pos));
+ return 1;
+ }
+
+ // isSetted = file:SetBuffer(mode, size)
+ LUAX_IMPL_METHOD(File, _SetBuffer)
+ {
+ LUAX_PREPARE(L, File);
+
+ BufferMode mode = (BufferMode)state.CheckValue<int>(2);
+ int size = state.CheckValue<int>(3);
+ state.Push(self->SetBuffer(mode, size));
+ return 1;
+ }
+
+ // size, mode = file:GetBuffer()
+ LUAX_IMPL_METHOD(File, _GetBuffer)
+ {
+ LUAX_PREPARE(L, File);
+
+ size_t size = 0;
+ BufferMode mode = self->GetBuffer(ASURA_OUT size);
+ state.Push((int)size);
+ state.Push((int)mode);
+ return 2;
+ }
+
+ // name = file:GetFileName()
+ LUAX_IMPL_METHOD(File, _GetFileName)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->GetFileName());
+ return 1;
+ }
+
+ // name = file:GetExtension()
+ LUAX_IMPL_METHOD(File, _GetExtension)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->GetExtension());
+ return 1;
+ }
+
+ // name = file:GetName()
+ LUAX_IMPL_METHOD(File, _GetName)
+ {
+ LUAX_PREPARE(L, File);
+
+ state.Push(self->GetName());
+ return 1;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/binding/_file_data.cpp b/source/modules/asura-utils/IO/binding/_file_data.cpp
new file mode 100644
index 0000000..55cbc8b
--- /dev/null
+++ b/source/modules/asura-utils/IO/binding/_file_data.cpp
@@ -0,0 +1,60 @@
+#include "../FileData.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ LUAX_REGISTRY(FileData)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "GetFileName", _GetFileName },
+ { "GetExtension", _GetExtension },
+ { "GetName", _GetName },
+ { "GetDataBuffer", _GetDataBuffer }
+ );
+ }
+
+ LUAX_POSTPROCESS(FileData)
+ {
+ }
+
+ // filename = filedata:GetFileName()
+ LUAX_IMPL_METHOD(FileData, _GetFileName)
+ {
+ LUAX_PREPARE(L, FileData);
+ string filename = self->GetFileName();
+ state.Push(filename);
+ return 1;
+ }
+
+ // extension = filedata:GetExtension()
+ LUAX_IMPL_METHOD(FileData, _GetExtension)
+ {
+ LUAX_PREPARE(L, FileData);
+ string extension = self->GetExtension();
+ state.Push(extension);
+ return 1;
+ }
+
+ // name = filedata:GetName()
+ LUAX_IMPL_METHOD(FileData, _GetName)
+ {
+ LUAX_PREPARE(L, FileData);
+ string extension = self->GetName();
+ state.Push(extension);
+ return 1;
+ }
+
+ // databuffer = filedata:GetDataBuffer()
+ LUAX_IMPL_METHOD(FileData, _GetDataBuffer)
+ {
+ LUAX_PREPARE(L, FileData);
+ self->PushLuaxMemberRef(state, self->m_DataRef);
+ return 1;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/binding/_file_system.cpp b/source/modules/asura-utils/IO/binding/_file_system.cpp
new file mode 100644
index 0000000..ace3c5f
--- /dev/null
+++ b/source/modules/asura-utils/IO/binding/_file_system.cpp
@@ -0,0 +1,265 @@
+#include "../FileSystem.h"
+
+using namespace Luax;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+#define PREPARE(l) \
+ LUAX_STATE(l); \
+ Filesystem* fs = Filesystem::Get();
+
+ LUAX_REGISTRY(Filesystem)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "Init", _Init },
+ { "Mount", _Mount },
+ { "Unmount", _Unmount },
+ { "GetMountPoint", _GetMountPoint },
+ { "SetWriteDirectory", _SetWriteDirectory },
+ { "GetWriteDirectory", _GetWriteDirectory },
+ { "CreateFile", _CreateFile },
+ { "CreateDirectory", _CreateDirectory },
+ { "Write", _Write },
+ { "Append", _Append },
+ { "Remove", _Remove },
+ { "Read", _Read },
+ { "GetFileInfo", _GetFileInfo },
+ { "GetDirectoryItems", _GetDirectoryItems }
+ );
+ }
+
+ LUAX_POSTPROCESS(Filesystem)
+ {
+ LUAX_REGISTER_ENUM(state, "EFileType",
+ { "FILE", FILE_TYPE_FILE },
+ { "DIRECTORY", FILE_TYPE_DIRECTORY },
+ { "SYMLINK", FILE_TYPE_SYMLINK },
+ { "OTHER", FILE_TYPE_OTHER }
+ );
+ }
+
+ // Filesystem.Init(arg0)
+ LUAX_IMPL_METHOD(Filesystem, _Init)
+ {
+ PREPARE(L);
+
+ const char* arg0 = state.CheckValue<const char*>(1);
+ fs->Init(arg0);
+ return 0;
+ }
+
+ // successed = Filesystem.Mount(path, mountpoint[, prepend = false])
+ // successed = Filesystem.Mount(data buffer, archievename, mountpoint[, prepend = false])
+ LUAX_IMPL_METHOD(Filesystem, _Mount)
+ {
+ PREPARE(L);
+ bool mounted = false;
+
+ if (state.IsType(1, LUA_TSTRING))
+ {
+ cc8* path = state.GetValue<cc8*>(1, "");
+ cc8* moutpoint = state.GetValue<cc8*>(2, "/");
+ bool prepend = state.GetValue<bool>(3, false);
+ mounted = fs->Mount(path, moutpoint, prepend);
+ }
+ else if (state.IsType(1, LUA_TUSERDATA))
+ {
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(1);
+ if (!db)
+ return state.ErrorType(1, "Data Buffer");
+ cc8* arcname = state.GetValue<cc8*>(2, "");
+ cc8* mountpoint = state.GetValue<cc8*>(3, "/");
+ bool prepend = state.GetValue<bool>(4, false);
+ mounted = fs->Mount(db, arcname, mountpoint, prepend);
+ // retain
+ fs->LuaxRetain<DataBuffer>(state, db);
+ }
+ state.Push(mounted);
+ return 1;
+ }
+
+ // successed = Filesystem.Unmount(path)
+ // successed = Filesystem.Unmount(data buffer)
+ LUAX_IMPL_METHOD(Filesystem, _Unmount)
+ {
+ PREPARE(L);
+ bool unmounted = false;
+
+ if (state.IsType(1, LUA_TSTRING))
+ {
+ cc8* path = state.GetValue<cc8*>(1, "");
+ unmounted = fs->Unmount(path);
+ }
+ else if (state.IsType(1, LUA_TUSERDATA))
+ {
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(1);
+ if (!db)
+ return state.ErrorType(1, "Data Buffer");
+ unmounted = fs->Unmount(db);
+ if (unmounted)
+ fs->LuaxRelease<DataBuffer>(state, db);
+ }
+ state.Push(unmounted);
+ return 1;
+ }
+
+ // moutpoint = Filesystem.GetMountPoint(path)
+ LUAX_IMPL_METHOD(Filesystem, _GetMountPoint)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ std::string mp;
+ if (fs->GetMountPoint(path, ASURA_OUT mp))
+ state.Push(mp);
+ else
+ state.PushNil();
+
+ return 1;
+ }
+
+ // Filesystem.SetWriteDirectory(dir)
+ LUAX_IMPL_METHOD(Filesystem, _SetWriteDirectory)
+ {
+ PREPARE(L);
+
+ cc8* dir = state.CheckValue<cc8*>(1);
+ fs->SetWriteDirectory(dir);
+ return 0;
+ }
+
+ // dir = Filesystem.GetWriteDirectory()
+ LUAX_IMPL_METHOD(Filesystem, _GetWriteDirectory)
+ {
+ PREPARE(L);
+
+ std::string dir = fs->GetWriteDirectory();
+ state.Push(dir);
+ return 1;
+ }
+
+ // file = Filesystem.CreateFile(name)
+ LUAX_IMPL_METHOD(Filesystem, _CreateFile)
+ {
+ PREPARE(L);
+
+ cc8* name = state.CheckValue<cc8*>(1);
+ File* file = fs->NewFile(name);
+ if (file)
+ file->PushLuaxUserdata(state);
+ else
+ state.PushNil();
+ return 1;
+ }
+
+ // successed = Filesystem.CreateDirectory(name)
+ LUAX_IMPL_METHOD(Filesystem, _CreateDirectory)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ state.Push(fs->NewDirectory(path));
+ return 1;
+ }
+
+ // successed = Filesystem.Write(path, data buffer)
+ LUAX_IMPL_METHOD(Filesystem, _Write)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ state.Push(fs->Write(path, db));
+ return 1;
+ }
+
+ // successed = Filesystem.Append(path, data buffer)
+ LUAX_IMPL_METHOD(Filesystem, _Append)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ state.Push(fs->Append(path, db));
+ return 1;
+ }
+
+ // successed = Filesystem.Remove(path)
+ LUAX_IMPL_METHOD(Filesystem, _Remove)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ state.Push(fs->Remove(path));
+ return 1;
+ }
+
+ // filedata = Filesystem.Read(path)
+ LUAX_IMPL_METHOD(Filesystem, _Read)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ FileData* fd = fs->Read(path);
+ if (fd)
+ {
+ fd->m_Data->PushLuaxUserdata(state);
+ fd->SetLuaxMemberRef(state, fd->m_DataRef, -1); // fd->m_DataRef = data buffer
+ state.Pop(1); // data buffer
+ fd->PushLuaxUserdata(state);
+ }
+ else
+ {
+ state.PushNil();
+ }
+ return 1;
+ }
+
+ // fileinfo = Filesystem.GetFileInfo(path)
+ LUAX_IMPL_METHOD(Filesystem, _GetFileInfo)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ FileInfo info;
+ if (fs->GetFileInfo(path, &info))
+ {
+ lua_newtable(L); // info table
+ state.SetField(-1, "size", info.size);
+ state.SetField(-1, "modtime", info.modtime);
+ state.SetField(-1, "type", info.type);
+ }
+ else
+ {
+ state.PushNil();
+ }
+ return 1;
+ }
+
+ // items = Filesystem.GetDirectoryItems(path)
+ LUAX_IMPL_METHOD(Filesystem, _GetDirectoryItems)
+ {
+ PREPARE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ std::vector<std::string> items;
+ if(fs->GetDirectoryItems(path, ASURA_OUT items))
+ {
+ lua_newtable(L); // item list
+ for (int i = 0; i < items.size(); ++i)
+ {
+ state.SetFieldByIndex(-1, i + 1, items[i]);
+ }
+ }
+ else
+ {
+ state.PushNil();
+ }
+ return 1;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/modules/asura-utils/IO/binding/_io_task.cpp b/source/modules/asura-utils/IO/binding/_io_task.cpp
new file mode 100644
index 0000000..058f4fd
--- /dev/null
+++ b/source/modules/asura-utils/IO/binding/_io_task.cpp
@@ -0,0 +1,46 @@
+#include "../IOTask.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ LUAX_REGISTRY(IOTask)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New }
+ );
+ }
+
+ LUAX_POSTPROCESS(IOTask)
+ {
+ LUAX_REGISTER_ENUM(state, "EIOTaskType",
+ { "READ", IOTASK_TYPE_READ },
+ { "WRITE", IOTASK_TYPE_WRITE },
+ { "APPEND", IOTASK_TYPE_APPEND }
+ );
+
+ }
+
+ // task = IOTask.New(path, buffer, type, callback)
+ LUAX_IMPL_METHOD(IOTask, _New)
+ {
+ LUAX_STATE(L);
+
+ cc8* path = state.CheckValue<cc8*>(1);
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ IOTaskType type = (IOTaskType)state.CheckValue<int>(3);
+ bool cbk = state.GetTop() >= 4 && state.IsType(4, LUA_TFUNCTION);
+
+ IOTask* task = new IOTask(path, db, type);
+ task->SetLuaxMemberRef(state, task->m_BufferRef, 2);
+ if(cbk)
+ task->SetLuaxMemberRef(state, task->m_Callback, 4);
+ task->PushLuaxUserdata(state);
+ return 1;
+ }
+
+ }
+}
diff --git a/source/modules/asura-utils/Manager.hpp b/source/modules/asura-utils/Manager.hpp
new file mode 100644
index 0000000..c6817b1
--- /dev/null
+++ b/source/modules/asura-utils/Manager.hpp
@@ -0,0 +1,14 @@
+#ifndef _ASURA_ENGINE_MANAGER_H_
+#define _ASURA_ENGINE_MANAGER_H_
+
+namespace AsuraEngine
+{
+
+ class Manager
+ {
+
+ };
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/ranged_value.h b/source/modules/asura-utils/Math/Curve.cpp
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/math/ranged_value.h
+++ b/source/modules/asura-utils/Math/Curve.cpp
diff --git a/source/modules/asura-utils/threading/thread_impl_sdl.cpp b/source/modules/asura-utils/Math/Curve.h
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/threading/thread_impl_sdl.cpp
+++ b/source/modules/asura-utils/Math/Curve.h
diff --git a/source/modules/asura-utils/threading/thread_impl_sdl.h b/source/modules/asura-utils/Math/Functions.cpp
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/threading/thread_impl_sdl.h
+++ b/source/modules/asura-utils/Math/Functions.cpp
diff --git a/source/modules/asura-utils/threading/thread_impl_std.cpp b/source/modules/asura-utils/Math/Functions.h
index e69de29..e69de29 100644
--- a/source/modules/asura-utils/threading/thread_impl_std.cpp
+++ b/source/modules/asura-utils/Math/Functions.h
diff --git a/source/modules/asura-utils/Math/Matrix44.cpp b/source/modules/asura-utils/Math/Matrix44.cpp
new file mode 100644
index 0000000..9ecf448
--- /dev/null
+++ b/source/modules/asura-utils/Math/Matrix44.cpp
@@ -0,0 +1,217 @@
+#include "Matrix44.h"
+
+#include <cstring> // memcpy
+#include <cmath>
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+
+ const Matrix44 Matrix44::Identity;
+
+ // | e0 e4 e8 e12 |
+ // | e1 e5 e9 e13 |
+ // | e2 e6 e10 e14 |
+ // | e3 e7 e11 e15 |
+
+ Matrix44::Matrix44()
+ {
+ SetIdentity();
+ }
+
+ Matrix44::Matrix44(const Matrix44& m)
+ {
+ memcpy(&e, &m.e, 16 * sizeof(float));
+ }
+
+ Matrix44::~Matrix44()
+ {
+ }
+
+ void Matrix44::operator = (const Matrix44& m)
+ {
+ memcpy(&e, &m.e, 16 * sizeof(float));
+ }
+
+ void Matrix44::SetOrtho(float l, float r, float b, float t, float n, float f)
+ {
+ SetIdentity();
+ float w = r - l;
+ float h = t - b;
+ float z = f - n;
+ e[0] = 2 / w;
+ e[5] = 2 / h;
+ e[10] = -2 / z;
+ e[12] = -(r + l) / w;
+ e[13] = -(t + b) / h;
+ e[14] = -(f + n) / z;
+ e[15] = 1;
+ }
+
+ // | e0 e4 e8 e12 |
+ // | e1 e5 e9 e13 |
+ // | e2 e6 e10 e14 |
+ // | e3 e7 e11 e15 |
+ // | e0 e4 e8 e12 |
+ // | e1 e5 e9 e13 |
+ // | e2 e6 e10 e14 |
+ // | e3 e7 e11 e15 |
+
+ Matrix44 Matrix44::operator * (const Matrix44 & m) const
+ {
+ Matrix44 t;
+
+ t.e[0] = (e[0] * m.e[0]) + (e[4] * m.e[1]) + (e[8] * m.e[2]) + (e[12] * m.e[3]);
+ t.e[4] = (e[0] * m.e[4]) + (e[4] * m.e[5]) + (e[8] * m.e[6]) + (e[12] * m.e[7]);
+ t.e[8] = (e[0] * m.e[8]) + (e[4] * m.e[9]) + (e[8] * m.e[10]) + (e[12] * m.e[11]);
+ t.e[12] = (e[0] * m.e[12]) + (e[4] * m.e[13]) + (e[8] * m.e[14]) + (e[12] * m.e[15]);
+
+ t.e[1] = (e[1] * m.e[0]) + (e[5] * m.e[1]) + (e[9] * m.e[2]) + (e[13] * m.e[3]);
+ t.e[5] = (e[1] * m.e[4]) + (e[5] * m.e[5]) + (e[9] * m.e[6]) + (e[13] * m.e[7]);
+ t.e[9] = (e[1] * m.e[8]) + (e[5] * m.e[9]) + (e[9] * m.e[10]) + (e[13] * m.e[11]);
+ t.e[13] = (e[1] * m.e[12]) + (e[5] * m.e[13]) + (e[9] * m.e[14]) + (e[13] * m.e[15]);
+
+ t.e[2] = (e[2] * m.e[0]) + (e[6] * m.e[1]) + (e[10] * m.e[2]) + (e[14] * m.e[3]);
+ t.e[6] = (e[2] * m.e[4]) + (e[6] * m.e[5]) + (e[10] * m.e[6]) + (e[14] * m.e[7]);
+ t.e[10] = (e[2] * m.e[8]) + (e[6] * m.e[9]) + (e[10] * m.e[10]) + (e[14] * m.e[11]);
+ t.e[14] = (e[2] * m.e[12]) + (e[6] * m.e[13]) + (e[10] * m.e[14]) + (e[14] * m.e[15]);
+
+ t.e[3] = (e[3] * m.e[0]) + (e[7] * m.e[1]) + (e[11] * m.e[2]) + (e[15] * m.e[3]);
+ t.e[7] = (e[3] * m.e[4]) + (e[7] * m.e[5]) + (e[11] * m.e[6]) + (e[15] * m.e[7]);
+ t.e[11] = (e[3] * m.e[8]) + (e[7] * m.e[9]) + (e[11] * m.e[10]) + (e[15] * m.e[11]);
+ t.e[15] = (e[3] * m.e[12]) + (e[7] * m.e[13]) + (e[11] * m.e[14]) + (e[15] * m.e[15]);
+
+ return t;
+ }
+
+ void Matrix44::operator *= (const Matrix44 & m)
+ {
+ Matrix44 t = (*this) * m;
+ memcpy((void*)this->e, (void*)t.e, sizeof(float) * 16);
+ }
+
+ const float * Matrix44::GetElements() const
+ {
+ return e;
+ }
+
+ void Matrix44::SetIdentity()
+ {
+ memset(e, 0, sizeof(float) * 16);
+ e[0] = e[5] = e[10] = e[15] = 1;
+ }
+
+ void Matrix44::SetTranslation(float x, float y)
+ {
+ SetIdentity();
+ e[12] = x;
+ e[13] = y;
+ }
+
+ void Matrix44::SetRotation(float rad)
+ {
+ SetIdentity();
+ float c = cos(rad), s = sin(rad);
+ e[0] = c; e[4] = -s;
+ e[1] = s; e[5] = c;
+ }
+
+ void Matrix44::SetScale(float sx, float sy)
+ {
+ SetIdentity();
+ e[0] = sx;
+ e[5] = sy;
+ }
+
+ void Matrix44::SetShear(float kx, float ky)
+ {
+ SetIdentity();
+ e[1] = ky;
+ e[4] = kx;
+ }
+
+ void Matrix44::SetTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy)
+ {
+ memset(e, 0, sizeof(float) * 16); // zero out matrix
+ float c = cos(angle), s = sin(angle);
+ // matrix multiplication carried out on paper:
+ // |1 x| |c -s | |sx | |1 -ox|
+ // | 1 y| |s c | | sy | | 1 -oy|
+ // | 1 | | 1 | | 1 | | 1 |
+ // | 1| | 1| | 1| | 1 |
+ // move rotate scale origin
+ e[10] = e[15] = 1.0f;
+ e[0] = c * sx; // = a
+ e[1] = s * sx; // = b
+ e[4] = -s * sy; // = c
+ e[5] = c * sy; // = d
+ e[12] = x - ox * e[0] - oy * e[4];
+ e[13] = y - ox * e[1] - oy * e[5];
+ }
+
+ void Matrix44::Translate(float x, float y)
+ {
+ Matrix44 t;
+ t.SetTranslation(x, y);
+ this->operator *=(t);
+ }
+
+ void Matrix44::Rotate(float rad)
+ {
+ Matrix44 t;
+ t.SetRotation(rad);
+ this->operator *=(t);
+ }
+
+ void Matrix44::Scale(float sx, float sy)
+ {
+ Matrix44 t;
+ t.SetScale(sx, sy);
+ this->operator *=(t);
+ }
+
+ void Matrix44::Shear(float kx, float ky)
+ {
+ Matrix44 t;
+ t.SetShear(kx, ky);
+ this->operator *=(t);
+ }
+
+ void Matrix44::Transform(float x, float y, float angle, float sx, float sy, float ox, float oy)
+ {
+ Matrix44 t;
+ t.SetTransformation(x, y, angle, sx, sy, ox, oy);
+ this->operator *=(t);
+ }
+
+ void Matrix44::Ortho(float left, float right, float bottom, float top, float near, float far)
+ {
+ Matrix44 t;
+ t.SetOrtho(left, right, bottom, top, near, far);
+ this->operator *=(t);
+ }
+
+ // | x |
+ // | y |
+ // | 0 |
+ // | 1 |
+ // | e0 e4 e8 e12 |
+ // | e1 e5 e9 e13 |
+ // | e2 e6 e10 e14 |
+ // | e3 e7 e11 e15 |
+
+ //void Matrix44::transform(Graphics::Vertex* dst, const Graphics::Vertex* src, int size) const
+ //{
+ // for (int i = 0; i<size; ++i)
+ // {
+ // // Store in temp variables in case src = dst
+ // float x = (e[0] * src[i].xy.x()) + (e[4] * src[i].xy.y()) + (0) + (e[12]);
+ // float y = (e[1] * src[i].xy.x()) + (e[5] * src[i].xy.y()) + (0) + (e[13]);
+
+ // dst[i].xy.Set(x, y);
+ // }
+ //}
+
+ } // namespace Math
+} // namespace JinEngine \ No newline at end of file
diff --git a/source/modules/asura-utils/Math/Matrix44.h b/source/modules/asura-utils/Math/Matrix44.h
new file mode 100644
index 0000000..7b66920
--- /dev/null
+++ b/source/modules/asura-utils/Math/Matrix44.h
@@ -0,0 +1,98 @@
+#ifndef _ASURA_MATRIX_H_
+#define _ASURA_MATRIX_H_
+
+#include "../Scripting/Portable.hpp"
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+
+ ///
+ /// ҪתõOpenGLglm::mat4
+ /// https://blog.csdn.net/candycat1992/article/details/8830894
+ ///
+ class Matrix44
+ {
+ public:
+
+ static const Matrix44 Identity;
+
+ Matrix44();
+
+ Matrix44(const Matrix44& m);
+
+ ~Matrix44();
+
+ void operator = (const Matrix44& m);
+
+ void SetOrtho(float _left, float _right, float _bottom, float _top, float _near, float _far);
+
+ Matrix44 operator * (const Matrix44 & m) const;
+
+ void operator *= (const Matrix44 & m);
+
+ const float* GetElements() const;
+
+ void SetIdentity();
+
+ void SetTranslation(float x, float y);
+
+ void SetRotation(float r);
+
+ void SetScale(float sx, float sy);
+
+ void SetShear(float kx, float ky);
+
+ void SetTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy);
+
+ void Translate(float x, float y);
+
+ void Rotate(float r);
+
+ void Scale(float sx, float sy);
+
+ void Transform(float x, float y, float angle, float sx, float sy, float ox, float oy);
+
+ ///
+ /// Multiplies this Matrix44 with a shear transformation.
+ /// @param kx Shear along the x-axis.
+ /// @param ky Shear along the y-axis.
+ ///
+ void Shear(float kx, float ky);
+
+ void Ortho(float left, float right, float bottom, float top, float near, float far);
+
+ /////
+ ///// Transforms an array of vertices by this Matrix44. The sources and
+ ///// destination arrays may be the same.
+ /////
+ ///// @param dst Storage for the transformed vertices.
+ ///// @param src The source vertices.
+ ///// @param size The number of vertices.
+ /////
+ //void transform(Graphics::Vertex* dst, const Graphics::Vertex * src, int size) const;
+
+ ///
+ /// ʽ
+ ///
+ float Calculate();
+
+ private:
+
+ ///
+ /// | e0 e4 e8 e12 |
+ /// | e1 e5 e9 e13 |
+ /// | e2 e6 e10 e14 |
+ /// | e3 e7 e11 e15 |
+ ///
+ float e[16];
+
+ };
+
+ }
+}
+
+namespace AEMath = AsuraEngine::Math;
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/Math/Quaternion.cpp b/source/modules/asura-utils/Math/Quaternion.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Math/Quaternion.cpp
diff --git a/source/modules/asura-utils/Math/Quaternion.h b/source/modules/asura-utils/Math/Quaternion.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Math/Quaternion.h
diff --git a/source/modules/asura-utils/Math/Rand/Rand.h b/source/modules/asura-utils/Math/Rand/Rand.h
new file mode 100644
index 0000000..efda8db
--- /dev/null
+++ b/source/modules/asura-utils/Math/Rand/Rand.h
@@ -0,0 +1,89 @@
+#ifndef RAND_H
+#define RAND_H
+
+#include "../../Type.h"
+#include "../../Classes.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Math)
+
+/*
+Some random generator timings:
+MacBook Pro w/ Core 2 Duo 2.4GHz. Times are for gcc 4.0.1 (OS X 10.6.2) / VS2008 SP1 (Win XP SP3),
+in milliseconds for this loop (4915200 calls):
+
+for (int j = 0; j < 100; ++j)
+for (int i = 0; i < 128*128*3; ++i)
+data[i] = (rnd.get() & 0x3) << 6;
+
+gcc vs2008 Size
+C's rand(): 57.0 109.3 ms 1
+Mersenne Twister: 56.0 37.4 ms 2500
+Unity 2.x LCG: 11.1 9.2 ms 4
+Xorshift 128: 15.0 17.8 ms 16
+Xorshift 32: 20.6 10.7 ms 4
+WELL 512: 43.6 55.1 ms 68
+*/
+
+
+// Xorshift 128 implementation
+// Xorshift paper: http://www.jstatsoft.org/v08/i14/paper
+// Wikipedia: http://en.wikipedia.org/wiki/Xorshift
+class Rand {
+public:
+
+ Rand(uint32 seed = 0)
+ {
+ SetSeed(seed);
+ }
+
+ uint32 Get()
+ {
+ uint32 t;
+ t = x ^ (x << 11);
+ x = y; y = z; z = w;
+ return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
+ }
+
+ inline static float GetFloatFromInt(uint32 value)
+ {
+ // take 23 bits of integer, and divide by 2^23-1
+ return float(value & 0x007FFFFF) * (1.0f / 8388607.0f);
+ }
+
+ inline static uint8 GetByteFromInt(uint32 value)
+ {
+ // take the most significant byte from the 23-bit value
+ return uint8(value >> (23 - 8));
+ }
+
+ // random number between 0.0 and 1.0
+ float GetFloat()
+ {
+ return GetFloatFromInt(Get());
+ }
+
+ // random number between -1.0 and 1.0
+ float GetSignedFloat()
+ {
+ return GetFloat() * 2.0f - 1.0f;
+ }
+
+ void SetSeed(uint32 seed)
+ {
+ x = seed;
+ y = x * 1812433253U + 1;
+ z = y * 1812433253U + 1;
+ w = z * 1812433253U + 1;
+ }
+
+ uint32 GetSeed() const { return x; }
+
+private:
+ uint32 x, y, z, w;
+};
+
+namespace_end
+namespace_end
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/Math/Rand/Random.h b/source/modules/asura-utils/Math/Rand/Random.h
new file mode 100644
index 0000000..cf2fc54
--- /dev/null
+++ b/source/modules/asura-utils/Math/Rand/Random.h
@@ -0,0 +1,9 @@
+#include "Rand.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Math)
+
+
+
+namespace_end
+namespace_end \ No newline at end of file
diff --git a/source/modules/asura-utils/Math/RangedValue.cpp b/source/modules/asura-utils/Math/RangedValue.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Math/RangedValue.cpp
diff --git a/source/modules/asura-utils/Math/RangedValue.h b/source/modules/asura-utils/Math/RangedValue.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Math/RangedValue.h
diff --git a/source/modules/asura-utils/Math/Rect.hpp b/source/modules/asura-utils/Math/Rect.hpp
new file mode 100644
index 0000000..45bf1ba
--- /dev/null
+++ b/source/modules/asura-utils/Math/Rect.hpp
@@ -0,0 +1,50 @@
+#ifndef _ASURA_ENGINE_RECT_H_
+#define _ASURA_ENGINE_RECT_H_
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+
+ template<typename T>
+ struct Rect
+ {
+ public:
+ Rect();
+ Rect(T x, T y, T w, T h);
+ ~Rect() {};
+
+ ///
+ /// x,yǷrectڡ
+ ///
+ bool Contain(T x, T y);
+
+ ///
+ /// Ƿཻཻľ
+ ///
+ bool Intersect(const Rect& src, Rect& intersection);
+
+ ///
+ /// Ƿཻཻľ
+ ///
+ static bool Intersect(const Rect<T>& src1, const Rect<T>& src2, Rect<T>& intersection);
+
+ void Set(T x, T y, T w, T h);
+
+ T x, y, w, h;
+ };
+
+#include "Rect.inc"
+
+ // Define the most common types
+ typedef Rect<int> Recti;
+ typedef Rect<unsigned int> Rectu;
+ typedef Rect<float> Rectf;
+ typedef Rect<long> Reftl;
+
+ }
+}
+
+namespace AEMath = AsuraEngine::Math;
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/rect.inl b/source/modules/asura-utils/Math/Rect.inc
index efafbf9..efafbf9 100644
--- a/source/modules/asura-utils/math/rect.inl
+++ b/source/modules/asura-utils/Math/Rect.inc
diff --git a/source/modules/asura-utils/Math/Transform.cpp b/source/modules/asura-utils/Math/Transform.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Math/Transform.cpp
diff --git a/source/modules/asura-utils/Math/Transform.h b/source/modules/asura-utils/Math/Transform.h
new file mode 100644
index 0000000..23d0709
--- /dev/null
+++ b/source/modules/asura-utils/Math/Transform.h
@@ -0,0 +1,30 @@
+#ifndef _ASURA_ENGINE_TRANSFORM_H_
+#define _ASURA_ENGINE_TRANSFORM_H_
+
+#include "../scripting/Portable.hpp"
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+
+ class Transform
+ {
+ public:
+
+ void Set(float x, float y, float sx, float sy, float ox, float oy, float r);
+
+ void LoadIdentity();
+
+ void Move(float dx = 0, float dy = 0);
+ void Rotate(float r);
+ void Scale(float sx, float sy);
+
+ float m[16]; //4x4 matrix
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/Math/Vector2.hpp b/source/modules/asura-utils/Math/Vector2.hpp
new file mode 100644
index 0000000..f2405eb
--- /dev/null
+++ b/source/modules/asura-utils/Math/Vector2.hpp
@@ -0,0 +1,72 @@
+#ifndef _ASURA_ENGINE_VECTOR2_H__
+#define _ASURA_ENGINE_VECTOR2_H__
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+ template <typename T>
+ class Vector2
+ {
+ public:
+ Vector2();
+ Vector2(T X, T Y);
+
+ template <typename U>
+ explicit Vector2(const Vector2<U>& vector);
+
+ void Set(T X, T Y);
+
+ T x; ///< X coordinate of the vector
+ T y; ///< Y coordinate of the vector
+ };
+
+ template <typename T>
+ Vector2<T> operator -(const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T>& operator +=(Vector2<T>& left, const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T>& operator -=(Vector2<T>& left, const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T> operator +(const Vector2<T>& left, const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T> operator -(const Vector2<T>& left, const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T> operator *(const Vector2<T>& left, T right);
+
+ template <typename T>
+ Vector2<T> operator *(T left, const Vector2<T>& right);
+
+ template <typename T>
+ Vector2<T>& operator *=(Vector2<T>& left, T right);
+
+ template <typename T>
+ Vector2<T> operator /(const Vector2<T>& left, T right);
+
+ template <typename T>
+ Vector2<T>& operator /=(Vector2<T>& left, T right);
+
+ template <typename T>
+ bool operator ==(const Vector2<T>& left, const Vector2<T>& right);
+
+ template <typename T>
+ bool operator !=(const Vector2<T>& left, const Vector2<T>& right);
+
+#include "Vector2.inc"
+
+ // Define the most common types
+ typedef Vector2<int> Vector2i;
+ typedef Vector2<unsigned int> Vector2u;
+ typedef Vector2<float> Vector2f;
+
+ }
+}
+
+namespace AEMath = AsuraEngine::Math;
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/vector2.inl b/source/modules/asura-utils/Math/Vector2.inc
index 155432a..155432a 100644
--- a/source/modules/asura-utils/math/vector2.inl
+++ b/source/modules/asura-utils/Math/Vector2.inc
diff --git a/source/modules/asura-utils/Math/Vector3.hpp b/source/modules/asura-utils/Math/Vector3.hpp
new file mode 100644
index 0000000..8da57cf
--- /dev/null
+++ b/source/modules/asura-utils/Math/Vector3.hpp
@@ -0,0 +1,233 @@
+#ifndef _ASURA_ENGINE_VECTOR3_H__
+#define _ASURA_ENGINE_VECTOR3_H__
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+ template <typename T>
+ class Vector3
+ {
+ public:
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Default constructor
+ ///
+ /// Creates a Vector3(0, 0, 0).
+ ///
+ ////////////////////////////////////////////////////////////
+ Vector3();
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Construct the vector from its coordinates
+ ///
+ /// \param X X coordinate
+ /// \param Y Y coordinate
+ /// \param Z Z coordinate
+ ///
+ ////////////////////////////////////////////////////////////
+ Vector3(T X, T Y, T Z);
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Construct the vector from another type of vector
+ ///
+ /// This constructor doesn't replace the copy constructor,
+ /// it's called only when U != T.
+ /// A call to this constructor will fail to compile if U
+ /// is not convertible to T.
+ ///
+ /// \param vector Vector to convert
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename U>
+ explicit Vector3(const Vector3<U>& vector);
+
+ ////////////////////////////////////////////////////////////
+ // Member data
+ ////////////////////////////////////////////////////////////
+ T x; ///< X coordinate of the vector
+ T y; ///< Y coordinate of the vector
+ T z; ///< Z coordinate of the vector
+ };
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of unary operator -
+ ///
+ /// \param left Vector to negate
+ ///
+ /// \return Memberwise opposite of the vector
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator -(const Vector3<T>& left);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator +=
+ ///
+ /// This operator performs a memberwise addition of both vectors,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T>& operator +=(Vector3<T>& left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator -=
+ ///
+ /// This operator performs a memberwise subtraction of both vectors,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T>& operator -=(Vector3<T>& left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator +
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise addition of both vectors
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator +(const Vector3<T>& left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator -
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise subtraction of both vectors
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator -(const Vector3<T>& left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator *
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Memberwise multiplication by \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator *(const Vector3<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator *
+ ///
+ /// \param left Left operand (a scalar value)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise multiplication by \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator *(T left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator *=
+ ///
+ /// This operator performs a memberwise multiplication by \a right,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T>& operator *=(Vector3<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator /
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Memberwise division by \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T> operator /(const Vector3<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator /=
+ ///
+ /// This operator performs a memberwise division by \a right,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector3<T>& operator /=(Vector3<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator ==
+ ///
+ /// This operator compares strict equality between two vectors.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return True if \a left is equal to \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ bool operator ==(const Vector3<T>& left, const Vector3<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector3
+ /// \brief Overload of binary operator !=
+ ///
+ /// This operator compares strict difference between two vectors.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return True if \a left is not equal to \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ bool operator !=(const Vector3<T>& left, const Vector3<T>& right);
+
+#include "Vector3.inc"
+
+ // Define the most common types
+ typedef Vector3<int> Vector3i;
+ typedef Vector3<float> Vector3f;
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/vector3.inl b/source/modules/asura-utils/Math/Vector3.inc
index 3a2aa93..3a2aa93 100644
--- a/source/modules/asura-utils/math/vector3.inl
+++ b/source/modules/asura-utils/Math/Vector3.inc
diff --git a/source/modules/asura-utils/Math/Vector4.h b/source/modules/asura-utils/Math/Vector4.h
new file mode 100644
index 0000000..a5bf549
--- /dev/null
+++ b/source/modules/asura-utils/Math/Vector4.h
@@ -0,0 +1,234 @@
+#ifndef _ASURA_ENGINE_VECTOR4_H__
+#define _ASURA_ENGINE_VECTOR4_H__
+
+namespace AsuraEngine
+{
+ namespace Math
+ {
+ template <typename T>
+ class Vector4
+ {
+ public:
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Default constructor
+ ///
+ /// Creates a Vector4(0, 0, 0).
+ ///
+ ////////////////////////////////////////////////////////////
+ Vector4();
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Construct the vector from its coordinates
+ ///
+ /// \param X X coordinate
+ /// \param Y Y coordinate
+ /// \param Z Z coordinate
+ ///
+ ////////////////////////////////////////////////////////////
+ Vector4(T X, T Y, T Z, T W);
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Construct the vector from another type of vector
+ ///
+ /// This constructor doesn't replace the copy constructor,
+ /// it's called only when U != T.
+ /// A call to this constructor will fail to compile if U
+ /// is not convertible to T.
+ ///
+ /// \param vector Vector to convert
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename U>
+ explicit Vector4(const Vector4<U>& vector);
+
+ ////////////////////////////////////////////////////////////
+ // Member data
+ ////////////////////////////////////////////////////////////
+ T x; ///< X coordinate of the vector
+ T y; ///< Y coordinate of the vector
+ T z; ///< Z coordinate of the vector
+ T w; ///< W coordinate of the vector
+ };
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of unary operator -
+ ///
+ /// \param left Vector to negate
+ ///
+ /// \return Memberwise opposite of the vector
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator -(const Vector4<T>& left);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator +=
+ ///
+ /// This operator performs a memberwise addition of both vectors,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T>& operator +=(Vector4<T>& left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator -=
+ ///
+ /// This operator performs a memberwise subtraction of both vectors,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T>& operator -=(Vector4<T>& left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator +
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise addition of both vectors
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator +(const Vector4<T>& left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator -
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise subtraction of both vectors
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator -(const Vector4<T>& left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator *
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Memberwise multiplication by \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator *(const Vector4<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator *
+ ///
+ /// \param left Left operand (a scalar value)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return Memberwise multiplication by \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator *(T left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator *=
+ ///
+ /// This operator performs a memberwise multiplication by \a right,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T>& operator *=(Vector4<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator /
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Memberwise division by \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T> operator /(const Vector4<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator /=
+ ///
+ /// This operator performs a memberwise division by \a right,
+ /// and assigns the result to \a left.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a scalar value)
+ ///
+ /// \return Reference to \a left
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ Vector4<T>& operator /=(Vector4<T>& left, T right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator ==
+ ///
+ /// This operator compares strict equality between two vectors.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return True if \a left is equal to \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ bool operator ==(const Vector4<T>& left, const Vector4<T>& right);
+
+ ////////////////////////////////////////////////////////////
+ /// \relates Vector4
+ /// \brief Overload of binary operator !=
+ ///
+ /// This operator compares strict difference between two vectors.
+ ///
+ /// \param left Left operand (a vector)
+ /// \param right Right operand (a vector)
+ ///
+ /// \return True if \a left is not equal to \a right
+ ///
+ ////////////////////////////////////////////////////////////
+ template <typename T>
+ bool operator !=(const Vector4<T>& left, const Vector4<T>& right);
+
+#include "Vector4.inc"
+
+ // Define the most common types
+ typedef Vector4<int> Vector4i;
+ typedef Vector4<float> Vector4f;
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/math/vector4.inl b/source/modules/asura-utils/Math/Vector4.inc
index 4b043a1..4b043a1 100644
--- a/source/modules/asura-utils/math/vector4.inl
+++ b/source/modules/asura-utils/Math/Vector4.inc
diff --git a/source/modules/asura-utils/Module.h b/source/modules/asura-utils/Module.h
new file mode 100644
index 0000000..2cc91d6
--- /dev/null
+++ b/source/modules/asura-utils/Module.h
@@ -0,0 +1,32 @@
+#ifndef _ASURA_MODULE_H_
+#define _ASURA_MODULE_H_
+
+#include "Type.h"
+#include "Scripting/Portable.hpp"
+
+namespace AsuraEngine
+{
+
+ ///
+ /// Asura libs Ҫ̳д࣬Կעᡣģа˳Щģ飬Ȼ˳InitializeFinalizeʼ
+ /// رЩģ顣
+ ///
+ ASURA_ABSTRACT class Module
+ {
+ public:
+
+ ///
+ /// ʼģ顣
+ ///
+ virtual void Initialize(Luax::LuaxState& state) = 0;
+
+ ///
+ /// رģ顣
+ ///
+ virtual void Finalize(Luax::LuaxState& state) = 0;
+
+ };
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/Scripting/Portable.hpp b/source/modules/asura-utils/Scripting/Portable.hpp
new file mode 100644
index 0000000..1eee123
--- /dev/null
+++ b/source/modules/asura-utils/Scripting/Portable.hpp
@@ -0,0 +1,31 @@
+#ifndef _ASURA_ENGINE_PORTABLE_H_
+#define _ASURA_ENGINE_PORTABLE_H_
+
+extern "C" {
+#include <lua51/lua.h>
+#include <lua51/lualib.h>
+#include <lua51/lauxlib.h>
+}
+
+#include <luax/luax.h>
+
+#include "../Type.h"
+#include "../Classes.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Scripting)
+
+
+/// ҪΪ࣬userdatamember ref̳д࣬ע̳С
+using Object = Luax::LuaxObject;
+
+/// ҪעluanativeҪ̳дģ塣BASEָ࣬ĬLuaxObjectָLuaxObjectࡢ
+template<typename TYPE, typename BASE = Luax::LuaxObject>
+using Portable = Luax::LuaxNativeClass<TYPE, BASE>;
+
+namespace_end
+namespace_end
+
+namespace AEScripting = AsuraEngine::Scripting;
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/Singleton.hpp b/source/modules/asura-utils/Singleton.hpp
new file mode 100644
index 0000000..9bb7336
--- /dev/null
+++ b/source/modules/asura-utils/Singleton.hpp
@@ -0,0 +1,59 @@
+#ifndef _ASURA_SINGLETON_H_
+#define _ASURA_SINGLETON_H_
+
+#include "UtilsConfig.h"
+
+namespace AsuraEngine
+{
+
+ ///
+ /// ̳Singletonڵһʵʱʵ֮ٴʵᱨ
+ ///
+ template<class T>
+ class Singleton
+ {
+ public:
+
+ static T* Get()
+ {
+ // ֮ǰûдһ
+ if (!instance) instance = new T;
+ // ʵ
+ return instance;
+ }
+
+ static void Destroy()
+ {
+ delete instance;
+ instance = nullptr;
+ }
+
+ protected:
+
+ Singleton()
+ {
+ // instanceζִһʵǴġ
+ ASSERT(!instance);
+ // 򣬽ʵΪʵ
+ instance = static_cast<T*>(this);
+ };
+
+ virtual ~Singleton() {};
+
+ static T* instance;
+
+ private:
+
+ Singleton(const Singleton& singleton);
+
+ Singleton& operator = (const Singleton& singleton);
+
+ };
+
+ // ʵʼΪ
+ template<class T>
+ T* Singleton<T>::instance = nullptr;
+
+}
+
+#endif // _ASURA_SINGLETON_H_ \ No newline at end of file
diff --git a/source/modules/asura-utils/StringMap.cpp b/source/modules/asura-utils/StringMap.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/StringMap.cpp
diff --git a/source/modules/asura-utils/StringMap.hpp b/source/modules/asura-utils/StringMap.hpp
new file mode 100644
index 0000000..15d28ee
--- /dev/null
+++ b/source/modules/asura-utils/StringMap.hpp
@@ -0,0 +1,29 @@
+#ifndef _ASURA_ENGINE_STRINGMAP_H_
+#define _ASURA_ENGINE_STRINGMAP_H_
+
+#include <string>
+
+namespace AsuraEngine
+{
+
+ ///
+ /// һ˫һһӦӳ䣬shader uniformsstatemathine state parameterID
+ ///
+ template<typename key_type>
+ class StringMap
+ {
+ public:
+
+ bool ContainsKey(const key_type& key);
+
+ bool ContainsString(const std::string& str);
+
+ std::string GetStringByKey(const key_type& key);
+
+ key_type GetKeyByString(const std::string& str);
+
+ };
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/conditional.cpp b/source/modules/asura-utils/Threads/Conditional.cpp
index c4d32d9..f86a81e 100644
--- a/source/modules/asura-utils/threading/conditional.cpp
+++ b/source/modules/asura-utils/Threads/Conditional.cpp
@@ -1,7 +1,7 @@
-#include "conditional.h"
+#include "Conditional.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
Conditional::Conditional()
: m_Waiting(0)
diff --git a/source/modules/asura-utils/threading/conditional.h b/source/modules/asura-utils/Threads/Conditional.h
index ff832ac..7a99ea1 100644
--- a/source/modules/asura-utils/threading/conditional.h
+++ b/source/modules/asura-utils/Threads/Conditional.h
@@ -1,13 +1,13 @@
-#ifndef __ASURA_CONDITIONAL_H__
-#define __ASURA_CONDITIONAL_H__
+#ifndef _ASURA_CONDITIONAL_H_
+#define _ASURA_CONDITIONAL_H_
-#include <asura-utils/classes.h>
+#include <asura-utils/Classes.h>
-#include "mutex.h"
-#include "semaphore.h"
+#include "Mutex.h"
+#include "Semaphore.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
///
///
diff --git a/source/modules/asura-utils/threading/coroutine.cpp b/source/modules/asura-utils/Threads/Coroutine.cpp
index 552a415..5c4ab68 100644
--- a/source/modules/asura-utils/threading/coroutine.cpp
+++ b/source/modules/asura-utils/Threads/Coroutine.cpp
@@ -1,7 +1,7 @@
#include "coroutine.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
/*
Coroutine::Coroutine()
diff --git a/source/modules/asura-utils/threading/coroutine.h b/source/modules/asura-utils/Threads/Coroutine.h
index 830dcd2..cdb21f8 100644
--- a/source/modules/asura-utils/threading/coroutine.h
+++ b/source/modules/asura-utils/Threads/Coroutine.h
@@ -1,12 +1,12 @@
-#ifndef __ASURA_COROUTINE_H__
-#define __ASURA_COROUTINE_H__
+#ifndef _ASURA_COROUTINE_H_
+#define _ASURA_COROUTINE_H_
-#include <asura-utils/classes.h>
+#include <asura-utils/Classes.h>
-#include "../scripting/portable.hpp"
+#include "../Scripting/Portable.hpp"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
///
/// luaЭ̣һЩ߼
@@ -35,6 +35,6 @@ private:
namespace_end
namespace_end
-namespace AEThreading = AsuraEngine::Threading;
+namespace AEThreading = AsuraEngine::Threads;
#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/mutex.cpp b/source/modules/asura-utils/Threads/Mutex.cpp
index ff0b3fa..501a0ed 100644
--- a/source/modules/asura-utils/threading/mutex.cpp
+++ b/source/modules/asura-utils/Threads/Mutex.cpp
@@ -1,9 +1,9 @@
-#include <asura-utils/exceptions/exception.h>
+#include <asura-utils/Exceptions/Exception.h>
-#include "mutex.h"
+#include "Mutex.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
#define try_create_mutex(impl)\
if (!m_Impl) \
diff --git a/source/modules/asura-utils/threading/mutex.h b/source/modules/asura-utils/Threads/Mutex.h
index 623a3db..4269c05 100644
--- a/source/modules/asura-utils/threading/mutex.h
+++ b/source/modules/asura-utils/Threads/Mutex.h
@@ -1,17 +1,17 @@
-#ifndef __ASURA_MUTEX_H__
-#define __ASURA_MUTEX_H__
+#ifndef _ASURA_MUTEX_H_
+#define _ASURA_MUTEX_H_
-#include <asura-utils/type.h>
-#include <asura-utils/classes.h>
+#include <asura-utils/Type.h>
+#include <asura-utils/Classes.h>
-#include "../utils_config.h"
+#include "../UtilsConfig.h"
#if ASURA_THREAD_WIN32
#include <windows.h>
#endif
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
#define ASURA_MUTEX_MAXWAIT (~(uint32)0)
@@ -123,6 +123,6 @@ class MutexImplSTD ASURA_FINAL : public MutexImpl
namespace_end
namespace_end
-namespace AEThreading = AsuraEngine::Threading;
+namespace AEThreading = AsuraEngine::Threads;
#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/semaphore.cpp b/source/modules/asura-utils/Threads/Semaphore.cpp
index f9ffb35..a222f3d 100644
--- a/source/modules/asura-utils/threading/semaphore.cpp
+++ b/source/modules/asura-utils/Threads/Semaphore.cpp
@@ -1,11 +1,11 @@
-#include "../exceptions/exception.h"
-#include "../type.h"
+#include "../Exceptions/Exception.h"
+#include "../Type.h"
-#include "mutex.h"
-#include "semaphore.h"
+#include "Mutex.h"
+#include "Semaphore.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
#define try_create_semaphore(impl) \
if (!m_Impl) \
diff --git a/source/modules/asura-utils/threading/semaphore.h b/source/modules/asura-utils/Threads/Semaphore.h
index ae7b10b..41b1fd2 100644
--- a/source/modules/asura-utils/threading/semaphore.h
+++ b/source/modules/asura-utils/Threads/Semaphore.h
@@ -1,14 +1,14 @@
-#ifndef __ASURA_SEMAPHORE_H__
-#define __ASURA_SEMAPHORE_H__
+#ifndef _ASURA_SEMAPHORE_H_
+#define _ASURA_SEMAPHORE_H_
-#include "../utils_config.h"
+#include "../UtilsConfig.h"
#if ASURA_THREAD_WIN32
#include <windows.h>
#endif
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
class SemaphoreImpl;
diff --git a/source/modules/asura-utils/threading/task.cpp b/source/modules/asura-utils/Threads/Task.cpp
index ea3f68e..9666cc6 100644
--- a/source/modules/asura-utils/threading/task.cpp
+++ b/source/modules/asura-utils/Threads/Task.cpp
@@ -1,10 +1,10 @@
#include "task.h"
-#include "../scripting/portable.hpp"
+#include "../scripting/Portable.hpp"
using namespace AEScripting;
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
namespace_end
namespace_end
diff --git a/source/modules/asura-utils/threading/task.h b/source/modules/asura-utils/Threads/Task.h
index b959012..b871303 100644
--- a/source/modules/asura-utils/threading/task.h
+++ b/source/modules/asura-utils/Threads/Task.h
@@ -1,12 +1,12 @@
-#ifndef __ASURA_THRAD_TASK_H__
-#define __ASURA_THRAD_TASK_H__
+#ifndef _ASURA_THRAD_TASK_H_
+#define _ASURA_THRAD_TASK_H_
-#include <asura-utils/type.h>
-#include <asura-utils/scripting/portable.hpp>
-#include <asura-utils/classes.h>
+#include <asura-utils/Type.h>
+#include <asura-utils/Scripting/Portable.hpp>
+#include <asura-utils/Classes.h>
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
///
/// ϣһ̴߳񣬼̳TaskдExecute
@@ -38,6 +38,6 @@ protected:
namespace_end
namespace_end
-namespace AEThreading = AsuraEngine::Threading;
+namespace AEThreading = AsuraEngine::Threads;
#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/thread.cpp b/source/modules/asura-utils/Threads/Thread.cpp
index cb71d32..1153912 100644
--- a/source/modules/asura-utils/threading/thread.cpp
+++ b/source/modules/asura-utils/Threads/Thread.cpp
@@ -1,12 +1,12 @@
-#include "thread.h"
+#include "Thread.h"
-#include "thread_impl_win32.h"
-#include "thread_impl_posix.h"
-#include "thread_impl_sdl.h"
-#include "thread_impl_std.h"
+#include "ThreadImplWin32.h"
+#include "ThreadImplPosix.h"
+#include "ThreadImplSdl.h"
+#include "ThreadImplStd.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
Thread::Thread(lua_State* luaThread, ThreadType type /*= THREAD_TYPE_DEFERRED*/, uint sleepTime /*= 0*/, const std::string& name /*= ""*/)
: m_Name(name)
diff --git a/source/modules/asura-utils/threading/thread.h b/source/modules/asura-utils/Threads/Thread.h
index 0235b6a..bc6f14e 100644
--- a/source/modules/asura-utils/threading/thread.h
+++ b/source/modules/asura-utils/Threads/Thread.h
@@ -1,18 +1,18 @@
-#ifndef __ASURA_THREAD_H__
-#define __ASURA_THREAD_H__
+#ifndef _ASURA_THREAD_H_
+#define _ASURA_THREAD_H_
#include <string>
#include <queue>
-#include <asura-utils/scripting/portable.hpp>
+#include <asura-utils/Scripting/Portable.hpp>
-#include "task.h"
-#include "mutex.h"
-#include "semaphore.h"
-#include "threadable.h"
+#include "Task.h"
+#include "Mutex.h"
+#include "Semaphore.h"
+#include "Threadable.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
class ThreadImpl;
diff --git a/source/modules/asura-utils/Threads/ThreadImplPosix.cpp b/source/modules/asura-utils/Threads/ThreadImplPosix.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Threads/ThreadImplPosix.cpp
diff --git a/source/modules/asura-utils/Threads/ThreadImplPosix.h b/source/modules/asura-utils/Threads/ThreadImplPosix.h
new file mode 100644
index 0000000..3089f0a
--- /dev/null
+++ b/source/modules/asura-utils/Threads/ThreadImplPosix.h
@@ -0,0 +1,2 @@
+#include <asura-utils/Classes.h>
+
diff --git a/source/modules/asura-utils/Threads/ThreadImplSDL.cpp b/source/modules/asura-utils/Threads/ThreadImplSDL.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Threads/ThreadImplSDL.cpp
diff --git a/source/modules/asura-utils/Threads/ThreadImplSDL.h b/source/modules/asura-utils/Threads/ThreadImplSDL.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Threads/ThreadImplSDL.h
diff --git a/source/modules/asura-utils/Threads/ThreadImplStd.cpp b/source/modules/asura-utils/Threads/ThreadImplStd.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/modules/asura-utils/Threads/ThreadImplStd.cpp
diff --git a/source/modules/asura-utils/threading/thread_impl_std.h b/source/modules/asura-utils/Threads/ThreadImplStd.h
index a2623ee..452f569 100644
--- a/source/modules/asura-utils/threading/thread_impl_std.h
+++ b/source/modules/asura-utils/Threads/ThreadImplStd.h
@@ -1,16 +1,16 @@
-#ifndef __ASURA_THREAD_STD_H__
-#define __ASURA_THREAD_STD_H__
+#ifndef _ASURA_THREAD_STD_H_
+#define _ASURA_THREAD_STD_H_
-#include "../utils_config.h"
+#include "../UtilsConfig.h"
#if ASURA_THREAD_STD
#include <windows.h>
-#include "thread.h"
+#include "Thread.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
///
/// Threadstd::threadʵ֡
@@ -38,4 +38,4 @@ namespace_end
#endif // #if ASURA_THREAD_STD
-#endif // __ASURA_THREAD_STD_H__ \ No newline at end of file
+#endif // _ASURA_THREAD_STD_H_ \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/thread_impl_win32.cpp b/source/modules/asura-utils/Threads/ThreadImplWin32.cpp
index c876be9..2467f87 100644
--- a/source/modules/asura-utils/threading/thread_impl_win32.cpp
+++ b/source/modules/asura-utils/Threads/ThreadImplWin32.cpp
@@ -1,12 +1,12 @@
-#include "thread_impl_win32.h"
-#include "thread.h"
+#include "ThreadImplWin32.h"
+#include "Thread.h"
#include <iostream>
#if ASURA_THREAD_WIN32
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
static DWORD WINAPI _thread_win32_runner(LPVOID param)
{
diff --git a/source/modules/asura-utils/threading/thread_impl_win32.h b/source/modules/asura-utils/Threads/ThreadImplWin32.h
index 846670b..93ca477 100644
--- a/source/modules/asura-utils/threading/thread_impl_win32.h
+++ b/source/modules/asura-utils/Threads/ThreadImplWin32.h
@@ -1,7 +1,7 @@
-#ifndef __ASURA_THREAD_WIN32_H__
-#define __ASURA_THREAD_WIN32_H__
+#ifndef _ASURA_THREAD_WIN32_H__
+#define _ASURA_THREAD_WIN32_H__
-#include "../utils_config.h"
+#include "../UtilsConfig.h"
#if ASURA_THREAD_WIN32
@@ -10,7 +10,7 @@
#include "thread.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
///
/// Threadwin32ʵ֡
@@ -41,4 +41,4 @@ namespace_end
namespace_end
#endif // #if ASURA_THREAD_WIN32
-#endif // __ASURA_THREAD_WIN32_H__ \ No newline at end of file
+#endif // _ASURA_THREAD_WIN32_H__ \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/threadable.h b/source/modules/asura-utils/Threads/Threadable.h
index 66973c5..fce7350 100644
--- a/source/modules/asura-utils/threading/threadable.h
+++ b/source/modules/asura-utils/Threads/Threadable.h
@@ -1,10 +1,10 @@
-#ifndef __ASURA_THREADABLE_H__
-#define __ASURA_THREADABLE_H__
+#ifndef _ASURA_THREADABLE_H_
+#define _ASURA_THREADABLE_H_
-#include "../type.h"
+#include "../Type.h"
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
ASURA_ABSTRACT class Threadable
{
diff --git a/source/modules/asura-utils/threading/binding/_coroutine.cpp b/source/modules/asura-utils/Threads/binding/_coroutine.cpp
index a710623..0656079 100644
--- a/source/modules/asura-utils/threading/binding/_coroutine.cpp
+++ b/source/modules/asura-utils/Threads/binding/_coroutine.cpp
@@ -1,9 +1,9 @@
-#include "../coroutine.h"
+#include "../Coroutine.h"
using namespace std;
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
LUAX_REGISTRY(Coroutine)
{
diff --git a/source/modules/asura-utils/threading/binding/_thread.cpp b/source/modules/asura-utils/Threads/binding/_thread.cpp
index b835453..aaa9e8d 100644
--- a/source/modules/asura-utils/threading/binding/_thread.cpp
+++ b/source/modules/asura-utils/Threads/binding/_thread.cpp
@@ -1,9 +1,9 @@
-#include "../thread.h"
+#include "../Thread.h"
using namespace std;
namespace_begin(AsuraEngine)
-namespace_begin(Threading)
+namespace_begin(Threads)
LUAX_REGISTRY(Thread)
{
diff --git a/source/modules/asura-utils/Type.h b/source/modules/asura-utils/Type.h
new file mode 100644
index 0000000..f7e54c6
--- /dev/null
+++ b/source/modules/asura-utils/Type.h
@@ -0,0 +1,34 @@
+#ifndef _ASURA_UTILS_TYPE_H_
+#define _ASURA_UTILS_TYPE_H_
+
+#include <cstdlib>
+#include <stdint.h>
+
+#include "asura-base/Config.h"
+
+namespace AsuraEngine
+{
+
+ //--------------------------------------------------------------------------------//
+
+ typedef int8_t int8;
+ typedef uint8_t uint8;
+ //typedef uint8 byte;
+ typedef char byte;
+ typedef int16_t int16;
+ typedef uint16_t uint16;
+ typedef int32_t int32;
+ typedef uint32_t uint32;
+ typedef int64_t int64;
+ typedef uint64_t uint64;
+
+ typedef uint32_t uint;
+ typedef int32_t sint;
+
+ typedef std::size_t size_t;
+
+ typedef const char cc8;
+
+} // namespace AsuraEngine
+
+#endif // _ASURA_CONFIG_H_ \ No newline at end of file
diff --git a/source/modules/asura-utils/Utils.h b/source/modules/asura-utils/Utils.h
new file mode 100644
index 0000000..dfcd2a6
--- /dev/null
+++ b/source/modules/asura-utils/Utils.h
@@ -0,0 +1,6 @@
+#ifndef _ASURA_UTILS_H_
+#define _ASURA_UTILS_H_
+
+#include "UtilsModule.h"
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/utils_config.h b/source/modules/asura-utils/UtilsConfig.h
index 7b120f0..89a605d 100644
--- a/source/modules/asura-utils/utils_config.h
+++ b/source/modules/asura-utils/UtilsConfig.h
@@ -1,8 +1,8 @@
-#ifndef __ASURA_UTILS_CONFIG_H__
-#define __ASURA_UTILS_CONFIG_H__
+#ifndef _ASURA_UTILS_CONFIG_H_
+#define _ASURA_UTILS_CONFIG_H_
// ı
-#include "asura-base/config.h"
+#include "asura-base/Config.h"
#define ASURA_THREAD_WIN32 1
#define ASURA_THREAD_STD 1
diff --git a/source/modules/asura-utils/utils_module.cpp b/source/modules/asura-utils/UtilsModule.cpp
index 5616be4..5735270 100644
--- a/source/modules/asura-utils/utils_module.cpp
+++ b/source/modules/asura-utils/UtilsModule.cpp
@@ -1,7 +1,7 @@
-#include "utils_module.h"
+#include "UtilsModule.h"
using namespace AsuraEngine::IO;
-using namespace AsuraEngine::Threading;
+using namespace AsuraEngine::Threads;
namespace AsuraEngine
{
@@ -14,7 +14,7 @@ namespace AsuraEngine
LUAX_REGISTER_FACTORY(state, DataBuffer);
LUAX_REGISTER_FACTORY(state, FileData);
LUAX_REGISTER_FACTORY(state, File);
- // Threading
+ // Threads
LUAX_REGISTER_FACTORY(state, Thread);
}
diff --git a/source/modules/asura-utils/UtilsModule.h b/source/modules/asura-utils/UtilsModule.h
new file mode 100644
index 0000000..b61dca9
--- /dev/null
+++ b/source/modules/asura-utils/UtilsModule.h
@@ -0,0 +1,34 @@
+#ifndef _ASURA_LIBS_UTIL_MODULE_H_
+#define _ASURA_LIBS_UTIL_MODULE_H_
+
+#include "IO/FileSystem.h"
+#include "IO/DataBuffer.h"
+#include "IO/FileData.h"
+#include "IO/file.h"
+#include "IO/IOTask.h"
+
+#include "Threads/Thread.h"
+
+#include "Module.h"
+
+#include "Classes.h"
+
+namespace AsuraEngine
+{
+
+ ///
+ /// Asuraģ
+ ///
+ class UtilsModule ASURA_FINAL : public Module
+ {
+ public:
+
+ void Initialize(Luax::LuaxState& state) override;
+
+ void Finalize(Luax::LuaxState& state) override;
+
+ };
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/classes.h b/source/modules/asura-utils/classes.h
index 8c89b6a..d92c3d4 100644
--- a/source/modules/asura-utils/classes.h
+++ b/source/modules/asura-utils/classes.h
@@ -1,5 +1,5 @@
-#ifndef __ASURAENGINE_CLASSES_H__
-#define __ASURAENGINE_CLASSES_H__
+#ifndef _ASURAENGINE_CLASSES_H_
+#define _ASURAENGINE_CLASSES_H_
#define GET_SET(TYPE,PROP_NAME,VAR_NAME) void Set##PROP_NAME (TYPE val) { VAR_NAME = val; } const TYPE Get##PROP_NAME () const {return (const TYPE)VAR_NAME; }
diff --git a/source/modules/asura-utils/exceptions/exception.h b/source/modules/asura-utils/exceptions/exception.h
index 4acbc1e..73c0861 100644
--- a/source/modules/asura-utils/exceptions/exception.h
+++ b/source/modules/asura-utils/exceptions/exception.h
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_EXCEPTION_H__
-#define __ASURA_ENGINE_EXCEPTION_H__
+#ifndef _ASURA_ENGINE_EXCEPTION_H_
+#define _ASURA_ENGINE_EXCEPTION_H_
#include <string>
#include <exception>
diff --git a/source/modules/asura-utils/io/binding/_data_buffer.cpp b/source/modules/asura-utils/io/binding/_data_buffer.cpp
index ac240e5..9d3f3a0 100644
--- a/source/modules/asura-utils/io/binding/_data_buffer.cpp
+++ b/source/modules/asura-utils/io/binding/_data_buffer.cpp
@@ -1,4 +1,4 @@
-#include "../data_buffer.h"
+#include "../DataBuffer.h"
using namespace Luax;
diff --git a/source/modules/asura-utils/io/binding/_file_data.cpp b/source/modules/asura-utils/io/binding/_file_data.cpp
index f4f6584..55cbc8b 100644
--- a/source/modules/asura-utils/io/binding/_file_data.cpp
+++ b/source/modules/asura-utils/io/binding/_file_data.cpp
@@ -1,4 +1,4 @@
-#include "../file_data.h"
+#include "../FileData.h"
using namespace std;
diff --git a/source/modules/asura-utils/io/binding/_file_system.cpp b/source/modules/asura-utils/io/binding/_file_system.cpp
index 0dc24d0..ace3c5f 100644
--- a/source/modules/asura-utils/io/binding/_file_system.cpp
+++ b/source/modules/asura-utils/io/binding/_file_system.cpp
@@ -1,4 +1,4 @@
-#include "../file_system.h"
+#include "../FileSystem.h"
using namespace Luax;
diff --git a/source/modules/asura-utils/io/binding/_io_task.cpp b/source/modules/asura-utils/io/binding/_io_task.cpp
index 4da8dc3..058f4fd 100644
--- a/source/modules/asura-utils/io/binding/_io_task.cpp
+++ b/source/modules/asura-utils/io/binding/_io_task.cpp
@@ -1,4 +1,4 @@
-#include "../io_task.h"
+#include "../IOTask.h"
using namespace std;
diff --git a/source/modules/asura-utils/io/compressor.cpp b/source/modules/asura-utils/io/compressor.cpp
index 095eff4..4202263 100644
--- a/source/modules/asura-utils/io/compressor.cpp
+++ b/source/modules/asura-utils/io/compressor.cpp
@@ -1,4 +1,4 @@
-#include "compressor.h"
+#include "Compressor.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/compressor.h b/source/modules/asura-utils/io/compressor.h
index 65fd88a..dc25e2a 100644
--- a/source/modules/asura-utils/io/compressor.h
+++ b/source/modules/asura-utils/io/compressor.h
@@ -1,7 +1,7 @@
-#ifndef __ASURA_COMPRESSOR_H__
-#define __ASURA_COMPRESSOR_H__
+#ifndef _ASURA_COMPRESSOR_H_
+#define _ASURA_COMPRESSOR_H_
-#include "../scripting/portable.hpp"
+#include "../Scripting/Portable.hpp"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/file.cpp b/source/modules/asura-utils/io/file.cpp
index a2f7403..6d5f4eb 100644
--- a/source/modules/asura-utils/io/file.cpp
+++ b/source/modules/asura-utils/io/file.cpp
@@ -1,8 +1,8 @@
#include <physfs/physfs.h>
-#include <asura-utils/exceptions/exception.h>
+#include <asura-utils/Exceptions/Exception.h>
-#include "file.h"
+#include "File.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/file.h b/source/modules/asura-utils/io/file.h
index 16de42b..d11fa4f 100644
--- a/source/modules/asura-utils/io/file.h
+++ b/source/modules/asura-utils/io/file.h
@@ -1,12 +1,12 @@
-#ifndef __ASURA_ENGINE_FILE_H__
-#define __ASURA_ENGINE_FILE_H__
+#ifndef _ASURA_ENGINE_FILE_H_
+#define _ASURA_ENGINE_FILE_H_
#include "physfs/physfs.h"
-#include "../scripting/portable.hpp"
-#include "../threading/thread.h"
+#include "../Scripting/Portable.hpp"
+#include "../Threads/Thread.h"
-#include "file_data.h"
+#include "FileData.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/io/renewable.h b/source/modules/asura-utils/io/renewable.h
index fd6c638..90867f2 100644
--- a/source/modules/asura-utils/io/renewable.h
+++ b/source/modules/asura-utils/io/renewable.h
@@ -3,7 +3,7 @@
#include "../scripting/portable.hpp"
-#include "decoded_data.h"
+#include "DecodedData.h"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/manager.hpp b/source/modules/asura-utils/manager.hpp
index 7b4e272..c6817b1 100644
--- a/source/modules/asura-utils/manager.hpp
+++ b/source/modules/asura-utils/manager.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_MANAGER_H__
-#define __ASURA_ENGINE_MANAGER_H__
+#ifndef _ASURA_ENGINE_MANAGER_H_
+#define _ASURA_ENGINE_MANAGER_H_
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/math/matrix44.cpp b/source/modules/asura-utils/math/matrix44.cpp
index 4472cd8..9ecf448 100644
--- a/source/modules/asura-utils/math/matrix44.cpp
+++ b/source/modules/asura-utils/math/matrix44.cpp
@@ -1,4 +1,4 @@
-#include "matrix44.h"
+#include "Matrix44.h"
#include <cstring> // memcpy
#include <cmath>
diff --git a/source/modules/asura-utils/math/matrix44.h b/source/modules/asura-utils/math/matrix44.h
index 30033c5..7b66920 100644
--- a/source/modules/asura-utils/math/matrix44.h
+++ b/source/modules/asura-utils/math/matrix44.h
@@ -1,7 +1,7 @@
-#ifndef __ASURA_MATRIX_H__
-#define __ASURA_MATRIX_H__
+#ifndef _ASURA_MATRIX_H_
+#define _ASURA_MATRIX_H_
-#include "../scripting/portable.hpp"
+#include "../Scripting/Portable.hpp"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/math/rect.hpp b/source/modules/asura-utils/math/rect.hpp
index 010a5db..45bf1ba 100644
--- a/source/modules/asura-utils/math/rect.hpp
+++ b/source/modules/asura-utils/math/rect.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_RECT_H__
-#define __ASURA_ENGINE_RECT_H__
+#ifndef _ASURA_ENGINE_RECT_H_
+#define _ASURA_ENGINE_RECT_H_
namespace AsuraEngine
{
@@ -34,7 +34,7 @@ namespace AsuraEngine
T x, y, w, h;
};
-#include "Rect.inl"
+#include "Rect.inc"
// Define the most common types
typedef Rect<int> Recti;
diff --git a/source/modules/asura-utils/math/transform.h b/source/modules/asura-utils/math/transform.h
index be4c850..23d0709 100644
--- a/source/modules/asura-utils/math/transform.h
+++ b/source/modules/asura-utils/math/transform.h
@@ -1,7 +1,7 @@
-#ifndef __ASURA_ENGINE_TRANSFORM_H__
-#define __ASURA_ENGINE_TRANSFORM_H__
+#ifndef _ASURA_ENGINE_TRANSFORM_H_
+#define _ASURA_ENGINE_TRANSFORM_H_
-#include "../scripting/portable.hpp"
+#include "../scripting/Portable.hpp"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/math/vector2.hpp b/source/modules/asura-utils/math/vector2.hpp
index e18bbdf..f2405eb 100644
--- a/source/modules/asura-utils/math/vector2.hpp
+++ b/source/modules/asura-utils/math/vector2.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_VECTOR2_H__
-#define __ASURA_ENGINE_VECTOR2_H__
+#ifndef _ASURA_ENGINE_VECTOR2_H__
+#define _ASURA_ENGINE_VECTOR2_H__
namespace AsuraEngine
{
@@ -57,7 +57,7 @@ namespace AsuraEngine
template <typename T>
bool operator !=(const Vector2<T>& left, const Vector2<T>& right);
-#include "Vector2.inl"
+#include "Vector2.inc"
// Define the most common types
typedef Vector2<int> Vector2i;
diff --git a/source/modules/asura-utils/math/vector3.hpp b/source/modules/asura-utils/math/vector3.hpp
index 2b23406..8da57cf 100644
--- a/source/modules/asura-utils/math/vector3.hpp
+++ b/source/modules/asura-utils/math/vector3.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_VECTOR3_H__
-#define __ASURA_ENGINE_VECTOR3_H__
+#ifndef _ASURA_ENGINE_VECTOR3_H__
+#define _ASURA_ENGINE_VECTOR3_H__
namespace AsuraEngine
{
@@ -221,7 +221,7 @@ namespace AsuraEngine
template <typename T>
bool operator !=(const Vector3<T>& left, const Vector3<T>& right);
-#include "Vector3.inl"
+#include "Vector3.inc"
// Define the most common types
typedef Vector3<int> Vector3i;
diff --git a/source/modules/asura-utils/math/vector4.h b/source/modules/asura-utils/math/vector4.h
index 13a9d8a..a5bf549 100644
--- a/source/modules/asura-utils/math/vector4.h
+++ b/source/modules/asura-utils/math/vector4.h
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_VECTOR4_H__
-#define __ASURA_ENGINE_VECTOR4_H__
+#ifndef _ASURA_ENGINE_VECTOR4_H__
+#define _ASURA_ENGINE_VECTOR4_H__
namespace AsuraEngine
{
@@ -222,7 +222,7 @@ namespace AsuraEngine
template <typename T>
bool operator !=(const Vector4<T>& left, const Vector4<T>& right);
-#include "Vector4.inl"
+#include "Vector4.inc"
// Define the most common types
typedef Vector4<int> Vector4i;
diff --git a/source/modules/asura-utils/module.h b/source/modules/asura-utils/module.h
index b22c68c..2cc91d6 100644
--- a/source/modules/asura-utils/module.h
+++ b/source/modules/asura-utils/module.h
@@ -1,8 +1,8 @@
-#ifndef __ASURA_MODULE_H__
-#define __ASURA_MODULE_H__
+#ifndef _ASURA_MODULE_H_
+#define _ASURA_MODULE_H_
-#include "type.h"
-#include "scripting/portable.hpp"
+#include "Type.h"
+#include "Scripting/Portable.hpp"
namespace AsuraEngine
{
diff --git a/source/modules/asura-utils/scripting/portable.hpp b/source/modules/asura-utils/scripting/portable.hpp
index d691455..1eee123 100644
--- a/source/modules/asura-utils/scripting/portable.hpp
+++ b/source/modules/asura-utils/scripting/portable.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_PORTABLE_H__
-#define __ASURA_ENGINE_PORTABLE_H__
+#ifndef _ASURA_ENGINE_PORTABLE_H_
+#define _ASURA_ENGINE_PORTABLE_H_
extern "C" {
#include <lua51/lua.h>
@@ -8,12 +8,12 @@ extern "C" {
}
#include <luax/luax.h>
-#include "../type.h"
-namespace AsuraEngine
-{
-namespace Scripting
-{
+#include "../Type.h"
+#include "../Classes.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Scripting)
/// ҪΪ࣬userdatamember ref̳д࣬ע̳С
@@ -23,8 +23,8 @@ using Object = Luax::LuaxObject;
template<typename TYPE, typename BASE = Luax::LuaxObject>
using Portable = Luax::LuaxNativeClass<TYPE, BASE>;
-}
-}
+namespace_end
+namespace_end
namespace AEScripting = AsuraEngine::Scripting;
diff --git a/source/modules/asura-utils/singleton.hpp b/source/modules/asura-utils/singleton.hpp
index 0d2777e..9bb7336 100644
--- a/source/modules/asura-utils/singleton.hpp
+++ b/source/modules/asura-utils/singleton.hpp
@@ -1,7 +1,7 @@
-#ifndef __ASURA_SINGLETON_H__
-#define __ASURA_SINGLETON_H__
+#ifndef _ASURA_SINGLETON_H_
+#define _ASURA_SINGLETON_H_
-#include "utils_config.h"
+#include "UtilsConfig.h"
namespace AsuraEngine
{
@@ -56,4 +56,4 @@ namespace AsuraEngine
}
-#endif // __ASURA_SINGLETON_H__ \ No newline at end of file
+#endif // _ASURA_SINGLETON_H_ \ No newline at end of file
diff --git a/source/modules/asura-utils/stringmap.hpp b/source/modules/asura-utils/stringmap.hpp
index 8d8f231..15d28ee 100644
--- a/source/modules/asura-utils/stringmap.hpp
+++ b/source/modules/asura-utils/stringmap.hpp
@@ -1,5 +1,5 @@
-#ifndef __ASURA_ENGINE_STRINGMAP_H__
-#define __ASURA_ENGINE_STRINGMAP_H__
+#ifndef _ASURA_ENGINE_STRINGMAP_H_
+#define _ASURA_ENGINE_STRINGMAP_H_
#include <string>
diff --git a/source/modules/asura-utils/threading/thread_impl_posix.cpp b/source/modules/asura-utils/threading/thread_impl_posix.cpp
deleted file mode 100644
index d59bd8f..0000000
--- a/source/modules/asura-utils/threading/thread_impl_posix.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "thread_impl_posix.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Threading)
-
-
-
-namespace_end
-namespace_end \ No newline at end of file
diff --git a/source/modules/asura-utils/threading/thread_impl_posix.h b/source/modules/asura-utils/threading/thread_impl_posix.h
deleted file mode 100644
index a65a2ca..0000000
--- a/source/modules/asura-utils/threading/thread_impl_posix.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <asura-utils/classes.h>
-
diff --git a/source/modules/asura-utils/type.h b/source/modules/asura-utils/type.h
index 2976d3e..f7e54c6 100644
--- a/source/modules/asura-utils/type.h
+++ b/source/modules/asura-utils/type.h
@@ -1,10 +1,10 @@
-#ifndef __ASURA_UTILS_TYPE_H__
-#define __ASURA_UTILS_TYPE_H__
+#ifndef _ASURA_UTILS_TYPE_H_
+#define _ASURA_UTILS_TYPE_H_
#include <cstdlib>
#include <stdint.h>
-#include "asura-base/config.h"
+#include "asura-base/Config.h"
namespace AsuraEngine
{
@@ -31,4 +31,4 @@ namespace AsuraEngine
} // namespace AsuraEngine
-#endif // __ASURA_CONFIG_H__ \ No newline at end of file
+#endif // _ASURA_CONFIG_H_ \ No newline at end of file
diff --git a/source/modules/asura-utils/utils.h b/source/modules/asura-utils/utils.h
index ce1c6a1..dfcd2a6 100644
--- a/source/modules/asura-utils/utils.h
+++ b/source/modules/asura-utils/utils.h
@@ -1,6 +1,6 @@
-#ifndef __ASURA_UTILS_H__
-#define __ASURA_UTILS_H__
+#ifndef _ASURA_UTILS_H_
+#define _ASURA_UTILS_H_
-#include "utils_module.h"
+#include "UtilsModule.h"
#endif \ No newline at end of file
diff --git a/source/modules/asura-utils/utils_module.h b/source/modules/asura-utils/utils_module.h
deleted file mode 100644
index 479b052..0000000
--- a/source/modules/asura-utils/utils_module.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __ASURA_LIBS_UTIL_MODULE_H__
-#define __ASURA_LIBS_UTIL_MODULE_H__
-
-#include "io/file_system.h"
-#include "io/data_buffer.h"
-#include "io/file_data.h"
-#include "io/file.h"
-#include "io/io_task.h"
-
-#include "threading/thread.h"
-
-#include "module.h"
-
-#include "classes.h"
-
-namespace AsuraEngine
-{
-
- ///
- /// Asuraģ
- ///
- class UtilsModule ASURA_FINAL : public Module
- {
- public:
-
- void Initialize(Luax::LuaxState& state) override;
-
- void Finalize(Luax::LuaxState& state) override;
-
- };
-
-}
-
-#endif \ No newline at end of file