summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-27 22:18:14 +0800
committerchai <chaifix@163.com>2019-03-27 22:18:14 +0800
commit69f7d1bd745ed5680b9bc4e3cfdd882ff2a5ad26 (patch)
tree729e563da8fea6cf8c5455f3afdb3c6ce0aecde4
parent66c5fdc564dd892ed265132d6c1378dbe3cebcee (diff)
+threading
-rw-r--r--Build/Asura.sln48
-rw-r--r--Samples/Hello/entities/anim.gameobject.asset3
-rw-r--r--Samples/Hello/entities/player.gameobject.asset15
-rw-r--r--bin/win64/02-luax.exebin537088 -> 0 bytes
-rw-r--r--bin/win64/05-physfs.exebin1017344 -> 1068544 bytes
-rw-r--r--bin/win64/05-physfs.exe.lastcodeanalysissucceeded0
-rw-r--r--bin/win64/Luax.lib.lastcodeanalysissucceeded0
-rw-r--r--bin/win64/asura-lib-utils.lib.lastcodeanalysissucceeded0
-rw-r--r--bin/win64/bindingGen.exebin9216 -> 9216 bytes
-rw-r--r--bin/win64/bindingGen.exe.CodeAnalysisLog.xml28
-rw-r--r--bin/win64/bindingGen.exe.lastcodeanalysissucceeded0
-rw-r--r--build/3rd-party/LuaSocket/LuaSocket.vcxproj122
-rw-r--r--build/3rd-party/LuaSocket/LuaSocket.vcxproj.filters2
-rw-r--r--build/3rd-party/LuaSocket/LuaSocket.vcxproj.user4
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_cfunctions.nativecodeanalysis.xml2
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_class.nativecodeanalysis.xml2
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_context.nativecodeanalysis.xml17
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_enum.nativecodeanalysis.xml2
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_memberref.nativecodeanalysis.xml17
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_ref.nativecodeanalysis.xml45
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_reftable.nativecodeanalysis.xml45
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_runtime.nativecodeanalysis.xml45
-rw-r--r--build/3rd-party/Luax/x64/Debug/luax_state.nativecodeanalysis.xml2
-rw-r--r--build/3rd-party/Luax/x64/Debug/vc.nativecodeanalysis.all.xml131
-rw-r--r--build/Asura.sln48
-rw-r--r--build/libs/asura-lib-core/asura-lib-core.vcxproj14
-rw-r--r--build/libs/asura-lib-core/asura-lib-core.vcxproj.filters45
-rw-r--r--build/libs/asura-lib-network/asura-lib-network.vcxproj122
-rw-r--r--build/libs/asura-lib-network/asura-lib-network.vcxproj.filters2
-rw-r--r--build/libs/asura-lib-network/asura-lib-network.vcxproj.user4
-rw-r--r--build/libs/asura-lib-utils/asura-lib-utils.vcxproj5
-rw-r--r--build/libs/asura-lib-utils/asura-lib-utils.vcxproj.filters18
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_compressor.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_coroutine.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_data_buffer.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_file.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_file_data.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_file_system.nativecodeanalysis.xml59
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/_thread.nativecodeanalysis.xml31
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/compressor.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/coroutine.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/curve.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/data_buffer.nativecodeanalysis.xml45
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/decoded_data.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/exception.nativecodeanalysis.xml17
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/file.nativecodeanalysis.xml17
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/file_data.nativecodeanalysis.xml17
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/file_system.nativecodeanalysis.xml17
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/functions.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/io_task.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/matrix44.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/mutex.nativecodeanalysis.xml45
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/ranged_value.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/stringmap.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread.nativecodeanalysis.xml73
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread_impl_posix.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread_impl_sdl.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread_impl_std.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread_impl_win32.nativecodeanalysis.xml73
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/thread_task.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/transform.nativecodeanalysis.xml2
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/utils_module.nativecodeanalysis.xml31
-rw-r--r--build/libs/asura-lib-utils/x64/Debug/vc.nativecodeanalysis.all.xml209
-rw-r--r--build/tests/05-physfs/x64/Debug/main.nativecodeanalysis.xml31
-rw-r--r--build/tests/05-physfs/x64/Debug/vc.nativecodeanalysis.all.xml27
-rw-r--r--build/tools/bindingGen/main.cs2
-rw-r--r--build/tools/bindingGen/obj/Debug/bindingGen.csproj.FileListAbsolute.txt2
-rw-r--r--build/tools/bindingGen/obj/Debug/bindingGen.csprojAssemblyReference.cachebin8077 -> 8077 bytes
-rw-r--r--build/tools/bindingGen/obj/Debug/bindingGen.exebin9216 -> 9216 bytes
-rw-r--r--samples/Hello/entities/anim.gameobject.asset3
-rw-r--r--samples/Hello/entities/player.gameobject.asset15
-rw-r--r--samples/Hello/prefabs/anim.prefab.asset3
-rw-r--r--samples/Hello/prefabs/player.prefab.asset22
-rw-r--r--source/3rd-party/Luax/luax_class.hpp4
-rw-r--r--source/3rd-party/Luax/luax_config.h4
-rw-r--r--source/3rd-party/Luax/luax_state.h37
-rw-r--r--source/Asura.Editor/system/file_watcher.h517
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_image.cpp57
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp21
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_window.cpp103
-rw-r--r--source/libs/asura-lib-core/graphics/image.h15
-rw-r--r--source/libs/asura-lib-core/graphics/window.h19
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glew.cpp0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glew.h0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glut.cpp0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glut.h0
-rw-r--r--source/libs/asura-lib-core/threading/coroutine.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/coroutine.h31
-rw-r--r--source/libs/asura-lib-core/threading/thread.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread.h53
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_posix.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_posix.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_sdl.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_sdl.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_std.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_std.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_win32.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_win32.h25
-rw-r--r--source/libs/asura-lib-core/threading/thread_task.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_task.h25
-rw-r--r--source/libs/asura-lib-utils/io/binding/_io_task.cpp36
-rw-r--r--source/libs/asura-lib-utils/io/data_buffer.cpp9
-rw-r--r--source/libs/asura-lib-utils/io/data_buffer.h3
-rw-r--r--source/libs/asura-lib-utils/io/file.h11
-rw-r--r--source/libs/asura-lib-utils/io/io_task.cpp29
-rw-r--r--source/libs/asura-lib-utils/io/io_task.h10
-rw-r--r--source/libs/asura-lib-utils/math/quaternion.cpp0
-rw-r--r--source/libs/asura-lib-utils/math/quaternion.h0
-rw-r--r--source/libs/asura-lib-utils/threading/binding/_coroutine.cpp40
-rw-r--r--source/libs/asura-lib-utils/threading/binding/_thread.cpp104
-rw-r--r--source/libs/asura-lib-utils/threading/coroutine.h2
-rw-r--r--source/libs/asura-lib-utils/threading/mutex.cpp81
-rw-r--r--source/libs/asura-lib-utils/threading/mutex.h84
-rw-r--r--source/libs/asura-lib-utils/threading/thread.cpp81
-rw-r--r--source/libs/asura-lib-utils/threading/thread.h58
-rw-r--r--source/libs/asura-lib-utils/threading/thread_impl_std.h43
-rw-r--r--source/libs/asura-lib-utils/threading/thread_impl_win32.cpp69
-rw-r--r--source/libs/asura-lib-utils/threading/thread_impl_win32.h13
-rw-r--r--source/libs/asura-lib-utils/threading/thread_task.h19
-rw-r--r--source/libs/asura-lib-utils/utils_config.h1
120 files changed, 3052 insertions, 117 deletions
diff --git a/Build/Asura.sln b/Build/Asura.sln
index c467d40..4b8f502 100644
--- a/Build/Asura.sln
+++ b/Build/Asura.sln
@@ -93,9 +93,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml2", "3rd-party\tinyx
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "06-coroutine", "tests\06-coroutine\06-coroutine.vcxproj", "{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-socket", "libs\asura-lib-socket\asura-lib-socket.vcxproj", "{FF8319D3-7ADC-41BC-A397-B31690A7AB5F}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-network", "libs\asura-lib-network\asura-lib-network.vcxproj", "{6361701E-BD43-4AE9-8AE2-5C8F87D436BA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-http", "libs\asura-lib-http\asura-lib-http.vcxproj", "{DCD127A6-68B3-48CA-B769-0680C167D99B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LuaSocket", "3rd-party\LuaSocket\LuaSocket.vcxproj", "{E15D111A-9E02-4E0D-86FE-62BFCD3C211E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -519,26 +519,26 @@ Global
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x64.Build.0 = Release|x64
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x86.ActiveCfg = Release|Win32
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x86.Build.0 = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x64.ActiveCfg = Debug|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x64.Build.0 = Debug|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x86.ActiveCfg = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x86.Build.0 = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|Any CPU.ActiveCfg = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x64.ActiveCfg = Release|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x64.Build.0 = Release|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x86.ActiveCfg = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x86.Build.0 = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x64.ActiveCfg = Debug|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x64.Build.0 = Debug|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x86.ActiveCfg = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x86.Build.0 = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|Any CPU.ActiveCfg = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x64.ActiveCfg = Release|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x64.Build.0 = Release|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x86.ActiveCfg = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x86.Build.0 = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x64.ActiveCfg = Debug|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x64.Build.0 = Debug|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x86.ActiveCfg = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x86.Build.0 = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|Any CPU.ActiveCfg = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x64.ActiveCfg = Release|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x64.Build.0 = Release|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x86.ActiveCfg = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x86.Build.0 = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x64.ActiveCfg = Debug|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x64.Build.0 = Debug|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x86.ActiveCfg = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x86.Build.0 = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|Any CPU.ActiveCfg = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x64.ActiveCfg = Release|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x64.Build.0 = Release|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x86.ActiveCfg = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -579,8 +579,8 @@ Global
{68FB36CB-C478-4158-A0BC-905B65340AE9} = {25C8D2F8-989B-4742-859D-E2FDBB14EC2F}
{883BC26A-4C9E-44B3-B5C0-7F3E4EDC0226} = {64D4E4B2-4A60-46F4-A500-370EFED4524F}
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3} = {E068D138-C824-4365-B5A3-27C65E8FD0B5}
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
- {DCD127A6-68B3-48CA-B769-0680C167D99B} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E} = {64D4E4B2-4A60-46F4-A500-370EFED4524F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {331032D8-F7CC-43E3-A03B-67108767F96B}
diff --git a/Samples/Hello/entities/anim.gameobject.asset b/Samples/Hello/entities/anim.gameobject.asset
deleted file mode 100644
index 484d982..0000000
--- a/Samples/Hello/entities/anim.gameobject.asset
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- type="gameobject",
-} \ No newline at end of file
diff --git a/Samples/Hello/entities/player.gameobject.asset b/Samples/Hello/entities/player.gameobject.asset
deleted file mode 100644
index a0ef6b5..0000000
--- a/Samples/Hello/entities/player.gameobject.asset
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- type="gameobject",
- components={
- "/scripts/components/fireball.lua",
- "/scripts/components/fly.lua",
- "/scripts/components/move.lua",
- },
- child_gameobjects={
- ["axe keeper"] = {
- components = {
-
- },
- }
- }
-} \ No newline at end of file
diff --git a/bin/win64/02-luax.exe b/bin/win64/02-luax.exe
deleted file mode 100644
index f9bb428..0000000
--- a/bin/win64/02-luax.exe
+++ /dev/null
Binary files differ
diff --git a/bin/win64/05-physfs.exe b/bin/win64/05-physfs.exe
index a3d7410..36f66ae 100644
--- a/bin/win64/05-physfs.exe
+++ b/bin/win64/05-physfs.exe
Binary files differ
diff --git a/bin/win64/05-physfs.exe.lastcodeanalysissucceeded b/bin/win64/05-physfs.exe.lastcodeanalysissucceeded
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/win64/05-physfs.exe.lastcodeanalysissucceeded
diff --git a/bin/win64/Luax.lib.lastcodeanalysissucceeded b/bin/win64/Luax.lib.lastcodeanalysissucceeded
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/win64/Luax.lib.lastcodeanalysissucceeded
diff --git a/bin/win64/asura-lib-utils.lib.lastcodeanalysissucceeded b/bin/win64/asura-lib-utils.lib.lastcodeanalysissucceeded
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/win64/asura-lib-utils.lib.lastcodeanalysissucceeded
diff --git a/bin/win64/bindingGen.exe b/bin/win64/bindingGen.exe
index 930d6e4..19029df 100644
--- a/bin/win64/bindingGen.exe
+++ b/bin/win64/bindingGen.exe
Binary files differ
diff --git a/bin/win64/bindingGen.exe.CodeAnalysisLog.xml b/bin/win64/bindingGen.exe.CodeAnalysisLog.xml
new file mode 100644
index 0000000..e798c0f
--- /dev/null
+++ b/bin/win64/bindingGen.exe.CodeAnalysisLog.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?xml-stylesheet type="text/xsl" href="d:\program files (x86)\microsoft visual studio\2017\community\team tools\static analysis tools\fxcop\Xml\CodeAnalysisReport.xsl"?>
+<FxCopReport Version="15.0">
+ <Localized>
+ <String Key="Category">类别</String>
+ <String Key="Certainty">确定性</String>
+ <String Key="CollapseAll">全部折叠</String>
+ <String Key="CheckId">检查 ID</String>
+ <String Key="Error">错误</String>
+ <String Key="Errors">错误</String>
+ <String Key="ExpandAll">全部展开</String>
+ <String Key="Help">帮助</String>
+ <String Key="Line">行</String>
+ <String Key="Messages">消息</String>
+ <String Key="LocationNotStoredInPdb">[位置未存储在 Pdb 中]</String>
+ <String Key="Project">项目</String>
+ <String Key="Resolution">解析</String>
+ <String Key="Rule">规则</String>
+ <String Key="RuleFile">规则文件</String>
+ <String Key="RuleDescription">规则说明</String>
+ <String Key="Source">源</String>
+ <String Key="Status">状态</String>
+ <String Key="Target">目标</String>
+ <String Key="Warning">警告</String>
+ <String Key="Warnings">警告</String>
+ <String Key="ReportTitle">代码分析报告</String>
+ </Localized>
+</FxCopReport>
diff --git a/bin/win64/bindingGen.exe.lastcodeanalysissucceeded b/bin/win64/bindingGen.exe.lastcodeanalysissucceeded
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/win64/bindingGen.exe.lastcodeanalysissucceeded
diff --git a/build/3rd-party/LuaSocket/LuaSocket.vcxproj b/build/3rd-party/LuaSocket/LuaSocket.vcxproj
new file mode 100644
index 0000000..aaf933a
--- /dev/null
+++ b/build/3rd-party/LuaSocket/LuaSocket.vcxproj
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{E15D111A-9E02-4E0D-86FE-62BFCD3C211E}</ProjectGuid>
+ <RootNamespace>LuaSocket</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/build/3rd-party/LuaSocket/LuaSocket.vcxproj.filters b/build/3rd-party/LuaSocket/LuaSocket.vcxproj.filters
new file mode 100644
index 0000000..9cd8510
--- /dev/null
+++ b/build/3rd-party/LuaSocket/LuaSocket.vcxproj.filters
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" /> \ No newline at end of file
diff --git a/build/3rd-party/LuaSocket/LuaSocket.vcxproj.user b/build/3rd-party/LuaSocket/LuaSocket.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/build/3rd-party/LuaSocket/LuaSocket.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_cfunctions.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_cfunctions.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_cfunctions.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_class.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_class.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_class.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_context.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_context.nativecodeanalysis.xml
new file mode 100644
index 0000000..35a3288
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_context.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_context.cpp</FILENAME>
+ <LINE>6</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'Luax::LuaxContext::objectCount' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxContext::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxContext@Luax@@QEAA@PEAUlua_State@@@Z</DECORATED>
+ <FUNCLINE>6</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_enum.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_enum.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_enum.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_memberref.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_memberref.nativecodeanalysis.xml
new file mode 100644
index 0000000..a8b72f2
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_memberref.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_memberref.cpp</FILENAME>
+ <LINE>6</LINE>
+ <COLUMN>16</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxMemberRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxMemberRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>6</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_ref.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_ref.nativecodeanalysis.xml
new file mode 100644
index 0000000..fb05229
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_ref.nativecodeanalysis.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRef@Luax@@QEAA@H@Z</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>59</LINE>
+ <COLUMN>16</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxStrongRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxStrongRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>59</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>64</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxWeakRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxWeakRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>64</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_reftable.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_reftable.nativecodeanalysis.xml
new file mode 100644
index 0000000..fcb4b68
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_reftable.nativecodeanalysis.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_reftable.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>15</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRefTable::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRefTable@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_reftable.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>15</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'Luax::LuaxRefTable::mName' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRefTable::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRefTable@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_reftable.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>15</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'Luax::LuaxRefTable::mMode' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRefTable::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRefTable@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_runtime.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_runtime.nativecodeanalysis.xml
new file mode 100644
index 0000000..8d33c8e
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_runtime.nativecodeanalysis.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRuntime@Luax@@AEAA@XZ</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>30</LINE>
+ <COLUMN>11</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::Open</FUNCTION>
+ <DECORATED>?Open@LuaxRuntime@Luax@@QEAAPEAUlua_State@@XZ</DECORATED>
+ <FUNCLINE>24</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>43</LINE>
+ <COLUMN>12</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::Close</FUNCTION>
+ <DECORATED>?Close@LuaxRuntime@Luax@@QEAAXPEAUlua_State@@@Z</DECORATED>
+ <FUNCLINE>37</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/luax_state.nativecodeanalysis.xml b/build/3rd-party/Luax/x64/Debug/luax_state.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/luax_state.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/3rd-party/Luax/x64/Debug/vc.nativecodeanalysis.all.xml b/build/3rd-party/Luax/x64/Debug/vc.nativecodeanalysis.all.xml
new file mode 100644
index 0000000..c1161fd
--- /dev/null
+++ b/build/3rd-party/Luax/x64/Debug/vc.nativecodeanalysis.all.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="utf-8"?><DEFECTS><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_context.cpp</FILENAME>
+ <LINE>6</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'Luax::LuaxContext::objectCount' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxContext::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxContext@Luax@@QEAA@PEAUlua_State@@@Z</DECORATED>
+ <FUNCLINE>6</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_memberref.cpp</FILENAME>
+ <LINE>6</LINE>
+ <COLUMN>16</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxMemberRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxMemberRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>6</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRef@Luax@@QEAA@H@Z</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>59</LINE>
+ <COLUMN>16</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxStrongRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxStrongRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>59</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_ref.cpp</FILENAME>
+ <LINE>64</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxWeakRef::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxWeakRef@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>64</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_reftable.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>15</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRefTable::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRefTable@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_reftable.cpp</FILENAME>
+ <LINE>7</LINE>
+ <COLUMN>15</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'Luax::LuaxRefTable::mName' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRefTable::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRefTable@Luax@@QEAA@XZ</DECORATED>
+ <FUNCLINE>7</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::{ctor}</FUNCTION>
+ <DECORATED>??0LuaxRuntime@Luax@@AEAA@XZ</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>30</LINE>
+ <COLUMN>11</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::Open</FUNCTION>
+ <DECORATED>?Open@LuaxRuntime@Luax@@QEAAPEAUlua_State@@XZ</DECORATED>
+ <FUNCLINE>24</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_runtime.cpp</FILENAME>
+ <LINE>43</LINE>
+ <COLUMN>12</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxRuntime::Close</FUNCTION>
+ <DECORATED>?Close@LuaxRuntime@Luax@@QEAAXPEAUlua_State@@@Z</DECORATED>
+ <FUNCLINE>37</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT></DEFECTS> \ No newline at end of file
diff --git a/build/Asura.sln b/build/Asura.sln
index c467d40..4b8f502 100644
--- a/build/Asura.sln
+++ b/build/Asura.sln
@@ -93,9 +93,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml2", "3rd-party\tinyx
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "06-coroutine", "tests\06-coroutine\06-coroutine.vcxproj", "{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-socket", "libs\asura-lib-socket\asura-lib-socket.vcxproj", "{FF8319D3-7ADC-41BC-A397-B31690A7AB5F}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-network", "libs\asura-lib-network\asura-lib-network.vcxproj", "{6361701E-BD43-4AE9-8AE2-5C8F87D436BA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asura-lib-http", "libs\asura-lib-http\asura-lib-http.vcxproj", "{DCD127A6-68B3-48CA-B769-0680C167D99B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LuaSocket", "3rd-party\LuaSocket\LuaSocket.vcxproj", "{E15D111A-9E02-4E0D-86FE-62BFCD3C211E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -519,26 +519,26 @@ Global
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x64.Build.0 = Release|x64
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x86.ActiveCfg = Release|Win32
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3}.Release|x86.Build.0 = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x64.ActiveCfg = Debug|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x64.Build.0 = Debug|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x86.ActiveCfg = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Debug|x86.Build.0 = Debug|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|Any CPU.ActiveCfg = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x64.ActiveCfg = Release|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x64.Build.0 = Release|x64
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x86.ActiveCfg = Release|Win32
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F}.Release|x86.Build.0 = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x64.ActiveCfg = Debug|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x64.Build.0 = Debug|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x86.ActiveCfg = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Debug|x86.Build.0 = Debug|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|Any CPU.ActiveCfg = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x64.ActiveCfg = Release|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x64.Build.0 = Release|x64
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x86.ActiveCfg = Release|Win32
- {DCD127A6-68B3-48CA-B769-0680C167D99B}.Release|x86.Build.0 = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x64.ActiveCfg = Debug|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x64.Build.0 = Debug|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x86.ActiveCfg = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Debug|x86.Build.0 = Debug|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|Any CPU.ActiveCfg = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x64.ActiveCfg = Release|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x64.Build.0 = Release|x64
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x86.ActiveCfg = Release|Win32
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA}.Release|x86.Build.0 = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x64.ActiveCfg = Debug|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x64.Build.0 = Debug|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x86.ActiveCfg = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Debug|x86.Build.0 = Debug|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|Any CPU.ActiveCfg = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x64.ActiveCfg = Release|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x64.Build.0 = Release|x64
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x86.ActiveCfg = Release|Win32
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -579,8 +579,8 @@ Global
{68FB36CB-C478-4158-A0BC-905B65340AE9} = {25C8D2F8-989B-4742-859D-E2FDBB14EC2F}
{883BC26A-4C9E-44B3-B5C0-7F3E4EDC0226} = {64D4E4B2-4A60-46F4-A500-370EFED4524F}
{C3CD1252-3C8D-45E2-B784-D0016E7F0BD3} = {E068D138-C824-4365-B5A3-27C65E8FD0B5}
- {FF8319D3-7ADC-41BC-A397-B31690A7AB5F} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
- {DCD127A6-68B3-48CA-B769-0680C167D99B} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
+ {6361701E-BD43-4AE9-8AE2-5C8F87D436BA} = {CD115016-E377-4AC1-8595-DB2836CEFE7E}
+ {E15D111A-9E02-4E0D-86FE-62BFCD3C211E} = {64D4E4B2-4A60-46F4-A500-370EFED4524F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {331032D8-F7CC-43E3-A03B-67108767F96B}
diff --git a/build/libs/asura-lib-core/asura-lib-core.vcxproj b/build/libs/asura-lib-core/asura-lib-core.vcxproj
index d69e2f0..5530000 100644
--- a/build/libs/asura-lib-core/asura-lib-core.vcxproj
+++ b/build/libs/asura-lib-core/asura-lib-core.vcxproj
@@ -122,6 +122,16 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-core\font\glyph.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\font\string.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\font\ttf.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_canvas.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_color.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_color32.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image_data.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image_decode_task.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_mesh2d.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_shader.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_sprite_batch.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_window.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\canvas.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\color.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\color32.cpp" />
@@ -141,6 +151,8 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\stb_decoder.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\texture.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glew.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glut.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_sdl.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\input\clipboard.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-core\input\cursor.cpp" />
@@ -182,6 +194,8 @@
<ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\stb_decoder.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\texture.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window.h" />
+ <ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glew.h" />
+ <ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glut.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_sdl.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-core\input\clipboard.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-core\input\cursor.h" />
diff --git a/build/libs/asura-lib-core/asura-lib-core.vcxproj.filters b/build/libs/asura-lib-core/asura-lib-core.vcxproj.filters
index 68b3ddc..a118d6a 100644
--- a/build/libs/asura-lib-core/asura-lib-core.vcxproj.filters
+++ b/build/libs/asura-lib-core/asura-lib-core.vcxproj.filters
@@ -16,6 +16,9 @@
<Filter Include="time">
<UniqueIdentifier>{81dedac2-8d27-4c19-bf40-1503f0dbad1b}</UniqueIdentifier>
</Filter>
+ <Filter Include="graphics\binding">
+ <UniqueIdentifier>{4f6b2c19-1a06-48c9-b89d-52fa27bec5c1}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\libs\asura-lib-core\application.cpp" />
@@ -110,6 +113,42 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\image_decode_task.cpp">
<Filter>graphics</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glew.cpp">
+ <Filter>graphics</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glut.cpp">
+ <Filter>graphics</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_canvas.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_color.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_color32.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image_data.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_image_decode_task.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_mesh2d.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_shader.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_sprite_batch.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-core\graphics\binding\_window.cpp">
+ <Filter>graphics\binding</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\source\libs\asura-lib-core\application.h" />
@@ -233,6 +272,12 @@
<ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\image_decode_task.h">
<Filter>graphics</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glew.h">
+ <Filter>graphics</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\source\libs\asura-lib-core\graphics\window_impl_glut.h">
+ <Filter>graphics</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\source\libs\asura-lib-core\font\string.inl">
diff --git a/build/libs/asura-lib-network/asura-lib-network.vcxproj b/build/libs/asura-lib-network/asura-lib-network.vcxproj
new file mode 100644
index 0000000..74dd2ae
--- /dev/null
+++ b/build/libs/asura-lib-network/asura-lib-network.vcxproj
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{6361701E-BD43-4AE9-8AE2-5C8F87D436BA}</ProjectGuid>
+ <RootNamespace>asuralibnetwork</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\source\3rd-party;$(SolutionDir)..\source\libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\source\3rd-party;$(SolutionDir)..\source\libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/build/libs/asura-lib-network/asura-lib-network.vcxproj.filters b/build/libs/asura-lib-network/asura-lib-network.vcxproj.filters
new file mode 100644
index 0000000..9cd8510
--- /dev/null
+++ b/build/libs/asura-lib-network/asura-lib-network.vcxproj.filters
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" /> \ No newline at end of file
diff --git a/build/libs/asura-lib-network/asura-lib-network.vcxproj.user b/build/libs/asura-lib-network/asura-lib-network.vcxproj.user
new file mode 100644
index 0000000..be25078
--- /dev/null
+++ b/build/libs/asura-lib-network/asura-lib-network.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup />
+</Project> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/asura-lib-utils.vcxproj b/build/libs/asura-lib-utils/asura-lib-utils.vcxproj
index 2a97e55..54bd60a 100644
--- a/build/libs/asura-lib-utils/asura-lib-utils.vcxproj
+++ b/build/libs/asura-lib-utils/asura-lib-utils.vcxproj
@@ -128,6 +128,7 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\binding\_file.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\binding\_file_data.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\binding\_file_system.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\binding\_io_task.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\compressor.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\data_buffer.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\decoded_data.cpp" />
@@ -138,9 +139,12 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\curve.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\functions.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\matrix44.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\quaternion.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\ranged_value.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\transform.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\stringmap.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\binding\_coroutine.cpp" />
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\binding\_thread.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\coroutine.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\mutex.cpp" />
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\thread.cpp" />
@@ -165,6 +169,7 @@
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\curve.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\functions.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\matrix44.h" />
+ <ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\quaternion.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\ranged_value.h" />
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\rect.hpp" />
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\transform.h" />
diff --git a/build/libs/asura-lib-utils/asura-lib-utils.vcxproj.filters b/build/libs/asura-lib-utils/asura-lib-utils.vcxproj.filters
index 50d0746..ec034b9 100644
--- a/build/libs/asura-lib-utils/asura-lib-utils.vcxproj.filters
+++ b/build/libs/asura-lib-utils/asura-lib-utils.vcxproj.filters
@@ -19,6 +19,9 @@
<Filter Include="threading">
<UniqueIdentifier>{d617f453-4cd1-451b-801d-2f88d0072303}</UniqueIdentifier>
</Filter>
+ <Filter Include="threading\binding">
+ <UniqueIdentifier>{e63982e2-a2ca-4aa2-be11-f98659586c1f}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\exceptions\exception.cpp">
@@ -101,6 +104,18 @@
<ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\mutex.cpp">
<Filter>threading</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\binding\_coroutine.cpp">
+ <Filter>threading\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\threading\binding\_thread.cpp">
+ <Filter>threading\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\io\binding\_io_task.cpp">
+ <Filter>io\binding</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\source\libs\asura-lib-utils\math\quaternion.cpp">
+ <Filter>math</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\exceptions\exception.h">
@@ -192,6 +207,9 @@
<ClInclude Include="..\..\..\source\libs\asura-lib-utils\threading\mutex.h">
<Filter>threading</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\source\libs\asura-lib-utils\math\quaternion.h">
+ <Filter>math</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\source\libs\asura-lib-utils\math\rect.inl">
diff --git a/build/libs/asura-lib-utils/x64/Debug/_compressor.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_compressor.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_compressor.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_coroutine.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_coroutine.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_coroutine.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_data_buffer.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_data_buffer.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_data_buffer.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_file.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_file.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_file.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_file_data.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_file_data.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_file_data.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_file_system.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_file_system.nativecodeanalysis.xml
new file mode 100644
index 0000000..7afbf43
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_file_system.nativecodeanalysis.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>file_system.h</FILENAME>
+ <LINE>105</LINE>
+ <COLUMN>2</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::IO::Filesystem::mInited' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::Filesystem::{ctor}</FUNCTION>
+ <DECORATED>??0Filesystem@IO@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>105</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\</FILEPATH>
+ <FILENAME>singleton.hpp</FILENAME>
+ <LINE>33</LINE>
+ <COLUMN>2</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Singleton&lt;AsuraEngine::IO::Filesystem&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$Singleton@VFilesystem@IO@AsuraEngine@@@AsuraEngine@@IEAA@XZ</DECORATED>
+ <FUNCLINE>33</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::Filesystem&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VFilesystem@IO@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>100</LINE>
+ <COLUMN>32</COLUMN>
+ </SFA>
+ <DEFECTCODE>26451</DEFECTCODE>
+ <DESCRIPTION>Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '+' to avoid overflow (io.2).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::Filesystem&gt;::LuaxRetain</FUNCTION>
+ <DECORATED>??$LuaxRetain@VDataBuffer@IO@AsuraEngine@@@?$LuaxNativeClass@VFilesystem@IO@AsuraEngine@@@Luax@@QEAAXAEAVLuaxState@1@PEAVDataBuffer@IO@AsuraEngine@@@Z</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/_thread.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/_thread.nativecodeanalysis.xml
new file mode 100644
index 0000000..82cf7f3
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/_thread.nativecodeanalysis.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/compressor.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/compressor.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/compressor.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/coroutine.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/coroutine.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/coroutine.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/curve.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/curve.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/curve.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/data_buffer.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/data_buffer.nativecodeanalysis.xml
new file mode 100644
index 0000000..b304bdf
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/data_buffer.nativecodeanalysis.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>data_buffer.cpp</FILENAME>
+ <LINE>10</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::IO::DataBuffer::mBytes' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::DataBuffer::{ctor}</FUNCTION>
+ <DECORATED>??0DataBuffer@IO@AsuraEngine@@QEAA@AEAV012@@Z</DECORATED>
+ <FUNCLINE>10</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>data_buffer.cpp</FILENAME>
+ <LINE>10</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::IO::DataBuffer::mSize' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::DataBuffer::{ctor}</FUNCTION>
+ <DECORATED>??0DataBuffer@IO@AsuraEngine@@QEAA@AEAV012@@Z</DECORATED>
+ <FUNCLINE>10</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::DataBuffer&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VDataBuffer@IO@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/decoded_data.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/decoded_data.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/decoded_data.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/exception.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/exception.nativecodeanalysis.xml
new file mode 100644
index 0000000..88ba25d
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/exception.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\exceptions\</FILEPATH>
+ <FILENAME>exception.cpp</FILENAME>
+ <LINE>43</LINE>
+ <COLUMN>13</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Exception::{dtor}</FUNCTION>
+ <DECORATED>??1Exception@AsuraEngine@@UEAA@XZ</DECORATED>
+ <FUNCLINE>43</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/file.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/file.nativecodeanalysis.xml
new file mode 100644
index 0000000..f60a0ab
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/file.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::File&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VFile@IO@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/file_data.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/file_data.nativecodeanalysis.xml
new file mode 100644
index 0000000..eb30e9f
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/file_data.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::FileData&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VFileData@IO@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/file_system.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/file_system.nativecodeanalysis.xml
new file mode 100644
index 0000000..16b04cf
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/file_system.nativecodeanalysis.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>file_system.cpp</FILENAME>
+ <LINE>67</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::Filesystem::Unmount</FUNCTION>
+ <DECORATED>?Unmount@Filesystem@IO@AsuraEngine@@QEAA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>58</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/functions.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/functions.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/functions.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/io_task.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/io_task.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/io_task.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/matrix44.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/matrix44.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/matrix44.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/mutex.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/mutex.nativecodeanalysis.xml
new file mode 100644
index 0000000..75c9214
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/mutex.nativecodeanalysis.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.cpp</FILENAME>
+ <LINE>23</LINE>
+ <COLUMN>9</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Mutex::{ctor}</FUNCTION>
+ <DECORATED>??0Mutex@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>23</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.cpp</FILENAME>
+ <LINE>52</LINE>
+ <COLUMN>18</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>52</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/ranged_value.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/ranged_value.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/ranged_value.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/stringmap.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/stringmap.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/stringmap.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread.nativecodeanalysis.xml
new file mode 100644
index 0000000..c661cd5
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread.nativecodeanalysis.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Thread::{ctor}</FUNCTION>
+ <DECORATED>??0Thread@Threading@AsuraEngine@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::Threading::Thread::mImpl' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Thread::{ctor}</FUNCTION>
+ <DECORATED>??0Thread@Threading@AsuraEngine@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::Threading::Thread&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VThread@Threading@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread_impl_posix.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread_impl_posix.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread_impl_posix.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread_impl_sdl.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread_impl_sdl.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread_impl_sdl.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread_impl_std.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread_impl_std.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread_impl_std.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread_impl_win32.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread_impl_win32.nativecodeanalysis.xml
new file mode 100644
index 0000000..e0b1c6b
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread_impl_win32.nativecodeanalysis.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>16</LINE>
+ <COLUMN>19</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::Threading::ThreadImplWin32::mHandle' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>16</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>16</LINE>
+ <COLUMN>19</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>16</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>49</LINE>
+ <COLUMN>20</COLUMN>
+ </SFA>
+ <DEFECTCODE>6258</DEFECTCODE>
+ <DESCRIPTION>使用 TerminateThread 将不允许进行适当的线程清理。</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::Kill</FUNCTION>
+ <DECORATED>?Kill@ThreadImplWin32@Threading@AsuraEngine@@UEAAXXZ</DECORATED>
+ <FUNCLINE>47</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/thread_task.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/thread_task.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/thread_task.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/transform.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/transform.nativecodeanalysis.xml
new file mode 100644
index 0000000..dcdf088
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/transform.nativecodeanalysis.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS></DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/utils_module.nativecodeanalysis.xml b/build/libs/asura-lib-utils/x64/Debug/utils_module.nativecodeanalysis.xml
new file mode 100644
index 0000000..82cf7f3
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/utils_module.nativecodeanalysis.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/libs/asura-lib-utils/x64/Debug/vc.nativecodeanalysis.all.xml b/build/libs/asura-lib-utils/x64/Debug/vc.nativecodeanalysis.all.xml
new file mode 100644
index 0000000..34e76e9
--- /dev/null
+++ b/build/libs/asura-lib-utils/x64/Debug/vc.nativecodeanalysis.all.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?><DEFECTS><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\exceptions\</FILEPATH>
+ <FILENAME>exception.cpp</FILENAME>
+ <LINE>43</LINE>
+ <COLUMN>13</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Exception::{dtor}</FUNCTION>
+ <DECORATED>??1Exception@AsuraEngine@@UEAA@XZ</DECORATED>
+ <FUNCLINE>43</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>file_system.h</FILENAME>
+ <LINE>105</LINE>
+ <COLUMN>2</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::IO::Filesystem::mInited' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::Filesystem::{ctor}</FUNCTION>
+ <DECORATED>??0Filesystem@IO@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>105</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\</FILEPATH>
+ <FILENAME>singleton.hpp</FILENAME>
+ <LINE>33</LINE>
+ <COLUMN>2</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Singleton&lt;AsuraEngine::IO::Filesystem&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$Singleton@VFilesystem@IO@AsuraEngine@@@AsuraEngine@@IEAA@XZ</DECORATED>
+ <FUNCLINE>33</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>79</LINE>
+ <COLUMN>21</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::Filesystem&gt;::{ctor}</FUNCTION>
+ <DECORATED>??0?$LuaxNativeClass@VFilesystem@IO@AsuraEngine@@@Luax@@IEAA@XZ</DECORATED>
+ <FUNCLINE>79</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\3rd-party\luax\</FILEPATH>
+ <FILENAME>luax_class.inl</FILENAME>
+ <LINE>100</LINE>
+ <COLUMN>32</COLUMN>
+ </SFA>
+ <DEFECTCODE>26451</DEFECTCODE>
+ <DESCRIPTION>Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator '+' to avoid overflow (io.2).</DESCRIPTION>
+ <FUNCTION>Luax::LuaxNativeClass&lt;AsuraEngine::IO::Filesystem&gt;::LuaxRetain</FUNCTION>
+ <DECORATED>??$LuaxRetain@VDataBuffer@IO@AsuraEngine@@@?$LuaxNativeClass@VFilesystem@IO@AsuraEngine@@@Luax@@QEAAXAEAVLuaxState@1@PEAVDataBuffer@IO@AsuraEngine@@@Z</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>data_buffer.cpp</FILENAME>
+ <LINE>10</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::IO::DataBuffer::mBytes' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::DataBuffer::{ctor}</FUNCTION>
+ <DECORATED>??0DataBuffer@IO@AsuraEngine@@QEAA@AEAV012@@Z</DECORATED>
+ <FUNCLINE>10</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\io\</FILEPATH>
+ <FILENAME>file_system.cpp</FILENAME>
+ <LINE>67</LINE>
+ <COLUMN>14</COLUMN>
+ </SFA>
+ <DEFECTCODE>26444</DEFECTCODE>
+ <DESCRIPTION>Avoid unnamed objects with custom construction and destruction (es.84).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::IO::Filesystem::Unmount</FUNCTION>
+ <DECORATED>?Unmount@Filesystem@IO@AsuraEngine@@QEAA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>58</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.cpp</FILENAME>
+ <LINE>23</LINE>
+ <COLUMN>9</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Mutex::{ctor}</FUNCTION>
+ <DECORATED>??0Mutex@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>23</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.cpp</FILENAME>
+ <LINE>52</LINE>
+ <COLUMN>18</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>52</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Thread::{ctor}</FUNCTION>
+ <DECORATED>??0Thread@Threading@AsuraEngine@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.cpp</FILENAME>
+ <LINE>13</LINE>
+ <COLUMN>10</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::Threading::Thread::mImpl' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::Thread::{ctor}</FUNCTION>
+ <DECORATED>??0Thread@Threading@AsuraEngine@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z</DECORATED>
+ <FUNCLINE>13</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>16</LINE>
+ <COLUMN>19</COLUMN>
+ </SFA>
+ <DEFECTCODE>26495</DEFECTCODE>
+ <DESCRIPTION>Variable 'AsuraEngine::Threading::ThreadImplWin32::mHandle' is uninitialized. Always initialize a member variable (type.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>16</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>16</LINE>
+ <COLUMN>19</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImplWin32@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>16</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread_impl_win32.cpp</FILENAME>
+ <LINE>49</LINE>
+ <COLUMN>20</COLUMN>
+ </SFA>
+ <DEFECTCODE>6258</DEFECTCODE>
+ <DESCRIPTION>使用 TerminateThread 将不允许进行适当的线程清理。</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImplWin32::Kill</FUNCTION>
+ <DECORATED>?Kill@ThreadImplWin32@Threading@AsuraEngine@@UEAAXXZ</DECORATED>
+ <FUNCLINE>47</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT></DEFECTS> \ No newline at end of file
diff --git a/build/tests/05-physfs/x64/Debug/main.nativecodeanalysis.xml b/build/tests/05-physfs/x64/Debug/main.nativecodeanalysis.xml
new file mode 100644
index 0000000..82cf7f3
--- /dev/null
+++ b/build/tests/05-physfs/x64/Debug/main.nativecodeanalysis.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<DEFECTS>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+ <DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT>
+</DEFECTS> \ No newline at end of file
diff --git a/build/tests/05-physfs/x64/Debug/vc.nativecodeanalysis.all.xml b/build/tests/05-physfs/x64/Debug/vc.nativecodeanalysis.all.xml
new file mode 100644
index 0000000..55e04e2
--- /dev/null
+++ b/build/tests/05-physfs/x64/Debug/vc.nativecodeanalysis.all.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?><DEFECTS><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>mutex.h</FILENAME>
+ <LINE>39</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::MutexImpl::{ctor}</FUNCTION>
+ <DECORATED>??0MutexImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>39</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT><DEFECT>
+ <SFA>
+ <FILEPATH>d:\asura\source\libs\asura-lib-utils\threading\</FILEPATH>
+ <FILENAME>thread.h</FILENAME>
+ <LINE>90</LINE>
+ <COLUMN>3</COLUMN>
+ </SFA>
+ <DEFECTCODE>26439</DEFECTCODE>
+ <DESCRIPTION>This kind of function may not throw. Declare it 'noexcept' (f.6).</DESCRIPTION>
+ <FUNCTION>AsuraEngine::Threading::ThreadImpl::{ctor}</FUNCTION>
+ <DECORATED>??0ThreadImpl@Threading@AsuraEngine@@QEAA@XZ</DECORATED>
+ <FUNCLINE>90</FUNCLINE>
+ <PATH></PATH>
+ </DEFECT></DEFECTS> \ No newline at end of file
diff --git a/build/tools/bindingGen/main.cs b/build/tools/bindingGen/main.cs
index 700f98c..c9290b8 100644
--- a/build/tools/bindingGen/main.cs
+++ b/build/tools/bindingGen/main.cs
@@ -57,6 +57,7 @@ namespace {1}
{{
LUAX_PREPARE(L, {0});
+ return 0;
}}
";
// {0} 类名
@@ -67,6 +68,7 @@ namespace {1}
{{
LUAX_STATE(L);
+ return 0;
}}
";
diff --git a/build/tools/bindingGen/obj/Debug/bindingGen.csproj.FileListAbsolute.txt b/build/tools/bindingGen/obj/Debug/bindingGen.csproj.FileListAbsolute.txt
index 3656c65..442f839 100644
--- a/build/tools/bindingGen/obj/Debug/bindingGen.csproj.FileListAbsolute.txt
+++ b/build/tools/bindingGen/obj/Debug/bindingGen.csproj.FileListAbsolute.txt
@@ -8,3 +8,5 @@ D:\Asura\build\tools\bindingGen\obj\Debug\bindingGen.pdb
D:\Asura\bin\win64\bindingGen.exe.config
D:\Asura\bin\win64\bindingGen.exe
D:\Asura\bin\win64\bindingGen.pdb
+D:\Asura\bin\win64\bindingGen.exe.CodeAnalysisLog.xml
+D:\Asura\bin\win64\bindingGen.exe.lastcodeanalysissucceeded
diff --git a/build/tools/bindingGen/obj/Debug/bindingGen.csprojAssemblyReference.cache b/build/tools/bindingGen/obj/Debug/bindingGen.csprojAssemblyReference.cache
index d31b6fe..79bd24c 100644
--- a/build/tools/bindingGen/obj/Debug/bindingGen.csprojAssemblyReference.cache
+++ b/build/tools/bindingGen/obj/Debug/bindingGen.csprojAssemblyReference.cache
Binary files differ
diff --git a/build/tools/bindingGen/obj/Debug/bindingGen.exe b/build/tools/bindingGen/obj/Debug/bindingGen.exe
index 930d6e4..19029df 100644
--- a/build/tools/bindingGen/obj/Debug/bindingGen.exe
+++ b/build/tools/bindingGen/obj/Debug/bindingGen.exe
Binary files differ
diff --git a/samples/Hello/entities/anim.gameobject.asset b/samples/Hello/entities/anim.gameobject.asset
deleted file mode 100644
index 484d982..0000000
--- a/samples/Hello/entities/anim.gameobject.asset
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- type="gameobject",
-} \ No newline at end of file
diff --git a/samples/Hello/entities/player.gameobject.asset b/samples/Hello/entities/player.gameobject.asset
deleted file mode 100644
index a0ef6b5..0000000
--- a/samples/Hello/entities/player.gameobject.asset
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- type="gameobject",
- components={
- "/scripts/components/fireball.lua",
- "/scripts/components/fly.lua",
- "/scripts/components/move.lua",
- },
- child_gameobjects={
- ["axe keeper"] = {
- components = {
-
- },
- }
- }
-} \ No newline at end of file
diff --git a/samples/Hello/prefabs/anim.prefab.asset b/samples/Hello/prefabs/anim.prefab.asset
new file mode 100644
index 0000000..203eaac
--- /dev/null
+++ b/samples/Hello/prefabs/anim.prefab.asset
@@ -0,0 +1,3 @@
+{
+ type="prefab",
+} \ No newline at end of file
diff --git a/samples/Hello/prefabs/player.prefab.asset b/samples/Hello/prefabs/player.prefab.asset
new file mode 100644
index 0000000..fb9d34c
--- /dev/null
+++ b/samples/Hello/prefabs/player.prefab.asset
@@ -0,0 +1,22 @@
+{
+ type="prefab",
+ guid=_guid"0825df57da6d66a49a6b6f97d6af6ed8",
+-- prefab specified
+ root=_suid"100100000",
+ entities = {
+ ["100100000"] = {
+ children = {
+
+ }
+ }
+ },
+ components = {
+ ["100100200"] = {
+ guid = _guid"0825df57da6d66a49a6b6f97d6af6ed8",
+ ["width"] = 10,
+ ["name"] = "Chai",
+ ["friend"] = _guid"0825df57da6d66a49a6b6f97d6af6ed8",
+ ["child"] = _guid"",
+ }
+ },
+} \ No newline at end of file
diff --git a/source/3rd-party/Luax/luax_class.hpp b/source/3rd-party/Luax/luax_class.hpp
index af52b5f..cfac2a5 100644
--- a/source/3rd-party/Luax/luax_class.hpp
+++ b/source/3rd-party/Luax/luax_class.hpp
@@ -81,6 +81,10 @@ namespace Luax
///
virtual bool PushLuaxMemberRef(LuaxState& state, int refID) { assert(false); return false; };
+ virtual bool PushLuaxUserdata(LuaxState& state) { assert(false); return false; };
+ virtual bool PushLuaxMemberTable(LuaxState& state) { assert(false); return false; };
+ virtual bool PushLuaxRefTable(LuaxState& state) { assert(false); return false; };
+
};
///
diff --git a/source/3rd-party/Luax/luax_config.h b/source/3rd-party/Luax/luax_config.h
index d95ae8b..0ace00b 100644
--- a/source/3rd-party/Luax/luax_config.h
+++ b/source/3rd-party/Luax/luax_config.h
@@ -52,8 +52,8 @@ namespace Luax
#define LUAX_ENABLE_NATIVE_EXTEND 0
-#define LUAX_ENABLE_PLAIN_CLASS 1
-#define LUAX_ENABLE_PLAIN_ENUM 1
+#define LUAX_ENABLE_PLAIN_CLASS 0
+#define LUAX_ENABLE_PLAIN_ENUM 0
}
diff --git a/source/3rd-party/Luax/luax_state.h b/source/3rd-party/Luax/luax_state.h
index 20d5189..e9c394a 100644
--- a/source/3rd-party/Luax/luax_state.h
+++ b/source/3rd-party/Luax/luax_state.h
@@ -193,13 +193,13 @@ namespace Luax
//------------------------------------------------------------------------------------------------------------
- private:
+ protected:
friend class LuaxContext;
LuaxState(lua_State* state);
LuaxState(const LuaxState& state);
- ~LuaxState();
+ virtual ~LuaxState();
///
/// ζLuaxStateĵַز
@@ -258,6 +258,39 @@ namespace Luax
#define LUAX_STATE(L) \
Luax::LuaxState& state = Luax::LuaxRuntime::Get().GetLuaxState(L)
+ //--------------------------------------------------------------------------------------------------------------
+
+ ///
+ /// ȷȫluaܹڵ֮󷵻صstack״̬
+ ///
+ class LuaxScopedState
+ : public LuaxState
+ {
+ public:
+ LuaxScopedState(lua_State* state)
+ : LuaxState(state)
+ {
+ mRestoreTop = lua_gettop(mState);
+ }
+ LuaxScopedState(const LuaxState& state)
+ : LuaxState(state)
+ {
+ mRestoreTop = lua_gettop(mState);
+ }
+ ~LuaxScopedState()
+ {
+ if (mState) {
+ if (lua_gettop(mState) != mRestoreTop) {
+ lua_settop(mState, mRestoreTop);
+ }
+ }
+ }
+ private:
+ void* operator new(size_t);
+ int mRestoreTop;
+
+ };
+
}
#endif \ No newline at end of file
diff --git a/source/Asura.Editor/system/file_watcher.h b/source/Asura.Editor/system/file_watcher.h
index e69de29..43821da 100644
--- a/source/Asura.Editor/system/file_watcher.h
+++ b/source/Asura.Editor/system/file_watcher.h
@@ -0,0 +1,517 @@
+// MIT License
+//
+// Copyright(c) 2017 Thomas Monkman
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files(the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions :
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#ifndef FILEWATCHER_H
+#define FILEWATCHER_H
+
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <windows.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <tchar.h>
+#include <Pathcch.h>
+#include <shlwapi.h>
+#endif // WIN32
+
+#if __unix__
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/inotify.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#endif // __unix__
+
+#include <functional>
+#include <atomic>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <utility>
+#include <vector>
+#include <array>
+#include <map>
+#include <system_error>
+#include <string>
+#include <algorithm>
+#include <type_traits>
+#include <future>
+#include <regex>
+
+namespace filewatch {
+ enum class Event {
+ added,
+ removed,
+ modified,
+ renamed_old,
+ renamed_new
+ };
+
+ /**
+ * \class FileWatch
+ *
+ * \brief Watches a folder or file, and will notify of changes via function callback.
+ *
+ * \author Thomas Monkman
+ *
+ */
+ template<class T>
+ class FileWatch
+ {
+ typedef std::basic_string<typename T::value_type, std::char_traits<typename T::value_type>> UnderpinningString;
+ typedef std::basic_regex<typename T::value_type, std::regex_traits<typename T::value_type>> UnderpinningRegex;
+
+ public:
+
+ FileWatch(T path, UnderpinningRegex pattern, std::function<void(const T& file, const Event event_type)> callback) :
+ _path(path),
+ _pattern(pattern),
+ _callback(callback),
+ _directory(get_directory(path))
+ {
+ init();
+ }
+
+#if defined _WIN32 && (defined UNICODE || defined _UNICODE)
+ FileWatch(T path, std::function<void(const T& file, const Event event_type)> callback) :
+ FileWatch<T>(path, UnderpinningRegex(L".*"), callback) {}
+#else // _WIN32 && (UNICODE || _UNICODE)
+ FileWatch(T path, std::function<void(const T& file, const Event event_type)> callback) :
+ FileWatch<T>(path, UnderpinningRegex(".*"), callback) {}
+#endif
+
+ ~FileWatch() {
+ destroy();
+ }
+
+ FileWatch(const FileWatch<T>& other) : FileWatch<T>(other._path, other._callback) {}
+
+ FileWatch<T>& operator=(const FileWatch<T>& other)
+ {
+ if (this == &other) { return *this; }
+
+ destroy();
+ _path = other._path;
+ _callback = other._callback;
+ _directory = get_directory(other._path);
+ init();
+ return *this;
+ }
+
+ // Const memeber varibles don't let me implent moves nicely, if moves are really wanted std::unique_ptr should be used and move that.
+ FileWatch<T>(FileWatch<T>&&) = delete;
+ FileWatch<T>& operator=(FileWatch<T>&&) & = delete;
+
+ private:
+ struct PathParts
+ {
+ PathParts(T directory, T filename) : directory(directory), filename(filename) {}
+ T directory;
+ T filename;
+ };
+ const T _path;
+
+ UnderpinningRegex _pattern;
+
+ static constexpr std::size_t _buffer_size = { 1024 * 256 };
+
+ // only used if watch a single file
+ bool _watching_single_file = { false };
+ T _filename;
+
+ std::atomic<bool> _destory = { false };
+ std::function<void(const T& file, const Event event_type)> _callback;
+
+ std::thread _watch_thread;
+
+ std::condition_variable _cv;
+ std::mutex _callback_mutex;
+ std::vector<std::pair<T, Event>> _callback_information;
+ std::thread _callback_thread;
+
+ std::promise<void> _running;
+#ifdef _WIN32
+ HANDLE _directory = { nullptr };
+ HANDLE _close_event = { nullptr };
+
+ const DWORD _listen_filters =
+ FILE_NOTIFY_CHANGE_SECURITY |
+ FILE_NOTIFY_CHANGE_CREATION |
+ FILE_NOTIFY_CHANGE_LAST_ACCESS |
+ FILE_NOTIFY_CHANGE_LAST_WRITE |
+ FILE_NOTIFY_CHANGE_SIZE |
+ FILE_NOTIFY_CHANGE_ATTRIBUTES |
+ FILE_NOTIFY_CHANGE_DIR_NAME |
+ FILE_NOTIFY_CHANGE_FILE_NAME;
+
+ const std::map<DWORD, Event> _event_type_mapping = {
+ { FILE_ACTION_ADDED, Event::added },
+ { FILE_ACTION_REMOVED, Event::removed },
+ { FILE_ACTION_MODIFIED, Event::modified },
+ { FILE_ACTION_RENAMED_OLD_NAME, Event::renamed_old },
+ { FILE_ACTION_RENAMED_NEW_NAME, Event::renamed_new }
+ };
+#endif // WIN32
+
+#if __unix__
+ struct FolderInfo {
+ int folder;
+ int watch;
+ };
+
+ FolderInfo _directory;
+
+ const std::uint32_t _listen_filters = IN_MODIFY | IN_CREATE | IN_DELETE;
+
+ const static std::size_t event_size = (sizeof(struct inotify_event));
+#endif // __unix__
+
+ void init()
+ {
+#ifdef _WIN32
+ _close_event = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (!_close_event) {
+ throw std::system_error(GetLastError(), std::system_category());
+ }
+#endif // WIN32
+ _callback_thread = std::move(std::thread([this]() {
+ try {
+ callback_thread();
+ }
+ catch (...) {
+ try {
+ _running.set_exception(std::current_exception());
+ }
+ catch (...) {} // set_exception() may throw too
+ }
+ }));
+ _watch_thread = std::move(std::thread([this]() {
+ try {
+ monitor_directory();
+ }
+ catch (...) {
+ try {
+ _running.set_exception(std::current_exception());
+ }
+ catch (...) {} // set_exception() may throw too
+ }
+ }));
+
+ std::future<void> future = _running.get_future();
+ future.get(); //block until the monitor_directory is up and running
+ }
+
+ void destroy()
+ {
+ _destory = true;
+ _running = std::promise<void>();
+#ifdef _WIN32
+ SetEvent(_close_event);
+#elif __unix__
+ inotify_rm_watch(_directory.folder, _directory.watch);
+#endif // __unix__
+ _cv.notify_all();
+ _watch_thread.join();
+ _callback_thread.join();
+#ifdef _WIN32
+ CloseHandle(_directory);
+#elif __unix__
+ close(_directory.folder);
+#endif // __unix__
+ }
+
+ const PathParts split_directory_and_file(const T& path) const
+ {
+ const auto predict = [](typename T::value_type character) {
+#ifdef _WIN32
+ return character == _T('\\') || character == _T('/');
+#elif __unix__
+ return character == '/';
+#endif // __unix__
+ };
+#ifdef _WIN32
+#define _UNICODE
+ const UnderpinningString this_directory = _T("./");
+#elif __unix__
+ const UnderpinningString this_directory = "./";
+#endif // __unix__
+
+ const auto pivot = std::find_if(path.rbegin(), path.rend(), predict).base();
+ //if the path is something like "test.txt" there will be no directoy part, however we still need one, so insert './'
+ const T directory = [&]() {
+ const auto extracted_directory = UnderpinningString(path.begin(), pivot);
+ return (extracted_directory.size() > 0) ? extracted_directory : this_directory;
+ }();
+ const T filename = UnderpinningString(pivot, path.end());
+ return PathParts(directory, filename);
+ }
+
+ bool pass_filter(const UnderpinningString& file_path)
+ {
+ if (_watching_single_file) {
+ const UnderpinningString extracted_filename = { split_directory_and_file(file_path).filename };
+ //if we are watching a single file, only that file should trigger action
+ return extracted_filename == _filename;
+ }
+ return std::regex_match(file_path, _pattern);
+ }
+
+#ifdef _WIN32
+ HANDLE get_directory(const T& path)
+ {
+ auto file_info = GetFileAttributes(path.c_str());
+
+ if (file_info == INVALID_FILE_ATTRIBUTES)
+ {
+ throw std::system_error(GetLastError(), std::system_category());
+ }
+ _watching_single_file = (file_info & FILE_ATTRIBUTE_DIRECTORY) == false;
+
+ const T watch_path = [this, &path]() {
+ if (_watching_single_file)
+ {
+ const auto parsed_path = split_directory_and_file(path);
+ _filename = parsed_path.filename;
+ return parsed_path.directory;
+ }
+ else
+ {
+ return path;
+ }
+ }();
+
+ HANDLE directory = ::CreateFile(
+ watch_path.c_str(), // pointer to the file name
+ FILE_LIST_DIRECTORY, // access (read/write) mode
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, // share mode
+ NULL, // security descriptor
+ OPEN_EXISTING, // how to create
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, // file attributes
+ NULL); // file with attributes to copy
+
+ if (directory == INVALID_HANDLE_VALUE)
+ {
+ throw std::system_error(GetLastError(), std::system_category());
+ }
+ return directory;
+ }
+ void monitor_directory()
+ {
+ std::vector<BYTE> buffer(_buffer_size);
+ DWORD bytes_returned = 0;
+ OVERLAPPED overlapped_buffer{ 0 };
+
+ overlapped_buffer.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (!overlapped_buffer.hEvent) {
+ std::cerr << "Error creating monitor event" << std::endl;
+ }
+
+ std::array<HANDLE, 2> handles{ overlapped_buffer.hEvent, _close_event };
+
+ auto async_pending = false;
+ _running.set_value();
+ do {
+ std::vector<std::pair<T, Event>> parsed_information;
+ ReadDirectoryChangesW(
+ _directory,
+ buffer.data(), buffer.size(),
+ TRUE,
+ _listen_filters,
+ &bytes_returned,
+ &overlapped_buffer, NULL);
+
+ async_pending = true;
+
+ switch (WaitForMultipleObjects(2, handles.data(), FALSE, INFINITE))
+ {
+ case WAIT_OBJECT_0:
+ {
+ if (!GetOverlappedResult(_directory, &overlapped_buffer, &bytes_returned, TRUE)) {
+ throw std::system_error(GetLastError(), std::system_category());
+ }
+ async_pending = false;
+
+ if (bytes_returned == 0) {
+ break;
+ }
+
+ FILE_NOTIFY_INFORMATION *file_information = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(&buffer[0]);
+ do
+ {
+ UnderpinningString changed_file{ file_information->FileName, file_information->FileNameLength / 2 };
+ if (pass_filter(changed_file))
+ {
+ parsed_information.emplace_back(T{ changed_file }, _event_type_mapping.at(file_information->Action));
+ }
+
+ if (file_information->NextEntryOffset == 0) {
+ break;
+ }
+
+ file_information = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(reinterpret_cast<BYTE*>(file_information) + file_information->NextEntryOffset);
+ } while (true);
+ break;
+ }
+ case WAIT_OBJECT_0 + 1:
+ // quit
+ break;
+ case WAIT_FAILED:
+ break;
+ }
+ //dispatch callbacks
+ {
+ std::lock_guard<std::mutex> lock(_callback_mutex);
+ _callback_information.insert(_callback_information.end(), parsed_information.begin(), parsed_information.end());
+ }
+ _cv.notify_all();
+ } while (_destory == false);
+
+ if (async_pending)
+ {
+ //clean up running async io
+ CancelIo(_directory);
+ GetOverlappedResult(_directory, &overlapped_buffer, &bytes_returned, TRUE);
+ }
+ }
+#endif // WIN32
+
+#if __unix__
+
+ bool is_file(const T& path) const
+ {
+ struct stat statbuf = {};
+ if (stat(path.c_str(), &statbuf) != 0)
+ {
+ throw std::system_error(errno, std::system_category());
+ }
+ return S_ISREG(statbuf.st_mode);
+ }
+
+ FolderInfo get_directory(const T& path)
+ {
+ const auto folder = inotify_init();
+ if (folder < 0)
+ {
+ throw std::system_error(errno, std::system_category());
+ }
+ const auto listen_filters = _listen_filters;
+
+ _watching_single_file = is_file(path);
+
+ const T watch_path = [this, &path]() {
+ if (_watching_single_file)
+ {
+ const auto parsed_path = split_directory_and_file(path);
+ _filename = parsed_path.filename;
+ return parsed_path.directory;
+ }
+ else
+ {
+ return path;
+ }
+ }();
+
+ const auto watch = inotify_add_watch(folder, watch_path.c_str(), IN_MODIFY | IN_CREATE | IN_DELETE);
+ if (watch < 0)
+ {
+ throw std::system_error(errno, std::system_category());
+ }
+ return { folder, watch };
+ }
+
+ void monitor_directory()
+ {
+ std::vector<char> buffer(_buffer_size);
+
+ _running.set_value();
+ while (_destory == false)
+ {
+ const auto length = read(_directory.folder, static_cast<void*>(buffer.data()), buffer.size());
+ if (length > 0)
+ {
+ int i = 0;
+ std::vector<std::pair<T, Event>> parsed_information;
+ while (i < length)
+ {
+ struct inotify_event *event = reinterpret_cast<struct inotify_event *>(&buffer[i]); // NOLINT
+ if (event->len)
+ {
+ const UnderpinningString changed_file{ event->name };
+ if (pass_filter(changed_file))
+ {
+ if (event->mask & IN_CREATE)
+ {
+ parsed_information.emplace_back(T{ changed_file }, Event::added);
+ }
+ else if (event->mask & IN_DELETE)
+ {
+ parsed_information.emplace_back(T{ changed_file }, Event::removed);
+ }
+ else if (event->mask & IN_MODIFY)
+ {
+ parsed_information.emplace_back(T{ changed_file }, Event::modified);
+ }
+ }
+ }
+ i += event_size + event->len;
+ }
+ //dispatch callbacks
+ {
+ std::lock_guard<std::mutex> lock(_callback_mutex);
+ _callback_information.insert(_callback_information.end(), parsed_information.begin(), parsed_information.end());
+ }
+ _cv.notify_all();
+ }
+ }
+ }
+#endif // __unix__
+
+ void callback_thread()
+ {
+ while (_destory == false) {
+ std::unique_lock<std::mutex> lock(_callback_mutex);
+ if (_callback_information.empty() && _destory == false) {
+ _cv.wait(lock, [this] { return _callback_information.size() > 0 || _destory; });
+ }
+ decltype(_callback_information) callback_information = {};
+ std::swap(callback_information, _callback_information);
+ lock.unlock();
+
+ for (const auto& file : callback_information) {
+ if (_callback) {
+ try
+ {
+ _callback(file.first, file.second);
+ }
+ catch (const std::exception&)
+ {
+ }
+ }
+ }
+ }
+ }
+ };
+}
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/graphics/binding/_image.cpp b/source/libs/asura-lib-core/graphics/binding/_image.cpp
index 7c1034c..b455ad5 100644
--- a/source/libs/asura-lib-core/graphics/binding/_image.cpp
+++ b/source/libs/asura-lib-core/graphics/binding/_image.cpp
@@ -10,10 +10,13 @@ namespace AsuraEngine
LUAX_REGISTRY(Image)
{
LUAX_REGISTER_METHODS(state,
+ { "New", _New },
{ "Load", _Load },
{ "GetWidth", _GetWidth },
{ "GetHeight", _GetHeight },
- { "GetSize", _GetSize }
+ { "GetSize", _GetSize },
+ { "GetPixel", _GetPixel },
+ { "Render", _Render }
);
}
@@ -22,33 +25,75 @@ namespace AsuraEngine
}
- // image:Load()
+ // image = Image.New()
+ LUAX_IMPL_METHOD(Image, _New)
+ {
+ LUAX_STATE(L);
+
+ Image* image = new Image();
+ image->PushLuaxUserdata(state);
+ return 0;
+ }
+
+ // successed = image:Load(image_data)
LUAX_IMPL_METHOD(Image, _Load)
{
LUAX_PREPARE(L, Image);
+ ImageData* imgdata = state.CheckUserdata<ImageData>(2);
+ bool loaded = self->Load(imgdata);
+ state.Push(loaded);
+ return 1;
}
- // image:GetWidth()
+ // width = image:GetWidth()
LUAX_IMPL_METHOD(Image, _GetWidth)
{
LUAX_PREPARE(L, Image);
+ state.Push(self->GetWidth());
+ return 1;
}
- // image:GetHeight()
+ // height = image:GetHeight()
LUAX_IMPL_METHOD(Image, _GetHeight)
{
LUAX_PREPARE(L, Image);
+ state.Push(self->GetHeight());
+ return 1;
}
- // image:GetSize()
+ // w, h = image:GetSize()
LUAX_IMPL_METHOD(Image, _GetSize)
{
LUAX_PREPARE(L, Image);
+ Math::Vector2u size = self->GetSize();
+ state.Push(size.x);
+ state.Push(size.y);
+ return 2;
+ }
+
+ // color32 = image:GetPixel(x, y)
+ LUAX_IMPL_METHOD(Image, _GetPixel)
+ {
+ LUAX_PREPARE(L, Image);
+
+ uint x = state.CheckParam<uint>(2);
+ uint y = state.CheckParam<uint>(3);
+ Color32* c32 = new Color32(self->GetPixel(x, y));
+ c32->PushLuaxUserdata(state);
+ return 1;
+ }
+
+ // image:Render()
+ LUAX_IMPL_METHOD(Image, _Render)
+ {
+ LUAX_PREPARE(L, Image);
+
+ return 0;
}
}
-}
+} \ No newline at end of file
diff --git a/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp b/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp
new file mode 100644
index 0000000..76b544b
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp
@@ -0,0 +1,21 @@
+#include "../image_decode_task.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ LUAX_REGISTRY(ImageDecodeTask)
+ {
+
+ }
+
+ LUAX_POSTPROCESS(ImageDecodeTask)
+ {
+
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-core/graphics/binding/_window.cpp b/source/libs/asura-lib-core/graphics/binding/_window.cpp
new file mode 100644
index 0000000..fc74d6c
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/binding/_window.cpp
@@ -0,0 +1,103 @@
+#include "../window.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ LUAX_REGISTRY(Window)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "Show", _Show },
+ { "Hide", _Hide },
+ { "SetResolution", _SetResolution },
+ { "SetFullScreen", _SetFullScreen },
+ { "SetTitle", _SetTitle },
+ { "SetWindowStyle", _SetWindowStyle },
+ { "Clear", _Clear },
+ { "Draw", _Draw },
+ { "SwapRenderBuffer", _SwapRenderBuffer }
+ );
+ }
+
+ LUAX_POSTPROCESS(Window)
+ {
+
+ }
+
+ // window:Show()
+ LUAX_IMPL_METHOD(Window, _Show)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Hide()
+ LUAX_IMPL_METHOD(Window, _Hide)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetResolution()
+ LUAX_IMPL_METHOD(Window, _SetResolution)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetFullScreen()
+ LUAX_IMPL_METHOD(Window, _SetFullScreen)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetTitle()
+ LUAX_IMPL_METHOD(Window, _SetTitle)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetWindowStyle()
+ LUAX_IMPL_METHOD(Window, _SetWindowStyle)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Clear()
+ LUAX_IMPL_METHOD(Window, _Clear)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Draw()
+ LUAX_IMPL_METHOD(Window, _Draw)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SwapRenderBuffer()
+ LUAX_IMPL_METHOD(Window, _SwapRenderBuffer)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-core/graphics/image.h b/source/libs/asura-lib-core/graphics/image.h
index 0e4ea0a..4c1c7b5 100644
--- a/source/libs/asura-lib-core/graphics/image.h
+++ b/source/libs/asura-lib-core/graphics/image.h
@@ -10,6 +10,7 @@
#include "texture.h"
#include "color.h"
+#include "color32.h"
#include "image_data.h"
#include "render_state.h"
@@ -31,6 +32,8 @@ namespace AsuraEngine
{
public:
+ LUAX_DECL_FACTORY(SimImage);
+
Image();
~Image();
@@ -56,21 +59,21 @@ namespace AsuraEngine
private:
- ImageData* mImageData;
+ ImageData* mImageData;
+ Luax::LuaxMemberRef mImageDataRef;
Math::Vector2u mSize;
- public:
-
- LUAX_DECL_FACTORY(SimImage);
-
+ LUAX_DECL_METHOD(_New);
LUAX_DECL_METHOD(_Load);
LUAX_DECL_METHOD(_GetWidth);
LUAX_DECL_METHOD(_GetHeight);
LUAX_DECL_METHOD(_GetSize);
+ LUAX_DECL_METHOD(_GetPixel);
+ LUAX_DECL_METHOD(_Render);
};
-
+
}
}
diff --git a/source/libs/asura-lib-core/graphics/window.h b/source/libs/asura-lib-core/graphics/window.h
index 0bfd6a1..1b219a2 100644
--- a/source/libs/asura-lib-core/graphics/window.h
+++ b/source/libs/asura-lib-core/graphics/window.h
@@ -12,15 +12,16 @@ namespace AsuraEngine
namespace Graphics
{
+ class WindowImpl;
+
enum WindowStyle
{
WINDOW_STYLE_FULLSCREEN = 1 << 1,
};
- class WindowImpl;
-
///
- /// ڣֶ֧രڡڱ༭Ҫ֧֣runnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua
+ /// ϷĵڣrunnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua༭ᵼ࣬޽ӵ༭
+ /// ⴰϡ
///
class Window
: public RenderTarget
@@ -63,6 +64,16 @@ namespace AsuraEngine
WindowImpl* mImpl;
+ LUAX_DECL_METHOD(_Show);
+ LUAX_DECL_METHOD(_Hide);
+ LUAX_DECL_METHOD(_SetResolution);
+ LUAX_DECL_METHOD(_SetFullScreen);
+ LUAX_DECL_METHOD(_SetTitle);
+ LUAX_DECL_METHOD(_SetWindowStyle);
+ LUAX_DECL_METHOD(_Clear);
+ LUAX_DECL_METHOD(_Draw);
+ LUAX_DECL_METHOD(_SwapRenderBuffer);
+
};
using RenderWindow = Window;
@@ -71,8 +82,6 @@ namespace AsuraEngine
{
public:
-
-
};
}
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glew.cpp b/source/libs/asura-lib-core/graphics/window_impl_glew.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glew.cpp
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glew.h b/source/libs/asura-lib-core/graphics/window_impl_glew.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glew.h
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glut.cpp b/source/libs/asura-lib-core/graphics/window_impl_glut.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glut.cpp
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glut.h b/source/libs/asura-lib-core/graphics/window_impl_glut.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glut.h
diff --git a/source/libs/asura-lib-core/threading/coroutine.cpp b/source/libs/asura-lib-core/threading/coroutine.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/coroutine.cpp
diff --git a/source/libs/asura-lib-core/threading/coroutine.h b/source/libs/asura-lib-core/threading/coroutine.h
new file mode 100644
index 0000000..1ac6b21
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/coroutine.h
@@ -0,0 +1,31 @@
+#ifndef __ASURA_COROUTINE_H__
+#define __ASURA_COROUTINE_H__
+
+#include <asura-lib-utils/scripting/portable.hpp>
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// luaЭ̣һЩ߼
+ ///
+ class Coroutine ASURA_FINAL
+ : public AEScripting::Portable<Coroutine>
+ {
+ public:
+
+ LUAX_DECL_FACTORY(Coroutine);
+
+ private:
+
+ LUAX_DECL_METHOD(_New);
+ LUAX_DECL_METHOD(_Run);
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread.cpp b/source/libs/asura-lib-core/threading/thread.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread.cpp
diff --git a/source/libs/asura-lib-core/threading/thread.h b/source/libs/asura-lib-core/threading/thread.h
new file mode 100644
index 0000000..f4d3b48
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread.h
@@ -0,0 +1,53 @@
+#ifndef __ASURA_THREAD_H__
+#define __ASURA_THREAD_H__
+
+#include <queue>
+#include <asura-lib-utils/scripting/portable.hpp>
+
+#include "thread_task.h"
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// ̵߳ľʵ֣û͸ģһ׼ֲԣ
+ /// 1: win32
+ /// 2: posix
+ /// 3: SDL
+ /// 4: std::thread
+ ///
+ ASURA_ABSTRACT class ThreadImpl
+ {
+ public:
+
+ };
+
+ ///
+ /// ߳壬ÿ߳άһtask queue
+ ///
+ class Thread ASURA_FINAL
+ : public AEScripting::Portable<Thread>
+ {
+ public:
+
+ LUAX_DECL_FACTORY(Thread);
+
+ bool Enqueue(ThreadTask* task);
+
+ private:
+
+ ///
+ /// С
+ ///
+ std::queue<ThreadTask*> mTaskQueue;
+
+ ThreadImpl* mImpl;
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread_impl_posix.cpp b/source/libs/asura-lib-core/threading/thread_impl_posix.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_posix.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_posix.h b/source/libs/asura-lib-core/threading/thread_impl_posix.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_posix.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp b/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_sdl.h b/source/libs/asura-lib-core/threading/thread_impl_sdl.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_sdl.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_std.cpp b/source/libs/asura-lib-core/threading/thread_impl_std.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_std.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_std.h b/source/libs/asura-lib-core/threading/thread_impl_std.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_std.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_win32.cpp b/source/libs/asura-lib-core/threading/thread_impl_win32.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_win32.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_win32.h b/source/libs/asura-lib-core/threading/thread_impl_win32.h
new file mode 100644
index 0000000..5d854cc
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_win32.h
@@ -0,0 +1,25 @@
+#ifndef __ASURA_THREAD_WIN32_H__
+#define __ASURA_THREAD_WIN32_H__
+
+#include "../core_config.h"
+
+#include "thread.h"
+
+#if ASURA_THREAD_WIN32
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ class ThreadImplWin32 : public ThreadImpl
+ {
+
+ };
+
+ }
+}
+
+#endif // #if ASURA_THREAD_WIN32
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread_task.cpp b/source/libs/asura-lib-core/threading/thread_task.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_task.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_task.h b/source/libs/asura-lib-core/threading/thread_task.h
new file mode 100644
index 0000000..19eb113
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_task.h
@@ -0,0 +1,25 @@
+#ifndef __ASURA_THRAD_TASK_H__
+#define __ASURA_THRAD_TASK_H__
+
+#include <asura-lib-utils/type.h>
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// ϣһ̴߳񣬼̳TaskдExecute
+ ///
+ ASURA_ABSTRACT class ThreadTask
+ {
+ public:
+
+ virtual bool Execute() = 0;
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/io/binding/_io_task.cpp b/source/libs/asura-lib-utils/io/binding/_io_task.cpp
new file mode 100644
index 0000000..c03ff2a
--- /dev/null
+++ b/source/libs/asura-lib-utils/io/binding/_io_task.cpp
@@ -0,0 +1,36 @@
+#include "../io_task.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ LUAX_REGISTRY(IOTask)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New }
+ );
+ }
+
+ LUAX_POSTPROCESS(IOTask)
+ {
+
+ }
+
+ // task = IOTask.New(path, dst)
+ LUAX_IMPL_METHOD(IOTask, _New)
+ {
+ LUAX_STATE(L);
+
+ cc8* path = state.CheckParam<cc8*>(1);
+ DataBuffer* db = state.CheckUserdata<DataBuffer>(2);
+ IOTask* task = new IOTask(path, db);
+ task->PushLuaxUserdata(state);
+ task->SetLuaxMemberRef(state, task->mDstRef, 2);
+ return 1;
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-utils/io/data_buffer.cpp b/source/libs/asura-lib-utils/io/data_buffer.cpp
index 3c0100b..000869d 100644
--- a/source/libs/asura-lib-utils/io/data_buffer.cpp
+++ b/source/libs/asura-lib-utils/io/data_buffer.cpp
@@ -2,6 +2,8 @@
#include <cstring>
#include "data_buffer.h"
+using namespace AEThreading;
+
namespace AsuraEngine
{
namespace IO
@@ -16,6 +18,7 @@ namespace AsuraEngine
: mSize(size)
, mBytes(nullptr)
{
+ lock(mMutex);
mBytes = new byte[size];
memset(mBytes, 0, size);
}
@@ -34,6 +37,7 @@ namespace AsuraEngine
void DataBuffer::Refactor(size_t size)
{
+ lock(mMutex);
if (!mBytes || mSize != size)
{
delete[] mBytes;
@@ -50,6 +54,7 @@ namespace AsuraEngine
size_t DataBuffer::Load(const void* data, std::size_t size)
{
+ lock(mMutex);
size_t len = mSize > size ? size : mSize;
memcpy(mBytes, data, len);
return len;
@@ -57,6 +62,7 @@ namespace AsuraEngine
void DataBuffer::Move(void* bytes, std::size_t size)
{
+ lock(mMutex);
if (!mBytes)
{
delete[] mBytes;
@@ -72,10 +78,11 @@ namespace AsuraEngine
void DataBuffer::Clear()
{
+ lock(mMutex);
if (mBytes)
memset(mBytes, 0, mSize);
}
-
+
std::size_t DataBuffer::GetSize()
{
return mSize;
diff --git a/source/libs/asura-lib-utils/io/data_buffer.h b/source/libs/asura-lib-utils/io/data_buffer.h
index c63a248..9dfe541 100644
--- a/source/libs/asura-lib-utils/io/data_buffer.h
+++ b/source/libs/asura-lib-utils/io/data_buffer.h
@@ -4,6 +4,7 @@
#include <cstdlib>
#include "../scripting/portable.hpp"
+#include "../threading/mutex.h"
namespace AsuraEngine
{
@@ -39,6 +40,8 @@ namespace AsuraEngine
byte* mBytes;
size_t mSize;
+ AEThreading::Mutex mMutex;
+
LUAX_DECL_METHOD(_New);
LUAX_DECL_METHOD(_GetData);
LUAX_DECL_METHOD(_GetSize);
diff --git a/source/libs/asura-lib-utils/io/file.h b/source/libs/asura-lib-utils/io/file.h
index 4a6d38b..56077e0 100644
--- a/source/libs/asura-lib-utils/io/file.h
+++ b/source/libs/asura-lib-utils/io/file.h
@@ -4,6 +4,7 @@
#include "physfs/physfs.h"
#include "../scripting/portable.hpp"
+#include "../threading/thread.h"
#include "file_data.h"
@@ -58,6 +59,7 @@ namespace AsuraEngine
///
size_t Read(ASURA_OUT DataBuffer* dst, size_t length);
size_t ReadAll(ASURA_OUT DataBuffer* dst);
+ size_t ReadAsync(ASURA_OUT DataBuffer* dst);
///
/// Ƿļβ
@@ -70,6 +72,11 @@ namespace AsuraEngine
bool Write(ASURA_REF DataBuffer* src);
///
+ /// 첽дļдļtaskthreadĶС
+ ///
+ bool WriteAsync(ASURA_REF DataBuffer* src, AEThreading::Thread* thread);
+
+ ///
/// ˻壬ǿջдļ
///
bool Flush();
@@ -118,8 +125,10 @@ namespace AsuraEngine
LUAX_DECL_METHOD(_GetMode);
LUAX_DECL_METHOD(_GetSize);
LUAX_DECL_METHOD(_Read);
- LUAX_DECL_METHOD(_IsEOF);
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);
diff --git a/source/libs/asura-lib-utils/io/io_task.cpp b/source/libs/asura-lib-utils/io/io_task.cpp
index e69de29..a96c293 100644
--- a/source/libs/asura-lib-utils/io/io_task.cpp
+++ b/source/libs/asura-lib-utils/io/io_task.cpp
@@ -0,0 +1,29 @@
+#include "io_task.h"
+
+namespace AsuraEngine
+{
+ namespace IO
+ {
+
+ IOTask::IOTask(const std::string& path, DataBuffer* buffer)
+ : mPath(path)
+ , mDst(buffer)
+ {
+ }
+
+ IOTask::~IOTask()
+ {
+ }
+
+ bool IOTask::Execute()
+ {
+ return true;
+ }
+
+ void IOTask::Invoke()
+ {
+
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-utils/io/io_task.h b/source/libs/asura-lib-utils/io/io_task.h
index b91a88c..aa5b38e 100644
--- a/source/libs/asura-lib-utils/io/io_task.h
+++ b/source/libs/asura-lib-utils/io/io_task.h
@@ -16,7 +16,7 @@ namespace AsuraEngine
///
/// ȡļ
///
- class IOTask
+ class IOTask ASURA_FINAL
: public AEScripting::Portable<IOTask>
, public AEThreading::ThreadTask
{
@@ -24,13 +24,21 @@ namespace AsuraEngine
LUAX_DECL_FACTORY(IOTask);
+ IOTask(const std::string& path, DataBuffer* buffer);
+ ~IOTask();
+
bool Execute() override ;
+ void Invoke() override;
private:
std::string mPath;
DataBuffer* mDst;
+ Luax::LuaxMemberRef mDstRef;
+
+ LUAX_DECL_METHOD(_New);
+
};
}
diff --git a/source/libs/asura-lib-utils/math/quaternion.cpp b/source/libs/asura-lib-utils/math/quaternion.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-utils/math/quaternion.cpp
diff --git a/source/libs/asura-lib-utils/math/quaternion.h b/source/libs/asura-lib-utils/math/quaternion.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-utils/math/quaternion.h
diff --git a/source/libs/asura-lib-utils/threading/binding/_coroutine.cpp b/source/libs/asura-lib-utils/threading/binding/_coroutine.cpp
new file mode 100644
index 0000000..7f74cca
--- /dev/null
+++ b/source/libs/asura-lib-utils/threading/binding/_coroutine.cpp
@@ -0,0 +1,40 @@
+#include "../coroutine.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ LUAX_REGISTRY(Coroutine)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "Run", _Run }
+ );
+ }
+
+ LUAX_POSTPROCESS(Coroutine)
+ {
+
+ }
+
+ // Coroutine.New()
+ LUAX_IMPL_METHOD(Coroutine, _New)
+ {
+ LUAX_STATE(L);
+
+ return 0;
+ }
+
+ // coroutine:Run()
+ LUAX_IMPL_METHOD(Coroutine, _Run)
+ {
+ LUAX_PREPARE(L, Coroutine);
+
+ return 0;
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-utils/threading/binding/_thread.cpp b/source/libs/asura-lib-utils/threading/binding/_thread.cpp
new file mode 100644
index 0000000..9f6d228
--- /dev/null
+++ b/source/libs/asura-lib-utils/threading/binding/_thread.cpp
@@ -0,0 +1,104 @@
+#include "../thread.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ LUAX_REGISTRY(Thread)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "Start", _Start },
+ { "Join", _Join },
+ { "Kill", _Kill },
+ { "AddTask", _AddTask },
+ { "IsRunning", _IsRunning },
+ { "IsCurrent", _IsCurrent },
+ { "GetName", _GetName }
+ );
+ }
+
+ LUAX_POSTPROCESS(Thread)
+ {
+
+ }
+
+ // thread = Thread.New(name)
+ LUAX_IMPL_METHOD(Thread, _New)
+ {
+ LUAX_STATE(L);
+
+ cc8* name = state.GetValue<cc8*>(1, "");
+
+ Thread* thread = new Thread(name);
+ thread->PushLuaxUserdata(state);
+
+ return 1;
+ }
+
+ // thread:Start()
+ LUAX_IMPL_METHOD(Thread, _Start)
+ {
+ LUAX_PREPARE(L, Thread);
+ self->Start();
+ return 0;
+ }
+
+ // thread:Join()
+ LUAX_IMPL_METHOD(Thread, _Join)
+ {
+ LUAX_PREPARE(L, Thread);
+ self->Join();
+ return 0;
+ }
+
+ // thread:Kill()
+ LUAX_IMPL_METHOD(Thread, _Kill)
+ {
+ LUAX_PREPARE(L, Thread);
+ self->Kill();
+ return 0;
+ }
+
+ // successed = thread:AddTask(thread_task)
+ LUAX_IMPL_METHOD(Thread, _AddTask)
+ {
+ LUAX_PREPARE(L, Thread);
+
+ ThreadTask* task = state.GetUserdata<ThreadTask>(2);
+ self->AddTask(task);
+ self->LuaxRetain<ThreadTask>(state, task);
+ return 0;
+ }
+
+ // thread:IsRunning()
+ LUAX_IMPL_METHOD(Thread, _IsRunning)
+ {
+ LUAX_PREPARE(L, Thread);
+
+ state.Push(self->IsRunning());
+ return 0;
+ }
+
+ // thread:IsCurrent()
+ LUAX_IMPL_METHOD(Thread, _IsCurrent)
+ {
+ LUAX_PREPARE(L, Thread);
+
+ state.Push(self->IsCurrent());
+ return 0;
+ }
+
+ // thread:GetName()
+ LUAX_IMPL_METHOD(Thread, _GetName)
+ {
+ LUAX_PREPARE(L, Thread);
+
+ return 0;
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-utils/threading/coroutine.h b/source/libs/asura-lib-utils/threading/coroutine.h
index 1ac6b21..75d9a10 100644
--- a/source/libs/asura-lib-utils/threading/coroutine.h
+++ b/source/libs/asura-lib-utils/threading/coroutine.h
@@ -28,4 +28,6 @@ namespace AsuraEngine
}
}
+namespace AEThreading = AsuraEngine::Threading;
+
#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/threading/mutex.cpp b/source/libs/asura-lib-utils/threading/mutex.cpp
index e69de29..e0b6e1e 100644
--- a/source/libs/asura-lib-utils/threading/mutex.cpp
+++ b/source/libs/asura-lib-utils/threading/mutex.cpp
@@ -0,0 +1,81 @@
+#include <asura-lib-utils/exceptions/exception.h>
+
+#include "mutex.h"
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+#define try_create_mutex(impl)\
+ if (!mImpl) \
+ { \
+ try \
+ { \
+ mImpl = new impl(); \
+ } \
+ catch (Exception& e) \
+ { \
+ mImpl = nullptr; \
+ } \
+ }
+
+ Mutex::Mutex()
+ : mImpl(nullptr)
+ {
+#if ASURA_THREAD_WIN32
+ try_create_mutex(MutexImplWin32);
+#endif
+ ASSERT(mImpl);
+ }
+
+ Mutex::~Mutex()
+ {
+ delete mImpl;
+ }
+
+ void Mutex::Lock()
+ {
+ ASSERT(mImpl);
+
+ mImpl->Lock();
+ }
+
+ void Mutex::Unlock()
+ {
+ ASSERT(mImpl);
+
+ mImpl->Unlock();
+ }
+
+#if ASURA_THREAD_WIN32
+ MutexImplWin32::MutexImplWin32()
+ {
+ //mHandle = ::CreateMutex(NULL, FALSE, NULL);
+ //if (!mHandle)
+ // throw Exception("Cant use win32 mutex.");
+ ::InitializeCriticalSection(&mMutex);
+ }
+
+ MutexImplWin32::~MutexImplWin32()
+ {
+ //::CloseHandle(mHandle);
+ //mHandle = NULL;
+ ::DeleteCriticalSection(&mMutex);
+ }
+
+ void MutexImplWin32::Lock()
+ {
+ //::WaitForSingleObject(mHandle, INFINITE);
+ ::EnterCriticalSection(&mMutex);
+ }
+
+ void MutexImplWin32::Unlock()
+ {
+ //::ReleaseMutex(mHandle);
+ ::LeaveCriticalSection(&mMutex);
+ }
+#endif // ASURA_THREAD_WIN32
+
+ }
+}
diff --git a/source/libs/asura-lib-utils/threading/mutex.h b/source/libs/asura-lib-utils/threading/mutex.h
index 893c6e5..5ed45ae 100644
--- a/source/libs/asura-lib-utils/threading/mutex.h
+++ b/source/libs/asura-lib-utils/threading/mutex.h
@@ -1,21 +1,105 @@
#ifndef __ASURA_MUTEX_H__
#define __ASURA_MUTEX_H__
+#include <asura-lib-utils/type.h>
+
+#include "../utils_config.h"
+
+#if ASURA_THREAD_WIN32
+ #include <windows.h>
+#endif
+
namespace AsuraEngine
{
namespace Threading
{
+ class MutexImpl;
+
class Mutex
{
public:
+ Mutex();
+ ~Mutex();
+
void Lock();
void Unlock();
+ private:
+
+ MutexImpl* mImpl;
+
+ };
+
+ class Lock
+ {
+ public:
+ Lock(Mutex& mutex)
+ : m(mutex)
+ {
+ m.Lock();
+ };
+ ~Lock()
+ {
+ m.Unlock();
+ }
+ private:
+ void* operator new(size_t);
+ Mutex& m;
+ };
+
+#define lock(mutex) Lock _asura_scoped_lock_0x0_(mutex)
+#define lock2(mutex) Lock _asura_scoped_lock_0x1_(mutex)
+#define lock3(mutex) Lock _asura_scoped_lock_0x2_(mutex)
+#define lock4(mutex) Lock _asura_scoped_lock_0x3_(mutex)
+#define lock5(mutex) Lock _asura_scoped_lock_0x4_(mutex)
+
+ ASURA_ABSTRACT class MutexImpl
+ {
+ public:
+
+ MutexImpl() {};
+ virtual ~MutexImpl() {};
+
+ virtual void Lock() = 0;
+ virtual void Unlock() = 0;
+
+ };
+
+#if ASURA_THREAD_WIN32
+
+ //https://blog.csdn.net/l799623787/article/details/18259949
+ class MutexImplWin32 ASURA_FINAL : public MutexImpl
+ {
+ public:
+
+ MutexImplWin32();
+ ~MutexImplWin32();
+
+ void Lock() override;
+ void Unlock() override;
+
+ private:
+
+ //HANDLE mHandle;
+ CRITICAL_SECTION mMutex;
+
};
+#endif // ASURA_THREAD_WIN32
+
+#if ASURA_THREAD_STD
+
+ class MutexImplSTD ASURA_FINAL : public MutexImpl
+ {
+ };
+
+#endif // ASURA_THREAD_STD
+
}
}
+namespace AEThreading = AsuraEngine::Threading;
+
#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/threading/thread.cpp b/source/libs/asura-lib-utils/threading/thread.cpp
index c77f3ab..d1b055d 100644
--- a/source/libs/asura-lib-utils/threading/thread.cpp
+++ b/source/libs/asura-lib-utils/threading/thread.cpp
@@ -1,13 +1,92 @@
#include "thread.h"
+#include "thread_impl_win32.h"
+#include "thread_impl_posix.h"
+#include "thread_impl_sdl.h"
+#include "thread_impl_std.h"
+
namespace AsuraEngine
{
namespace Threading
{
- bool Thread::Enqueue(ThreadTask* task)
+ Thread::Thread(const std::string& name)
+ : mName(name)
+ {
+ }
+
+ Thread::~Thread()
+ {
+ delete mImpl;
+ }
+
+#define try_start_thread(impl)\
+ if (!mImpl) \
+ { \
+ mImpl = new impl(); \
+ if (!mImpl->Start(this, stacksize)) \
+ { \
+ delete mImpl; \
+ mImpl = nullptr; \
+ } \
+ }
+
+ bool Thread::AddTask(ThreadTask* task)
+ {
+ mTaskQueue.push(task);
+ return true;
+ }
+
+ void Thread::Start(uint32 stacksize)
+ {
+#if ASURA_THREAD_WIN32
+ try_start_thread(ThreadImplWin32);
+#endif
+
+ assert(mImpl);
+ }
+
+ void Thread::Join()
+ {
+ assert(mImpl);
+ mImpl->Join();
+ }
+
+ void Thread::Kill()
+ {
+ assert(mImpl);
+ mImpl->Kill();
+ }
+
+ bool Thread::IsRunning()
+ {
+ assert(mImpl);
+ return mImpl->IsRunning();
+ }
+
+ bool Thread::IsCurrent()
+ {
+ assert(mImpl);
+ return mImpl->IsCurrent();
+ }
+
+ const std::string& Thread::GetName()
+ {
+ return mName;
+ }
+
+ void Thread::Execute()
{
+ while (!mTaskQueue.empty())
+ {
+ ThreadTask* task = mTaskQueue.front();
+ if (task->Execute())
+ task->Invoke();
+ mMutex.Lock();
+ mTaskQueue.pop();
+ mMutex.Unlock();
+ }
}
}
diff --git a/source/libs/asura-lib-utils/threading/thread.h b/source/libs/asura-lib-utils/threading/thread.h
index 0058144..24b549c 100644
--- a/source/libs/asura-lib-utils/threading/thread.h
+++ b/source/libs/asura-lib-utils/threading/thread.h
@@ -1,10 +1,13 @@
#ifndef __ASURA_THREAD_H__
#define __ASURA_THREAD_H__
+#include <string>
#include <queue>
+
#include <asura-lib-utils/scripting/portable.hpp>
#include "thread_task.h"
+#include "mutex.h"
namespace AsuraEngine
{
@@ -23,21 +26,55 @@ namespace AsuraEngine
LUAX_DECL_FACTORY(Thread);
- bool Enqueue(ThreadTask* task);
+ Thread(const std::string& name = "");
+ ~Thread();
+
+ bool AddTask(ThreadTask* task);
+
+ void Start(uint32 stacksize = 0);
+
+ ///
+ /// ǿֹ̡߳עҪnewdeleteִ֮TerminateThread򽫲ڼʹnewˡ
+ /// https://blog.csdn.net/anye3000/article/details/7470674
+ ///
+ void Kill();
+
+ ///
+ /// ̵߳ȴ߳̽żִС
+ ///
+ void Join();
+
+ bool IsRunning();
- void Run();
+ bool IsCurrent();
+
+ ///
+ /// ִС
+ ///
+ void Execute();
+
+ const std::string& GetName();
private:
+ LUAX_DECL_METHOD(_New);
+ LUAX_DECL_METHOD(_Start);
+ LUAX_DECL_METHOD(_Join);
+ LUAX_DECL_METHOD(_Kill);
+ LUAX_DECL_METHOD(_AddTask);
+ LUAX_DECL_METHOD(_IsRunning);
+ LUAX_DECL_METHOD(_IsCurrent);
+ LUAX_DECL_METHOD(_GetName);
+
///
- /// С
+ /// С
///
std::queue<ThreadTask*> mTaskQueue;
- ThreadImpl* mImpl;
+ Mutex mMutex;
- LUAX_DECL_METHOD(_Enqueue);
- LUAX_DECL_METHOD(_Run);
+ ThreadImpl* mImpl;
+ std::string mName;
};
@@ -51,6 +88,15 @@ namespace AsuraEngine
ASURA_ABSTRACT class ThreadImpl
{
public:
+ ThreadImpl() {};
+ virtual ~ThreadImpl() {};
+
+ virtual bool Start(Thread* thread, uint32 stacksize = 0) = 0;
+ virtual void Join() = 0;
+ virtual void Kill() = 0;
+
+ virtual bool IsRunning() = 0;
+ virtual bool IsCurrent() = 0;
};
diff --git a/source/libs/asura-lib-utils/threading/thread_impl_std.h b/source/libs/asura-lib-utils/threading/thread_impl_std.h
index e69de29..0e7d3da 100644
--- a/source/libs/asura-lib-utils/threading/thread_impl_std.h
+++ b/source/libs/asura-lib-utils/threading/thread_impl_std.h
@@ -0,0 +1,43 @@
+#ifndef __ASURA_THREAD_STD_H__
+#define __ASURA_THREAD_STD_H__
+
+#include "../utils_config.h"
+
+#if ASURA_THREAD_STD
+
+#include <windows.h>
+
+#include "thread.h"
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// Threadstd::threadʵ֡
+ ///
+ class ThreadImplSTD : public ThreadImpl
+ {
+ public:
+
+ ThreadImplSTD();
+ ~ThreadImplSTD();
+
+ bool Start(Thread* thread, uint32 stacksize) override;
+ void Join() override;
+ void Kill() override;
+
+ bool IsRunning() override;
+ bool IsCurrent() override;
+
+ private:
+
+ };
+
+ }
+}
+
+#endif // #if ASURA_THREAD_STD
+
+#endif // __ASURA_THREAD_STD_H__ \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp b/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp
index e69de29..fd1b066 100644
--- a/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp
+++ b/source/libs/asura-lib-utils/threading/thread_impl_win32.cpp
@@ -0,0 +1,69 @@
+#include "thread_impl_win32.h"
+#include "thread.h"
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ static DWORD WINAPI _thread_win32_runner(LPVOID param)
+ {
+ Thread* thread = (Thread*)param;
+ thread->Execute();
+ return 0;
+ }
+
+ ThreadImplWin32::ThreadImplWin32()
+ {
+ }
+
+ ThreadImplWin32::~ThreadImplWin32()
+ {
+ if (!mHandle) return;
+ ::CloseHandle(mHandle);
+ mHandle = 0;
+ }
+
+ bool ThreadImplWin32::Start(Thread* thread, uint32 stacksize/*=0*/)
+ {
+ assert(!IsRunning());
+ mHandle = ::CreateThread(
+ NULL
+ , stacksize
+ , _thread_win32_runner
+ , thread
+ , 0 /*е*/
+ , NULL);
+
+ return mHandle;
+ }
+
+ void ThreadImplWin32::Join()
+ {
+ // ̵߳ȴ̷߳
+ ::WaitForSingleObject(mHandle, INFINITE);
+ }
+
+ void ThreadImplWin32::Kill()
+ {
+ ::TerminateThread(mHandle, FALSE);
+ }
+
+ bool ThreadImplWin32::IsRunning()
+ {
+ if (mHandle) {
+ DWORD exitCode = 0;
+ // https://blog.csdn.net/yuanmeng567/article/details/19485719
+ ::GetExitCodeThread(mHandle, &exitCode);
+ return exitCode == STILL_ACTIVE;
+ }
+ return false;
+ }
+
+ bool ThreadImplWin32::IsCurrent()
+ {
+ return mHandle == ::GetCurrentThread();
+ }
+
+ }
+} \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/threading/thread_impl_win32.h b/source/libs/asura-lib-utils/threading/thread_impl_win32.h
index 3dd2a8e..361152f 100644
--- a/source/libs/asura-lib-utils/threading/thread_impl_win32.h
+++ b/source/libs/asura-lib-utils/threading/thread_impl_win32.h
@@ -6,6 +6,7 @@
#if ASURA_THREAD_WIN32
#include <windows.h>
+
#include "thread.h"
namespace AsuraEngine
@@ -20,6 +21,16 @@ namespace AsuraEngine
{
public:
+ ThreadImplWin32();
+ ~ThreadImplWin32();
+
+ bool Start(Thread* thread, uint32 stacksize) override;
+ void Join() override;
+
+ void Kill() override;
+
+ bool IsRunning() override;
+ bool IsCurrent() override;
private:
@@ -32,4 +43,4 @@ namespace AsuraEngine
#endif // #if ASURA_THREAD_WIN32
-#endif \ No newline at end of file
+#endif // __ASURA_THREAD_WIN32_H__ \ No newline at end of file
diff --git a/source/libs/asura-lib-utils/threading/thread_task.h b/source/libs/asura-lib-utils/threading/thread_task.h
index 35e159c..1ea0a1a 100644
--- a/source/libs/asura-lib-utils/threading/thread_task.h
+++ b/source/libs/asura-lib-utils/threading/thread_task.h
@@ -2,6 +2,7 @@
#define __ASURA_THRAD_TASK_H__
#include <asura-lib-utils/type.h>
+#include <asura-lib-utils/scripting/portable.hpp>
namespace AsuraEngine
{
@@ -11,12 +12,28 @@ namespace AsuraEngine
///
/// ϣһ̴߳񣬼̳TaskдExecute
///
- ASURA_ABSTRACT class ThreadTask
+ ASURA_ABSTRACT class ThreadTask
+ : virtual public AEScripting::NativeAccessor
{
public:
+ ThreadTask();
+ virtual ~ThreadTask();
+
+ ///
+ /// ִɺ󷵻trueûص
+ ///
virtual bool Execute() = 0;
+ ///
+ /// ûص
+ ///
+ virtual void Invoke() = 0;
+
+ protected:
+
+ Luax::LuaxMemberRef mCallback;
+
};
}
diff --git a/source/libs/asura-lib-utils/utils_config.h b/source/libs/asura-lib-utils/utils_config.h
index 836eb07..d5208d5 100644
--- a/source/libs/asura-lib-utils/utils_config.h
+++ b/source/libs/asura-lib-utils/utils_config.h
@@ -2,5 +2,6 @@
#define __ASURA_UTILS_CONFIG_H__
#define ASURA_THREAD_WIN32 1
+#define ASURA_THREAD_STD 1
#endif \ No newline at end of file