Compare commits
33
Commits
ae3ef84441
...
V1.5.6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f37fba3e7 | ||
|
|
3cab2339d2 | ||
|
|
a6a7877a86 | ||
|
|
b227ae1957 | ||
|
|
c3c7e668d2 | ||
|
|
a4f32e4036 | ||
|
|
ff9b111d34 | ||
|
|
2934e3b59b | ||
|
|
ed7d6d7902 | ||
|
|
e8c56f914b | ||
|
|
42b598e2e5 | ||
|
|
fc49707b08 | ||
|
|
50e0b5cb74 | ||
|
|
e0bf227be3 | ||
|
|
a76da34756 | ||
|
|
f249fdc50d | ||
|
|
7d5a56f3d2 | ||
|
|
604f1585f6 | ||
|
|
d6cdbc0120 | ||
|
|
15215926c5 | ||
|
|
5f820987a9 | ||
|
|
f438ac53d9 | ||
|
|
e729c5baee | ||
|
|
b3e2f52262 | ||
|
|
93d39248e5 | ||
|
|
3500652a3b | ||
|
|
01d28e0d28 | ||
|
|
60ad5c136f | ||
|
|
0cb31b48ca | ||
|
|
d101fe92a4 | ||
|
|
8636179bdf | ||
|
|
06d45f5917 | ||
|
|
8b1896dd74 |
+6
-1
@@ -1,4 +1,9 @@
|
|||||||
##忽略此文件夹##
|
##忽略此文件夹##
|
||||||
build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release/
|
build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release/
|
||||||
debug/
|
debug/
|
||||||
release/
|
release/
|
||||||
|
build/
|
||||||
|
rdp_logs/
|
||||||
|
rdp_records/
|
||||||
|
design_docs/
|
||||||
|
.mnemon/
|
||||||
Vendored
+49
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"version": 4,
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"compilerPath": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\bin\\Hostx64\\x64\\cl.exe",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "c++17",
|
||||||
|
"intelliSenseMode": "windows-msvc-x64",
|
||||||
|
"defines": [
|
||||||
|
"WIN32",
|
||||||
|
"_WINDOWS",
|
||||||
|
"UNICODE",
|
||||||
|
"_UNICODE",
|
||||||
|
"NOMINMAX",
|
||||||
|
"DATA_PROCESS_CLASS_DLL_LIBRARY",
|
||||||
|
"PHASE_SCANNING"
|
||||||
|
],
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/data_process_class_dll",
|
||||||
|
"${workspaceFolder}/data_process_class_dll/Eigen",
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"name": "X256_PS (MSVC2022 x64)",
|
||||||
|
"compileCommands": "${workspaceFolder}/build/X256_PS/compile_commands.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"compilerPath": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\bin\\Hostx64\\x64\\cl.exe",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "c++17",
|
||||||
|
"intelliSenseMode": "windows-msvc-x64",
|
||||||
|
"defines": [
|
||||||
|
"WIN32",
|
||||||
|
"_WINDOWS",
|
||||||
|
"UNICODE",
|
||||||
|
"_UNICODE",
|
||||||
|
"NOMINMAX",
|
||||||
|
"DATA_PROCESS_CLASS_DLL_LIBRARY",
|
||||||
|
"MECHANICAL_SCANNING"
|
||||||
|
],
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/data_process_class_dll",
|
||||||
|
"${workspaceFolder}/data_process_class_dll/Eigen",
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"name": "X256_MS (MSVC2022 x64)",
|
||||||
|
"compileCommands": "${workspaceFolder}/build/X256_MS/compile_commands.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+25
@@ -0,0 +1,25 @@
|
|||||||
|
buildType:
|
||||||
|
default: release
|
||||||
|
choices:
|
||||||
|
release:
|
||||||
|
short: Release
|
||||||
|
long: Release (MSVC2022 x64, C++17)
|
||||||
|
buildType: Release
|
||||||
|
debug:
|
||||||
|
short: Debug
|
||||||
|
long: Debug (MSVC2022 x64, C++17)
|
||||||
|
buildType: Debug
|
||||||
|
|
||||||
|
scanMode:
|
||||||
|
default: ps
|
||||||
|
choices:
|
||||||
|
ps:
|
||||||
|
short: X256_PS
|
||||||
|
long: X256_PS - PHASE_SCANNING
|
||||||
|
settings:
|
||||||
|
RADAR_SCAN_MODE: PHASE_SCANNING
|
||||||
|
ms:
|
||||||
|
short: X256_MS
|
||||||
|
long: X256_MS - MECHANICAL_SCANNING
|
||||||
|
settings:
|
||||||
|
RADAR_SCAN_MODE: MECHANICAL_SCANNING
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"ms-vscode.cpptools",
|
||||||
|
"ms-vscode.cmake-tools",
|
||||||
|
"twxs.cmake"
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+24
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "调试 DLL",
|
||||||
|
"type": "cppvsdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/build/X256_PS/bin/rdp_playback.exe",
|
||||||
|
"args": ["-d", "E:/Demo/QT/simianzhen256-v1.5.5-ms-vscode/build/X256_PS/bin/2026-07-18/15-34-32", "-i", "E:/Demo/QT/simianzhen256-v1.5.5-ms-vscode/build/X256_PS/bin/RadarConfigParam.ini", "-c", "E:/Demo/QT/simianzhen256-v1.5.5-ms-vscode/build/X256_PS/bin/2026-07-18/15-34-32/track.csv"],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"environment": [],
|
||||||
|
"externalConsole": false,
|
||||||
|
"preLaunchTask": "CMake: 配置并构建 X256_PS (Debug)",
|
||||||
|
"symbolSearchPath": "${workspaceFolder}/build/X256_PS/bin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "附加到宿主进程(调试 DLL)",
|
||||||
|
"type": "cppvsdbg",
|
||||||
|
"request": "attach",
|
||||||
|
"processId": "${command:pickProcess}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+22
@@ -0,0 +1,22 @@
|
|||||||
|
@echo off
|
||||||
|
rem ===========================================================================
|
||||||
|
rem CMake build script (MSVC 2022 / v143, C++17, x64)
|
||||||
|
rem
|
||||||
|
rem Usage: build.bat <build-dir>
|
||||||
|
rem e.g. build.bat build\X256_PS
|
||||||
|
rem
|
||||||
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
|
rem ===========================================================================
|
||||||
|
setlocal
|
||||||
|
set "BUILD_DIR=%~1"
|
||||||
|
if "%BUILD_DIR%"=="" (
|
||||||
|
echo Usage: build.bat ^<build-dir^>
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
||||||
|
call "%~dp0msvc_env.bat"
|
||||||
|
if errorlevel 1 exit /b %errorlevel%
|
||||||
|
|
||||||
|
cmake --build "%BUILD_DIR%"
|
||||||
|
exit /b %errorlevel%
|
||||||
Vendored
+22
@@ -0,0 +1,22 @@
|
|||||||
|
@echo off
|
||||||
|
rem ===========================================================================
|
||||||
|
rem CMake clean script (MSVC 2022 / v143, C++17, x64)
|
||||||
|
rem
|
||||||
|
rem Usage: clean.bat <build-dir>
|
||||||
|
rem e.g. clean.bat build\X256_PS
|
||||||
|
rem
|
||||||
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
|
rem ===========================================================================
|
||||||
|
setlocal
|
||||||
|
set "BUILD_DIR=%~1"
|
||||||
|
if "%BUILD_DIR%"=="" (
|
||||||
|
echo Usage: clean.bat ^<build-dir^>
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
||||||
|
call "%~dp0msvc_env.bat"
|
||||||
|
if errorlevel 1 exit /b %errorlevel%
|
||||||
|
|
||||||
|
cmake --build "%BUILD_DIR%" --target clean
|
||||||
|
exit /b %errorlevel%
|
||||||
Vendored
+73
@@ -0,0 +1,73 @@
|
|||||||
|
@echo off
|
||||||
|
rem ===========================================================================
|
||||||
|
rem CMake configure script (MSVC 2022 / v143, C++17, x64)
|
||||||
|
rem
|
||||||
|
rem Usage: configure.bat <build-dir> <PHASE_SCANNING^|MECHANICAL_SCANNING> [Debug^|Release] [AUTO^|ON^|OFF]
|
||||||
|
rem e.g. configure.bat build\X256_PS PHASE_SCANNING Release
|
||||||
|
rem configure.bat build\X256_PS Debug ON (Debug + data recording enabled)
|
||||||
|
rem
|
||||||
|
rem The 4th argument selects the optional data-recording debug feature
|
||||||
|
rem (CMake cache variable RDP_DATA_RECORD). When it is omitted, CMake's AUTO
|
||||||
|
rem default applies: Debug = enabled, Release = disabled. See
|
||||||
|
rem docs/data_record_debug.md.
|
||||||
|
rem
|
||||||
|
rem The generator stays "NMake Makefiles" (the choice made during the VS Code
|
||||||
|
rem migration); cl.exe is pinned to the MSVC 2022 x64 toolset.
|
||||||
|
rem
|
||||||
|
rem A build directory that was configured by an older compiler (for example the
|
||||||
|
rem MSVC 2013 cache) is removed first: neither its CMake cache nor its object
|
||||||
|
rem files can be reused across a compiler upgrade.
|
||||||
|
rem
|
||||||
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
|
rem ===========================================================================
|
||||||
|
setlocal
|
||||||
|
set "BUILD_DIR=%~1"
|
||||||
|
set "SCAN_MODE=%~2"
|
||||||
|
set "BUILD_TYPE=%~3"
|
||||||
|
set "RECORD_MODE=%~4"
|
||||||
|
if "%BUILD_DIR%"=="" (
|
||||||
|
echo Usage: configure.bat ^<build-dir^> ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> [Debug^|Release] [AUTO^|ON^|OFF]
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
if "%SCAN_MODE%"=="" (
|
||||||
|
echo Usage: configure.bat ^<build-dir^> ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> [Debug^|Release] [AUTO^|ON^|OFF]
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
if "%BUILD_TYPE%"=="" set "BUILD_TYPE=Release"
|
||||||
|
if "%RECORD_MODE%"=="" set "RECORD_MODE=AUTO"
|
||||||
|
|
||||||
|
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
||||||
|
call "%~dp0msvc_env.bat"
|
||||||
|
if errorlevel 1 exit /b %errorlevel%
|
||||||
|
|
||||||
|
rem Drop a build tree left behind by another toolset.
|
||||||
|
if not exist "%BUILD_DIR%\CMakeCache.txt" goto :configure
|
||||||
|
set "OLD_TOOLSET="
|
||||||
|
if exist "%BUILD_DIR%\.msvc_toolset" set /p OLD_TOOLSET=<"%BUILD_DIR%\.msvc_toolset"
|
||||||
|
if /i "%OLD_TOOLSET%"=="%MSVC_TOOLSET_VERSION%" goto :configure
|
||||||
|
echo [configure] "%BUILD_DIR%" was configured with MSVC toolset "%OLD_TOOLSET%" - rebuilding from scratch
|
||||||
|
rmdir /s /q "%BUILD_DIR%"
|
||||||
|
if exist "%BUILD_DIR%" (
|
||||||
|
echo [ERROR] cannot remove "%BUILD_DIR%", please delete it manually and retry.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:configure
|
||||||
|
echo [configure] compiler : %MSVC_CXX_COMPILER%
|
||||||
|
echo [configure] build dir: %BUILD_DIR%
|
||||||
|
echo [configure] mode : %SCAN_MODE% / %BUILD_TYPE%
|
||||||
|
echo [configure] record : %RECORD_MODE% (RDP_DATA_RECORD: AUTO/ON/OFF)
|
||||||
|
|
||||||
|
pushd "%~dp0..\.."
|
||||||
|
cmake -S . -B "%BUILD_DIR%" -G "NMake Makefiles" ^
|
||||||
|
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
|
||||||
|
-DRADAR_SCAN_MODE=%SCAN_MODE% ^
|
||||||
|
-DRDP_DATA_RECORD=%RECORD_MODE% ^
|
||||||
|
-DCMAKE_CXX_COMPILER="%MSVC_CXX_COMPILER%"
|
||||||
|
set "CMAKE_EXIT=%errorlevel%"
|
||||||
|
popd
|
||||||
|
if not "%CMAKE_EXIT%"=="0" exit /b %CMAKE_EXIT%
|
||||||
|
|
||||||
|
rem Remember which toolset produced this build tree (checked on the next run).
|
||||||
|
> "%BUILD_DIR%\.msvc_toolset" echo %MSVC_TOOLSET_VERSION%
|
||||||
|
exit /b 0
|
||||||
Vendored
+50
@@ -0,0 +1,50 @@
|
|||||||
|
@echo off
|
||||||
|
rem ===========================================================================
|
||||||
|
rem Shared MSVC 2022 (v143) environment setup.
|
||||||
|
rem
|
||||||
|
rem Called by configure.bat / build.bat / clean.bat. It:
|
||||||
|
rem 1) locates the MSVC 2022 toolset and cl.exe (default Hostx64\x64);
|
||||||
|
rem 2) calls vcvarsall.bat to set PATH / INCLUDE / LIB (nmake comes with it).
|
||||||
|
rem
|
||||||
|
rem NOTE: this script does NOT use setlocal, so the variables it defines stay
|
||||||
|
rem in the caller's environment (all callers run under setlocal).
|
||||||
|
rem
|
||||||
|
rem Override the defaults with these environment variables:
|
||||||
|
rem VS2022_DIR Visual Studio 2022 install root
|
||||||
|
rem MSVC_TOOLSET_VERSION MSVC toolset version
|
||||||
|
rem MSVC_HOST_ARCH compiler host architecture (x64 / x86)
|
||||||
|
rem MSVC_TARGET_ARCH target architecture (x64 / x86)
|
||||||
|
rem
|
||||||
|
rem Exit code: 0 = ok, non-zero = setup failed (caller must abort).
|
||||||
|
rem
|
||||||
|
rem Encoding: keep this file ASCII-only (cmd.exe parses .bat in the OEM code
|
||||||
|
rem page, UTF-8 comments would break parsing on non-UTF-8 consoles).
|
||||||
|
rem ===========================================================================
|
||||||
|
|
||||||
|
if not defined VS2022_DIR set "VS2022_DIR=D:\APP\VisualStudio2022"
|
||||||
|
if not defined MSVC_TOOLSET_VERSION set "MSVC_TOOLSET_VERSION=14.44.35207"
|
||||||
|
if not defined MSVC_HOST_ARCH set "MSVC_HOST_ARCH=x64"
|
||||||
|
if not defined MSVC_TARGET_ARCH set "MSVC_TARGET_ARCH=x64"
|
||||||
|
|
||||||
|
set "MSVC_TOOLSET_DIR=%VS2022_DIR%\VC\Tools\MSVC\%MSVC_TOOLSET_VERSION%"
|
||||||
|
set "MSVC_CXX_COMPILER=%MSVC_TOOLSET_DIR%\bin\Host%MSVC_HOST_ARCH%\%MSVC_TARGET_ARCH%\cl.exe"
|
||||||
|
set "VCVARS_BAT=%VS2022_DIR%\VC\Auxiliary\Build\vcvarsall.bat"
|
||||||
|
|
||||||
|
if not exist "%VCVARS_BAT%" (
|
||||||
|
echo [ERROR] vcvarsall.bat not found: "%VCVARS_BAT%"
|
||||||
|
echo Please set VS2022_DIR to the Visual Studio 2022 install root.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
if not exist "%MSVC_CXX_COMPILER%" (
|
||||||
|
echo [ERROR] cl.exe not found: "%MSVC_CXX_COMPILER%"
|
||||||
|
echo Please check MSVC_TOOLSET_VERSION / MSVC_HOST_ARCH / MSVC_TARGET_ARCH.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
call "%VCVARS_BAT%" %MSVC_TARGET_ARCH% >nul
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo [ERROR] "vcvarsall.bat %MSVC_TARGET_ARCH%" failed.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
exit /b 0
|
||||||
Vendored
+16
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"cmake.configureOnOpen": false,
|
||||||
|
"cmake.generator": "NMake Makefiles",
|
||||||
|
"cmake.buildDirectory": "${workspaceFolder}/build/X256_PS",
|
||||||
|
"cmake.configureArgs": [
|
||||||
|
"-DCMAKE_CXX_COMPILER=D:/APP/VisualStudio2022/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
|
||||||
|
],
|
||||||
|
"cmake.environment": {
|
||||||
|
"PATH": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\bin\\Hostx64\\x64;${env:PATH}",
|
||||||
|
"INCLUDE": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\include;D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\ATLMFC\\include;D:\\APP\\VisualStudio2022\\VC\\Auxiliary\\VS\\include;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\ucrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\um;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\shared;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\winrt;C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\cppwinrt;${env:INCLUDE}",
|
||||||
|
"LIB": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\ATLMFC\\lib\\x64;D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\lib\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.26100.0\\ucrt\\x64;C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.26100.0\\um\\x64;${env:LIB}"
|
||||||
|
},
|
||||||
|
"C_Cpp.default.cppStandard": "c++17",
|
||||||
|
"C_Cpp.default.intelliSenseMode": "windows-msvc-x64",
|
||||||
|
"C_Cpp.default.compileCommands": "${workspaceFolder}/build/X256_PS/compile_commands.json"
|
||||||
|
}
|
||||||
Vendored
+170
@@ -0,0 +1,170 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"options": {
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
},
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置 X256_PS (Release, MSVC2022 x64)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\configure.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_PS",
|
||||||
|
"PHASE_SCANNING",
|
||||||
|
"Release"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置 X256_PS (Debug, MSVC2022 x64)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\configure.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_PS",
|
||||||
|
"PHASE_SCANNING",
|
||||||
|
"Debug"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 构建 X256_PS (Release)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_PS"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": [
|
||||||
|
"$msCompile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 构建 X256_PS (Debug)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_PS"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": [
|
||||||
|
"$msCompile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 清理 X256_PS",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\clean.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_PS"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置 X256_MS (Release, MSVC2022 x64)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\configure.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_MS",
|
||||||
|
"MECHANICAL_SCANNING",
|
||||||
|
"Release"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置 X256_MS (Debug, MSVC2022 x64)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\configure.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_MS",
|
||||||
|
"MECHANICAL_SCANNING",
|
||||||
|
"Debug"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 构建 X256_MS (Release)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_MS"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": [
|
||||||
|
"$msCompile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 构建 X256_MS (Debug)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_MS"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": [
|
||||||
|
"$msCompile"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 清理 X256_MS",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}\\.vscode\\scripts\\clean.bat",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/build/X256_MS"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置并构建 X256_PS (Release)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"CMake: 配置 X256_PS (Release, MSVC2022 x64)",
|
||||||
|
"CMake: 构建 X256_PS (Release)"
|
||||||
|
],
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
},
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置并构建 X256_PS (Debug)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"CMake: 配置 X256_PS (Debug, MSVC2022 x64)",
|
||||||
|
"CMake: 构建 X256_PS (Debug)"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置并构建 X256_MS (Release)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"CMake: 配置 X256_MS (Release, MSVC2022 x64)",
|
||||||
|
"CMake: 构建 X256_MS (Release)"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置并构建 X256_MS (Debug)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"CMake: 配置 X256_MS (Debug, MSVC2022 x64)",
|
||||||
|
"CMake: 构建 X256_MS (Debug)"
|
||||||
|
],
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "CMake: 配置并构建全部 (X256_PS + X256_MS, Release)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"CMake: 配置并构建 X256_PS (Release)",
|
||||||
|
"CMake: 配置并构建 X256_MS (Release)"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+152
@@ -0,0 +1,152 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
本项目的所有重要变更记录于此文件。
|
||||||
|
|
||||||
|
格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
|
||||||
|
版本号遵循 [语义化版本(SemVer)](https://semver.org/lang/zh-CN/)。
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
## [1.5.6] - 2026-10-08
|
||||||
|
|
||||||
|
> 本次发布把上一轮「工作区(未提交)」条目整体归档,并补充 a4f32e4 / c3c7e66 / b227ae1 三次提交的改动。
|
||||||
|
> 版本号宏位于 `parameters.h`(`MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`),当前为 **1.5.6**。
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **新增版本号输出(b227ae1)**:`parameters.h` 新增版本宏组——`MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1 / 5 / 6)、扫描体制后缀 `VERSION_INFO`(相扫 `PS` / 机扫 `MS`)以及拼装宏 `VERSION_STRING`(`STRINGIFY` 两级宏展开,输出形如 `V1.5.6.PS`)。`Data_process_class_dll` 基类新增公开成员 `const char* version_info`,`Data_Process_Factory::GetB()` 创建实例后赋值为 `VERSION_STRING`;宿主可在拿到实例指针后直接读取该字段上报/核对 DLL 版本。
|
||||||
|
- **数据记录表扩充为 6 张在用表(7 个实体定义)(a4f32e4 / c3c7e66 / b227ae1)**:记录实体由「2 个示例」扩展为覆盖主要中间数据的 6 张在用表——`RdpRecPoint`(TWS/TAS 输入点迹,用 `point_type` 区分,逐点写入)、`RdpRecPointCohesionTWS` / `RdpRecPointCohesionTAS`(凝聚后点迹,分别写入)、`RdpRecTempTrack`(临时航迹,`track_init_process_logic()` 末尾在消亡临时航迹之后逐点写入)、`RdpRecTrustTrack`(可靠航迹,TWS 输出循环内按本圈更新航迹逐条写入)、`RdpRecAssoInfo`(点航关联信息,TWS 关联的候选/取中/删表三处写入)。原示例实体 `RdpRecTrackOut`(本圈输出航迹)与其在 `track_process()` 中的批量记录点已整体注释停用(实体定义保留注释,故 `rdp_record_entity.h` 中共 7 个实体定义),改由 `RdpRecTrustTrack` 记录内部真实航迹。
|
||||||
|
- **点迹/航迹记录新增 ID 与圈次维度(c3c7e66、b227ae1)**:`Data_Process` 新增自增成员 `point_id` / `frame_id` / `circle_id`(`data_process.h`)——每接收一帧 `frame_id` 自增;每个点迹 `point_id` 自增并随 `PointRecv` 落库;`circle_id` 在 TWS 满一圈(`Beam_index_aiz == 0`)、TAS 每帧处理结束时自增,写入该圈/帧的所有点迹。内部结构同步新增标识字段:`PointRecv` 增 `circle_id`;`Temp_track` 增 `temp_track_id` / `point_id` / `circle_id`(`Track_Init` 新增自增成员 `temp_track_id`);`Trust_Track` 增 `track_id` / `point_id` / `circle_id`(起批时取自临时航迹末点,关联成功时刷新为被关联点迹的 ID)。据此可把点迹、凝聚点迹、临时航迹、可靠航迹、关联信息按 `point_id` / `track_id` / `circle_id` 串成一条完整链路。
|
||||||
|
- **新增 `Asso_Info` 关联信息结构体(b227ae1)**:原 `Track_Asso::model_filter()` 内定义的局部结构体 `asso_info` 提升为 `struct.h` 中的全局 `Asso_Info`,在原有 `d1/d2/d3/d_min/point_index/track_index` 基础上补充 `point_id` / `track_id` / `circle_id`、门限相关量(`delta_T` / `delta_h` / `R` / `VT`、三个布尔量 `thd_d` / `thd_h` / `thd_r`)以及「本候选是否被最近邻取中」标志 `min_d_flag`,使关联信息可被完整记录与分析。
|
||||||
|
- **可靠航迹补充极坐标量快照(b227ae1)**:`Trust_Track` 新增 `Range` / `Azimuth` / `Elevation` / `Velocity` 四个字段,在 TWS 输出环节由本圈写入输出结构的距离/方位/俯仰/合速度回填(`Velocity` 取 `Range_V`,即 IMM 融合速度的模),供记录表落库;注意它们只在航迹当圈**有输出**时被刷新。
|
||||||
|
- 新增 CHANGELOG.md,采用 Keep a Changelog 格式记录项目变更历史。
|
||||||
|
- `RadarPara` 结构体新增 `DATA_RATE_TAS`(TAS 模式数据率)字段,由 DLL 调用者通过 `track_process_parameters_initial()` 输入(b3e2f52)。
|
||||||
|
- `Tracking_Target` 新增 `last_track_time` 字段,记录各 TAS 目标最近一次波束输出时间(f438ac5)。
|
||||||
|
- 新增 requirements.md,说明 TAS 波束控制逻辑的修改背景与约定(b3e2f52)。
|
||||||
|
- 更新 README.md:目录结构补充 CHANGELOG.md / requirements.md;版本历史表补充 93d3924、b3e2f52、e729c5b、f438ac5 提交记录。
|
||||||
|
- 新增日志文件输出功能:`parameters.h` 增加 `RDP_LOG_ENABLE` 开关(定义时启用;**当前源码中该宏为注释状态,即默认不重定向、日志输出到控制台**)与 `RDP_LOG_DIR` 目录宏(`.\\rdp_logs\\`);新增 `rdp_log.h/.cpp` 日志模块,首次 `Data_Process_Factory::GetB()` 时按 `RDP_LOG_ENABLE` 决定是否用 `rdbuf()` 将 `std::cout` 重定向到 `.\rdp_logs\` 下按日期+时间命名的日志文件(`rdp_YYYYMMDD_HHMMSS.log`,目录不存在自动创建),`Destroy()` 销毁实例时恢复 `std::cout` 并关闭文件;开关注释关闭时不重定向、日志仍输出到标准输出;日志文件在 `CMakeLists.txt` 的 SOURCES 中注册。
|
||||||
|
- 新增 `RDP_LOG` 日志输出宏(`rdp_log.h`):自动在每条日志前附加 `[时间戳][代码文件:行号]` 信息后再输出到标准输出(重定向开启时随之写入日志文件),供后续新增日志统一使用。
|
||||||
|
- 更新 README.md(604f158、d6cdbc0):目录结构补充 `archived_docs/` 归档目录;9.6 节改写 TWS 关联 ΔT≤0 的处理说明;功能特性、模块职责、已知问题与参考文档的文档引用路径同步指向 `archived_docs/`;版本历史表补充 604f158、d6cdbc0 提交记录。
|
||||||
|
- TWS 关联新增**高度门限**(e0bf227,`track_asso.cpp`):原实现中分距离段的高度门限代码块整体为注释状态、`d_h` 恒为 1(等于不生效),现改为独立判定 `thd_h = |h_track − h_point|` 与航迹距离分段比较后再参与关联(分段值见 Changed),与 TAS 通道的高度门限取值一致。
|
||||||
|
- 关联门限判定重构为三个显式布尔量(e0bf227):`track_asso.cpp` 与 `track_asso_tas.cpp` 的 `model_filter()` 原先把统计距离、高度、距离三类判据混写在一个长 `if` 条件里(高度门限在 TWS 侧整体被注释),现分别计算 `thd_d`(统计距离门限,按距离分段)、`thd_h`(高度门限)、`thd_r`(TWS 距离门限)后再以 `thd_d && thd_h && thd_r`(TAS 为 `thd_d && thd_h`)判定候选,逻辑等价性更易核对;TWS 侧同时移除了 `manual_tracking_flag==0` 的注释残留代码块与其缩进。
|
||||||
|
- 更新 README.md(e0bf227):目录结构(第 3 节)删除已移除的 `docs/data_process_flow_report.html` 并补充 `design_docs/` 留档目录(被 .gitignore 忽略);2、9.6、9.10、10.1、11.1、12、13 节按源码同步 `ASSO_THORD = 4`(关联波门等效 d < 4、TWS 分段比例门限 16/1000 与 16/100)、TWS/TAS 高度门限的分段取值、`thd_d/thd_h/thd_r` 三类门限判定结构、TAS 波束数据率门控与 e0bf227 提交记录;13 节参考文档表删除已不存在的 HTML 行。
|
||||||
|
- 同步 `docs/data_process_flow_report.md`(e0bf227):4.2 节波门由「统计距离 + 距离 + 恒通过的俯仰门限」改为「统计距离 thd_d + 高度 thd_h + 距离 thd_r」并给出 TWS 高度门限分段表,7 节 TAS 高度门限 2000~3000 m 段由 200 m 更正为 250 m;7.2 节判据与 9.1 节参数表按源码更新(`ASSO_THORD = 4`、`d² < 16`);8.2 节改为单条件数据率门控并在选中目标后按 CPI 时间计算外推步长。
|
||||||
|
- 输出航迹补充「靠近/远离」方向标志 `Flag_Direction`(f249fdc):TWS 关联输出(`track_asso.cpp`)与 TAS 关联输出(`track_asso_tas.cpp`)在写入 `vr_point` 后追加 `Flag_Direction = vr_point > 0 ? 1 : 0`,即径向速度为正判为靠近(1)、为零或负判为远离(0)。该字段此前已在 `data_process_class_dll.h` 的 `Track` 结构体中声明(注释「方向标志 1 靠近/0 远离」)但从未被赋值,宿主读到的是未初始化/旧值。
|
||||||
|
- 新增三份流程与专项文档(f249fdc):`docs/data_process_flow_report.md`(数据处理流程与关键逻辑说明:总体数据流、前处理与判圈、凝聚、TWS/TAS 关联与滤波、航迹起始、外推消亡与航迹号管理、TAS 波束控制、参数脉络与关键约定)、`docs/data_process_flow_report.html`(同内容的 HTML 渲染版)、`docs/track_init_readme.md`(航迹起始 Track Init 详细逻辑说明:分阶段流程、起始条件汇总、参数调参、输出字段映射、已知风险与代码索引)。
|
||||||
|
- 更新 README.md(7d5a56f、f249fdc):目录结构新增 `docs/` 目录;2、7.2、8.1 节满圈判据改为「方位波位号 == 0」并说明 `last_beam_num` 不再参与判断;8.3、9.3 节改写点-航迹头关联判据与起批输出历史点数;9.6 节补充方向标志输出与点迹消费说明;2、10.1 节 `RDP_LOG_ENABLE` 说明改为当前实际状态(注释停用、默认不重定向);11.4 节新增航迹起始未修复观察;版本历史表补充 7d5a56f、f249fdc,参考文档表补充 `docs/` 三份文档。
|
||||||
|
- 新增手动重点目标接口(50e0b5c):`data_process_class_dll.h` 增加 `primary_target_add(int track_index)`(将指定批号转为重点目标)与 `primary_target_cancel(int track_index)`(取消重点目标)两个虚接口(基类为空实现、返回 0),`Data_Process` 中按批号把 `Trust_Track::primary_target_flag` 置 1 / 清 0;重点航迹的消亡改用独立阈值 `TRACK_DIE_ROUND_PRIMARY`(= 10,两体制相同),普通航迹仍用 `TRACK_DIE_ROUND`。
|
||||||
|
- 新增未关联航迹的外推圈数上限宏(50e0b5c,`parameters.h`):`MAX_EXTRAPOLATE_NUM = 3`(TWS 通道,两体制相同)、`MAX_EXTRAPOLATE_NUM_TAS`(TAS 通道,相扫 5 / 机扫 48)。
|
||||||
|
- 输入/输出结构新增「归一化幅度」与「速度维 FFT 点数」相关字段(e8c56f9):`DataRev` 增加 `amp_asv`(目标归一化幅度 dB)与 `prn_fftn`(速度维 FFT 点数);`Track` 增加 `amp_asv_point` / `prn_fftn_point`;内部 `PointRecv`、`Trust_Track` 同步增加对应字段,`track_asso.cpp` 在关联实点时写入航迹、TWS 输出航迹时写回输出结构。⚠ 当时输入侧未打通(该描述后于本次发布更正为「已打通」,见 Changed 末条):`data_preprocess()` 未把 `DataRev.amp_asv` / `DataRev.prn_fftn` 拷入内部 `PointRecv`;**TAS 通道至今未涉及这两个字段**,TAS 输出中它们仍无有效数据来源(详见 README 11.2)。
|
||||||
|
- 更新 README.md(本次文档更新):2 节补充重点目标/外推上限/输出门控与结构体字段扩展;3 节把 `requirements.md` 移回仓库根目录;5.2、6.1、6.2、7.1、8.1、8.2、9.6、9.9、10.1、11.1、11.2、12、13 节按源码同步 `Flag_Direction` 新判据、外推圈数上限、消亡圈数(普通 6 / 重点 10 / TAS 相扫 10、机扫 96)、`Track_Update_Flag` 输出门控、新增字段与结构体布局变更提示;12 节版本历史补充 50e0b5c、fc49707、42b598e、e8c56f9 四条记录。
|
||||||
|
- 同步 `docs/data_process_flow_report.md` 与 `docs/track_init_readme.md`(本次文档更新):前者更新总体数据流表(⑥ 外推/消亡)、4.7 外推、6.1 消亡条件、7.2 TAS 外推门控、9.1 参数表与第 10 节观察;后者更新第 14 节 `Flag_Direction` 判据并补充 `amp_asv_point` / `prn_fftn_point` 两个未赋值字段。
|
||||||
|
- **新增数据记录调试功能(可选编译)**:新增 `rdp_record.h`(`rdp_record::Init()/Shutdown()/db_path()` 与 `RDP_RECORD`/`RDP_RECORD_BATCH` 记录点宏;功能关闭时宏展开为 `((void)0)`、实参不求值,头文件不含任何第三方依赖)、`rdp_record_entity.h`(记录实体=数据表定义区,含 2 个示例实体与 `RDP_RECORD_DECLARE` 实例化声明宏)、`rdp_record.cpp`(实体注册区:`YLT_REFL` + `RDP_RECORD_DEFINE`;pimpl 隔离 ormpp/SQLite;首次写入自动 `CREATE TABLE IF NOT EXISTS`;单条写入与 `std::vector` 批量事务写入;建表/插入失败每个实体只提示一次并降级为空操作;内部互斥锁串行化单连接)。`data_process_class_dll.cpp` 的 `Data_Process_Factory::GetB()/Destroy()` 分别调用 `rdp_record::Init()/Shutdown()`(关闭时为空实现),`parameters.h` 新增记录目录宏 `RDP_RECORD_DB_DIR`(`.\rdp_records\`),`.gitignore` 增加 `rdp_records/`。(实体定义区当时的「2 个示例实体」已扩展为 7 个,见本版 Added 首条。)
|
||||||
|
- 新增 2 个示例记录点(`data_process.cpp`,字段为示例可按需增删):① `data_preprocess()` 的 TWS 分支逐点写入表 **`RdpRecPointTws`**(输入点迹字段:CPI/GNSS 时间 ms、方位/俯仰波位、PRF/频点、点迹号/总数、距离/方位/俯仰/速度/幅度/SNR/RCS 等,当前实体为 22 个字段);② `track_process()` 的 TWS/TAS 处理帧结束后批量写入表 **`RdpRecTrackOut`**(输出航迹 20 个字段,两种模式共用一张表并用 `track_mode` 区分;每行取输出数组 `[i][0]`,行数超过 `MAX_TRACK_NUM` 时钳位)。⚠ 这两个实体名已随 a4f32e4 / b227ae1 演进:输入点迹表更名并扩展为 `RdpRecPoint`(TWS/TAS 共用、增 `point_id`/`frame_id`/`circle_id`),输出航迹示例整体停用、改由 `RdpRecTrustTrack` 记录内部航迹(详见本版 Added 首条的 6 张在用表清单)。
|
||||||
|
- 内置第三方源码 `third_party/ormpp/`(按上游原样保存,含 `UPSTREAM.md` 记录来源与升级方式):ormpp 0.2.0(commit `acf23989…`,Apache-2.0)+ 随其内置的 iguana 1.0.5、frozen 与 SQLite 3.49.1 amalgamation(公有领域),并保留两份 LICENSE 文件(与上游 git blob 逐字节一致)。
|
||||||
|
- 新增 `docs/data_record_debug.md`(数据记录调试功能专项说明):开关与构建(`RDP_DATA_RECORD` 取值、`configure.bat` 第 4 参数、记录模块以 C++20 独立编译与 C 编译器要求、关闭时零代码保证)、运行期行为(记录库目录与文件名、`synchronous=OFF` 取舍、`Init`/`Shutdown` 时机、失败降级、单连接 + 互斥锁与线程模型)、记录实体(表)约定(全局命名空间、结构体名即表名、首列 `int64_t id` 自增主键、类型映射表、**禁止数组字段**及原因)、**新增记录点四步配方**(含 `RDP_RECORD_DECLARE` → `YLT_REFL` + `RDP_RECORD_DEFINE` → 记录点写法 → 自动建表,以及「忘记注册报 LNK2019」自检点)、当时的 2 个示例记录点(现已扩展为 6 张在用表 + 1 个停用实体,见本版 Added 首条)、Python/DB Browser 查询示例与已知限制。
|
||||||
|
- 更新 README.md(本次文档更新):2 节新增「数据记录调试功能(可选编译)」特性条目;3 节目录结构补充 `third_party/ormpp/`、`rdp_record.h/.cpp`、`rdp_record_entity.h`、`docs/data_record_debug.md`、`rdp_records/` 并更新 `requirements.md` 说明;4.1 节环境要求补充内置依赖与 C 编译器;4.3 节补充 `RDP_DATA_RECORD` 与 `configure.bat` 第 4 参数用法;4.4 节产物补充 `rdp_record.lib`;4.5 节新增「第三方库告警例外(仅记录功能启用时)」;5.2 节模块职责新增 `rdp_record` 行;10.1 节编译期宏新增 `RDP_RECORD_ENABLE` / `RDP_RECORD_DB_DIR`;11.3 节补充「记录功能默认只在 Debug 启用」;12 节版本历史新增本次工作区条目;13 节参考文档新增 `docs/data_record_debug.md` 与 `third_party/ormpp/UPSTREAM.md`、更新 `requirements.md` 行。
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
> 以下条目为上一轮「工作区(未提交)」状态的改动,随本次 1.5.6 发布一并归档(内容未改写)。
|
||||||
|
|
||||||
|
- TAS 波束控制改为按固定数据率调度:`Beam_Ctrl()` 仅当目标满足 `1 / DATA_RATE_TAS` 秒的数据率间隔(相对航迹时间 `T_track` 与上次波束输出 `last_track_time`)时才输出 TAS 跟踪波束,使 TAS 目标数据率不再随波束时间(Beam_Ctrl 调用频率)变化。
|
||||||
|
- `CMakeLists.txt` 新增缓存变量 `RDP_DATA_RECORD`(`AUTO`/`ON`/`OFF`,AUTO = Debug 启用 / Release 关闭;多配置生成器下 AUTO 直接 `FATAL_ERROR` 要求显式取值)与可选静态库 `rdp_record`:该目标以 `CXX_STANDARD 20` 独立编译(ormpp 要求 `CMAKE_CXX_STANDARD 20`,而内置 Eigen 3.3.7 在 `/std:c++20` 下会因 `std::result_of` 被 MSVC 移除而编译失败,故**雷达处理代码保持 C++17**)、经 `enable_language(C)` 编译内置 sqlite3 amalgamation(`sqlite3.c` 以源文件级 `/w` 单独降级第三方告警)、`RDP_RECORD_ENABLE` 与 `ORMPP_ENABLE_SQLITE3` 经 `PUBLIC` 传递给 DLL 并将静态库链接进 DLL;关闭时不添加任何目标、`SOURCES` 列表保持不变(Release 零痕迹的关键)。配置阶段打印启用/关闭状态。
|
||||||
|
- `parameters.h` 新增记录库目录宏 `RDP_RECORD_DB_DIR`(`.\rdp_records\`,相对宿主进程当前工作目录,目录不存在时自动创建)与开关说明注释:记录开关由构建系统定义 `RDP_RECORD_ENABLE`,**不提供手工开关宏**(避免 Release 误开)。
|
||||||
|
- `configure.bat` 新增可选第 4 参数 `AUTO|ON|OFF`(缺省 `AUTO`,即 CMake 侧默认值)并作为 `-DRDP_DATA_RECORD` 传入,回显新增 `record` 行;脚本仍保持纯 ASCII 编码。
|
||||||
|
- `.gitignore` 增加 `rdp_records/`(数据记录库输出目录)。
|
||||||
|
- `requirements.md` 内容更新为数据记录调试功能需求(结构体经 ormpp 映射写入 SQLite、Release 版可屏蔽、数据分类入不同表、宏记录点、便于快速新增结构体、不使用异步写入),本功能框架已按该说明实现。
|
||||||
|
- 本次改动的编译与运行验证:X256_PS/X256_MS × Release(记录关闭)/Debug(记录启用)四种配置均 **0 warning、0 error**;Release 产物的导出表与依赖表与改动前**逐行一致**、DLL 体积不变(PS 178,688 / MS 178,176 字节)、构建树中无记录模块目标文件、二进制内无 `sqlite` 字样;Debug(AUTO→启用)下 DLL 产物为 3,611,648 字节并额外生成 `rdp_record.lib`;运行时用临时校验程序(不提交)配合 Python `sqlite3` 验证:建库成功、一实体一表、单条与批量(事务)写入行数与取值正确、`id` 自增、`PRAGMA integrity_check` = ok、无 `-journal`/`-wal` 残留;记录目录无法创建时 DLL 接口照常返回、仅打印一次错误、后续写入静默忽略。
|
||||||
|
- TAS 波束输出目标改为队列内调度:不再固定取队首,而是遍历 TAS 队列,选择满足数据率门控且 CPI 时间最早的目标输出;原每次 Beam_Ctrl 末尾的整队循环移位(队列轮转)已停用(代码注释保留)。
|
||||||
|
- 数据率门控统一使用运行时参数 `Work_Parameter.DATA_RATE_TAS`(由 DLL 调用者经 `track_process_parameters_initial()` 输入,需为 >0 的有效值);`parameters.h` 中 `DATA_RATE_TAS` 编译期宏(相扫 0.3 / 机扫 0.0625)已注释停用,引导跟踪外推同步改用运行时参数。
|
||||||
|
- 编译时以 `#pragma message` 提示当前启用的扫描体制宏(MECHANICAL_SCANNING / PHASE_SCANNING)。
|
||||||
|
- 频点宏由 `FREQ0~FREQ20`(16.8 GHz)精简为单个 `FREQ0`,取值改为 9.2 GHz(e729c5b)。
|
||||||
|
- MSVC 编译选项按编译器版本条件追加 `/utf-8`(VS2015 及以上);MSVC 2013 不支持该选项,改用源码文件带 BOM 的 UTF-8 编码解决 C4819。
|
||||||
|
- 存量调试输出收敛为告警级 `RDP_LOG` 日志(1521592):`track_asso.cpp` / `track_asso_tas.cpp` 的 `model_filter()` 在 ΔT ≤ 0(乱序/重复时间戳)分支新增告警日志(含航迹/点迹/时间差信息,其中 `track_asso.cpp` 侧后于 604f158 注释停用);`tas_ctrl.cpp` 中 TAS 波束最早目标调度的 `printf` 调试输出移除,`data_process.cpp` 手动删除与 `track_die_tas.cpp` TAS 目标消亡的 `std::cout` 调试输出注释停用。重定向开启时上述日志随 `std::cout` 一并写入日志文件。
|
||||||
|
- `RadarPara.DATA_RATE_TAS` 单位由 Hz(1/s)改为 s(秒)(1521592):`tas_beam_output()` 的 TAS 波束输出门控由 `1 / DATA_RATE_TAS` 秒改为直接按 `DATA_RATE_TAS` 秒比较,`data_process_class_dll.h` 字段注释同步更新;调用者改按「波束输出间隔(秒)」输入该参数(原 0.3 Hz 的含义不再适用,需按新单位换算后传入)。
|
||||||
|
- requirements.md 内容更新为「雷达数据处理项目修改说明」(1521592):现描述日志文件输出功能需求(rdbuf() 重定向、日志开关宏、日期+时间命名日志、前缀日志宏,附参考示例)。
|
||||||
|
- TWS 点航关联中 ΔT ≤ 0(点迹 CPI 时间不晚于航迹时间,如 TAS 航迹遇上时间戳更早的 TWS 点迹、或重复时间戳)的候选不再被剔除(604f158):此类候选仍参与最近邻最小 d 的比较与选取,但不执行 IMM/EKF 更新、不刷新航迹时间与新鲜度(`T_track`、`Extrapolate_round`、`point_flag`、`associate_point_number` 均保持原值,该航迹仍按未关联航迹外推),同时把该点迹标记为已使用(`Use_Flag=1`)消费掉,使其无法再参与航迹起始,避免由此生成虚假 TWS 航迹;`track_asso.cpp` 中 ΔT≤0 的 `RDP_LOG` 告警日志随之注释停用(`track_asso_tas.cpp` 中同名告警日志仍启用)。
|
||||||
|
- 过期文档归档(604f158):`BUG_REPORT.md`、`BUG_FIX_REPORT.md`、`requirements.md` 由仓库根目录移入 `archived_docs/` 留档,仓库内对它们的引用路径同步改为 `archived_docs/...`。
|
||||||
|
- 扫描一圈完成判据改为「方位波位号 == 0」(7d5a56f):原判据「当前方位波位号 < 上一帧波位号」在机扫模式下遇到转台反转时波位号会变小但并未扫完一圈,造成误判;现 `data_preprocess()` 仅在 `Data_Input[0].Beam_index_aiz == 0` 时返回 1(TWS 满一圈,执行航迹处理),否则返回 2(继续蓄数据,只做滑窗凝聚)。原判据代码注释保留,`last_beam_num` 仍被赋值但不再参与判断。调用方需保证点迹的方位波位号按 0~Beam_num-1 编号且每圈必然出现 0。
|
||||||
|
- 点迹-航迹头关联判据改为统一速度区间并增加多普勒-几何一致性约束(7d5a56f,`track_init.cpp`):原先按扫描体制与距离分段收紧速度门限的分支(近程 `r≥1000` 全速 / `r<1000` 半速,中远程 `r≥2000` 全速 / `r<2000` 取 1/2~1/3 速)整体注释停用,改为 `dis ≤ V_MAX·ΔT` 且 `dis ≥ V_MIN·ΔT`,同时要求 `vr_point·v_track_head > 0`,并新增 `dis ≥ |vr_point|·ΔT` 与 `dis ≥ |v_track_head|·ΔT` 两条约束——切向高速目标在 ΔT 内的实际位移远小于 `|vr|·ΔT`,据此被排除,用于限制由切向高速点迹起批出的短航迹。其中 `vmax` 的近程/中远程分支取值相同,均取 `Work_Parameter.V_MAX`。
|
||||||
|
- 同步 `docs/` 内两份专项文档(本次文档更新):`docs/data_process_flow_report.md` 附录与 `docs/track_init_readme.md` 第 12.1 节的「与 README 的差异」说明改为「差异已按结论同步到 README」并保留更新前的旧表述作为改动缘由;其中「起始输入过滤」一行更正为「上游 `track_asso_process()` 已删除 `Use_Flag==1` 的点迹 + `track_init` 入口再次剔除」,「初始化用点」一行更正为「取下标 `track_start_point_num-3 ~ -1`,航迹更长时不是真正的末三点」;`docs/track_init_readme.md` 第 15 节第 2 条相应更正(`track_init.cpp` L505 的 `L` 覆盖为 `track_start_point_num`,第 L 个点之后的尾部点既不参与初始化也不输出),第 14 节补充说明 `Flag_Direction` 仅由关联输出路径赋值、起批输出不写该字段。
|
||||||
|
- 关联波门 `ASSO_THORD` 由 3 调大至 4(e0bf227,`parameters.h` 相扫/机扫两组宏同步):判据写作 `d*d < ASSO_THORD*ASSO_THORD`,而 `d` 本身已是马氏距离平方,等效门限由 `d < 3` 放宽为 `d < 4`(TWS 分距离段的比例门限随之由 9/1000、9/100 变为 16/1000、16/100),配合高度门限判定提高机动目标的关联概率;调参时仍需注意这一层「二次方」语义(BUG-20 有意保留)。
|
||||||
|
- TWS 与 TAS 关联的高度门限统一为同一组按航迹距离分段的取值(e0bf227):`r_track ≤ 1000 m` 时 `|h_track − h_point| ≤ 150 m`、`1000~2000 m` 时 ≤ 200 m、`2000~3000 m` 时 ≤ 250 m、`3000~5000 m` 时 ≤ 300 m、`> 5000 m` 不约束。其中 TWS 侧为该门限首次生效(原代码块被注释),TAS 侧 `2000~3000 m` 段由 200 m 放宽到 250 m。
|
||||||
|
- TAS 波束输出的数据率门控条件修正(e0bf227,`tas_ctrl.cpp::tas_beam_output()`):原判据同时要求「距上次波束输出超过 DATA_RATE_TAS」与「航迹时间 T_track 与最新时间戳之差超过 DATA_RATE_TAS」,后者与「选取 CPI 时间最早目标」的语义冲突,会额外抑制本可输出的目标;现仅保留 `delta_T_last_track = (latest_timestamp − last_track_time)/1000 > DATA_RATE_TAS` 一条门控,`delta_T` 改为在选中该目标后按 `(latest_timestamp − CPI_time)/1000` 计算并用于外推,使 TAS 目标输出间隔严格跟随数据率。
|
||||||
|
- 输出航迹改为「只输出本圈有更新的航迹」(50e0b5c):TWS `track_asso_process()` 与 TAS `track_asso_process_tas()` 的输出循环新增 `Track_Update_Flag == 1` 门控,输出后立即清零;该标志在关联到实点或外推成功时置 1。此前每个 TWS 周期都会把航迹表中的全部可靠航迹各输出一行(`Point_Sum = 1`),宿主不能再据输出行数推断航迹总数(当圈新起批的航迹仍由 `track_init` 的输出路径直接写入)。
|
||||||
|
- TWS 未关联航迹外推增加圈数上限(50e0b5c,`track_asso.cpp::model_filter()`):仅当 `Extrapolate_round <= MAX_EXTRAPOLATE_NUM`(=3)时按 `DATA_RATE_SHORT/MIDDLE/FAR` 预测一帧、推进航迹时间并置 `Track_Update_Flag = 1`;超过上限后不再推进位置与时间,只累加 `Extrapolate_round`、置 `point_flag = 0` 与 `Track_Update_Flag = 0`(该航迹此后不再输出,位置冻结在最后一次预测处),直到重新关联到实点才恢复。避免长时间未关联的航迹被反复外推到远处。
|
||||||
|
- TAS 未关联航迹外推同样增加上限(50e0b5c,`track_asso_tas.cpp`),但判定方向与 TWS 相反:`Extrapolate_round >= MAX_EXTRAPOLATE_NUM_TAS`(相扫 5 / 机扫 48)时才做预测、推进航迹时间并输出,未达该轮数时只累加 `Extrapolate_round` 且不输出(位置与航迹时间停在最后一次关联处),达到上限后才恢复逐帧外推输出(见 README 11.2 的观察)。
|
||||||
|
- 航迹消亡圈数与判据调整(50e0b5c,`parameters.h`、`track_die.cpp`、`track_die_tas.cpp`):`TRACK_DIE_ROUND` 由 4 调整为 6(两体制),新增重点航迹专用 `TRACK_DIE_ROUND_PRIMARY = 10`,`TRACK_DIE_ROUND_TAS` 相扫由 5 调整为 10(机扫保持 96);消亡判据由 `Extrapolate_round >= 阈值` 改为 `> 阈值`,并把 `manual_delete_flag == 1` 与轮数条件合并为统一的 `die_flag` 判定,TWS 侧按 `primary_target_flag` 在 6 / 10 之间二选一。因每圈未关联只自增 1,普通 TWS 航迹实际连续 7 圈无实点关联才消亡(重点航迹 11 圈,TAS 相扫 11 圈 / 机扫 97 圈)。
|
||||||
|
- 「靠近/远离」方向标志 `Flag_Direction` 改为按滤波速度矢量判定(fc49707 引入、42b598e 调整,`track_asso.cpp` 与 `track_asso_tas.cpp` 同步):不再使用受多普勒速度模糊影响、符号可能取反的实测径向速度(原 `Flag_Direction = vr_point > 0 ? 1 : 0`),改为用航迹 IMM 融合状态的速度方向角 `Direction_Angle = atan2(X[4], X[1])` 与位置矢量判定:`acos((-x·cos(Direction_Angle) − y·sin(Direction_Angle)) / r) < π/2` 时置 1(靠近),否则 0(远离),其中 `x`/`y` 为经 `Sys_delay` 补偿后的位置、`r` 为其模。该判据等价于「滤波速度矢量的径向分量指向雷达(径向接近)即判为靠近」;中间版本曾按合速度归一化并把门限取为 π/4(45° 锥角),42b598e 去掉归一化并把门限放宽到 π/2(90°)。
|
||||||
|
- 手动操作接口遍历命中目标后立即 `break`(fc49707,`data_process.cpp`):`primary_target_add` / `primary_target_cancel` / `tracking_start` / `tracking_stop` 在写入标志后退出循环,不再继续扫描整张航迹表(批号唯一,结果等价)。
|
||||||
|
- `requirements.md` 由 `archived_docs/` 移回仓库根目录(工作区改动,文件内容未变):README 目录结构(第 3 节)与参考文档表(第 13 节)中的引用路径同步改回 `requirements.md`。
|
||||||
|
- **构建工具链升级:编译器由 Microsoft Visual C++ 2013(Visual Studio 12,`_MSC_VER` 1800,x86)升级为 Microsoft Visual C++ 2022(v143 工具集,`_MSC_VER` 1944,cl 19.44.35228,x64),C++ 标准由 C++11 提升为 C++17**。`CMakeLists.txt` 的 `cmake_minimum_required` 由 3.10 提升到 3.21(VS2022 生成器自 3.21 起支持),新增 `CMAKE_CXX_STANDARD 17`(含 `CMAKE_CXX_STANDARD_REQUIRED ON`)与「必须使用 MSVC 2022(`_MSC_VER >= 1930`)」的配置期强校验(不满足直接 `FATAL_ERROR`),并在配置阶段打印实际编译器路径、`_MSC_VER` 与所选 C++ 标准。
|
||||||
|
- `CMakeLists.txt` 编译选项调整:`/utf-8` 由「MSVC >= 1900 条件追加」改为对 MSVC 无条件启用;新增 `/Zc:__cplusplus`(MSVC 默认把 `__cplusplus` 报为 `199711L`,加该选项后正确报 `201703L`,使依赖该宏判断的第三方库——内置 Eigen 3.3.7——走标准分支);显式追加 `/W3`(CMake 3.15 起策略 CMP0092 不再把 `/W3` 放入 `CMAKE_CXX_FLAGS`,显式恢复以保持原有警告级别);`/Zc:wchar_t`、`/FS` 与 Release 专用的 `/Zc:strictStrings` 保持不变。
|
||||||
|
- **全部构建脚本改为 MSVC 2022**:新增 `.vscode/scripts/msvc_env.bat`(定位 VS2022 工具集与 `cl.exe`、校验路径存在后调用 `vcvarsall.bat x64`,可用 `VS2022_DIR` / `MSVC_TOOLSET_VERSION` / `MSVC_HOST_ARCH` / `MSVC_TARGET_ARCH` 环境变量覆盖默认值),`configure.bat` / `build.bat` / `clean.bat` 统一改为调用该脚本并显式传入 `-DCMAKE_CXX_COMPILER`;四个脚本一律保持**纯 ASCII 编码**(cmd.exe 按 OEM 代码页解析 .bat,中文注释会破坏其解析)。
|
||||||
|
- `configure.bat` 新增「旧工具集构建树自动清理」:构建目录存在 `CMakeCache.txt` 但缺少 `.msvc_toolset` 标记(或标记与当前工具集版本不一致)时,先整体删除该目录再重新配置。原因是 MSVC 2013 的 CMake 缓存与目标文件不能跨编译器复用——nmake 仅按时间戳判断,会把旧目标文件当作最新而跳过重编译,导致新旧工具集目标文件混链。
|
||||||
|
- VS Code 工程配置同步为 MSVC 2022 x64 + C++17:`settings.json` 的 `cmake.environment` 改为 VS2022 v143 x64 与 Windows SDK 10.0.26100.0 的 `PATH`/`INCLUDE`/`LIB`,新增 `cmake.configureArgs` 固定 `cl.exe` 路径,`C_Cpp.default.cppStandard` 改为 `c++17` 并新增 `C_Cpp.default.intelliSenseMode`;`c_cpp_properties.json` 的 `compilerPath` 指向新 `cl.exe`、`intelliSenseMode` 改为 `windows-msvc-x64`、配置名改为「X256_PS/X256_MS (MSVC2022 x64)」;`cmake-variants.yaml` 与 `tasks.json` 的变体/任务描述同步为 MSVC2022 x64。
|
||||||
|
- 产物架构由 x86 变为 **x64(AMD64)**:宿主程序必须为 64 位、并使用同一版本头文件重新编译后才能加载新 DLL(`rdp_playback.exe` 回放工具同样需升级为 x64 版本)。
|
||||||
|
- TWS 关联中 ΔT 判定的分支结构理顺(b227ae1,`track_asso.cpp::model_filter()`):原写法为 `if (delta_T <= 0) { 空分支 } else { IMM/EKF 更新 }`,现改为 `if (delta_T > 0) { 置 min_d_flag、IMM/EKF 更新 }`,行为与原来等价(ΔT > 0 才做滤波更新,ΔT ≤ 0 仍只消费点迹),但空分支被移除、可读性提高;原 ΔT≤0 的告警日志注释块一并删除。
|
||||||
|
- 记录点由「输出结构」改为「内部结构」(b227ae1):`data_process.cpp` 中按输出数组批量记录航迹的辅助函数 `rdp_record_output_tracks()` 与 `RDP_RECORD_BATCH` 调用整体移除,改在 `track_asso.cpp` 的输出循环内对内部 `Trust_Track` 逐条 `RDP_RECORD(RdpRecTrustTrack(...))`——记录的是航迹的完整内部状态(含 IMM 的 `X`/`P`/`X1`~`X3`/`P2`/`P3`/`u`),不再受输出数组容量与列映射的限制;范围仍限于本圈有输出(`Track_Update_Flag==1`)的航迹,且仅 TWS 通道。
|
||||||
|
- `Temp_track` 字段命名规范化(c3c7e66,`struct.h`):`snr` → `SNR`、`Amp` → `amplitude`、`T` → `CPI_time`、`Temp_track_section_idx` → `temp_track_section_idx`,并新增 `temp_track_id` / `point_id` / `circle_id` / `pitch_num`;`track_init.cpp`、`track_init_direct_tracking.cpp` 中的引用同步更名(含注释停用代码)。
|
||||||
|
- 输入点迹的两个「新字段」已打通(实际始于 a4f32e4 的 `data_process.cpp` 改写,本次发布确认并更正文档):`data_preprocess()` 现已把 `DataRev.amp_asv` / `DataRev.prn_fftn` 拷入内部 `PointRecv`(TWS 与 TAS 两条分支均赋值),并随 `RdpRecPoint` 落库;此前 README/CHANGELOG 记录的「输入侧未打通、输出字段无有效数据来源」已不成立(TAS 关联/输出路径仍未写回 `Track` 的这两个字段,见 11.2)。
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- 修正文档中「`data_preprocess()` 未搬入 `amp_asv` / `prn_fftn`」的过期描述(本次文档更新):README 11.2、`docs/data_process_flow_report.md`、`docs/track_init_readme.md` 三处同步更正为「已搬入」,并保留「TAS 输出路径未写回」这一仍然成立的部分。
|
||||||
|
- 修复 MSVC `/W3` 下全部 C4819 / C4018 / C4244 编译警告:源码文件改为带 BOM 的 UTF-8 编码;signed/unsigned 不匹配处改用 `size_t` 循环变量或显式 `static_cast<int>` 比较;double/float、__int64/double 等窄化转换改为 `static_cast` 显式转换,保持原有计算逻辑不变(涉及 `data_process.cpp`、`dot_coh.cpp`、`dot_coh_tas.cpp`、`tas_ctrl.cpp`、`track_asso.cpp`、`track_asso_tas.cpp`、`track_init.cpp`、`track_init_direct_tracking.cpp`、`track_index_mangement.cpp` 等)。
|
||||||
|
- 修复 `TAS_Ctrl::tas_beam_output()` 把航迹向量下标 `earliest_track_idx` 误赋给 `Tracking_beam->TAS_track_index` 的问题(1521592):现输出实际航迹号 `(*trust_track)[earliest_track_idx].Track_Index`,避免跟踪波束批号与目标不符。
|
||||||
|
- 修正 README.md(第 2、5.2、8.1、8.3、9.3、13 节)与 `docs/data_process_flow_report.md`(第 0、1、6.1~6.4 节、附录)中航迹起始的步骤顺序描述(纯文档勘误,无代码改动):两份文档原写作「航迹头(1 点)→ 点-航迹头关联(2 点)→ 点-临时航迹关联(≥3 点)→ 起批」,与 `track_init.cpp`(L49-126)每圈的实际执行顺序相反;现更正为「① 点迹先与 ≥2 点临时航迹关联(延长已有临时航迹)→ ② 再与 1 点航迹头关联(两点卡尔曼初始化出 2 点临时航迹)→ ③ 两个阶段都结束后统一删除被消费(`Use_Flag==1`)的点迹、剩余点迹逐条转为新航迹头 → ④ 长度达标的临时航迹经三点卡尔曼初始化转为可靠航迹」,并同步修正流程图与状态机;另补充两点此前的描述缺失:两个关联阶段互不排斥(航迹头阶段不检查临时航迹阶段留下的 `Use_Flag`,同一点迹可同时延长一条临时航迹并开启一条 2 点临时航迹)、两类关联都不做一对一分配(同一条临时航迹可被同圈多个点延长)。
|
||||||
|
- 修复速度模糊时「向站/背站」判断有误的问题(fc49707、42b598e):`Flag_Direction` 不再由受多普勒模糊影响、符号可能取反的实测径向速度 `vr_point` 决定,改为按航迹滤波速度矢量与雷达视线的几何关系判定(判据见 Changed),TWS、TAS 两通道行为一致。
|
||||||
|
- 修复升级到 MSVC 2022 后在 `/W3` 下新增报出的 **17 处 C4267**(`size_t` → `int` 窄化,可能丢失数据)告警:`track_asso.cpp`(7 处)、`track_init.cpp`(5 处)、`track_init_direct_tracking.cpp`(4 处)、`track_asso_tas.cpp`(1 处)、`tas_ctrl.cpp`(1 处)按项目既有约定改为 `static_cast<int>(...)` 显式转换,不改变任何计算逻辑、对外接口与结构体布局;被编辑的源文件均已恢复「带 BOM 的 UTF-8」编码,与仓库其余文件保持一致。修复后 X256_PS/X256_MS × Release/Debug 四种配置均为 **0 warning、0 error**。
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- 删除已注释停用的无用代码残留(d6cdbc0):`data_process.cpp` 中 TWS/TAS 分支的 `std::cout` 调试输出注释块,以及 `dot_coh.cpp` 中早期「1 km 以内 SNR < 20 dB 点迹过滤」的注释代码块。仅清理注释,不改变任何运行逻辑。
|
||||||
|
- 删除 `docs/data_process_flow_report.html`(e0bf227):该 HTML 渲染版与 `docs/data_process_flow_report.md` 内容重复且已明显滞后,保留价值不足;同内容的 HTML 已在 git 忽略的 `design_docs/` 内另行留档。README 目录结构、参考文档表与版本历史表中指向该文件的条目同步移除。
|
||||||
|
- 删除 `track_asso.cpp` TWS 输出循环中已注释停用的 `manual_tracking_flag == 0` 过滤代码块(fc49707):该过滤从未生效,删除后 TWS 输出仍会把手动转 TAS(`Track_Mode==1`)的航迹一并输出(BUG-25 未修复,见 README 11.2)。
|
||||||
|
|
||||||
|
## [1.5.5] - 2026-08-27
|
||||||
|
|
||||||
|
初始版本记录:汇总仓库现有功能与自 2022 年以来的主要变更(依据 git 提交历史与 README.md 整理)。
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- TWS/TAS 双通道雷达数据处理:输入点迹预处理、两帧滑窗点迹凝聚、逻辑法航迹起始(3~9 点起批,含屏蔽区)、IMM + EKF 航迹滤波、最近邻点航关联、航迹外推/消亡/航迹号管理、TAS 波束控制输出。
|
||||||
|
- 支持相扫(X256_PS)与机扫(X256_MS)两种扫描体制,通过 `RADAR_SCAN_MODE` / 编译宏配置切换。
|
||||||
|
- 适配四面阵机扫跟踪模式;机扫跟踪时增加高度门限判断。
|
||||||
|
- 输入点迹、输出航迹的 CPI 时间与 GNSS 时间改为 64 位整型(毫秒)。
|
||||||
|
- 增加航迹清空功能,解决重连时大量航迹乱窜的问题。
|
||||||
|
- TWS 输出增加高度平滑处理。
|
||||||
|
- TWS 点航关联增加俯仰门限与点航距离门限,限制大幅度跳变或突跳到远距离的点迹关联。
|
||||||
|
- 航迹起始增加屏蔽区域。
|
||||||
|
- 新增 README.md、BUG_REPORT.md、BUG_FIX_REPORT.md 等文档。
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- 工程由 Qt/qmake 迁移为 VS Code + CMake 构建,编译器保持 MSVC 2013 x86 不变。
|
||||||
|
- 机扫与相扫程序合并,通过宏定义配置切换。
|
||||||
|
- TAS 航迹外推时间间隔改为按波束时间计算。
|
||||||
|
- 扫描一圈完成的判断逻辑改为用“波位号变小”判断。
|
||||||
|
- 点迹凝聚角度约束放宽至 4 度;凝聚条件按近程/中程模式区分。
|
||||||
|
- 去掉自动转 TAS 功能,仅支持手动转 TAS。
|
||||||
|
- 去掉 1 km 以内航迹起批的 20 dB 信噪比门限。
|
||||||
|
- 统一代码缩进格式。
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- 修复若干逻辑 BUG(数组越界/下溢、局部变量未初始化、时间差无效、方位角 ±π 环绕、IMM 概率奇异、输出数组容量越界等),明细见 `archived_docs/BUG_FIX_REPORT.md`。
|
||||||
|
- 修复 TAS 外推时间差可能为无效值的问题。
|
||||||
|
- 修复航迹起始时未输出跟踪类型、可靠航迹手动转跟踪标志未清零的问题。
|
||||||
|
- 修复量测噪声协方差矩阵 R 赋值错误、数据预处理波位号判断规则、点迹数量上限、雅可比矩阵取值、起批负索引等问题。
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- 移除 `requirements.md`(93d3924 移除,后于 b3e2f52 重新加入并改为 TAS 波束控制说明)、`CLAUDE.md`、Makefile 系列、Qt 工程用户文件、内置 Eigen 3.3.7 冗余文件及「航迹点迹区分区说明」等不必要文件。
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## 项目概述
|
|
||||||
|
|
||||||
2003 雷达数据处理动态链接库。实现航迹跟踪处理、TAS/TWS 跟踪控制。将原始雷达点迹数据转换为稳定的目标航迹输出。
|
|
||||||
|
|
||||||
- **开发环境**: Qt 5.7 + MSVC 2013, C++
|
|
||||||
- **编译产物**: `data_process_class_dll.dll`(动态链接库)
|
|
||||||
- **线性代数**: 使用 Eigen 3.3.7 (`Eigen/Dense`)
|
|
||||||
|
|
||||||
## 构建
|
|
||||||
|
|
||||||
项目使用 qmake 生成 Makefile,然后通过 nmake 编译。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 生成 Makefile(在项目根目录执行)
|
|
||||||
qmake.exe -spec win32-msvc2013 -o Makefile data_process_class_dll\data_process_class_dll.pro
|
|
||||||
|
|
||||||
# 编译 Release 版本
|
|
||||||
nmake release
|
|
||||||
|
|
||||||
# 编译 Debug 版本
|
|
||||||
nmake debug
|
|
||||||
|
|
||||||
# 清理
|
|
||||||
nmake clean
|
|
||||||
```
|
|
||||||
|
|
||||||
已生成的 Makefile 位于根目录:`Makefile`、`Makefile.Debug`、`Makefile.Release`。构建输出在 `release/` 和 `debug/` 目录。
|
|
||||||
|
|
||||||
## 架构
|
|
||||||
|
|
||||||
### 设计模式
|
|
||||||
|
|
||||||
- **接口/工厂模式**:`Data_process_class_dll` 是抽象基类(定义在 `data_process_class_dll.h`),`Data_Process` 是具体实现(`data_process.h/cpp`)。外部通过 `Data_Process_Factory::GetB()` 获取实例,`Destroy()` 销毁。
|
|
||||||
- 所有外部接口都是虚函数,主程序只需要链接 DLL 并调用这些接口。
|
|
||||||
|
|
||||||
### 数据处理三模式
|
|
||||||
|
|
||||||
`data_preprocess()` 根据输入点迹类型返回处理模式:
|
|
||||||
|
|
||||||
| 返回值 | 模式 | 条件 |
|
|
||||||
|--------|------|------|
|
|
||||||
| `0` | 无数据 | 既非 TWS 也非 TAS |
|
|
||||||
| `1` | TWS 航迹处理 | `point_type == 0` 且波位号 == 16 |
|
|
||||||
| `2` | TWS 蓄数据 | `point_type == 0` 但波位号 != 16(继续缓存) |
|
|
||||||
| `3` | TAS 处理 | `point_type == 1` |
|
|
||||||
|
|
||||||
### TWS 处理流水线(model=1)
|
|
||||||
|
|
||||||
```
|
|
||||||
data_preprocess() → 缓存点迹到 Data_buffer
|
|
||||||
→ dot_coh.dot_coh_process_buff() 点迹凝聚(滑窗聚合)
|
|
||||||
→ track_asso.track_asso_process() 航迹关联(IMM 卡尔曼滤波更新已有航迹)
|
|
||||||
→ track_die.track_die_process() 航迹消亡(清除超时未更新的航迹)
|
|
||||||
→ track_init.track_init_process_logic() 航迹起始(从未关联点迹创建新航迹,逻辑法)
|
|
||||||
```
|
|
||||||
|
|
||||||
### TAS 处理流水线(model=3)
|
|
||||||
|
|
||||||
```
|
|
||||||
data_preprocess() → 缓存点迹到 Data_buffer_tas
|
|
||||||
→ dot_coh_tas.dot_coh_tas_process() TAS 点迹凝聚
|
|
||||||
→ track_asso_tas.track_asso_process_tas() TAS 航迹关联
|
|
||||||
→ track_die_tas.track_die_process_tas() TAS 航迹消亡
|
|
||||||
```
|
|
||||||
|
|
||||||
### 核心算法模块
|
|
||||||
|
|
||||||
| 文件 | 职责 |
|
|
||||||
|------|------|
|
|
||||||
| `kalman.cpp/h` | 卡尔曼滤波(两点/三点初始化)、EKF(含多普勒)、IMM 统计距离计算 |
|
|
||||||
| `track_asso.cpp/h` | TWS 航迹关联:IMM 模型交互→三个子模型滤波→模型输出。3 个 Singer 模型(不同 Q 值应对不同机动性) |
|
|
||||||
| `track_asso_tas.cpp/h` | TAS 航迹关联(独立实现,因 TAS 数据率不同) |
|
|
||||||
| `track_init.cpp/h` | 逻辑法航迹起始:点迹→航迹头关联→临时航迹转可靠航迹(需满足角度/波门条件) |
|
|
||||||
| `track_init_direct_tracking.cpp/h` | 引导跟踪航迹起始 |
|
|
||||||
| `dot_coh.cpp/h` | TWS 点迹凝聚:滑窗方式在距离-方位-速度维聚合相近点迹 |
|
|
||||||
| `dot_coh_tas.cpp/h` | TAS 点迹凝聚 |
|
|
||||||
| `track_die.cpp/h` | TWS 航迹消亡:持续外推超过阈值(4 圈)则消亡 |
|
|
||||||
| `track_die_tas.cpp/h` | TAS 航迹消亡(5 圈阈值) |
|
|
||||||
| `tas_ctrl.cpp/h` | TAS 波束调度:管理 TAS 目标队列(最多 4 个),自动/手动开启和退出 |
|
|
||||||
| `track_index_mangement.cpp/h` | 航迹号分配管理 |
|
|
||||||
| `coor_trans.cpp/h` | 坐标转换(雷达球坐标系 ↔ 直角坐标系) |
|
|
||||||
|
|
||||||
### 关键数据结构
|
|
||||||
|
|
||||||
- **`DataRev`**(`data_process_class_dll.h`)— 输入:雷达原始点迹,含距离/方位/俯仰/速度/幅度/SNR/RCS/波位等
|
|
||||||
- **`PointRecv`**(`struct.h`)— 内部:预处理后的点迹,增加高度(由距离×sin(俯仰)计算)、使用标志
|
|
||||||
- **`Trust_Track`**(`struct.h`)— 内部:可靠航迹。含 IMM 全状态:X[6]/P[6][6] 总估计 + 三个子模型的 X1/P1、X2/P2、X3/P3 + 模型概率 u[3]
|
|
||||||
- **`Temp_track`**(`struct.h`)— 内部:临时航迹。简化卡尔曼 X[4]/P[4][4](无加速度分量)
|
|
||||||
- **`Track`**(`data_process_class_dll.h`)— 输出:航迹信息(位置/速度/预测值/航迹号/跟踪模式等),二维数组 `[MAX_TRACK_NUM][10]` 每条航迹最多 10 个历史点
|
|
||||||
- **`RadarPara`**(`data_process_class_dll.h`)— 外部配置:雷达参数、跟踪门限、IMM 机动参数、禁止区域
|
|
||||||
- **`TrackingBeam`**(`data_process_class_dll.h`)— 输出:TAS 波束调度指令
|
|
||||||
|
|
||||||
### IMM 模型说明
|
|
||||||
|
|
||||||
TWS 航迹关联使用 3 模型 IMM(Interacting Multiple Model)处理目标机动:
|
|
||||||
|
|
||||||
- **Model 1**: Singer 模型,低过程噪声 Q(`Model1_Q_fast/slow`),适合匀速目标
|
|
||||||
- **Model 2**: Singer 模型,中过程噪声 Q(`Model2_Q_fast/slow`),适合中等机动
|
|
||||||
- **Model 3**: Singer 模型,高过程噪声 Q(`Model3_Q_fast/slow`),适合强机动
|
|
||||||
|
|
||||||
模型转移概率矩阵 `Pt[3][3]` 定义在 `Track_Asso` 类中。每个 CPI 周期执行:模型交互 → 各子模型卡尔曼预测+更新 → 模型概率更新 → 加权融合输出。
|
|
||||||
|
|
||||||
### 航迹区概念
|
|
||||||
|
|
||||||
按方位角将 360° 划分为 9 个航迹区(每个 40°),航迹按区组织以减少计算量。点迹区类似划分(每个区含 6 个波位)。相关参数在 `parameters.h` 中(当前版本大部分被注释,实际通过 `RadarPara` 动态配置)。
|
|
||||||
|
|
||||||
## 外部接口调用顺序
|
|
||||||
|
|
||||||
```
|
|
||||||
1. track_process_parameters_initial() — 初始化雷达参数
|
|
||||||
2. 每帧循环:
|
|
||||||
a. data_preprocess() — 输入原始点迹
|
|
||||||
b. 根据返回值调用 track_process() — 执行 TWS 或 TAS 处理
|
|
||||||
c. Beam_Ctrl() — TAS 波束调度
|
|
||||||
3. tracking_start() / track_delete() — 手动控制(按需)
|
|
||||||
4. track_clear_all() — 清空所有航迹
|
|
||||||
5. Data_Process_Factory::Destroy() — 销毁实例
|
|
||||||
```
|
|
||||||
|
|
||||||
## 参数配置
|
|
||||||
|
|
||||||
关键可调参数(通过 `RadarPara` 传入或 `parameters.h` 定义):
|
|
||||||
|
|
||||||
- `track_start_point_num` / `track_start_threshold` — 起航所需点数和波门大小
|
|
||||||
- `track_asso_threshold` — TWS 关联波门(统计距离阈值)
|
|
||||||
- `track_asso_threshold_tas` — TAS 关联波门
|
|
||||||
- `TRACK_DIE_ROUND` (4) / `TRACK_DIE_ROUND_TAS` (5) — 航迹消亡圈数
|
|
||||||
- `DOT_COH_RANGE` / `DOT_COH_V` / `DOT_COH_AZI` — 凝聚门限(距离/速度/方位)
|
|
||||||
- `TAS_QUEUE_LENGTH` (4) / `MAX_TAS_NUM` (4) — TAS 队列长度和最大目标数
|
|
||||||
- `Model1/2/3_Q_fast/slow` — IMM Singer 模型过程噪声
|
|
||||||
+224
@@ -0,0 +1,224 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.21)
|
||||||
|
|
||||||
|
# 雷达数据处理动态链接库
|
||||||
|
# 开发环境已由 Qt/qmake 迁移到 VS Code + CMake。
|
||||||
|
# 编译器已由 Microsoft Visual C++ Compiler 12.0 (VS2013) 升级为
|
||||||
|
# Microsoft Visual C++ Compiler 2022(v143 工具集,_MSC_VER 19.4x,x64)。
|
||||||
|
# 语言标准同步提升为 C++17。
|
||||||
|
#
|
||||||
|
# 注意:VS2022 生成器("Visual Studio 17 2022")需要 CMake >= 3.21,
|
||||||
|
# 因此本工程的最低 CMake 版本随之提高;NMake/Ninja 生成器同样满足。
|
||||||
|
project(data_process_class_dll LANGUAGES CXX)
|
||||||
|
|
||||||
|
# 扫描模式:
|
||||||
|
# PHASE_SCANNING -> 相扫雷达(X256_PS,原 Qt 工程默认激活配置)
|
||||||
|
# MECHANICAL_SCANNING -> 机扫雷达(X256_MS)
|
||||||
|
# 用法:cmake -S . -B build -DRADAR_SCAN_MODE=PHASE_SCANNING
|
||||||
|
set(RADAR_SCAN_MODE "PHASE_SCANNING" CACHE STRING "Radar scan mode (PHASE_SCANNING or MECHANICAL_SCANNING)")
|
||||||
|
set_property(CACHE RADAR_SCAN_MODE PROPERTY STRINGS PHASE_SCANNING MECHANICAL_SCANNING)
|
||||||
|
|
||||||
|
if(NOT RADAR_SCAN_MODE STREQUAL "PHASE_SCANNING" AND NOT RADAR_SCAN_MODE STREQUAL "MECHANICAL_SCANNING")
|
||||||
|
message(FATAL_ERROR "RADAR_SCAN_MODE 必须为 PHASE_SCANNING 或 MECHANICAL_SCANNING,当前值:${RADAR_SCAN_MODE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 数据记录调试功能开关(可选编译,详见 docs/data_record_debug.md)
|
||||||
|
# AUTO : Debug 构建启用、Release 构建关闭(默认;交付构建不做任何记录)
|
||||||
|
# ON : 强制启用(可用于 Release 排查,需自行承担性能开销)
|
||||||
|
# OFF : 强制关闭
|
||||||
|
# 启用时新增独立静态库 rdp_record:以 C++20 编译(ormpp 要求)、编译内置的 sqlite3
|
||||||
|
# amalgamation,并链接进 DLL;源码中的 RDP_RECORD 宏由 RDP_RECORD_ENABLE 控制,关闭时
|
||||||
|
# 展开为空操作(实参不求值),记录模块完全不参与编译。
|
||||||
|
# 依赖来源与升级方式见 third_party/ormpp/UPSTREAM.md。
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
set(RDP_DATA_RECORD "AUTO" CACHE STRING "数据记录调试功能:AUTO(Debug=ON/Release=OFF) / ON / OFF")
|
||||||
|
set_property(CACHE RDP_DATA_RECORD PROPERTY STRINGS AUTO ON OFF)
|
||||||
|
|
||||||
|
if(RDP_DATA_RECORD STREQUAL "AUTO")
|
||||||
|
if(CMAKE_CONFIGURATION_TYPES)
|
||||||
|
message(FATAL_ERROR "多配置生成器下 RDP_DATA_RECORD=AUTO 无法判定,请显式传入 ON 或 OFF")
|
||||||
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(RDP_RECORD_ENABLED TRUE)
|
||||||
|
else()
|
||||||
|
set(RDP_RECORD_ENABLED FALSE)
|
||||||
|
endif()
|
||||||
|
elseif(RDP_DATA_RECORD STREQUAL "ON")
|
||||||
|
set(RDP_RECORD_ENABLED TRUE)
|
||||||
|
elseif(RDP_DATA_RECORD STREQUAL "OFF")
|
||||||
|
set(RDP_RECORD_ENABLED FALSE)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "RDP_DATA_RECORD 必须为 AUTO / ON / OFF,当前值:${RDP_DATA_RECORD}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(RDP_RECORD_ENABLED)
|
||||||
|
message(STATUS "数据记录调试功能:启用(C++20 静态库 rdp_record + 内置 SQLite)")
|
||||||
|
else()
|
||||||
|
message(STATUS "数据记录调试功能:关闭(不编译记录模块,RDP_RECORD 为空操作)")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 语言标准:C++17
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# CMAKE_CXX_STANDARD 由 CMake 转换为 MSVC 的 /std:c++17(CMake >= 3.10 起支持)。
|
||||||
|
# CMAKE_CXX_EXTENSIONS OFF 在 MSVC 下没有对应开关(只影响 GCC/Clang 的 -std=gnu++xx),
|
||||||
|
# 保留它是为了在换用其它编译器时同样不启用语言扩展。
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 编译器约束:必须使用 MSVC 2022(v143,_MSC_VER >= 1930)
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
if(NOT MSVC)
|
||||||
|
message(FATAL_ERROR "本工程仅支持 MSVC (cl.exe) 编译器,当前编译器:${CMAKE_CXX_COMPILER_ID}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC_VERSION LESS 1930)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"本工程要求 MSVC 2022 (v143) 及以上版本(_MSC_VER >= 1930),"
|
||||||
|
"当前 _MSC_VER=${MSVC_VERSION}(编译器:${CMAKE_CXX_COMPILER})。\n"
|
||||||
|
"请先运行 VS2022 的 vcvarsall.bat x64(见 .vscode/scripts/msvc_env.bat)后再配置。")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "编译器:${CMAKE_CXX_COMPILER}(MSVC _MSC_VER=${MSVC_VERSION})")
|
||||||
|
message(STATUS "C++ 标准:C++${CMAKE_CXX_STANDARD}")
|
||||||
|
|
||||||
|
# 导出编译命令,便于 VS Code C/C++ 插件 IntelliSense 使用。
|
||||||
|
# Visual Studio 生成器不支持该选项,因此仅对 Makefile/Ninja 生成器开启。
|
||||||
|
if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
data_process_class_dll/rdp_log.cpp
|
||||||
|
data_process_class_dll/data_process_class_dll.cpp
|
||||||
|
data_process_class_dll/data_process.cpp
|
||||||
|
data_process_class_dll/dot_coh.cpp
|
||||||
|
data_process_class_dll/kalman.cpp
|
||||||
|
data_process_class_dll/coor_trans.cpp
|
||||||
|
data_process_class_dll/track_asso.cpp
|
||||||
|
data_process_class_dll/track_init.cpp
|
||||||
|
data_process_class_dll/track_index_mangement.cpp
|
||||||
|
data_process_class_dll/tas_ctrl.cpp
|
||||||
|
data_process_class_dll/track_die.cpp
|
||||||
|
data_process_class_dll/dot_coh_tas.cpp
|
||||||
|
data_process_class_dll/track_asso_tas.cpp
|
||||||
|
data_process_class_dll/track_init_direct_tracking.cpp
|
||||||
|
data_process_class_dll/track_die_tas.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(PUBLIC_HEADERS
|
||||||
|
data_process_class_dll/data_process_class_dll.h
|
||||||
|
data_process_class_dll/data_process_class_dll_global.h
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(data_process_class_dll SHARED ${SOURCES})
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 数据记录模块(RDP_DATA_RECORD 启用时构建):独立静态库、C++20(ormpp 要求),
|
||||||
|
# 与雷达处理代码(C++17)通过 rdp_record.h 的「仅声明 + 显式实例化」跨标准边界。
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
if(RDP_RECORD_ENABLED)
|
||||||
|
enable_language(C) # 用于编译 sqlite3 amalgamation
|
||||||
|
|
||||||
|
add_library(rdp_record STATIC
|
||||||
|
data_process_class_dll/rdp_record.cpp
|
||||||
|
third_party/ormpp/thirdparty/sqlite3/sqlite3.c
|
||||||
|
)
|
||||||
|
set_target_properties(rdp_record PROPERTIES
|
||||||
|
CXX_STANDARD 20
|
||||||
|
CXX_STANDARD_REQUIRED ON
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||||
|
)
|
||||||
|
# RDP_RECORD_ENABLE 经 PUBLIC 传递给 DLL:data_process.cpp 等源码中的 RDP_RECORD 宏随之生效
|
||||||
|
target_compile_definitions(rdp_record PUBLIC
|
||||||
|
RDP_RECORD_ENABLE
|
||||||
|
ORMPP_ENABLE_SQLITE3
|
||||||
|
)
|
||||||
|
target_include_directories(rdp_record
|
||||||
|
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/data_process_class_dll
|
||||||
|
PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp/iguana
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp/ormpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp/thirdparty/sqlite3
|
||||||
|
)
|
||||||
|
target_compile_options(rdp_record PRIVATE
|
||||||
|
/W3
|
||||||
|
/utf-8
|
||||||
|
/Zc:__cplusplus
|
||||||
|
/FS
|
||||||
|
)
|
||||||
|
|
||||||
|
# 第三方 amalgamation 单独降到 /w(源文件级选项在编译命令行中位于目标级之后,优先生效)
|
||||||
|
set_source_files_properties(third_party/ormpp/thirdparty/sqlite3/sqlite3.c
|
||||||
|
PROPERTIES COMPILE_OPTIONS "/w")
|
||||||
|
|
||||||
|
target_link_libraries(data_process_class_dll PRIVATE rdp_record)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 编译 DLL 时定义导出宏;引用 DLL 的工程不应定义该宏。
|
||||||
|
target_compile_definitions(data_process_class_dll PRIVATE
|
||||||
|
DATA_PROCESS_CLASS_DLL_LIBRARY
|
||||||
|
${RADAR_SCAN_MODE}
|
||||||
|
)
|
||||||
|
|
||||||
|
# 与 qmake 工程保持一致的 Windows 编译定义
|
||||||
|
if(WIN32)
|
||||||
|
target_compile_definitions(data_process_class_dll PRIVATE
|
||||||
|
WIN32
|
||||||
|
_WINDOWS
|
||||||
|
_UNICODE
|
||||||
|
UNICODE
|
||||||
|
NOMINMAX
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Eigen 头文件位于源码目录下(<Eigen/Dense>)。
|
||||||
|
target_include_directories(data_process_class_dll PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/data_process_class_dll
|
||||||
|
)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
target_compile_options(data_process_class_dll PRIVATE
|
||||||
|
# 显式恢复 /W3 警告级别。
|
||||||
|
# CMake 3.15(策略 CMP0092)起不再把 /W3 放进 CMAKE_CXX_FLAGS,
|
||||||
|
# 而本工程此前(cmake_minimum_required 3.10)一直以 /W3 构建,
|
||||||
|
# README 4.5 记录的全部 C4819/C4018/C4244 告警清理也基于该级别,
|
||||||
|
# 因此这里显式指定,保持警告级别不变。
|
||||||
|
/W3
|
||||||
|
# MSVC 2022 完整支持 /utf-8(VS2015 Update 2 起),
|
||||||
|
# 源码本身为 UTF-8 with BOM,显式指定后中文字符串/注释不再受系统代码页影响(消除 C4819)。
|
||||||
|
/utf-8
|
||||||
|
# 让 __cplusplus 正确报告 201703L(MSVC 默认始终为 199711L)。
|
||||||
|
# C++17 下依赖 __cplusplus 判断的第三方库(Eigen 3.3.7 等)据此走标准分支。
|
||||||
|
/Zc:__cplusplus
|
||||||
|
/Zc:wchar_t
|
||||||
|
# NMake 生成器下并行/增量编译时统一 PDB 写入。
|
||||||
|
/FS
|
||||||
|
)
|
||||||
|
|
||||||
|
# 与原 qmake 生成的编译选项保持一致:Release 配置额外开启严格字符串字面量检查。
|
||||||
|
# (原 MSVC 2013 因 Debug 运行库与 /Zc:strictStrings 冲突而仅限 Release,
|
||||||
|
# 升级到 MSVC 2022 后该限制已不存在,此处仍沿用“仅 Release”以保持行为不变。)
|
||||||
|
target_compile_options(data_process_class_dll PRIVATE
|
||||||
|
$<$<CONFIG:Release>:/Zc:strictStrings>
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 输出目录:build/bin 下为 DLL/PDB,build/lib 下为导入库。
|
||||||
|
set_target_properties(data_process_class_dll PROPERTIES
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||||
|
PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||||
|
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 安装规则:DLL/导入库 -> bin/lib,公开头文件 -> include。
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
install(TARGETS data_process_class_dll
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
)
|
||||||
@@ -1,426 +0,0 @@
|
|||||||
#############################################################################
|
|
||||||
# Makefile for building: data_process_class_dll
|
|
||||||
# Generated by qmake (3.0) (Qt 5.7.0)
|
|
||||||
# Project: data_process_class_dll\data_process_class_dll.pro
|
|
||||||
# Template: lib
|
|
||||||
# Command: C:\Qt\Qt5.7.0\5.7\msvc2013\bin\qmake.exe -spec win32-msvc2013 -o Makefile data_process_class_dll\data_process_class_dll.pro
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
MAKEFILE = Makefile
|
|
||||||
|
|
||||||
first: release
|
|
||||||
install: release-install
|
|
||||||
uninstall: release-uninstall
|
|
||||||
QMAKE = C:\Qt\Qt5.7.0\5.7\msvc2013\bin\qmake.exe
|
|
||||||
DEL_FILE = del
|
|
||||||
CHK_DIR_EXISTS= if not exist
|
|
||||||
MKDIR = mkdir
|
|
||||||
COPY = copy /y
|
|
||||||
COPY_FILE = copy /y
|
|
||||||
COPY_DIR = xcopy /s /q /y /i
|
|
||||||
INSTALL_FILE = copy /y
|
|
||||||
INSTALL_PROGRAM = copy /y
|
|
||||||
INSTALL_DIR = xcopy /s /q /y /i
|
|
||||||
DEL_FILE = del
|
|
||||||
SYMLINK = $(QMAKE) -install ln -f -s
|
|
||||||
DEL_DIR = rmdir
|
|
||||||
MOVE = move
|
|
||||||
SUBTARGETS = \
|
|
||||||
release \
|
|
||||||
debug
|
|
||||||
|
|
||||||
|
|
||||||
release: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release
|
|
||||||
release-make_first: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release
|
|
||||||
release-all: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release all
|
|
||||||
release-clean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release clean
|
|
||||||
release-distclean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release distclean
|
|
||||||
release-install: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release install
|
|
||||||
release-uninstall: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release uninstall
|
|
||||||
debug: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug
|
|
||||||
debug-make_first: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug
|
|
||||||
debug-all: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug all
|
|
||||||
debug-clean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug clean
|
|
||||||
debug-distclean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug distclean
|
|
||||||
debug-install: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug install
|
|
||||||
debug-uninstall: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug uninstall
|
|
||||||
|
|
||||||
Makefile: data_process_class_dll\data_process_class_dll.pro C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\spec_pre.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\angle.conf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\msvc-base.conf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\msvc-desktop.conf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\qconfig.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3drender.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3drender_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axbase.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axbase_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axserver.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axserver_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bootstrap_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_charts.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_charts_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_clucene_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_core.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_core_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_datavisualization.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_datavisualization_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_dbus.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_dbus_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designer.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designer_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designercomponents_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gamepad.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gamepad_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gui.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gui_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_help.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_help_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_location.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_location_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_network.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_network_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_nfc.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_nfc_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_opengl.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_opengl_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_packetprotocol_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_platformsupport_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_positioning.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_positioning_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_purchasing.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_purchasing_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qml.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qml_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmldebug_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmldevtools_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quick.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quick_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickparticles_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quicktemplates2_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_script.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_script_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scxml.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scxml_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sensors.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sensors_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialport.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialport_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sql.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sql_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_svg.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_svg_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_testlib.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_testlib_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uiplugin.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uitools.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uitools_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webengine.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webengine_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_websockets.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_websockets_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webview.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webview_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_widgets.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_widgets_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_winextras.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_winextras_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xml.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xml_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_zlib_private.pri \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt_functions.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt_config.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\qt_config.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\spec_post.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exclusive_builds.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\default_pre.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\default_pre.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\resolve_config.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exclusive_builds_post.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\default_post.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\rtti.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\precompile_header.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\warn_on.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\resources.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\moc.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\file_copies.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\windows.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\testcase_targets.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exceptions.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\yacc.prf \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\lex.prf \
|
|
||||||
data_process_class_dll\data_process_class_dll.pro \
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\lib\Qt5Core.prl
|
|
||||||
$(QMAKE) -spec win32-msvc2013 -o Makefile data_process_class_dll\data_process_class_dll.pro
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\spec_pre.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\angle.conf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\msvc-base.conf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\common\msvc-desktop.conf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\qconfig.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3drender.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_3drender_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axbase.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axbase_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axserver.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_axserver_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_bootstrap_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_charts.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_charts_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_clucene_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_core.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_core_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_datavisualization.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_datavisualization_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_dbus.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_dbus_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designer.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designer_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_designercomponents_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gamepad.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gamepad_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gui.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_gui_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_help.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_help_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_location.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_location_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_network.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_network_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_nfc.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_nfc_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_opengl.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_opengl_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_packetprotocol_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_platformsupport_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_positioning.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_positioning_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_purchasing.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_purchasing_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qml.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qml_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmldebug_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmldevtools_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quick.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quick_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickparticles_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quicktemplates2_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_script.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_script_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scxml.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_scxml_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sensors.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sensors_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialport.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_serialport_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sql.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_sql_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_svg.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_svg_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_testlib.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_testlib_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uiplugin.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uitools.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_uitools_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webengine.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webengine_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_websockets.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_websockets_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webview.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_webview_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_widgets.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_widgets_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_winextras.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_winextras_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xml.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xml_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\modules\qt_lib_zlib_private.pri:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt_functions.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt_config.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\qt_config.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\spec_post.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exclusive_builds.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\default_pre.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\default_pre.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\resolve_config.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exclusive_builds_post.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\default_post.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\rtti.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\precompile_header.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\warn_on.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\qt.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\resources.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\moc.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\file_copies.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\win32\windows.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\testcase_targets.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\exceptions.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\yacc.prf:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\mkspecs\features\lex.prf:
|
|
||||||
data_process_class_dll\data_process_class_dll.pro:
|
|
||||||
C:\Qt\Qt5.7.0\5.7\msvc2013\lib\Qt5Core.prl:
|
|
||||||
qmake: FORCE
|
|
||||||
@$(QMAKE) -spec win32-msvc2013 -o Makefile data_process_class_dll\data_process_class_dll.pro
|
|
||||||
|
|
||||||
qmake_all: FORCE
|
|
||||||
|
|
||||||
make_first: release-make_first debug-make_first FORCE
|
|
||||||
all: release-all debug-all FORCE
|
|
||||||
clean: release-clean debug-clean FORCE
|
|
||||||
-$(DEL_FILE) data_process_class_dll.exp
|
|
||||||
distclean: release-distclean debug-distclean FORCE
|
|
||||||
-$(DEL_FILE) Makefile
|
|
||||||
-$(DEL_FILE) data_process_class_dll.lib
|
|
||||||
|
|
||||||
release-mocclean:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release mocclean
|
|
||||||
debug-mocclean:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug mocclean
|
|
||||||
mocclean: release-mocclean debug-mocclean
|
|
||||||
|
|
||||||
release-mocables:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release mocables
|
|
||||||
debug-mocables:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug mocables
|
|
||||||
mocables: release-mocables debug-mocables
|
|
||||||
|
|
||||||
check: first
|
|
||||||
|
|
||||||
benchmark: first
|
|
||||||
FORCE:
|
|
||||||
|
|
||||||
$(MAKEFILE).Release: Makefile
|
|
||||||
$(MAKEFILE).Debug: Makefile
|
|
||||||
-2252
File diff suppressed because one or more lines are too long
-2252
File diff suppressed because one or more lines are too long
@@ -0,0 +1,186 @@
|
|||||||
|
# Bug 修复报告
|
||||||
|
|
||||||
|
根据 `BUG_REPORT.md` 中的“是否修复”指示,本次完成了所有标记为“按建议修改/按建议修复”的项;标记为“暂不修复/暂不修改/暂不处理”的项保持原样未改动。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 修复状态汇总
|
||||||
|
|
||||||
|
| 编号 | 标题 | 指示 | 状态 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| BUG-01 | 基类无虚析构函数 | 暂不修复 | 未修改 |
|
||||||
|
| BUG-02 | Hight_smooth 无限增长 | 暂不修复 | 未修改 |
|
||||||
|
| BUG-03 | 工厂单例非线程安全 | 暂不修复 | 未修改 |
|
||||||
|
| BUG-04 | TAS Point_Sum 未限幅 | 按建议修复 | ✅ 已修复 |
|
||||||
|
| BUG-05 | Track_to_start.size()-1 下溢 | 按建议修复 | ✅ 已修复 |
|
||||||
|
| BUG-06 | track_start_point_num 未校验 | 按建议修复 | ✅ 已修复 |
|
||||||
|
| BUG-07 | 禁止区域个数未限制 | 暂不修复 | 未修改 |
|
||||||
|
| BUG-08 | 消亡航迹输出无容量检查 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-09 | Beam_Ctrl 输出计数越界风险 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-10 | 航迹号数组下标未校验 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-11 | TAS model_filter 未初始化变量 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-12 | tas_beam_output 未初始化变量 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-13 | Work_Parameter 未初始化 | 暂不修复 | 未修改 |
|
||||||
|
| BUG-14 | lastest_index 未初始化 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-15 | TWS delta_T<=0 仍关联 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-16 | TAS 无 delta_T>0 检查 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-17 | TAS 外推负时间差 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-18 | 卡尔曼时间差除零 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-19 | Bind_speed prt=0 除零 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-20 | 门限重复平方 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-21 | 近程模型 3 门限整数除法 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-22 | EKF/凝聚方位角未环绕 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-23 | IMM 概率零分母/奇异矩阵 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-24 | EKF 似然只取 2x2 S | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-25 | TWS 处理 TAS 航迹 | 暂不处理 | 未修改 |
|
||||||
|
| BUG-26 | 输出航向角使用 atan | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-27 | asin(height/range) 未保护 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-28 | track_clear_all 清理不彻底 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-29 | tracking_stop 队列延迟 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-30 | work_mode 注释不一致 | 注释有误 | ✅ 已修复注释 |
|
||||||
|
| BUG-31 | tracking_point/引导跟踪空实现 | 注释明确 | ✅ 已加注释 |
|
||||||
|
| BUG-32 | 凝聚内层未跳过已用点 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-33 | 起批 delta_T 未校验 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-34 | tmp_track_die 空向量越界 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-35 | 航迹号 500 不复用 | 按建议修改 | ✅ 已修复 |
|
||||||
|
| BUG-36 | TAS 波束关闭字段未清 | 暂不修改 | 未修改 |
|
||||||
|
| BUG-37 | 局部结构体未完整初始化 | 按建议修改 | ✅ 已修复 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 已修复项明细
|
||||||
|
|
||||||
|
### BUG-04
|
||||||
|
- 文件:`data_process.cpp`
|
||||||
|
- 修改:TAS 分支 `data_num = min(max(Point_Sum,0), 150)`,避免 `Point_Sum > 150` 时越界读取输入数组。
|
||||||
|
|
||||||
|
### BUG-05
|
||||||
|
- 文件:`track_init.cpp`
|
||||||
|
- 修改:重复航迹去重循环改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`,避免空容器时 `size()-1` 下溢。
|
||||||
|
|
||||||
|
### BUG-06
|
||||||
|
- 文件:`data_process.cpp`、`track_init.cpp`、`track_init_direct_tracking.cpp`
|
||||||
|
- 修改:
|
||||||
|
- `track_process_parameters_initial/modify` 校验 `3 <= track_start_point_num <= 9`,非法参数返回 `-1`。
|
||||||
|
- 起批转可靠航迹前增加 `Track_to_start.empty()` 和每条航迹 `size() >= 3` 防御。
|
||||||
|
- 直接跟踪的 `tmp_track_to_trust_track` 也增加 `L >= 3` 保护。
|
||||||
|
|
||||||
|
### BUG-09
|
||||||
|
- 文件:`tas_ctrl.cpp`
|
||||||
|
- 修改:
|
||||||
|
- `tas_ctrl_process` 开始时校验 `Trust_track_num_Output` 非空并清零。
|
||||||
|
- `tas_target_add` 写入输出数组前检查 `*Trust_track_num_Output < MAX_TRACK_NUM`。
|
||||||
|
|
||||||
|
### BUG-10
|
||||||
|
- 文件:`track_index_mangement.cpp`
|
||||||
|
- 修改:写入 `List[]` 前校验 `Track_Index` 在 `[1, MAX_TRACK_INDEX]`。
|
||||||
|
|
||||||
|
### BUG-11
|
||||||
|
- 文件:`track_asso_tas.cpp`
|
||||||
|
- 修改:`model_filter` 增加 `found_tas_track` 标记;找不到目标时直接返回,局部变量均初始化。
|
||||||
|
|
||||||
|
### BUG-12
|
||||||
|
- 文件:`tas_ctrl.cpp`
|
||||||
|
- 修改:`tas_beam_output` 初始化 `H_track/X_now/CPI_time`,找不到目标时 `open_flag=0` 并返回。
|
||||||
|
|
||||||
|
### BUG-14
|
||||||
|
- 文件:`track_index_mangement.h`
|
||||||
|
- 修改:`lastest_index` 声明时初始化为 `0`。
|
||||||
|
|
||||||
|
### BUG-15
|
||||||
|
- 文件:`track_asso.cpp`
|
||||||
|
- 修改:TWS 关联中 `delta_T <= 0` 时从候选列表移除该无效配对并 `continue`,不再标记点迹已使用、不刷新航迹状态。
|
||||||
|
|
||||||
|
### BUG-16
|
||||||
|
- 文件:`track_asso_tas.cpp`
|
||||||
|
- 修改:TAS 关联点循环中 `delta_T <= 0` 时跳过该点。
|
||||||
|
|
||||||
|
### BUG-17
|
||||||
|
- 文件:`track_asso_tas.cpp`
|
||||||
|
- 修改:TAS 外推时 `delta_T <= 0` 直接跳过,避免航迹时间回退和负时间预测。
|
||||||
|
|
||||||
|
### BUG-19
|
||||||
|
- 文件:`kalman.cpp`、`data_process_class_dll.h`
|
||||||
|
- 修改:`Bind_speed` 对 `prt <= 0` 或 `freq <= 0` 返回安全非零值;接口注释改为“PRI 不允许为 0”。
|
||||||
|
|
||||||
|
### BUG-21
|
||||||
|
- 文件:`track_asso.cpp`
|
||||||
|
- 修改:近程门限中 `/1000`、`/100` 改为浮点除法,避免整数除零恒不成立;保留 `d*d` 比较方式(未修改 BUG-20)。
|
||||||
|
|
||||||
|
### BUG-22
|
||||||
|
- 文件:`kalman.cpp`、`dot_coh.cpp`、`dot_coh_tas.cpp`
|
||||||
|
- 修改:
|
||||||
|
- 新增 `wrapAnglePi()`,EKF 各残差计算后对方位角分量做 `[-π,π]` 环绕。
|
||||||
|
- 点迹凝聚 `work_mode==0` 分支和 TAS 凝聚统一使用最小角度差 `delta_F`。
|
||||||
|
|
||||||
|
### BUG-23
|
||||||
|
- 文件:`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp`
|
||||||
|
- 修改:
|
||||||
|
- IMM 交互中 `c[0..2]` 为 0/负时钳位到 `1e-12`。
|
||||||
|
- 模型概率更新增加分母保护,分母异常时保持上一拍概率。
|
||||||
|
- 似然计算对 `det_S <= 0` 返回 0,避免 NaN。
|
||||||
|
|
||||||
|
### BUG-24
|
||||||
|
- 文件:`kalman.h`、`kalman.cpp`、`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp`
|
||||||
|
- 修改:
|
||||||
|
- `kalman_filter_EKF` 的 `S_filter` 由 `[2][2]` 改为 `[3][3]`。
|
||||||
|
- 调用侧使用 `Matrix3f` 和 3x3 行列式,似然归一化改为 `1/sqrt(pow(2*PI,3)*detS)`。
|
||||||
|
|
||||||
|
### BUG-26
|
||||||
|
- 文件:`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp`
|
||||||
|
- 修改:航向角改用 `atan2(X[4], X[1])` 并归一化到 `[0,2π)`。
|
||||||
|
|
||||||
|
### BUG-27
|
||||||
|
- 文件:`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp`、`track_init.cpp`
|
||||||
|
- 修改:计算 `asin` 前对 `height/range` 做定义域钳位,`range <= 0` 时按 0 处理。
|
||||||
|
|
||||||
|
### BUG-28
|
||||||
|
- 文件:`data_process.cpp`、`dot_coh.h/cpp`、`track_asso.h/cpp`、`track_asso_tas.h/cpp`、`track_init.h/cpp`、`tas_ctrl.h/cpp`、`track_index_mangement.h/cpp`
|
||||||
|
- 修改:
|
||||||
|
- 为 `Dot_Coh`、`Track_Asso`、`Track_Asso_Tas`、`Track_Init`、`TAS_Ctrl`、`Track_Ind_Mangement` 增加 `reset()`。
|
||||||
|
- `track_clear_all()` 调用上述 reset,并恢复 `last_beam_num = INT_MAX`。
|
||||||
|
- 直接跟踪相关类也补充了 `reset()`。
|
||||||
|
|
||||||
|
### BUG-30
|
||||||
|
- 文件:`data_process_class_dll.h`
|
||||||
|
- 修改:`work_mode` 注释由“0进程 1中程 3远程”改为“0进程 1中程 2远程”。
|
||||||
|
|
||||||
|
### BUG-31
|
||||||
|
- 文件:`data_process_class_dll.h`、`data_process.cpp`、`track_init_direct_tracking.cpp`
|
||||||
|
- 修改:在 `direct_tracking_process`、`tracking_point`、直接跟踪入口处注释明确“当前接口未启用,保留空实现”。
|
||||||
|
|
||||||
|
### BUG-32
|
||||||
|
- 文件:`dot_coh.cpp`、`dot_coh_tas.cpp`
|
||||||
|
- 修改:内层凝聚比较增加对 `i` 点 `Use_Flag` 的检查,已使用点不再参与凝聚。
|
||||||
|
|
||||||
|
### BUG-34
|
||||||
|
- 文件:`track_init.cpp`、`track_init_direct_tracking.cpp`
|
||||||
|
- 修改:`tmp_track_die` 先判断 `n <= 0`,空向量直接删除。
|
||||||
|
|
||||||
|
### BUG-35
|
||||||
|
- 文件:`track_index_mangement.cpp`
|
||||||
|
- 修改:两处回绕循环由 `i < MAX_TRACK_INDEX` 改为 `i <= MAX_TRACK_INDEX`,使 500 号可复用。
|
||||||
|
|
||||||
|
### BUG-37
|
||||||
|
- 文件:`track_init.cpp`、`track_init_direct_tracking.cpp`
|
||||||
|
- 修改:`Temp_track`、`Trust_Track` 局部变量改为 `= {}` 值初始化,避免未初始化字段。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 编译与运行验证
|
||||||
|
|
||||||
|
使用 **MSVC 2013 (Visual Studio 12) x86** 实际编译:
|
||||||
|
|
||||||
|
| 配置 | 结果 |
|
||||||
|
|---|---|
|
||||||
|
| X256_PS Release | ✅ 编译链接通过 |
|
||||||
|
| X256_MS Release | ✅ 编译链接通过 |
|
||||||
|
| X256_PS Debug | ✅ 编译链接通过 |
|
||||||
|
| MSVC `/W4` Release | ✅ 编译通过,未再出现 C4700/C4701 未初始化变量告警 |
|
||||||
|
|
||||||
|
另编写临时宿主程序验证 DLL:
|
||||||
|
- 初始化 `RadarPara`,调用 `track_process_parameters_initial` 成功。
|
||||||
|
- 调用 `track_process`,返回 `1`,输出计数正常。
|
||||||
|
- 工厂创建/销毁流程正常。
|
||||||
|
|
||||||
|
> 说明:当前构建仍会输出原有代码的 C4244 转换告警、C4018 有符号/无符号比较告警、C4819 编码告警,均非本次修复引入,不影响链接和运行。
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
# 雷达数据处理 DLL 逻辑 BUG 分析报告
|
||||||
|
|
||||||
|
分析范围:`data_process_class_dll/` 下全部源码(不含 `Eigen/`),以迁移后的当前代码行号为准。
|
||||||
|
严重级别定义:
|
||||||
|
|
||||||
|
- **P0**:可能导致崩溃、越界读写、内存破坏或长时间运行内存泄漏,建议优先修复。
|
||||||
|
- **P1**:在常见异常时序/边界输入下会出错,或属于明显算法逻辑错误。
|
||||||
|
- **P2**:健壮性、数值稳定性、状态一致性、功能缺失等问题。
|
||||||
|
- **P3**:代码质量/可维护性问题。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 内存与生命周期
|
||||||
|
|
||||||
|
### BUG-01 [P0] 基类没有虚析构函数,工厂按基类指针 delete 派生对象
|
||||||
|
- 位置:`data_process_class_dll.h:168`、`data_process_class_dll.cpp:25-32`
|
||||||
|
- 说明:`Data_process_class_dll` 没有声明虚析构函数,而 `Data_Process` 内部包含多个 `std::vector` 和若干成员对象。`Data_Process_Factory::Destroy()` 执行 `delete p` 时静态类型是基类指针,只会调用基类析构函数,派生类成员(`Data_buffer`、`trust_track`、`temp_track`、Eigen 相关对象等)的析构不会执行,属于未定义行为并造成内存泄漏。
|
||||||
|
- 建议:在基类中增加 `virtual ~Data_process_class_dll() {}`;同时让工厂支持重复销毁、销毁后返回 nullptr。
|
||||||
|
- 暂不修复
|
||||||
|
|
||||||
|
### BUG-02 [P1] `Hight_smooth` 高度平滑缓存只增不减,长时间运行内存持续增长
|
||||||
|
- 位置:`track_asso.cpp:890`、`track_asso_tas.cpp:722`、`track_asso_direct_tracking.cpp:639`
|
||||||
|
- 说明:每次高度更新都执行 `Hight_smooth.push_back(...)`,从未裁剪或清空。航迹存活时间越长,该 vector 越大;500 条航迹长时间运行时内存会持续增长。
|
||||||
|
- 建议:仅保留最近 `height_win_length` 个高度值(如 `resize`/`erase(begin)` 后再 push),或改用固定长度 `std::deque`;航迹消亡时随结构体释放。
|
||||||
|
- 暂不修复
|
||||||
|
|
||||||
|
### BUG-03 [P2] 工厂单例创建/销毁非线程安全
|
||||||
|
- 位置:`data_process_class_dll.cpp:15-32`
|
||||||
|
- 说明:`GetB()` 和 `Destroy()` 对静态指针 `p` 无任何同步。若宿主在多线程环境调用,可能创建两个实例(泄漏一个)或对同一对象重复销毁。
|
||||||
|
- 建议:用 C++11 `static Data_Process instance;` 返回地址,或对工厂方法加锁;明确 DLL 接口的线程模型。
|
||||||
|
- 暂不修复
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 数组/向量越界
|
||||||
|
|
||||||
|
### BUG-04 [P0] TAS 输入点迹未限制 `Point_Sum <= 150`
|
||||||
|
- 位置:`data_process.cpp:66`
|
||||||
|
- 说明:TWS 分支使用 `min(Point_Sum, 150)`,但 TAS 分支直接 `data_num = Data_Input[0].Point_Sum` 并循环读取 `Data_Input[i]`。当协议传入 `Point_Sum > 150` 时,会越界读取 `Data_Input[150]`。
|
||||||
|
- 建议:与 TWS 分支一致,使用 `data_num = min(max(Point_Sum,0), 150)`,并校验 `Point_Sum >= 0`。
|
||||||
|
- 按建议修复
|
||||||
|
|
||||||
|
### BUG-05 [P0] `Track_to_start.size()-1` 在空容器时下溢导致越界
|
||||||
|
- 位置:`track_init.cpp:534`
|
||||||
|
- 说明:与已发现示例一致。`size()` 返回 `size_t`,空容器减 1 得到极大值,随后 `Track_to_start[i]` 越界。
|
||||||
|
- 建议:`if (Track_to_start.empty()) return;`,或改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`。
|
||||||
|
- 按建议修复,改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`
|
||||||
|
|
||||||
|
### BUG-06 [P0] `track_start_point_num` 未校验,取值 0/1/2 或大于 9 时多处越界
|
||||||
|
- 位置:`track_init.cpp:533,544-545,588-594`、`track_init_direct_tracking.cpp:316-322`
|
||||||
|
- 说明:重复航迹比较固定访问 `Track_to_start[i][1]`、`[2]`,三点初始化访问 `[L-3]/[L-2]/[L-1]`。该参数由外部 `RadarPara` 传入,若未初始化或配置为 0/1/2,会出现负下标或越界;若大于 9,`tmp_track_die` 会在 `n>=10` 时删除临时航迹,逻辑也无法起批。
|
||||||
|
- 建议:在 `track_process_parameters_initial/modify` 中校验 `3 <= track_start_point_num <= 9`;使用 `Track_to_start[i].size()` 作为实际长度并在访问前检查。
|
||||||
|
- 按建议修复
|
||||||
|
|
||||||
|
### BUG-07 [P0] 禁止区域个数未限制在 30 以内,外部配置过大时数组越界
|
||||||
|
- 位置:`track_init.cpp:711`(`track_prohibite_area_num`)、`tas_ctrl.cpp:123`(`TAS_prohibite_area_num`)
|
||||||
|
- 说明:循环上界直接使用外部传入的计数,而对应数组固定为 `[30]`。配置大于 30 时越界读。
|
||||||
|
- 建议:循环上界改为 `min(count, 30)`,并在参数初始化/修改时拒绝非法计数或截断。
|
||||||
|
- 暂不修复
|
||||||
|
|
||||||
|
### BUG-08 [P1] 消亡航迹号输出无数组容量检查
|
||||||
|
- 位置:`track_die.cpp:24`、`track_die_tas.cpp:26`
|
||||||
|
- 说明:`Track_die_Index_Output[*Track_die_num_Output-1] = ...` 不检查数组容量。正常流量下最多 500 条航迹,与 `MAX_TRACK_NUM` 一致,但接口没有把容量传入,一旦宿主传入较小数组、或计数被异常修改,就会越界写。
|
||||||
|
- 建议:接口增加 `die_array_capacity` 参数,或内部保证 `*Track_die_num_Output < MAX_TRACK_NUM` 后再写。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-09 [P1] `Beam_Ctrl` 路径中输出计数未初始化/无上界,可能越界写航迹输出数组
|
||||||
|
- 位置:`data_process.cpp:193-198`、`tas_ctrl.cpp:74-78`
|
||||||
|
- 说明:`Beam_Ctrl()` 直接使用宿主传入的 `Trust_track_num_Output`,而 `tas_ctrl_process` 不会先清零,`tas_target_add` 会基于旧值自增并写 `Trust_Track_Output[*Trust_track_num_Output-1]`。若调用方未清零或旧值接近 `MAX_TRACK_NUM`,会越界写。
|
||||||
|
- 建议:`tas_ctrl_process` 内部保存 `*count = 0` 或在每次写入前检查 `*count < MAX_TRACK_NUM`;同时校验指针非空。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-10 [P1] 航迹号直接作为数组下标,未校验范围
|
||||||
|
- 位置:`track_index_mangement.cpp:29`
|
||||||
|
- 说明:`List[(*trust_track)[i].Track_Index-1] = 1`,若航迹号不在 `[1, MAX_TRACK_INDEX]` 内(异常数据、内存损坏、外部修改),立即越界。
|
||||||
|
- 建议:写前检查 `Track_Index >= 1 && Track_Index <= MAX_TRACK_INDEX`,异常航迹号返回错误或跳过。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 未初始化变量
|
||||||
|
|
||||||
|
### BUG-11 [P1] `Track_Asso_Tas::model_filter` 在找不到 TAS 目标时使用未初始化变量
|
||||||
|
- 位置:`track_asso_tas.cpp:228-232`,随后在 `271/276/280/282` 等使用
|
||||||
|
- 说明:`X1/X2/X3/P1/P2/P3/T_track/v_track/r_track/h_track` 只在 `Track_Index == tas_track_idx` 时赋值。若 `tas_track_idx` 不存在(例如目标已被消亡、主程序传入失效批号),后续仍用这些未初始化值计算 IMM、距离门限和外推,结果不可预测。MSVC `/W4` 已报 C4701。
|
||||||
|
- 建议:函数开头初始化这些变量,并在找不到目标时直接 return;上层也应处理“TAS 目标不存在”的返回值。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-12 [P1] `tas_beam_output` 在队列目标不在航迹表中时使用未初始化变量
|
||||||
|
- 位置:`tas_ctrl.cpp:242-271`
|
||||||
|
- 说明:`H_track`、`X_now[]` 只在找到匹配航迹时赋值;若 `track_clear_all()` 后队列未清空、或目标已被删除而队列未同步,循环找不到目标,随后 `asin(H_track/range)`、`X_now[...]` 使用未初始化数据。Cppcheck 和 MSVC `/W4` 均报 C4701。
|
||||||
|
- 建议:找不到目标时立即 `open_flag=0` 并 return;变量声明时初始化。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-13 [P2] `Data_Process::Work_Parameter` 及若干成员在构造后未初始化
|
||||||
|
- 位置:`data_process.h:28-31,78-95`
|
||||||
|
- 说明:构造函数为空,`Work_Parameter`、`Beam_num`、`data_num`、`TAS_track_idx` 等未初始化。若宿主在调用 `track_process_parameters_initial` 前就调用 `data_preprocess/track_process/Beam_Ctrl`,`Work_Parameter.track_start_point_num`、`Sys_delay`、`V_MIN/V_MAX` 等是垃圾值,可能导致起批越界、除零或异常门限。
|
||||||
|
- 建议:构造函数中对 `Work_Parameter` 进行 `memset`/值初始化并设置安全默认参数;在处理函数入口检查“参数是否已初始化”。
|
||||||
|
- 暂不修复
|
||||||
|
|
||||||
|
### BUG-14 [P3] `Track_Ind_Mangement::lastest_index` 未初始化
|
||||||
|
- 位置:`track_index_mangement.h:17`、`track_index_mangement.cpp:33`
|
||||||
|
- 说明:只有空航迹表分支会赋值为 1;如果首次调用时航迹表非空,就会读取未初始化的 `lastest_index`。
|
||||||
|
- 建议:声明为 `int lastest_index = 0;` 或增加构造函数初始化。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 时间戳/时序处理
|
||||||
|
|
||||||
|
### BUG-15 [P1] TWS 关联在 `delta_T <= 0` 时仍把点迹标记为已关联并刷新航迹状态
|
||||||
|
- 位置:`track_asso.cpp:610-691`
|
||||||
|
- 说明:滤波和航迹信息更新在 `if (delta_T > 0)` 内,但 `Extrapolate_round=0`、`point_flag=1`、`associate_point_number++`、点迹 `Use_Flag=1` 都在 if 之外。重复/乱序时间戳的点仍会“占用”点迹、让航迹看起来已更新,实际状态未更新。
|
||||||
|
- 建议:`delta_T <= 0` 时直接跳过该关联候选(或作为无效量测处理),不要标记点迹已使用、不要刷新航迹新鲜度。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-16 [P1] TAS 关联完全没有 `delta_T > 0` 检查
|
||||||
|
- 位置:`track_asso_tas.cpp:271-335,385-452`
|
||||||
|
- 说明:TAS 路径计算 `delta_T` 后直接进入统计距离和滤波,即使 `delta_T <= 0` 也会生成 F/Q 并更新航迹,可能把航迹时间更新到过去。
|
||||||
|
- 建议:与 TWS 一致,只有 `delta_T > 0` 才允许关联;否则跳过该点。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-17 [P1] TAS 外推使用未校验的 `latest_timestamp - T_track`,负时间差导致反向预测
|
||||||
|
- 位置:`track_asso_tas.cpp:483-506`
|
||||||
|
- 说明:若 `latest_timestamp < T_track`(乱序/重复时间戳),`delta_T` 为负,`T_track += delta_T*1000` 会回退航迹时间,IMM F/Q 也按负时间生成。
|
||||||
|
- 建议:`delta_T = max(0, latest_timestamp - T_track)/1000.0`;若为 0 则直接返回或保持原状态。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-18 [P1] 卡尔曼初始化及统计距离函数对零/负时间差没有保护
|
||||||
|
- 位置:`kalman.cpp:13-46,126-130,158-168`;调用点 `track_init.cpp:275,450,593-594`、`track_init_direct_tracking.cpp:135,271,321-322`
|
||||||
|
- 说明:两点/三点初始化直接除以 `T/T1/T2`。同一 CPI 重复点、时间戳相等或乱序会产生除零、inf/NaN,随后污染航迹协方差和模型概率。
|
||||||
|
- 建议:调用前统一校验时间差大于最小阈值(如 >0 或 >1 ms);`kalman_filter_init_2dots/3dots` 内部对非法时间返回错误。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-19 [P1] `Bind_speed` 对 `prt == 0` 无保护,而接口说明 PRI 可给 0
|
||||||
|
- 位置:`kalman.cpp:766-770`、`data_process_class_dll.h:29`
|
||||||
|
- 说明:`return 150000.0/(freq*prt)`,当 `PRI=0` 时除零;结果传给 `Round()` 会把 inf/NaN 转换为未定义整型。
|
||||||
|
- 建议:`prt <= 0` 时返回固定安全值或直接返回无效距离;统一约定 PRI 单位与默认值。
|
||||||
|
- 按建议修改,同时修改接口说明:PRI不可为0
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 关联门限与滤波算法逻辑
|
||||||
|
|
||||||
|
### BUG-20 [P1] 统计距离 d 已经是平方形式,门限中又平方了一次
|
||||||
|
- 位置:`track_asso.cpp:544-546`、`track_asso_tas.cpp:335`、`track_asso_direct_tracking.cpp:286`、`track_init.cpp:221`
|
||||||
|
- 说明:`d_cal_EKF` 返回的是 `delta_z^T S^{-1} delta_z`(马氏距离平方),后续门限却写成 `d*d < THRESHOLD*THRESHOLD`。例如阈值 3 时本意是 `d < 9`,实际变成 `d < 3`,波门明显偏小。
|
||||||
|
- 建议:统一改为 `d < TRACK_START_THRESHOLD*TRACK_START_THRESHOLD` / `d < ASSO_THORD*ASSO_THORD`。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-21 [P1] 近程模型 3 门限因整数除法恒为 0
|
||||||
|
- 位置:`track_asso.cpp:544-545`
|
||||||
|
- 说明:`ASSO_THORD` 是 int 宏,`ASSO_THORD*ASSO_THORD/1000` 和 `/100` 按整数计算,结果均为 0,导致 `d3*d3 < 0` 永远不成立;近距离下模型 3 实际被禁用。
|
||||||
|
- 建议:写为 `ASSO_THORD*ASSO_THORD/1000.0`、`/100.0`,同时按 BUG-20 修正平方关系。
|
||||||
|
- 按建议修改,但不修改BUG-20
|
||||||
|
|
||||||
|
### BUG-22 [P1] EKF 方位角残差未按 0/2π 环绕处理
|
||||||
|
- 位置:`kalman.cpp:265-298,457-492,642-680`;凝聚 `dot_coh.cpp:35,44`(`work_mode==0` 分支)、`dot_coh_tas.cpp:33,42`
|
||||||
|
- 说明:预测方位被归一化到 `[0,2π)`,但量测方位未归一化,`delta_z = Z_mea - Z_pred` 未做 ±π 环绕。目标跨正北时残差会接近 2π,导致错误拒绝/错误滤波。凝聚中 `work_mode==0` 和 TAS 凝聚也直接 `fabs(angle)`,未处理 360° 环绕。
|
||||||
|
- 建议:方位差统一按 `wrapToPi()` 处理;`work_mode==0` 与 TAS 凝聚复用同一环绕角差函数。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-23 [P1] IMM 模型概率计算缺少零分母/奇异矩阵保护
|
||||||
|
- 位置:`track_asso.cpp:157-165,627-647`、`track_asso_tas.cpp:122-130,406-431`、`track_asso_direct_tracking.cpp:95-103,352-374`
|
||||||
|
- 说明:`c[0..2]`、`Possibility1*c[0]+...`、`det_S` 都可能为 0 或负;`1/sqrt(2*PI*det_S)` 对负/零行列式产生 NaN。一旦概率变 NaN,后续 `model_output` 会把整条航迹状态污染。
|
||||||
|
- 建议:计算前检查 `det_S > eps`、分母 > eps;异常时保持上一拍模型概率或回退为等概率 `{1/3,1/3,1/3}`。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-24 [P2] EKF 似然只取 3x3 新息协方差左上角 2x2 的行列式
|
||||||
|
- 位置:`kalman.cpp:515-519`(S 为 3x3,但输出只保存 2x2);调用处 `track_asso.cpp:627-633`、`track_asso_tas.cpp:406-412`、`track_asso_direct_tracking.cpp:352-358`
|
||||||
|
- 说明:EKF 量测为距离/方位/径向速度三维,新息协方差 S 是 3x3,但接口 `S_filter[2][2]` 和似然计算只使用二维子块,模型似然不完整。
|
||||||
|
- 建议:将接口改为 3x3,并采用完整 3 维高斯归一化因子 `1/sqrt(pow(2*PI,3)*detS)`(若只比较相对大小,也至少应保持三个模型使用相同维数)。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-25 [P1] TWS 航迹关联/输出没有排除 TAS 航迹
|
||||||
|
- 位置:`track_asso.cpp:65-133`(输出)、`141-228`(交互
|
||||||
|
)、`414-570`(滤波)
|
||||||
|
- 说明:原代码中有 `// if manual_tracking_flag==0` 的过滤逻辑但被注释掉。当前 TWS 处理会遍历并更新所有航迹,包括 `Track_Mode==1` 的 TAS 航迹;TWS 输出循环也会把 TAS 航迹当作 `point_type=0` 输出,造成 TAS 航迹被 TWS 点迹错误更新和重复输出。
|
||||||
|
- 建议:TWS 的交互、关联、输出统一跳过 `Track_Mode == 1`(或 `manual_tracking_flag == 1`)的航迹;TAS 目标只在 TAS 流程中处理。
|
||||||
|
- 暂不处理
|
||||||
|
|
||||||
|
### BUG-26 [P2] 输出航向角使用 `atan(y/x)` 而不是 `atan2`
|
||||||
|
- 位置:`track_asso.cpp:100`、`track_asso_tas.cpp:66`、`track_asso_direct_tracking.cpp:59`
|
||||||
|
- 说明:当 `vx == 0` 时除法结果接近 ±inf,现有象限修正逻辑不完整,某些象限会输出负角度或 90° 偏差。
|
||||||
|
- 建议:统一使用 `atan2(X[4], X[1])` 并归一化到 `[0,2π)`。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-27 [P2] `asin(height/range)` 缺少定义域和零距离保护
|
||||||
|
- 位置:`track_asso_tas.cpp:54`、`track_asso_direct_tracking.cpp:48`、`track_init.cpp:646,673`
|
||||||
|
- 说明:`range` 为 0 或 `height > range` 时,`asin` 参数超出 `[-1,1]` 产生 NaN,并输出到 `Track.Elevation`。
|
||||||
|
- 建议:计算前钳位 `h/r` 到 `[-1,1]`,并对 `r <= eps` 特殊处理。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 状态清理与接口一致性
|
||||||
|
|
||||||
|
### BUG-28 [P1] `track_clear_all` 清理不彻底,重连后可能输出幽灵航迹/幽灵波束
|
||||||
|
- 位置:`data_process.cpp:219-229`
|
||||||
|
- 说明:只清空 6 个顶层 vector,未清理:
|
||||||
|
- `Dot_Coh::data_input_buff`(滑窗凝聚缓存);
|
||||||
|
- `TAS_Ctrl::tas_target_queue` 和 `tas_target_num`;
|
||||||
|
- `last_beam_num`(扫描圈判断);
|
||||||
|
- `Track_Ind_Mangement::lastest_index`;
|
||||||
|
- 各关联类的 `point_process` 成员。
|
||||||
|
清空后若立即调用 `Beam_Ctrl`,TAS 队列仍认为有目标,但 `trust_track` 已空,会触发 BUG-12 的未初始化路径并输出错误波束;下一次 TWS 处理也可能输出清空前的缓存点迹。
|
||||||
|
- 建议:为 `Dot_Coh`、`TAS_Ctrl`、`Track_Ind_Mangement` 增加 `reset()`,`track_clear_all` 调用所有 reset,并恢复 `last_beam_num=INT_MAX`。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-29 [P2] `tracking_stop` 后 TAS 队列要到下一次 `Beam_Ctrl` 才移除
|
||||||
|
- 位置:`data_process.cpp:260-270`、`tas_ctrl.cpp:138-162`
|
||||||
|
- 说明:`tracking_stop` 只清标志位和 `Track_Mode`,不会立即清 `tas_target_queue`。在调用 `Beam_Ctrl` 前,队列仍会输出该目标的跟踪波束。
|
||||||
|
- 建议:`tracking_stop` 内同步删除 TAS 队列项并更新 `tas_target_num`,或明确接口时序并文档化。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-30 [P2] 工作模式枚举与代码分支不一致
|
||||||
|
- 位置:`data_process_class_dll.h:140`(注释:0 进程、1 中程、3 远程)、`track_asso.cpp:729-744`(按 0/1/2/else 分支)
|
||||||
|
- 说明:注释定义远程模式为 3,但代码按 `work_mode==2` 使用远距数据率;当外部按注释传 3 时,会落入 else 使用近程数据率 `DATA_RATE_SHORT`。
|
||||||
|
- 建议:统一枚举定义,或代码改为 `work_mode==3` 使用 `DATA_RATE_FAR`。
|
||||||
|
- 注释有误,修改注释为:0 进程、1 中程、2 远程
|
||||||
|
|
||||||
|
### BUG-31 [P2] `tracking_point` 和引导跟踪处理是空实现
|
||||||
|
- 位置:`data_process.cpp:282-286`、`data_process_class_dll.h:200-213`、`track_init_direct_tracking.cpp:11-21`
|
||||||
|
- 说明:`tracking_point` 直接返回 0;`Data_Process` 没有重写 `direct_tracking_process`,基类默认返回 0;`Track_Init_Direct_Tracking::track_init_process_logic` 也是空函数。若接口已被主程序调用,则相关功能实际未生效。
|
||||||
|
- 建议:确认这两个接口是否已废弃;若仍需要,补齐实现或至少在文档中明确为未实现并返回错误码。
|
||||||
|
- 在注释中明确接口未启用,保留空实现
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 其他逻辑与健壮性
|
||||||
|
|
||||||
|
### BUG-32 [P2] 凝聚内层循环没有跳过已标记使用的点
|
||||||
|
- 位置:`dot_coh.cpp:25,148`、`dot_coh_tas.cpp:25`
|
||||||
|
- 说明:内层只检查当前基准点 `loop_of_point` 的 `Use_Flag`,没有检查被比较点 `i` 的 `Use_Flag`。已被凝聚掉的点仍可参与后续比较,甚至反过来把高幅度基准点标记掉。
|
||||||
|
- 建议:内层同样判断 `(*data_input)[i].Use_Flag != 1`(以及 `data_tmp[i]`)。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-33 [P2] 起批/临时航迹关联未校验 `delta_T > 0`,重复时间戳可能产生非法卡尔曼初始化
|
||||||
|
- 位置:`track_init.cpp:189,381,450`、`track_init_direct_tracking.cpp:67,221,271`
|
||||||
|
- 说明:点迹与临时航迹、点迹与航迹头的关联均使用 `T_point - T_track_head`,未要求正时间差。`kalman_filter_init_2dots` 遇到 0/负 T 会产生除零。
|
||||||
|
- 建议:在关联条件中显式要求 `T_point > T_track_head`,且时间差需大于最小步长。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-34 [P2] 临时航迹消亡函数在空向量时直接取 `[n-1]`
|
||||||
|
- 位置:`track_init.cpp:694-695`、`track_init_direct_tracking.cpp:417-418`
|
||||||
|
- 说明:`int n = (*Iter).size();` 后立即 `(*Iter)[n-1]`。正常流程每条临时航迹至少 1 个点,但没有防御;一旦出现空内层向量,`n-1` 为负并越界。
|
||||||
|
- 建议:先判断 `n > 0`,空向量直接删除。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-35 [P3] 航迹号复用逻辑漏掉 `MAX_TRACK_INDEX`
|
||||||
|
- 位置:`track_index_mangement.cpp:44,56`
|
||||||
|
- 说明:回绕查找循环写作 `i < MAX_TRACK_INDEX`,因此 500 号航迹永远不会被复用;与第一段 `i <= MAX_TRACK_INDEX` 不一致。
|
||||||
|
- 建议:两处回绕循环改为 `i <= MAX_TRACK_INDEX`。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
### BUG-36 [P3] TAS 波束关闭时只清 `open_flag`,其他字段保留旧值
|
||||||
|
- 位置:`tas_ctrl.cpp:277-284`
|
||||||
|
- 说明:当 `tas_target_queue[0].empty_flag==0` 时,仅设置 `Tracking_beam->open_flag=0`,`Range/Azi/Elev/type/TAS_track_index` 保留上一拍内容。主程序若只按 `open_flag` 判断则无问题,但字段语义不清晰。
|
||||||
|
- 建议:关闭时同时清零 `type/Range/Azi/Elev/TAS_track_index`。
|
||||||
|
- 暂不修改
|
||||||
|
|
||||||
|
### BUG-37 [P3] 部分结构体局部变量未完整初始化
|
||||||
|
- 位置:`track_init.cpp:80,598`、`track_init_direct_tracking.cpp:325`
|
||||||
|
- 说明:`Temp_track temp_track_tmp`、`Trust_Track trust_track_tmp` 的 `P` 矩阵等字段未显式初始化。当前流程部分字段未被读取,但依赖调用顺序;后续维护容易读到垃圾值。
|
||||||
|
- 建议:使用值初始化 `Temp_track tmp = {};` 或为结构体提供构造函数/`init()` 统一初始化所有字段。
|
||||||
|
- 按建议修改
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 建议修复顺序
|
||||||
|
|
||||||
|
1. 先修 P0:BUG-01、BUG-04、BUG-05、BUG-06、BUG-07、BUG-11、BUG-12。
|
||||||
|
2. 再修 P1 时间与关联逻辑:BUG-15~BUG-23、BUG-25、BUG-28。
|
||||||
|
3. 最后处理数值稳定性、状态一致性和未启用功能:BUG-24、BUG-26~BUG-37。
|
||||||
|
|
||||||
|
> 说明:`track_asso_direct_tracking.cpp` 和 `track_init_direct_tracking.cpp` 当前未加入 CMake 构建(与旧 .pro 一致),其中问题与主流程同类问题重复,修复主流程时可同步修改或暂缓。
|
||||||
+13
-67
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.0.2, 2026-07-06T14:25:51. -->
|
<!-- Written by QtCreator 4.0.2, 2026-08-14T14:09:13. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
@@ -64,65 +64,11 @@
|
|||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_msvc2013_kit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_msvc2013_kit</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug</value>
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/Demo/QT/simianzhen256-v1.5.5-ms/build/X256_PS</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/Demo/QT/simianzhen256-v1.5.5-ms/build</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
@@ -130,7 +76,7 @@
|
|||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments">"DEFINES += PHASE_SCANNING"</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
@@ -170,23 +116,23 @@
|
|||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">X256_PS</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Profile</value>
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/Demo/QT/simianzhen256-v1.5.5-ms/build/X256_MS</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments">"DEFINES += MECHANICAL_SCANNING"</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
@@ -223,13 +169,13 @@
|
|||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">X256_MS</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
-410
@@ -1,410 +0,0 @@
|
|||||||
#############################################################################
|
|
||||||
# Makefile for building: data_process_class_dll
|
|
||||||
# Generated by qmake (3.0) (Qt 5.7.0)
|
|
||||||
# Project: ..\data_process_class_dll\data_process_class_dll.pro
|
|
||||||
# Template: lib
|
|
||||||
# Command: D:\APP\QT5_7\5.7\msvc2013\bin\qmake.exe -spec win32-msvc2013 -o Makefile ..\data_process_class_dll\data_process_class_dll.pro
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
MAKEFILE = Makefile
|
|
||||||
|
|
||||||
first: release
|
|
||||||
install: release-install
|
|
||||||
uninstall: release-uninstall
|
|
||||||
QMAKE = D:\APP\QT5_7\5.7\msvc2013\bin\qmake.exe
|
|
||||||
DEL_FILE = del
|
|
||||||
CHK_DIR_EXISTS= if not exist
|
|
||||||
MKDIR = mkdir
|
|
||||||
COPY = copy /y
|
|
||||||
COPY_FILE = copy /y
|
|
||||||
COPY_DIR = xcopy /s /q /y /i
|
|
||||||
INSTALL_FILE = copy /y
|
|
||||||
INSTALL_PROGRAM = copy /y
|
|
||||||
INSTALL_DIR = xcopy /s /q /y /i
|
|
||||||
DEL_FILE = del
|
|
||||||
SYMLINK = $(QMAKE) -install ln -f -s
|
|
||||||
DEL_DIR = rmdir
|
|
||||||
MOVE = move
|
|
||||||
SUBTARGETS = \
|
|
||||||
release \
|
|
||||||
debug
|
|
||||||
|
|
||||||
|
|
||||||
release: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release
|
|
||||||
release-make_first: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release
|
|
||||||
release-all: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release all
|
|
||||||
release-clean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release clean
|
|
||||||
release-distclean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release distclean
|
|
||||||
release-install: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release install
|
|
||||||
release-uninstall: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release uninstall
|
|
||||||
debug: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug
|
|
||||||
debug-make_first: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug
|
|
||||||
debug-all: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug all
|
|
||||||
debug-clean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug clean
|
|
||||||
debug-distclean: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug distclean
|
|
||||||
debug-install: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug install
|
|
||||||
debug-uninstall: FORCE
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug uninstall
|
|
||||||
|
|
||||||
Makefile: ..\data_process_class_dll\data_process_class_dll.pro D:\APP\QT5_7\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\spec_pre.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\angle.conf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\msvc-base.conf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\msvc-desktop.conf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\qconfig.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3drender.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3drender_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axbase.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axbase_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axserver.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axserver_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bootstrap_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_clucene_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_core.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_core_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_dbus.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_dbus_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designer.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designer_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designercomponents_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_gui.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_gui_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_help.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_help_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_location.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_location_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_network.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_network_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_nfc.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_nfc_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_opengl.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_opengl_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_packetprotocol_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_platformsupport_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_positioning.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_positioning_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qml.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qml_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmldebug_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmldevtools_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quick.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quick_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickparticles_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quicktemplates2_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_script.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_script_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scxml.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scxml_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sensors.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sensors_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialport.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialport_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sql.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sql_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_svg.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_svg_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_testlib.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_testlib_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uiplugin.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uitools.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uitools_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webengine.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webengine_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_websockets.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_websockets_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webview.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webview_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_widgets.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_widgets_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_winextras.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_winextras_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xml.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xml_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_zlib_private.pri \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt_functions.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt_config.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\qt_config.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\spec_post.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exclusive_builds.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\default_pre.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\default_pre.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\resolve_config.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exclusive_builds_post.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\default_post.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\rtti.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\precompile_header.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\warn_on.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\resources.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\moc.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\file_copies.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\windows.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\testcase_targets.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exceptions.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\yacc.prf \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\lex.prf \
|
|
||||||
..\data_process_class_dll\data_process_class_dll.pro \
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\lib\Qt5Core.prl
|
|
||||||
$(QMAKE) -spec win32-msvc2013 -o Makefile ..\data_process_class_dll\data_process_class_dll.pro
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\spec_pre.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\angle.conf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\msvc-base.conf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\common\msvc-desktop.conf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\qconfig.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dcore_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dextras_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dinput_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dlogic_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquick_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickextras_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickinput_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3dquickrender_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3drender.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_3drender_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axbase.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axbase_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axcontainer_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axserver.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_axserver_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bluetooth_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_bootstrap_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_clucene_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_concurrent_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_core.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_core_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_dbus.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_dbus_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designer.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designer_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_designercomponents_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_gui.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_gui_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_help.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_help_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_location.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_location_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimedia_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_multimediawidgets_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_network.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_network_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_nfc.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_nfc_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_opengl.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_opengl_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_openglextensions_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_packetprotocol_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_platformsupport_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_positioning.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_positioning_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_printsupport_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qml.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qml_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmldebug_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmldevtools_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qmltest_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quick.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quick_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickcontrols2_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickparticles_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quicktemplates2_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_quickwidgets_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_script.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_script_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scripttools_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scxml.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_scxml_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sensors.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sensors_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialbus_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialport.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_serialport_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sql.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_sql_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_svg.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_svg_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_testlib.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_testlib_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uiplugin.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uitools.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_uitools_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webchannel_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webengine.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webengine_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecore_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webenginewidgets_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_websockets.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_websockets_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webview.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_webview_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_widgets.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_widgets_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_winextras.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_winextras_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xml.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xml_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_xmlpatterns_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\modules\qt_lib_zlib_private.pri:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt_functions.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt_config.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\qt_config.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\win32-msvc2013\qmake.conf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\spec_post.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exclusive_builds.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\default_pre.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\default_pre.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\resolve_config.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exclusive_builds_post.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\default_post.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\rtti.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\precompile_header.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\warn_on.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\qt.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\resources.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\moc.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\file_copies.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\win32\windows.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\testcase_targets.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\exceptions.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\yacc.prf:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\mkspecs\features\lex.prf:
|
|
||||||
..\data_process_class_dll\data_process_class_dll.pro:
|
|
||||||
D:\APP\QT5_7\5.7\msvc2013\lib\Qt5Core.prl:
|
|
||||||
qmake: FORCE
|
|
||||||
@$(QMAKE) -spec win32-msvc2013 -o Makefile ..\data_process_class_dll\data_process_class_dll.pro
|
|
||||||
|
|
||||||
qmake_all: FORCE
|
|
||||||
|
|
||||||
make_first: release-make_first debug-make_first FORCE
|
|
||||||
all: release-all debug-all FORCE
|
|
||||||
clean: release-clean debug-clean FORCE
|
|
||||||
-$(DEL_FILE) data_process_class_dll.exp
|
|
||||||
distclean: release-distclean debug-distclean FORCE
|
|
||||||
-$(DEL_FILE) Makefile
|
|
||||||
-$(DEL_FILE) data_process_class_dll.lib
|
|
||||||
|
|
||||||
release-mocclean:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release mocclean
|
|
||||||
debug-mocclean:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug mocclean
|
|
||||||
mocclean: release-mocclean debug-mocclean
|
|
||||||
|
|
||||||
release-mocables:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Release mocables
|
|
||||||
debug-mocables:
|
|
||||||
@set MAKEFLAGS=$(MAKEFLAGS)
|
|
||||||
$(MAKE) -f $(MAKEFILE).Debug mocables
|
|
||||||
mocables: release-mocables debug-mocables
|
|
||||||
|
|
||||||
check: first
|
|
||||||
|
|
||||||
benchmark: first
|
|
||||||
FORCE:
|
|
||||||
|
|
||||||
$(MAKEFILE).Release: Makefile
|
|
||||||
$(MAKEFILE).Debug: Makefile
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -1,285 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#ifndef DATA_PROCESS_CLASS_DLL_H
|
|
||||||
#define DATA_PROCESS_CLASS_DLL_H
|
|
||||||
|
|
||||||
#include "data_process_class_dll_global.h"
|
|
||||||
|
|
||||||
/***************************************************** 结构体 ********************************************************/
|
|
||||||
// 输入点迹的数据结构 用户可见
|
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT DataRev
|
|
||||||
{
|
|
||||||
float Range; //径向距离 (米)
|
|
||||||
float Azimuth; //方位 (度)
|
|
||||||
float Elevation; //俯仰 (度)
|
|
||||||
float Velocity; //速度 (m/s)
|
|
||||||
float Amplitude; //幅度
|
|
||||||
float Threshold; //目标门限
|
|
||||||
float Snr; //目标信噪比
|
|
||||||
float RCS; //目标RCS
|
|
||||||
float Encoder_value; //码盘值
|
|
||||||
int CPI_time; //CPI时间 该波位无点迹输入时也需要给出当前时间
|
|
||||||
int Beam_index_azi_0; //上一个cpi波位
|
|
||||||
int Beam_index_aiz; //方位波位号(0-24) 该波位无输入点迹时 也需要给出当前波位
|
|
||||||
int Beam_index_elev; //俯仰波位号(0-13)
|
|
||||||
int PRI; //PRI(us) 给0
|
|
||||||
int Freq_index; //频点号 给0
|
|
||||||
int Point_Sum; //输入点迹总数 若该波位无点迹输入 置为0
|
|
||||||
int Point_Num; //点迹号(1,2,3,4...)
|
|
||||||
int UseFlag; //点迹使用标记 使用1/未使用0 主程序存入数据时置为0
|
|
||||||
int TAS_track_index; //TAS的航迹号
|
|
||||||
int point_type; //点迹类型 TAS 1/TWS 0
|
|
||||||
int pitch_num; // 俯仰波位号
|
|
||||||
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
|
||||||
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//输出航迹的数据结构 用户可见
|
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track
|
|
||||||
{
|
|
||||||
float x; //x坐标
|
|
||||||
float y; //y坐标
|
|
||||||
float z; //z坐标
|
|
||||||
float v_x; //x速度
|
|
||||||
float v_y; //y速度
|
|
||||||
float v_z; //z速度
|
|
||||||
float Range; //径向距离
|
|
||||||
float Azimuth; //方位
|
|
||||||
float Elevation; //俯仰
|
|
||||||
float Range_V; //速度
|
|
||||||
float Amplitude; //幅度
|
|
||||||
int Track_Index; //航迹号
|
|
||||||
int Point_Sum; //本条航迹更新点的数目
|
|
||||||
int Flag_Direction; //方向标志1靠近/0远离
|
|
||||||
int Flag_Point; //点迹类型1实点/0补点
|
|
||||||
float x_Predict; //x坐标的一步预测
|
|
||||||
float y_Predict; //y坐标的一步预测
|
|
||||||
float z_Predict; //z坐标的一步预测
|
|
||||||
float Range_Predict; //径向距离的一步预测
|
|
||||||
float Azimuth_Predict; //方位的一步预测
|
|
||||||
float Elevation_Predict; //俯仰的一步预测
|
|
||||||
int Track_Mode; //跟踪模式,TAS 1/TWS 0
|
|
||||||
float Direction_Angle; //目标航向角
|
|
||||||
int Target_Type; //目标类型
|
|
||||||
|
|
||||||
int point_type; //点迹类型 TAS 1/TWS 0
|
|
||||||
|
|
||||||
float range_point; //关联上的点迹信息(距离、方位、俯仰、径向速度)
|
|
||||||
float azi_point;
|
|
||||||
float elev_point;
|
|
||||||
float vr_point;
|
|
||||||
float prf_point;
|
|
||||||
|
|
||||||
float track_time; //航迹时间 (单位 s)
|
|
||||||
float track_snr; //信噪比
|
|
||||||
float track_rcs; //rcs
|
|
||||||
|
|
||||||
int pitch_num; // 俯仰波位号
|
|
||||||
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
|
||||||
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 跟踪波束信息的结构体
|
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT TrackingBeam
|
|
||||||
{
|
|
||||||
int open_flag; //是否开启 1开启 0不开启
|
|
||||||
|
|
||||||
int type; //类型
|
|
||||||
float Range; //跟踪目标距离
|
|
||||||
float Azi; //跟踪目标方位
|
|
||||||
float Elev; //跟踪目标俯仰
|
|
||||||
|
|
||||||
int TAS_track_index; //目标批号
|
|
||||||
};
|
|
||||||
|
|
||||||
//引导跟踪信息的结构体
|
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Target_direct_tracking
|
|
||||||
{
|
|
||||||
int Track_ID; //引导目标批号
|
|
||||||
float Range; //引导目标距离
|
|
||||||
float Azi; //引导目标方位
|
|
||||||
float Elev; //引导目标俯仰
|
|
||||||
int open_flag; // 1 引导跟踪 0 结束引导跟踪
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 雷达参数结构体
|
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
|
||||||
{
|
|
||||||
int Beam_num; //波位数
|
|
||||||
|
|
||||||
float Height; //雷达平台高度 (m)
|
|
||||||
|
|
||||||
float Sys_delay; //系统延迟 (s)
|
|
||||||
float R_TAS_max; //TAS最大距离 (m)
|
|
||||||
float R_TAS_min; //TAS最小距离 (m)
|
|
||||||
|
|
||||||
float V_TAS_max; //TAS最大速度 (m/s)
|
|
||||||
float V_TAS_min; //TAS最小速度 (m/s)
|
|
||||||
|
|
||||||
float TAS_Height_1; //TAS跟踪高度1 (m)
|
|
||||||
float TAS_Height_2; //TAS跟踪高度2 (m)
|
|
||||||
float TAS_Height_3; //TAS跟踪高度3 (m)
|
|
||||||
float TAS_Height_4; //TAS跟踪高度4 (m)
|
|
||||||
float TAS_Height_5; //TAS跟踪高度5 (m)
|
|
||||||
|
|
||||||
|
|
||||||
int track_prohibite_area_num; //禁止航迹起始的区域数目
|
|
||||||
float R_max_track_prohibited[30]; //最大距离 (m)
|
|
||||||
float R_min_track_prohibited[30]; //最小距离 (m)
|
|
||||||
float Azimuth_max_track_prohibited[30]; //最大方位角 (度)
|
|
||||||
float Azimuth_min_track_prohibited[30]; //最小方位角 (度)
|
|
||||||
|
|
||||||
|
|
||||||
int TAS_prohibite_area_num; //禁止TAS的区域数目
|
|
||||||
float R_max_TAS_prohibited[30]; //最大距离 (m)
|
|
||||||
float R_min_TAS_prohibited[30]; //最小距离 (m)
|
|
||||||
float Azimuth_max_TAS_prohibited[30]; //最大方位角 (度)
|
|
||||||
float Azimuth_min_TAS_prohibited[30]; //最小方位角 (度)
|
|
||||||
|
|
||||||
int cfar_th; //cfar门限
|
|
||||||
|
|
||||||
int work_mode; //工作模式 0进程 1中程 3远程
|
|
||||||
int north_angle; //北偏角
|
|
||||||
|
|
||||||
float V_MAX; //最大速度
|
|
||||||
float V_MIN; //最小速度
|
|
||||||
|
|
||||||
float DATA_RATE_SHORT; //三种不同模式下的 数据率
|
|
||||||
float DATA_RATE_MIDDLE;
|
|
||||||
float DATA_RATE_FAR;
|
|
||||||
|
|
||||||
|
|
||||||
//数据关联参数
|
|
||||||
int track_start_point_num; //起批点数(典型值 3或4)
|
|
||||||
float track_start_threshold; //起航波门大小(典型值 3)
|
|
||||||
float track_asso_threshold; //关联波门大小(典型值 3)
|
|
||||||
float track_asso_threshold_tas; //关联波门大小tas (典型值 3)
|
|
||||||
|
|
||||||
//singer模型机动参数
|
|
||||||
float Model1_Q_fast; //0.00001
|
|
||||||
float Model1_Q_slow; //0.00001
|
|
||||||
|
|
||||||
float Model2_Q_fast; //0.1
|
|
||||||
float Model2_Q_slow; //0.001
|
|
||||||
|
|
||||||
float Model3_Q_fast; //0.8
|
|
||||||
float Model3_Q_slow; //0.4
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_process_class_dll
|
|
||||||
{
|
|
||||||
|
|
||||||
public:
|
|
||||||
// Data_process_class_dll();
|
|
||||||
|
|
||||||
//数据预处理函数
|
|
||||||
virtual int data_preprocess(struct DataRev Data_Input[150]) //雷达的输入点迹 主程序创建全局变量 输入数据
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//数据处理函数
|
|
||||||
virtual int track_process(struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int Track_die_Index_Output[], //数据处理后要消亡的航迹 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int *Track_die_num_Output, //数据处理后要消亡的航迹数目
|
|
||||||
int model //模式 输入data_preprocess的返回值
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//波束控制
|
|
||||||
virtual void Beam_Ctrl(struct TrackingBeam *Tracking_beam,
|
|
||||||
struct Track Trust_Track_Output[][10],
|
|
||||||
int *Trust_track_num_Output)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//引导跟踪处理函数
|
|
||||||
virtual int direct_tracking_process(struct Target_direct_tracking Target_direct_info, //引导信息
|
|
||||||
struct DataRev Data_Input[150], //雷达的输入点迹
|
|
||||||
struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int Track_die_Index_Output[], //数据处理后要消亡的航迹 主程序创建全局变量 数据处理函数更新其中数据
|
|
||||||
int *Track_die_num_Output, //数据处理后要消亡的航迹数目
|
|
||||||
struct TrackingBeam *Tracking_beam //波束控制信息
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//航迹清空函数
|
|
||||||
virtual int track_clear_all(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//手动航迹删除函数
|
|
||||||
virtual int track_delete(int delete_track_num, //手动删除的航迹数目
|
|
||||||
int delete_track_index[]) //手动删除的航迹号
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//手动转TAS跟踪函数
|
|
||||||
virtual int tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//手动打跟踪波束
|
|
||||||
virtual int tracking_point(float Azimuth) //方位角
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//参数设置初始化函数
|
|
||||||
virtual int track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//参数设置修改函数
|
|
||||||
virtual int track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//工厂类 用户可见
|
|
||||||
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_Process_Factory
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static Data_process_class_dll *GetB(); //创建
|
|
||||||
static void Destroy(); //销毁
|
|
||||||
|
|
||||||
private:
|
|
||||||
static Data_process_class_dll *p;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // DATA_PROCESS_CLASS_DLL_H
|
|
||||||
Binary file not shown.
@@ -1,26 +0,0 @@
|
|||||||
#ifndef DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
|
||||||
#define DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
|
|
||||||
#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
|
||||||
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT Q_DECL_EXPORT
|
|
||||||
#else
|
|
||||||
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT Q_DECL_IMPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
|
||||||
//# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#else
|
|
||||||
//# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#endif
|
|
||||||
//#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
|
||||||
//#define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#else
|
|
||||||
//#define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllimport)
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
#endif // DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
#include "coor_trans.h"
|
#include "coor_trans.h"
|
||||||
#include <qmath.h>
|
#include <cmath>
|
||||||
#include"memory.h"
|
#include <cstring>
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//极坐标转直角坐标
|
//极坐标转直角坐标
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#ifndef COOR_TRANS_H
|
#ifndef COOR_TRANS_H
|
||||||
#define COOR_TRANS_H
|
#define COOR_TRANS_H
|
||||||
|
|
||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
@@ -10,6 +10,5 @@ public:
|
|||||||
|
|
||||||
void cart2polar(double x, double y, double *Range, double *Azimuth);
|
void cart2polar(double x, double y, double *Range, double *Azimuth);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif // COOR_TRANS_H
|
#endif // COOR_TRANS_H
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
#include "data_process.h"
|
#include "data_process.h"
|
||||||
#include "memory.h"
|
#include "rdp_log.h"
|
||||||
#include <QVector>
|
#include "rdp_record.h"
|
||||||
#include <qmath.h>
|
#include "rdp_record_entity.h"
|
||||||
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -11,40 +14,61 @@ using namespace std;
|
|||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
/*******************************************************************************/
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
//数据预处理
|
//数据预处理
|
||||||
int Data_Process::data_preprocess(struct DataRev Data_Input[150])
|
int Data_Process::data_preprocess(struct DataRev Data_Input[150])
|
||||||
{
|
{
|
||||||
|
// 更新当前系统时间
|
||||||
|
latest_timestamp = Data_Input[0].CPI_time;
|
||||||
|
frame_id++;
|
||||||
|
|
||||||
//数据存入缓存区域 Data_buffer
|
//数据存入缓存区域 Data_buffer
|
||||||
if(Data_Input[0].point_type == 0) //tws数据
|
if(Data_Input[0].point_type == 0) //tws数据
|
||||||
{
|
{
|
||||||
data_num=min(Data_Input[0].Point_Sum, 150);
|
data_num=min(Data_Input[0].Point_Sum, 150);
|
||||||
//qDebug() << "TARGET azi beam idx:" <<Data_Input[0].Beam_index_aiz;
|
//std::cout << "TARGET azi beam idx:" <<Data_Input[0].Beam_index_aiz;
|
||||||
for (int i=0; i<data_num;i++)
|
for (int i=0; i<data_num;i++)
|
||||||
{
|
{
|
||||||
PointRecv Data_buffer_temp;
|
PointRecv Data_buffer_temp;
|
||||||
Data_buffer_temp.Amplitude=Data_Input[i].Amplitude;
|
Data_buffer_temp.point_id = point_id++;
|
||||||
Data_buffer_temp.Azimuth=Data_Input[i].Azimuth/180*PI;
|
Data_buffer_temp.frame_id = frame_id;
|
||||||
Data_buffer_temp.snr = Data_Input[i].Snr;
|
Data_buffer_temp.circle_id = circle_id;
|
||||||
|
Data_buffer_temp.amplitude=Data_Input[i].Amplitude;
|
||||||
|
Data_buffer_temp.azimuth=Data_Input[i].Azimuth/180*PI;
|
||||||
|
Data_buffer_temp.SNR = Data_Input[i].Snr;
|
||||||
Data_buffer_temp.RCS = Data_Input[i].RCS;
|
Data_buffer_temp.RCS = Data_Input[i].RCS;
|
||||||
Data_buffer_temp.CPI_Time = Data_Input[i].CPI_time;
|
Data_buffer_temp.CPI_time = Data_Input[i].CPI_time;
|
||||||
Data_buffer_temp.Freq_index = Data_Input[i].Freq_index;
|
Data_buffer_temp.GNSS_time = Data_Input[i].GNSS_time;
|
||||||
|
Data_buffer_temp.freq_index = Data_Input[i].Freq_index;
|
||||||
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
||||||
Data_buffer_temp.Range = Data_Input[i].Range;
|
Data_buffer_temp.range = Data_Input[i].Range;
|
||||||
Data_buffer_temp.Height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
Data_buffer_temp.height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
||||||
Data_buffer_temp.Use_Flag = 0;
|
Data_buffer_temp.use_flag = 0;
|
||||||
Data_buffer_temp.Velocity = Data_Input[i].Velocity;
|
Data_buffer_temp.velocity = Data_Input[i].Velocity;
|
||||||
|
Data_buffer_temp.encoder_value = Data_Input[i].Encoder_value;
|
||||||
Data_buffer_temp.pitch_num = Data_Input[i].pitch_num;
|
Data_buffer_temp.pitch_beam_index = Data_Input[i].pitch_num;
|
||||||
|
Data_buffer_temp.azimuth_beam_index = Data_Input[i].Beam_index_aiz;
|
||||||
|
Data_buffer_temp.point_type = Data_Input[i].point_type;
|
||||||
|
Data_buffer_temp.amp_asv_point = Data_Input[i].amp_asv;
|
||||||
|
Data_buffer_temp.prn_fftn_point = Data_Input[i].prn_fftn;
|
||||||
|
|
||||||
std::memcpy(Data_buffer_temp.speed_dim, Data_Input[i].speed_dim, sizeof(Data_buffer_temp.speed_dim));
|
std::memcpy(Data_buffer_temp.speed_dim, Data_Input[i].speed_dim, sizeof(Data_buffer_temp.speed_dim));
|
||||||
std::memcpy(Data_buffer_temp.range_dim, Data_Input[i].range_dim, sizeof(Data_buffer_temp.range_dim));
|
std::memcpy(Data_buffer_temp.range_dim, Data_Input[i].range_dim, sizeof(Data_buffer_temp.range_dim));
|
||||||
|
|
||||||
|
//数据记录示例①:把本次接收的输入点迹写入表 RdpRecPointTws(字段为示例,可按需增删)。
|
||||||
|
//记录功能关闭时该语句展开为空操作(实参不求值),交付构建不产生任何代码,
|
||||||
|
//用法与新增记录点配方见 rdp_record.h 与 docs/data_record_debug.md。
|
||||||
|
RDP_RECORD(RdpRecPoint(Data_buffer_temp));
|
||||||
|
|
||||||
Data_buffer.push_back(Data_buffer_temp);
|
Data_buffer.push_back(Data_buffer_temp);
|
||||||
}
|
}
|
||||||
if(Data_Input[0].Beam_index_aiz < last_beam_num) //TWS
|
|
||||||
|
// 修改一周扫描完成的判断条件,原来采用判断波位号变小为一周扫描完成,但机扫模式下,可能存在转台反转的情况,导致波位号变小,但并未扫描一周,因此改为判断波位号为0时,表示扫描一周完成
|
||||||
|
if(Data_Input[0].Beam_index_aiz == 0) //TWS
|
||||||
{
|
{
|
||||||
last_beam_num = Data_Input[0].Beam_index_aiz;
|
last_beam_num = Data_Input[0].Beam_index_aiz;
|
||||||
|
circle_id++;
|
||||||
|
// std::cout << Data_Input[0].CPI_time << std::endl;
|
||||||
|
// RDP_LOG<<"CPI_time: "<<Data_Input[0].CPI_time<<std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -56,97 +80,99 @@ int Data_Process::data_preprocess(struct DataRev Data_Input[150])
|
|||||||
|
|
||||||
else if(Data_Input[0].point_type == 1) //tas数据
|
else if(Data_Input[0].point_type == 1) //tas数据
|
||||||
{
|
{
|
||||||
// qDebug() << "TAS TARGET :" <<Data_Input[0].TAS_track_index;
|
// std::cout << "TAS TARGET :" <<Data_Input[0].TAS_track_index;
|
||||||
// qDebug() << "TAS POINT :" <<Data_Input[0].Point_Sum;
|
//std::cout << "TAS time :" <<Data_Input[0].CPI_time;
|
||||||
|
|
||||||
data_num=Data_Input[0].Point_Sum;
|
data_num = min(max(Data_Input[0].Point_Sum, 0), 150);
|
||||||
TAS_track_idx = Data_Input[0].TAS_track_index;
|
TAS_track_idx = Data_Input[0].TAS_track_index;
|
||||||
for (int i=0; i<data_num;i++)
|
for (int i=0; i<data_num;i++)
|
||||||
{
|
{
|
||||||
PointRecv Data_buffer_temp;
|
PointRecv Data_buffer_temp;
|
||||||
Data_buffer_temp.Amplitude=Data_Input[i].Amplitude;
|
Data_buffer_temp.point_id = point_id++;
|
||||||
Data_buffer_temp.Azimuth=Data_Input[i].Azimuth/180*PI;
|
Data_buffer_temp.frame_id = frame_id;
|
||||||
Data_buffer_temp.snr = Data_Input[i].Snr;
|
Data_buffer_temp.circle_id = circle_id;
|
||||||
|
Data_buffer_temp.amplitude=Data_Input[i].Amplitude;
|
||||||
|
Data_buffer_temp.azimuth=Data_Input[i].Azimuth/180*PI;
|
||||||
|
Data_buffer_temp.SNR = Data_Input[i].Snr;
|
||||||
Data_buffer_temp.RCS = Data_Input[i].RCS;
|
Data_buffer_temp.RCS = Data_Input[i].RCS;
|
||||||
Data_buffer_temp.CPI_Time = Data_Input[i].CPI_time;
|
Data_buffer_temp.CPI_time = Data_Input[i].CPI_time;
|
||||||
Data_buffer_temp.Freq_index = Data_Input[i].Freq_index;
|
Data_buffer_temp.GNSS_time = Data_Input[i].GNSS_time;
|
||||||
|
Data_buffer_temp.freq_index = Data_Input[i].Freq_index;
|
||||||
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
Data_buffer_temp.PRF_index = Data_Input[i].PRI;
|
||||||
Data_buffer_temp.Range = Data_Input[i].Range;
|
Data_buffer_temp.range = Data_Input[i].Range;
|
||||||
Data_buffer_temp.Height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
Data_buffer_temp.height= Data_Input[i].Range*sin(Data_Input[i].Elevation/180*PI);
|
||||||
Data_buffer_temp.Use_Flag = 0;
|
Data_buffer_temp.use_flag = 0;
|
||||||
Data_buffer_temp.Velocity = Data_Input[i].Velocity;
|
Data_buffer_temp.velocity = Data_Input[i].Velocity;
|
||||||
Data_buffer_temp.pitch_num = Data_Input[i].pitch_num;
|
Data_buffer_temp.pitch_beam_index = Data_Input[i].pitch_num;
|
||||||
|
Data_buffer_temp.encoder_value = Data_Input[i].Encoder_value;
|
||||||
|
Data_buffer_temp.azimuth_beam_index = Data_Input[i].Beam_index_aiz;
|
||||||
|
Data_buffer_temp.point_type = Data_Input[i].point_type;
|
||||||
|
Data_buffer_temp.amp_asv_point = Data_Input[i].amp_asv;
|
||||||
|
Data_buffer_temp.prn_fftn_point = Data_Input[i].prn_fftn;
|
||||||
|
|
||||||
std::memcpy(Data_buffer_temp.speed_dim, Data_Input[i].speed_dim, sizeof(Data_buffer_temp.speed_dim));
|
std::memcpy(Data_buffer_temp.speed_dim, Data_Input[i].speed_dim, sizeof(Data_buffer_temp.speed_dim));
|
||||||
std::memcpy(Data_buffer_temp.range_dim, Data_Input[i].range_dim, sizeof(Data_buffer_temp.range_dim));
|
std::memcpy(Data_buffer_temp.range_dim, Data_Input[i].range_dim, sizeof(Data_buffer_temp.range_dim));
|
||||||
|
|
||||||
|
RDP_RECORD(RdpRecPoint(Data_buffer_temp));
|
||||||
|
|
||||||
Data_buffer_tas.push_back(Data_buffer_temp);
|
Data_buffer_tas.push_back(Data_buffer_temp);
|
||||||
|
|
||||||
// qDebug() << "Azimuth:" << Data_Input[i].Azimuth
|
// std::cout << "Azimuth:" << Data_Input[i].Azimuth
|
||||||
// << "Range:" << Data_Input[i].Range
|
// << "Range:" << Data_Input[i].Range
|
||||||
// << "EL:" << Data_Input[i].Elevation
|
// << "EL:" << Data_Input[i].Elevation
|
||||||
// << "CPI_Time"<< Data_Input[i].CPI_time
|
// << "CPI_Time"<< Data_Input[i].CPI_time
|
||||||
// << "data_num:" << data_num;
|
// << "data_num:" << data_num;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
circle_id++;
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//数据处理
|
//数据处理
|
||||||
int Data_Process::track_process(struct Track Trust_Track_Output[MAX_TRACK_NUM][10],
|
int Data_Process::track_process(struct Track Trust_Track_Output[MAX_TRACK_NUM][10],
|
||||||
int *Trust_track_num_Output,
|
int *Trust_track_num_Output,
|
||||||
int Track_die_Index_Output[],
|
int Track_die_Index_Output[],
|
||||||
int *Track_die_num_Output,
|
int *Track_die_num_Output,
|
||||||
int model)
|
int model)
|
||||||
{
|
{
|
||||||
|
|
||||||
//TWS处理
|
//TWS处理
|
||||||
if(model==2)
|
if(model==2)
|
||||||
{
|
{
|
||||||
|
|
||||||
dot_coh.dot_coh_process_buff(&Data_buffer,&point_recv,Work_Parameter);
|
dot_coh.dot_coh_process_buff(&Data_buffer,&point_recv,Work_Parameter);
|
||||||
//qDebug() << "point_recv :" <<point_recv.size();
|
std::vector<PointRecv>().swap(Data_buffer);
|
||||||
QVector<PointRecv>().swap(Data_buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(model==1)
|
if(model==1)
|
||||||
{
|
{
|
||||||
*Trust_track_num_Output=0; //航迹更新数
|
*Trust_track_num_Output=0; //航迹更新数
|
||||||
*Track_die_num_Output=0; //航迹消亡数目
|
*Track_die_num_Output=0; //航迹消亡数目
|
||||||
|
|
||||||
track_asso.track_asso_process(&point_recv,
|
track_asso.track_asso_process(&point_recv,
|
||||||
&trust_track,
|
&trust_track,
|
||||||
Trust_Track_Output,
|
Trust_Track_Output,
|
||||||
Trust_track_num_Output,
|
Trust_track_num_Output,
|
||||||
Work_Parameter
|
Work_Parameter
|
||||||
);
|
);
|
||||||
|
|
||||||
track_die.track_die_process( &trust_track,
|
track_die.track_die_process( &trust_track,
|
||||||
Track_die_Index_Output,
|
Track_die_Index_Output,
|
||||||
Track_die_num_Output);
|
Track_die_num_Output);
|
||||||
|
|
||||||
track_init.track_init_process_logic( &point_recv,
|
track_init.track_init_process_logic( &point_recv,
|
||||||
&trust_track,
|
&trust_track,
|
||||||
&temp_track,
|
&temp_track,
|
||||||
Trust_Track_Output,
|
Trust_Track_Output,
|
||||||
Trust_track_num_Output,
|
Trust_track_num_Output,
|
||||||
Work_Parameter);
|
Work_Parameter);
|
||||||
// qDebug() << "point_recv: " <<point_recv.size();
|
|
||||||
// qDebug() << "trust_track: " <<trust_track.size();
|
|
||||||
// qDebug() << "temp_track: " <<temp_track.size();
|
|
||||||
// qDebug() << "Trust_track_num_Output: " <<*Trust_track_num_Output;
|
|
||||||
// qDebug() << "Track_die_num_Output: " <<*Track_die_num_Output;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,127 +184,168 @@ int Data_Process::track_process(struct Track Trust_Track_Output[MAX_TRACK_NUM][1
|
|||||||
|
|
||||||
dot_coh_tas.dot_coh_tas_process(&Data_buffer_tas,&point_recv_tas); //点迹凝聚
|
dot_coh_tas.dot_coh_tas_process(&Data_buffer_tas,&point_recv_tas); //点迹凝聚
|
||||||
|
|
||||||
// if(point_recv_tas.size()>0)
|
std::vector<PointRecv>().swap(Data_buffer_tas);//凝聚完毕 清除Data_buffer
|
||||||
// {
|
|
||||||
// qDebug() << "point_recv_tas :" <<point_recv_tas[0].Azimuth/PI*180<<" "<<point_recv_tas[0].Range;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
QVector<PointRecv>().swap(Data_buffer_tas);//凝聚完毕 清除Data_buffer
|
|
||||||
|
|
||||||
|
|
||||||
track_asso_tas.track_asso_process_tas(&point_recv_tas, //点迹文件
|
track_asso_tas.track_asso_process_tas(&point_recv_tas, //点迹文件
|
||||||
&trust_track, //航迹文件
|
&trust_track, //航迹文件
|
||||||
Trust_Track_Output, //更新航迹信息
|
Trust_Track_Output, //更新航迹信息
|
||||||
Trust_track_num_Output, //更新航迹数
|
Trust_track_num_Output, //更新航迹数
|
||||||
Work_Parameter, //工作参数
|
Work_Parameter, //工作参数
|
||||||
TAS_track_idx);
|
TAS_track_idx,
|
||||||
|
latest_timestamp //最新时间戳
|
||||||
|
);
|
||||||
|
|
||||||
|
std::vector<PointRecv>().swap(point_recv_tas); //清除 point_recv_tas
|
||||||
QVector<PointRecv>().swap(point_recv_tas); //清除 point_recv_tas
|
|
||||||
|
|
||||||
track_die_tas.track_die_process_tas( &trust_track,
|
track_die_tas.track_die_process_tas( &trust_track,
|
||||||
Track_die_Index_Output,
|
Track_die_Index_Output,
|
||||||
Track_die_num_Output);
|
Track_die_num_Output);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//std::cout << "Extrapolate_round :" << trust_track[TAS_track_idx].Extrapolate_round;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//波束控制
|
//波束控制
|
||||||
void Data_Process::Beam_Ctrl(struct TrackingBeam *Tracking_beam,
|
void Data_Process::Beam_Ctrl(struct TrackingBeam *Tracking_beam,
|
||||||
struct Track Trust_Track_Output[][10],
|
struct Track Trust_Track_Output[][10],
|
||||||
int *Trust_track_num_Output)
|
int *Trust_track_num_Output)
|
||||||
{
|
{
|
||||||
|
|
||||||
tas_ctrl.tas_ctrl_process(&trust_track,Tracking_beam, Trust_Track_Output, Trust_track_num_Output,Work_Parameter);
|
tas_ctrl.tas_ctrl_process(&trust_track,Tracking_beam, Trust_Track_Output, Trust_track_num_Output,Work_Parameter, latest_timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//数据处理参数初始化
|
//数据处理参数初始化
|
||||||
int Data_Process::track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
int Data_Process::track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
||||||
{
|
{
|
||||||
|
|
||||||
//工作参数设置
|
//工作参数设置
|
||||||
|
if (Radar_Parameter.track_start_point_num < 3 || Radar_Parameter.track_start_point_num > 9)
|
||||||
|
return -1;
|
||||||
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//数据处理参数修改
|
//数据处理参数修改
|
||||||
int Data_Process::track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
int Data_Process::track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
||||||
{
|
{
|
||||||
|
if (Radar_Parameter.track_start_point_num < 3 || Radar_Parameter.track_start_point_num > 9)
|
||||||
|
return -1;
|
||||||
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
memcpy(&Work_Parameter, &Radar_Parameter, sizeof(RadarPara));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//航迹清空函数
|
//航迹清空函数
|
||||||
int Data_Process::track_clear_all(void)
|
int Data_Process::track_clear_all(void)
|
||||||
{
|
{
|
||||||
//清空可靠航迹
|
//清空可靠航迹
|
||||||
|
Data_buffer.clear();
|
||||||
|
Data_buffer_tas.clear();
|
||||||
|
point_recv.clear();
|
||||||
|
point_recv_tas.clear();
|
||||||
|
trust_track.clear();
|
||||||
|
temp_track.clear();
|
||||||
|
|
||||||
|
// 同步清理内部缓存和状态,避免重连后输出幽灵航迹/幽灵波束
|
||||||
|
dot_coh.reset();
|
||||||
|
track_asso.reset();
|
||||||
|
track_asso_tas.reset();
|
||||||
|
track_init.reset();
|
||||||
|
tas_ctrl.reset();
|
||||||
|
last_beam_num = INT_MAX;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//手动航迹删除函数
|
//手动航迹删除函数
|
||||||
int Data_Process:: track_delete(int delete_track_num, //手动删除的航迹数目
|
int Data_Process:: track_delete(int delete_track_num, //手动删除的航迹数目
|
||||||
int delete_track_index[]) //手动删除的航迹号
|
int delete_track_index[]) //手动删除的航迹号
|
||||||
{
|
{
|
||||||
for (int i=0;i<delete_track_num ;i++)
|
for (int i=0;i<delete_track_num ;i++)
|
||||||
{
|
{
|
||||||
for (int j=0;j<trust_track.size();j++)
|
for (size_t j=0;j<trust_track.size();j++)
|
||||||
{
|
{
|
||||||
if(trust_track[j].Track_Index == delete_track_index[i])
|
if(trust_track[j].Track_Index == delete_track_index[i])
|
||||||
{
|
{
|
||||||
|
|
||||||
trust_track[j].manual_delete_flag=1;
|
trust_track[j].manual_delete_flag=1;
|
||||||
|
// RDP_LOG << "Delete :" << trust_track[j].Track_Index << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//手动添加重点目标
|
||||||
|
int Data_Process::primary_target_add(int track_index)
|
||||||
|
{
|
||||||
|
|
||||||
|
for ( size_t i=0; i<trust_track.size();i++){
|
||||||
|
if(trust_track[i].Track_Index==track_index)
|
||||||
|
{
|
||||||
|
trust_track[i].primary_target_flag = 1;
|
||||||
|
//std::cout<< "Add primary target :" << trust_track[i].Track_Index << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//手动转TAS跟踪函数
|
//手动取消重点目标
|
||||||
|
int Data_Process::primary_target_cancel(int track_index)
|
||||||
|
{
|
||||||
|
|
||||||
|
for ( size_t i=0; i<trust_track.size();i++){
|
||||||
|
if(trust_track[i].Track_Index==track_index)
|
||||||
|
{
|
||||||
|
trust_track[i].primary_target_flag = 0;
|
||||||
|
//std::cout<< "Cancel primary target :" << trust_track[i].Track_Index << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//手动转TAS跟踪函数
|
||||||
int Data_Process:: tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
int Data_Process:: tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
||||||
{
|
{
|
||||||
|
|
||||||
for ( int i=0; i<trust_track.size();i++)
|
for ( size_t i=0; i<trust_track.size();i++){
|
||||||
if(trust_track[i].Track_Index==track_index)
|
if(trust_track[i].Track_Index==track_index)
|
||||||
{
|
{
|
||||||
trust_track[i].manual_tracking_flag = 1;
|
trust_track[i].manual_tracking_flag = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//手动打跟踪波束
|
//手动取消TAS跟踪函数
|
||||||
int Data_Process::tracking_point(float Azimuth)//方位角
|
int Data_Process:: tracking_stop(int track_index) //需要手动转入TAS跟踪的航迹号
|
||||||
|
{
|
||||||
|
|
||||||
|
for ( size_t i=0; i<trust_track.size();i++){
|
||||||
|
if(trust_track[i].Track_Index==track_index)
|
||||||
|
{
|
||||||
|
trust_track[i].manual_tracking_flag = 0;
|
||||||
|
trust_track[i].Track_Mode = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//手动打跟踪波束
|
||||||
|
int Data_Process::tracking_point(float Azimuth)//方位角(当前接口未启用,保留空实现)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#ifndef DATA_PROCESS_H
|
#ifndef DATA_PROCESS_H
|
||||||
#define DATA_PROCESS_H
|
#define DATA_PROCESS_H
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "data_process_class_dll.h"
|
#include "data_process_class_dll.h"
|
||||||
@@ -12,9 +12,10 @@
|
|||||||
#include "track_die.h"
|
#include "track_die.h"
|
||||||
#include "track_die_tas.h"
|
#include "track_die_tas.h"
|
||||||
#include "tas_ctrl.h"
|
#include "tas_ctrl.h"
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
|
#include <climits>
|
||||||
#include <Eigen/Dense>
|
#include <Eigen/Dense>
|
||||||
#include <QDebug>
|
|
||||||
using namespace Eigen;
|
using namespace Eigen;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -29,7 +30,6 @@ public:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//数据预处理函数
|
//数据预处理函数
|
||||||
int data_preprocess(struct DataRev Data_Input[150]);
|
int data_preprocess(struct DataRev Data_Input[150]);
|
||||||
|
|
||||||
@@ -49,7 +49,6 @@ public:
|
|||||||
//航迹清空函数
|
//航迹清空函数
|
||||||
int track_clear_all(void);
|
int track_clear_all(void);
|
||||||
|
|
||||||
|
|
||||||
//手动航迹删除函数
|
//手动航迹删除函数
|
||||||
int track_delete(int delete_track_num, //手动删除的航迹数目
|
int track_delete(int delete_track_num, //手动删除的航迹数目
|
||||||
int delete_track_index[]); //手动删除的航迹号
|
int delete_track_index[]); //手动删除的航迹号
|
||||||
@@ -57,6 +56,15 @@ public:
|
|||||||
//手动转TAS跟踪函数
|
//手动转TAS跟踪函数
|
||||||
int tracking_start(int track_index); //需要手动转入TAS跟踪的航迹号
|
int tracking_start(int track_index); //需要手动转入TAS跟踪的航迹号
|
||||||
|
|
||||||
|
//手动取消TAS跟踪函数
|
||||||
|
int tracking_stop(int track_index); //需要取消TAS跟踪的航迹号
|
||||||
|
|
||||||
|
//手动添加重点目标
|
||||||
|
int primary_target_add(int track_index); //将指定目标转为重点目标
|
||||||
|
|
||||||
|
//手动取消重点目标
|
||||||
|
int primary_target_cancel(int track_index); //将指定重点目标取消
|
||||||
|
|
||||||
//手动打跟踪波束
|
//手动打跟踪波束
|
||||||
int tracking_point(float Azimuth); //方位角
|
int tracking_point(float Azimuth); //方位角
|
||||||
|
|
||||||
@@ -66,17 +74,15 @@ public:
|
|||||||
//参数设置修改函数
|
//参数设置修改函数
|
||||||
int track_process_parameters_modify(struct RadarPara Radar_Parameter);
|
int track_process_parameters_modify(struct RadarPara Radar_Parameter);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QVector <PointRecv> Data_buffer; //接收点迹 TWS 输入凝聚
|
std::vector <PointRecv> Data_buffer; //接收点迹 TWS 输入凝聚
|
||||||
QVector <PointRecv> Data_buffer_tas; //接收点迹 TAS 输入凝聚
|
std::vector <PointRecv> Data_buffer_tas; //接收点迹 TAS 输入凝聚
|
||||||
|
|
||||||
QVector <PointRecv> point_recv; //凝聚后输出的点迹 按点迹区存入 输入航迹关联、起始
|
|
||||||
QVector <PointRecv> point_recv_tas; //凝聚后输出的点迹 TAS
|
|
||||||
QVector <Trust_Track> trust_track; //可靠航迹 按航迹区存入
|
|
||||||
QVector <QVector<Temp_track>> temp_track; //临时航迹 按临时航迹区存入
|
|
||||||
|
|
||||||
|
std::vector <PointRecv> point_recv; //凝聚后输出的点迹 按点迹区存入 输入航迹关联、起始
|
||||||
|
std::vector <PointRecv> point_recv_tas; //凝聚后输出的点迹 TAS
|
||||||
|
std::vector <Trust_Track> trust_track; //可靠航迹 按航迹区存入
|
||||||
|
std::vector <std::vector<Temp_track>> temp_track; //临时航迹 按临时航迹区存入
|
||||||
|
|
||||||
int Beam_num; //波位数
|
int Beam_num; //波位数
|
||||||
int beam_count; //波位计数
|
int beam_count; //波位计数
|
||||||
@@ -88,8 +94,15 @@ private:
|
|||||||
|
|
||||||
int Track_Mode; //跟踪模式 1TAS 0TWS
|
int Track_Mode; //跟踪模式 1TAS 0TWS
|
||||||
|
|
||||||
int last_beam_num = INT_MIN; //上一个波位号,用于判断是否搜索完一圈
|
int last_beam_num = INT_MAX; //上一个波位号,用于判断是否搜索完一圈
|
||||||
|
|
||||||
|
long long latest_timestamp = 0; //最新时间戳
|
||||||
|
|
||||||
|
long long point_id = 0; //点迹id
|
||||||
|
|
||||||
|
long long frame_id = 0; //帧id
|
||||||
|
|
||||||
|
long long circle_id = 0; //圈id
|
||||||
|
|
||||||
struct RadarPara Work_Parameter; //工作参数 参数设置函数外部输入
|
struct RadarPara Work_Parameter; //工作参数 参数设置函数外部输入
|
||||||
|
|
||||||
@@ -111,6 +124,4 @@ private:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // DATA_PROCESS_H
|
#endif // DATA_PROCESS_H
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
|
#ifndef DATA_PROCESS_CLASS_DLL_LIBRARY
|
||||||
#define DATA_PROCESS_CLASS_DLL_LIBRARY
|
#define DATA_PROCESS_CLASS_DLL_LIBRARY
|
||||||
|
#endif
|
||||||
#include "data_process_class_dll.h"
|
#include "data_process_class_dll.h"
|
||||||
#include "data_process.h"
|
#include "data_process.h"
|
||||||
|
#include "rdp_log.h"
|
||||||
|
#include "rdp_record.h"
|
||||||
|
#include "parameters.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Data_process_class_dll::Data_process_class_dll()
|
Data_process_class_dll::Data_process_class_dll()
|
||||||
@@ -8,14 +13,21 @@ Data_process_class_dll::Data_process_class_dll()
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
Data_process_class_dll *Data_Process_Factory::p = 0;
|
Data_process_class_dll *Data_Process_Factory::p = 0;
|
||||||
|
|
||||||
Data_process_class_dll *Data_Process_Factory::GetB()
|
Data_process_class_dll *Data_Process_Factory::GetB()
|
||||||
{
|
{
|
||||||
if(!p)
|
if(!p)
|
||||||
{
|
{
|
||||||
p=new Data_Process();
|
//初始化日志输出:RDP_LOG_ENABLE 开启时重定向 std::cout 到日志文件
|
||||||
|
//rdp_log::Init();
|
||||||
|
|
||||||
|
//初始化数据记录:RDP_DATA_RECORD 开启时创建记录目录、打开本次运行的记录库;
|
||||||
|
//关闭时 rdp_record::Init() 为空实现,不产生任何开销
|
||||||
|
rdp_record::Init();
|
||||||
|
|
||||||
|
p=new Data_Process();
|
||||||
|
p->version_info = VERSION_STRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
@@ -29,5 +41,11 @@ void Data_Process_Factory::Destroy()
|
|||||||
if (p) {
|
if (p) {
|
||||||
delete p;
|
delete p;
|
||||||
p = nullptr;
|
p = nullptr;
|
||||||
|
|
||||||
|
//恢复 std::cout 到控制台并关闭日志文件
|
||||||
|
//rdp_log::Shutdown();
|
||||||
|
|
||||||
|
//关闭记录库(RDP_DATA_RECORD 关闭时为空实现)
|
||||||
|
rdp_record::Shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#ifndef DATA_PROCESS_CLASS_DLL_H
|
#ifndef DATA_PROCESS_CLASS_DLL_H
|
||||||
#define DATA_PROCESS_CLASS_DLL_H
|
#define DATA_PROCESS_CLASS_DLL_H
|
||||||
|
|
||||||
#include "data_process_class_dll_global.h"
|
#include "data_process_class_dll_global.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
/***************************************************** 结构体 ********************************************************/
|
/***************************************************** 结构体 ********************************************************/
|
||||||
// 输入点迹的数据结构 用户可见
|
// 输入点迹的数据结构 用户可见
|
||||||
@@ -17,23 +18,25 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT DataRev
|
|||||||
float Snr; //目标信噪比
|
float Snr; //目标信噪比
|
||||||
float RCS; //目标RCS
|
float RCS; //目标RCS
|
||||||
float Encoder_value; //码盘值
|
float Encoder_value; //码盘值
|
||||||
int CPI_time; //CPI时间 该波位无点迹输入时也需要给出当前时间
|
long long CPI_time; //CPI时间 该波位无点迹输入时也需要给出当前时间
|
||||||
|
long long GNSS_time; //GNSS时间
|
||||||
int Beam_index_azi_0; //上一个cpi波位
|
int Beam_index_azi_0; //上一个cpi波位
|
||||||
int Beam_index_aiz; //方位波位号(0-24) 该波位无输入点迹时 也需要给出当前波位
|
int Beam_index_aiz; //方位波位号(0-24) 该波位无输入点迹时 也需要给出当前波位
|
||||||
int Beam_index_elev; //俯仰波位号(0-13)
|
int Beam_index_elev; //俯仰波位号(0-13)
|
||||||
int PRI; //PRI(us) 给0
|
int PRI; //PRI(us) 不允许为0
|
||||||
int Freq_index; //频点号 给0
|
int Freq_index; //频点号 给0
|
||||||
int Point_Sum; //输入点迹总数 若该波位无点迹输入 置为0
|
int Point_Sum; //输入点迹总数 若该波位无点迹输入 置为0
|
||||||
int Point_Num; //点迹号(1,2,3,4...)
|
int Point_Num; //点迹号(1,2,3,4...)
|
||||||
int UseFlag; //点迹使用标记 使用1/未使用0 主程序存入数据时置为0
|
int UseFlag; //点迹使用标记 使用1/未使用0 主程序存入数据时置为0
|
||||||
int TAS_track_index; //TAS的航迹号
|
int TAS_track_index; //TAS的航迹号
|
||||||
int point_type; //点迹类型 TAS 1/TWS 0
|
int point_type; //点迹类型 TAS 1/TWS 0
|
||||||
int pitch_num; // 俯仰波位号
|
int pitch_num; // 俯仰波位号
|
||||||
|
float amp_asv; //目标归一化幅度(dB)
|
||||||
|
float prn_fftn; //速度维FFT点数
|
||||||
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
||||||
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//输出航迹的数据结构 用户可见
|
//输出航迹的数据结构 用户可见
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track
|
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track
|
||||||
{
|
{
|
||||||
@@ -69,18 +72,19 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Track
|
|||||||
float elev_point;
|
float elev_point;
|
||||||
float vr_point;
|
float vr_point;
|
||||||
float prf_point;
|
float prf_point;
|
||||||
|
float amp_asv_point; //关联上的点迹信息(归一化幅度)
|
||||||
|
float prn_fftn_point; //点迹速度维FFT点数
|
||||||
|
|
||||||
float track_time; //航迹时间 (单位 s)
|
float track_time; //航迹时间 (单位 s)
|
||||||
float track_snr; //信噪比
|
float track_snr; //信噪比
|
||||||
float track_rcs; //rcs
|
float track_rcs; //rcs
|
||||||
|
|
||||||
int pitch_num; // 俯仰波位号
|
int pitch_num; // 俯仰波位号
|
||||||
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
long long GNSS_time; //GNSS时间
|
||||||
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
float speed_dim[129]; // 目标的十字星数据,目标点速度维129个点
|
||||||
|
float range_dim[8]; // 目标的十字星数据,目标点距离维8个点
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 跟踪波束信息的结构体
|
// 跟踪波束信息的结构体
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT TrackingBeam
|
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT TrackingBeam
|
||||||
{
|
{
|
||||||
@@ -104,8 +108,6 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT Target_direct_tracking
|
|||||||
int open_flag; // 1 引导跟踪 0 结束引导跟踪
|
int open_flag; // 1 引导跟踪 0 结束引导跟踪
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 雷达参数结构体
|
// 雷达参数结构体
|
||||||
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
||||||
{
|
{
|
||||||
@@ -126,14 +128,12 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
|||||||
float TAS_Height_4; //TAS跟踪高度4 (m)
|
float TAS_Height_4; //TAS跟踪高度4 (m)
|
||||||
float TAS_Height_5; //TAS跟踪高度5 (m)
|
float TAS_Height_5; //TAS跟踪高度5 (m)
|
||||||
|
|
||||||
|
|
||||||
int track_prohibite_area_num; //禁止航迹起始的区域数目
|
int track_prohibite_area_num; //禁止航迹起始的区域数目
|
||||||
float R_max_track_prohibited[30]; //最大距离 (m)
|
float R_max_track_prohibited[30]; //最大距离 (m)
|
||||||
float R_min_track_prohibited[30]; //最小距离 (m)
|
float R_min_track_prohibited[30]; //最小距离 (m)
|
||||||
float Azimuth_max_track_prohibited[30]; //最大方位角 (度)
|
float Azimuth_max_track_prohibited[30]; //最大方位角 (度)
|
||||||
float Azimuth_min_track_prohibited[30]; //最小方位角 (度)
|
float Azimuth_min_track_prohibited[30]; //最小方位角 (度)
|
||||||
|
|
||||||
|
|
||||||
int TAS_prohibite_area_num; //禁止TAS的区域数目
|
int TAS_prohibite_area_num; //禁止TAS的区域数目
|
||||||
float R_max_TAS_prohibited[30]; //最大距离 (m)
|
float R_max_TAS_prohibited[30]; //最大距离 (m)
|
||||||
float R_min_TAS_prohibited[30]; //最小距离 (m)
|
float R_min_TAS_prohibited[30]; //最小距离 (m)
|
||||||
@@ -142,7 +142,7 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
|||||||
|
|
||||||
int cfar_th; //cfar门限
|
int cfar_th; //cfar门限
|
||||||
|
|
||||||
int work_mode; //工作模式 0进程 1中程 3远程
|
int work_mode; //工作模式 0进程 1中程 2远程
|
||||||
int north_angle; //北偏角
|
int north_angle; //北偏角
|
||||||
|
|
||||||
float V_MAX; //最大速度
|
float V_MAX; //最大速度
|
||||||
@@ -152,6 +152,7 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
|||||||
float DATA_RATE_MIDDLE;
|
float DATA_RATE_MIDDLE;
|
||||||
float DATA_RATE_FAR;
|
float DATA_RATE_FAR;
|
||||||
|
|
||||||
|
float DATA_RATE_TAS; //TAS模式数据率,由dll调用者输入;TAS波束输出间隔阈值为 DATA_RATE_TAS 秒
|
||||||
|
|
||||||
//数据关联参数
|
//数据关联参数
|
||||||
int track_start_point_num; //起批点数(典型值 3或4)
|
int track_start_point_num; //起批点数(典型值 3或4)
|
||||||
@@ -171,13 +172,12 @@ struct DATA_PROCESS_CLASS_DLLSHARED_EXPORT RadarPara
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_process_class_dll
|
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_process_class_dll
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Data_process_class_dll();
|
// Data_process_class_dll();
|
||||||
|
const char* version_info;
|
||||||
|
|
||||||
//数据预处理函数
|
//数据预处理函数
|
||||||
virtual int data_preprocess(struct DataRev Data_Input[150]) //雷达的输入点迹 主程序创建全局变量 输入数据
|
virtual int data_preprocess(struct DataRev Data_Input[150]) //雷达的输入点迹 主程序创建全局变量 输入数据
|
||||||
@@ -185,7 +185,6 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//数据处理函数
|
//数据处理函数
|
||||||
virtual int track_process(struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
virtual int track_process(struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
||||||
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
||||||
@@ -206,7 +205,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//引导跟踪处理函数
|
//引导跟踪处理函数
|
||||||
virtual int direct_tracking_process(struct Target_direct_tracking Target_direct_info, //引导信息
|
virtual int direct_tracking_process(struct Target_direct_tracking Target_direct_info, //引导信息(当前接口未启用,保留空实现)
|
||||||
struct DataRev Data_Input[150], //雷达的输入点迹
|
struct DataRev Data_Input[150], //雷达的输入点迹
|
||||||
struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
struct Track Trust_Track_Output[][10], //数据处理输出的航迹更新信息 主程序创建全局变量 数据处理函数更新其中数据
|
||||||
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
int *Trust_track_num_Output, //数据处理后输出的航迹数目 主程序创建全局变量 数据处理函数更新其中数据
|
||||||
@@ -218,16 +217,12 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//航迹清空函数
|
//航迹清空函数
|
||||||
virtual int track_clear_all(void)
|
virtual int track_clear_all(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//手动航迹删除函数
|
//手动航迹删除函数
|
||||||
virtual int track_delete(int delete_track_num, //手动删除的航迹数目
|
virtual int track_delete(int delete_track_num, //手动删除的航迹数目
|
||||||
int delete_track_index[]) //手动删除的航迹号
|
int delete_track_index[]) //手动删除的航迹号
|
||||||
@@ -235,21 +230,35 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//手动转TAS跟踪函数
|
//手动转TAS跟踪函数
|
||||||
virtual int tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
virtual int tracking_start(int track_index) //需要手动转入TAS跟踪的航迹号
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//手动取消TAS跟踪函数
|
||||||
|
virtual int tracking_stop(int track_index) //需要手动转入TAS跟踪的航迹号
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//手动打跟踪波束
|
//手动添加重点目标
|
||||||
virtual int tracking_point(float Azimuth) //方位角
|
virtual int primary_target_add(int track_index) //将指定目标转为重点目标
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//手动取消重点目标
|
||||||
|
virtual int primary_target_cancel(int track_index) //将指定重点目标取消
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//手动打跟踪波束
|
||||||
|
virtual int tracking_point(float Azimuth) //方位角(当前接口未启用,保留空实现)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//参数设置初始化函数
|
//参数设置初始化函数
|
||||||
virtual int track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
virtual int track_process_parameters_initial(struct RadarPara Radar_Parameter)
|
||||||
@@ -257,18 +266,14 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//参数设置修改函数
|
//参数设置修改函数
|
||||||
virtual int track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
virtual int track_process_parameters_modify(struct RadarPara Radar_Parameter)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//工厂类 用户可见
|
//工厂类 用户可见
|
||||||
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_Process_Factory
|
class DATA_PROCESS_CLASS_DLLSHARED_EXPORT Data_Process_Factory
|
||||||
{
|
{
|
||||||
@@ -280,6 +285,4 @@ private:
|
|||||||
static Data_process_class_dll *p;
|
static Data_process_class_dll *p;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // DATA_PROCESS_CLASS_DLL_H
|
#endif // DATA_PROCESS_CLASS_DLL_H
|
||||||
|
|||||||
@@ -1,317 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE QtCreatorProject>
|
|
||||||
<!-- Written by QtCreator 4.0.2, 2025-04-27T16:03:48. -->
|
|
||||||
<qtcreator>
|
|
||||||
<data>
|
|
||||||
<variable>EnvironmentId</variable>
|
|
||||||
<value type="QByteArray">{0b80abbd-012d-4338-8c64-507c85ad099b}</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
|
||||||
<value type="int">0</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
|
||||||
<value type="QString" key="language">Cpp</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
|
||||||
<value type="QString" key="language">QmlJS</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
|
||||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<valuelist type="QVariantList" key="ClangStaticAnalyzer.SuppressedDiagnostics"/>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_msvc2013_kit</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/007_hhyk_data_process/data_process_mianzhen576/mianzhen576-v1.4.2/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Profile</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="int">0</value>
|
|
||||||
<value type="int">1</value>
|
|
||||||
<value type="int">2</value>
|
|
||||||
<value type="int">3</value>
|
|
||||||
<value type="int">4</value>
|
|
||||||
<value type="int">5</value>
|
|
||||||
<value type="int">6</value>
|
|
||||||
<value type="int">7</value>
|
|
||||||
<value type="int">8</value>
|
|
||||||
<value type="int">9</value>
|
|
||||||
<value type="int">10</value>
|
|
||||||
<value type="int">11</value>
|
|
||||||
<value type="int">12</value>
|
|
||||||
<value type="int">13</value>
|
|
||||||
<value type="int">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
|
||||||
<value type="int">1</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>Version</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
</qtcreator>
|
|
||||||
@@ -1,333 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE QtCreatorProject>
|
|
||||||
<!-- Written by QtCreator 4.0.2, 2021-06-08T20:12:37. -->
|
|
||||||
<qtcreator>
|
|
||||||
<data>
|
|
||||||
<variable>EnvironmentId</variable>
|
|
||||||
<value type="QByteArray">{1b3223cf-63bd-47b4-8c6d-4e129469feee}</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
|
||||||
<value type="int">0</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
|
||||||
<value type="QString" key="language">Cpp</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
|
||||||
<value type="QString" key="language">QmlJS</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
|
||||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
|
||||||
<valuemap type="QVariantMap"/>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 GCC 64bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 GCC 64bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.gcc_64_kit</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/xu/2003/QT_process/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/xu/2003/QT_process/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release/release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/xu/2003/QT_process/build-data_process_class_dll-Desktop_Qt_5_7_0_GCC_64bit-Profile</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
|
||||||
<value type="QString">-w</value>
|
|
||||||
<value type="QString">-r</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="int">0</value>
|
|
||||||
<value type="int">1</value>
|
|
||||||
<value type="int">2</value>
|
|
||||||
<value type="int">3</value>
|
|
||||||
<value type="int">4</value>
|
|
||||||
<value type="int">5</value>
|
|
||||||
<value type="int">6</value>
|
|
||||||
<value type="int">7</value>
|
|
||||||
<value type="int">8</value>
|
|
||||||
<value type="int">9</value>
|
|
||||||
<value type="int">10</value>
|
|
||||||
<value type="int">11</value>
|
|
||||||
<value type="int">12</value>
|
|
||||||
<value type="int">13</value>
|
|
||||||
<value type="int">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
|
||||||
<value type="int">1</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>Version</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
</qtcreator>
|
|
||||||
@@ -1,315 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE QtCreatorProject>
|
|
||||||
<!-- Written by QtCreator 4.0.2, 2021-06-08T14:09:25. -->
|
|
||||||
<qtcreator>
|
|
||||||
<data>
|
|
||||||
<variable>EnvironmentId</variable>
|
|
||||||
<value type="QByteArray">{7d2b7fbd-9f92-4349-8514-21c38df4ed25}</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
|
||||||
<value type="int">0</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
|
||||||
<value type="QString" key="language">Cpp</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
|
||||||
<value type="QString" key="language">QmlJS</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
|
||||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
|
||||||
<valuemap type="QVariantMap"/>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_msvc2013_kit</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/dataprocess/QT_process/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Profile</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="int">0</value>
|
|
||||||
<value type="int">1</value>
|
|
||||||
<value type="int">2</value>
|
|
||||||
<value type="int">3</value>
|
|
||||||
<value type="int">4</value>
|
|
||||||
<value type="int">5</value>
|
|
||||||
<value type="int">6</value>
|
|
||||||
<value type="int">7</value>
|
|
||||||
<value type="int">8</value>
|
|
||||||
<value type="int">9</value>
|
|
||||||
<value type="int">10</value>
|
|
||||||
<value type="int">11</value>
|
|
||||||
<value type="int">12</value>
|
|
||||||
<value type="int">13</value>
|
|
||||||
<value type="int">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
|
||||||
<value type="int">1</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>Version</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
</qtcreator>
|
|
||||||
@@ -1,559 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE QtCreatorProject>
|
|
||||||
<!-- Written by QtCreator 4.0.2, 2021-06-08T13:58:48. -->
|
|
||||||
<qtcreator>
|
|
||||||
<data>
|
|
||||||
<variable>EnvironmentId</variable>
|
|
||||||
<value type="QByteArray">{d94506bb-f9e6-48c9-9c2d-e6e1c0edb92a}</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
|
||||||
<value type="int">0</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
|
||||||
<value type="QString" key="language">Cpp</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
|
||||||
<value type="QString" key="language">QmlJS</value>
|
|
||||||
<valuemap type="QVariantMap" key="value">
|
|
||||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
|
||||||
</valuemap>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
|
||||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
|
||||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
|
||||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
|
||||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
|
||||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
|
||||||
<valuemap type="QVariantMap"/>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MSVC2013 32bit</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_msvc2013_kit</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-Desktop_Qt_5_7_0_MSVC2013_32bit-Profile</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="int">0</value>
|
|
||||||
<value type="int">1</value>
|
|
||||||
<value type="int">2</value>
|
|
||||||
<value type="int">3</value>
|
|
||||||
<value type="int">4</value>
|
|
||||||
<value type="int">5</value>
|
|
||||||
<value type="int">6</value>
|
|
||||||
<value type="int">7</value>
|
|
||||||
<value type="int">8</value>
|
|
||||||
<value type="int">9</value>
|
|
||||||
<value type="int">10</value>
|
|
||||||
<value type="int">11</value>
|
|
||||||
<value type="int">12</value>
|
|
||||||
<value type="int">13</value>
|
|
||||||
<value type="int">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Target.1</variable>
|
|
||||||
<valuemap type="QVariantMap">
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">未命名</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">未命名</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{9b0b3026-9845-46f4-8357-c52f2694ea2c}</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-unknown-Debug</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-unknown-Release</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/data_process_qt_vision_2003/build-data_process_class_dll-unknown-Profile</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
|
||||||
</valuemap>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
|
||||||
<value type="int">0</value>
|
|
||||||
<value type="int">1</value>
|
|
||||||
<value type="int">2</value>
|
|
||||||
<value type="int">3</value>
|
|
||||||
<value type="int">4</value>
|
|
||||||
<value type="int">5</value>
|
|
||||||
<value type="int">6</value>
|
|
||||||
<value type="int">7</value>
|
|
||||||
<value type="int">8</value>
|
|
||||||
<value type="int">9</value>
|
|
||||||
<value type="int">10</value>
|
|
||||||
<value type="int">11</value>
|
|
||||||
<value type="int">12</value>
|
|
||||||
<value type="int">13</value>
|
|
||||||
<value type="int">14</value>
|
|
||||||
</valuelist>
|
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">-1</value>
|
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
|
||||||
</valuemap>
|
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
|
||||||
</valuemap>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
|
||||||
<value type="int">2</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
<variable>Version</variable>
|
|
||||||
<value type="int">18</value>
|
|
||||||
</data>
|
|
||||||
</qtcreator>
|
|
||||||
@@ -1,26 +1,12 @@
|
|||||||
#ifndef DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
#ifndef DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
||||||
#define DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
#define DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
||||||
|
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
|
|
||||||
#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
||||||
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT Q_DECL_EXPORT
|
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT Q_DECL_IMPORT
|
# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllimport)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
|
||||||
//# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#else
|
|
||||||
//# define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#endif
|
|
||||||
//#if defined(DATA_PROCESS_CLASS_DLL_LIBRARY)
|
|
||||||
//#define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllexport)
|
|
||||||
//#else
|
|
||||||
//#define DATA_PROCESS_CLASS_DLLSHARED_EXPORT __declspec(dllimport)
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
#endif // DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
#endif // DATA_PROCESS_CLASS_DLL_GLOBAL_H
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
#include "dot_coh.h"
|
#include "dot_coh.h"
|
||||||
#include <qmath.h>
|
#include <cmath>
|
||||||
#include"memory.h"
|
#include <cstring>
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
|
#include "rdp_record.h"
|
||||||
|
#include "rdp_record_entity.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
int Dot_Coh::dot_coh_process(std::vector <PointRecv> *data_input,
|
||||||
int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
std::vector <PointRecv> *point_recv,
|
||||||
QVector <PointRecv> *point_recv,
|
|
||||||
struct RadarPara Work_Parameter)
|
struct RadarPara Work_Parameter)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -15,37 +17,38 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
|||||||
|
|
||||||
for (unsigned int loop_of_point=0; loop_of_point<data_input->size()-1;loop_of_point++ )
|
for (unsigned int loop_of_point=0; loop_of_point<data_input->size()-1;loop_of_point++ )
|
||||||
{
|
{
|
||||||
if( (*data_input)[loop_of_point].Use_Flag!=1)
|
if( (*data_input)[loop_of_point].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_0_R=(*data_input)[loop_of_point].Range;
|
float point_0_R=static_cast<float>((*data_input)[loop_of_point].range);
|
||||||
float point_0_V=(*data_input)[loop_of_point].Velocity;
|
float point_0_V=static_cast<float>((*data_input)[loop_of_point].velocity);
|
||||||
float point_0_F=(*data_input)[loop_of_point].Azimuth;
|
float point_0_F=static_cast<float>((*data_input)[loop_of_point].azimuth);
|
||||||
float point_0_A=(*data_input)[loop_of_point].Amplitude;
|
float point_0_A=static_cast<float>((*data_input)[loop_of_point].amplitude);
|
||||||
for (unsigned int i=loop_of_point+1;i<data_input->size();i++)
|
for (unsigned int i=loop_of_point+1;i<data_input->size();i++)
|
||||||
{
|
{
|
||||||
if((*data_input)[loop_of_point].Use_Flag!=1)
|
if((*data_input)[loop_of_point].use_flag!=1 && (*data_input)[i].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_1_R=(*data_input)[i].Range;
|
float point_1_R=static_cast<float>((*data_input)[i].range);
|
||||||
float point_1_V=(*data_input)[i].Velocity;
|
float point_1_V=static_cast<float>((*data_input)[i].velocity);
|
||||||
float point_1_F=(*data_input)[i].Azimuth;
|
float point_1_F=static_cast<float>((*data_input)[i].azimuth);
|
||||||
float point_1_A=(*data_input)[i].Amplitude;
|
float point_1_A=static_cast<float>((*data_input)[i].amplitude);
|
||||||
|
|
||||||
//凝聚条件: 距离、方位接近
|
//凝聚条件: 距离、方位接近
|
||||||
if(Work_Parameter.work_mode == 0)
|
if(Work_Parameter.work_mode == 0)
|
||||||
{
|
{
|
||||||
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
float delta_F = fabs(point_0_F-point_1_F)<2*PI-fabs(point_0_F-point_1_F) ? fabs(point_0_F-point_1_F) :2*PI-fabs(point_0_F-point_1_F);
|
||||||
|
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
||||||
&& point_0_A <point_1_A )//
|
&& point_0_A <point_1_A )//
|
||||||
{
|
{
|
||||||
point_0_R=(*data_input)[i].Range;
|
point_0_R=static_cast<float>((*data_input)[i].range);
|
||||||
point_0_V=(*data_input)[i].Velocity;
|
point_0_V=static_cast<float>((*data_input)[i].velocity);
|
||||||
point_0_A=(*data_input)[i].Amplitude;
|
point_0_A=static_cast<float>((*data_input)[i].amplitude);
|
||||||
point_0_F=(*data_input)[i].Azimuth;
|
point_0_F=static_cast<float>((*data_input)[i].azimuth);
|
||||||
(*data_input)[loop_of_point].Use_Flag=1;
|
(*data_input)[loop_of_point].use_flag=1;
|
||||||
}
|
}
|
||||||
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
||||||
&& point_0_A >= point_1_A)//
|
&& point_0_A >= point_1_A)//
|
||||||
{
|
{
|
||||||
(*data_input)[i].Use_Flag=1;
|
(*data_input)[i].use_flag=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -54,20 +57,18 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
|||||||
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
||||||
&& point_0_A <point_1_A )//
|
&& point_0_A <point_1_A )//
|
||||||
{
|
{
|
||||||
point_0_R=(*data_input)[i].Range;
|
point_0_R=static_cast<float>((*data_input)[i].range);
|
||||||
point_0_V=(*data_input)[i].Velocity;
|
point_0_V=static_cast<float>((*data_input)[i].velocity);
|
||||||
point_0_A=(*data_input)[i].Amplitude;
|
point_0_A=static_cast<float>((*data_input)[i].amplitude);
|
||||||
point_0_F=(*data_input)[i].Azimuth;
|
point_0_F=static_cast<float>((*data_input)[i].azimuth);
|
||||||
(*data_input)[loop_of_point].Use_Flag=1;
|
(*data_input)[loop_of_point].use_flag=1;
|
||||||
}
|
}
|
||||||
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
||||||
&& point_0_A >= point_1_A)//
|
&& point_0_A >= point_1_A)//
|
||||||
{
|
{
|
||||||
(*data_input)[i].Use_Flag=1;
|
(*data_input)[i].use_flag=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -76,10 +77,10 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//删除凝聚点 和 量程范围外点
|
//删除凝聚点 和 量程范围外点
|
||||||
QVector <PointRecv>::iterator Iter;
|
std::vector <PointRecv>::iterator Iter;
|
||||||
for (Iter=data_input->begin(); Iter!=data_input->end();)
|
for (Iter=data_input->begin(); Iter!=data_input->end();)
|
||||||
{
|
{
|
||||||
if((*Iter).Use_Flag==1 || (*Iter).Range <R_MIN || (*Iter).Range > R_MAX )
|
if((*Iter).use_flag==1 || (*Iter).range <R_MIN || (*Iter).range > R_MAX )
|
||||||
{
|
{
|
||||||
data_input->erase(Iter);
|
data_input->erase(Iter);
|
||||||
Iter=data_input->begin();
|
Iter=data_input->begin();
|
||||||
@@ -90,7 +91,7 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0;i<data_input->size();i++) //data_buffer_2 ---> point_recv
|
for (size_t i=0;i<data_input->size();i++) //data_buffer_2 ---> point_recv
|
||||||
{
|
{
|
||||||
(*point_recv).push_back((*data_input)[i]);
|
(*point_recv).push_back((*data_input)[i]);
|
||||||
}
|
}
|
||||||
@@ -98,38 +99,33 @@ int Dot_Coh::dot_coh_process(QVector <PointRecv> *data_input,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Dot_Coh::dot_coh_process_buff( std::vector <PointRecv> *data_input, //输入的点迹
|
||||||
|
std::vector <PointRecv> *point_recv, //输出点迹
|
||||||
|
|
||||||
int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input, //输入的点迹
|
|
||||||
QVector <PointRecv> *point_recv, //输出点迹
|
|
||||||
struct RadarPara Work_Parameter //工作参数
|
struct RadarPara Work_Parameter //工作参数
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//1. data_input与data_input_buff进行凝聚
|
//1. data_input与data_input_buff进行凝聚
|
||||||
|
|
||||||
//1.1 data_input、data_input_buff中的数据放在一起
|
//1.1 data_input、data_input_buff中的数据放在一起
|
||||||
QVector <PointRecv> data_tmp;
|
std::vector <PointRecv> data_tmp;
|
||||||
for (int i=0;i<data_input_buff.size();i++)
|
for (size_t i=0;i<data_input_buff.size();i++)
|
||||||
{
|
{
|
||||||
data_tmp.push_back(data_input_buff[i]);
|
data_tmp.push_back(data_input_buff[i]);
|
||||||
data_tmp[data_tmp.size()-1].point_section_asso = 1;
|
data_tmp[data_tmp.size()-1].point_section_asso = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
for (int i=0;i<data_input->size();i++)
|
|
||||||
|
for (size_t i=0;i<data_input->size();i++)
|
||||||
{
|
{
|
||||||
data_tmp.push_back((*data_input)[i]);
|
data_tmp.push_back((*data_input)[i]);
|
||||||
data_tmp[data_tmp.size()-1].point_section_asso = 2;
|
data_tmp[data_tmp.size()-1].point_section_asso = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//1.2 把data_input、data_input_buff清空
|
//1.2 把data_input、data_input_buff清空
|
||||||
|
|
||||||
QVector<PointRecv>().swap(data_input_buff);
|
std::vector<PointRecv>().swap(data_input_buff);
|
||||||
QVector<PointRecv>().swap(*data_input);
|
std::vector<PointRecv>().swap(*data_input);
|
||||||
|
|
||||||
|
|
||||||
//1.3 对data_tmp进行凝聚
|
//1.3 对data_tmp进行凝聚
|
||||||
if(data_tmp.size()>1)
|
if(data_tmp.size()>1)
|
||||||
@@ -137,37 +133,38 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
|
|||||||
|
|
||||||
for (unsigned int loop_of_point=0; loop_of_point<data_tmp.size()-1;loop_of_point++ )
|
for (unsigned int loop_of_point=0; loop_of_point<data_tmp.size()-1;loop_of_point++ )
|
||||||
{
|
{
|
||||||
if( data_tmp[loop_of_point].Use_Flag!=1)
|
if( data_tmp[loop_of_point].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_0_R=data_tmp[loop_of_point].Range;
|
float point_0_R=static_cast<float>(data_tmp[loop_of_point].range);
|
||||||
float point_0_V=data_tmp[loop_of_point].Velocity;
|
float point_0_V=static_cast<float>(data_tmp[loop_of_point].velocity);
|
||||||
float point_0_F=data_tmp[loop_of_point].Azimuth;
|
float point_0_F=static_cast<float>(data_tmp[loop_of_point].azimuth);
|
||||||
float point_0_A=data_tmp[loop_of_point].Amplitude;
|
float point_0_A=static_cast<float>(data_tmp[loop_of_point].amplitude);
|
||||||
for (unsigned int i=loop_of_point+1;i<data_tmp.size();i++)
|
for (unsigned int i=loop_of_point+1;i<data_tmp.size();i++)
|
||||||
{
|
{
|
||||||
if(data_tmp[loop_of_point].Use_Flag!=1)
|
if(data_tmp[loop_of_point].use_flag!=1 && data_tmp[i].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_1_R=data_tmp[i].Range;
|
float point_1_R=static_cast<float>(data_tmp[i].range);
|
||||||
float point_1_V=data_tmp[i].Velocity;
|
float point_1_V=static_cast<float>(data_tmp[i].velocity);
|
||||||
float point_1_F=data_tmp[i].Azimuth;
|
float point_1_F=static_cast<float>(data_tmp[i].azimuth);
|
||||||
float point_1_A=data_tmp[i].Amplitude;
|
float point_1_A=static_cast<float>(data_tmp[i].amplitude);
|
||||||
|
|
||||||
//凝聚条件: 距离、方位接近
|
//凝聚条件: 距离、方位接近
|
||||||
if(Work_Parameter.work_mode == 0)
|
if(Work_Parameter.work_mode == 0)
|
||||||
{
|
{
|
||||||
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
float delta_F = fabs(point_0_F-point_1_F)<2*PI-fabs(point_0_F-point_1_F) ? fabs(point_0_F-point_1_F) :2*PI-fabs(point_0_F-point_1_F);
|
||||||
|
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
||||||
&& point_0_A <point_1_A )//
|
&& point_0_A <point_1_A )//
|
||||||
{
|
{
|
||||||
point_0_R=data_tmp[i].Range;
|
point_0_R=static_cast<float>(data_tmp[i].range);
|
||||||
point_0_V=data_tmp[i].Velocity;
|
point_0_V=static_cast<float>(data_tmp[i].velocity);
|
||||||
point_0_A=data_tmp[i].Amplitude;
|
point_0_A=static_cast<float>(data_tmp[i].amplitude);
|
||||||
point_0_F=data_tmp[i].Azimuth;
|
point_0_F=static_cast<float>(data_tmp[i].azimuth);
|
||||||
data_tmp[loop_of_point].Use_Flag=1;
|
data_tmp[loop_of_point].use_flag=1;
|
||||||
}
|
}
|
||||||
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)//
|
||||||
&& point_0_A >= point_1_A)//
|
&& point_0_A >= point_1_A)//
|
||||||
{
|
{
|
||||||
data_tmp[i].Use_Flag=1;
|
data_tmp[i].use_flag=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -176,20 +173,18 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
|
|||||||
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
||||||
&& point_0_A <point_1_A )//
|
&& point_0_A <point_1_A )//
|
||||||
{
|
{
|
||||||
point_0_R=data_tmp[i].Range;
|
point_0_R=static_cast<float>(data_tmp[i].range);
|
||||||
point_0_V=data_tmp[i].Velocity;
|
point_0_V=static_cast<float>(data_tmp[i].velocity);
|
||||||
point_0_A=data_tmp[i].Amplitude;
|
point_0_A=static_cast<float>(data_tmp[i].amplitude);
|
||||||
point_0_F=data_tmp[i].Azimuth;
|
point_0_F=static_cast<float>(data_tmp[i].azimuth);
|
||||||
data_tmp[loop_of_point].Use_Flag=1;
|
data_tmp[loop_of_point].use_flag=1;
|
||||||
}
|
}
|
||||||
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI )//
|
||||||
&& point_0_A >= point_1_A)//
|
&& point_0_A >= point_1_A)//
|
||||||
{
|
{
|
||||||
data_tmp[i].Use_Flag=1;
|
data_tmp[i].use_flag=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,10 +193,10 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//1.4 删除凝聚点 和 量程范围外点
|
//1.4 删除凝聚点 和 量程范围外点
|
||||||
QVector <PointRecv>::iterator Iter;
|
std::vector <PointRecv>::iterator Iter;
|
||||||
for (Iter=data_tmp.begin(); Iter!=data_tmp.end();)
|
for (Iter=data_tmp.begin(); Iter!=data_tmp.end();)
|
||||||
{
|
{
|
||||||
if((*Iter).Use_Flag==1 || (*Iter).Range <R_MIN || (*Iter).Range > R_MAX )
|
if((*Iter).use_flag==1 || (*Iter).range <R_MIN || (*Iter).range > R_MAX )
|
||||||
{
|
{
|
||||||
data_tmp.erase(Iter);
|
data_tmp.erase(Iter);
|
||||||
Iter=data_tmp.begin();
|
Iter=data_tmp.begin();
|
||||||
@@ -213,7 +208,7 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//1.5 将data_tmp中凝聚后的点再分到 data_input_buff和data_input中
|
//1.5 将data_tmp中凝聚后的点再分到 data_input_buff和data_input中
|
||||||
for (int i=0;i<data_tmp.size();i++)
|
for (size_t i=0;i<data_tmp.size();i++)
|
||||||
{
|
{
|
||||||
if(data_tmp[i].point_section_asso==1)
|
if(data_tmp[i].point_section_asso==1)
|
||||||
{
|
{
|
||||||
@@ -225,36 +220,33 @@ int Dot_Coh::dot_coh_process_buff( QVector <PointRecv> *data_input,
|
|||||||
(*data_input).push_back(data_tmp[i]);
|
(*data_input).push_back(data_tmp[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QVector<PointRecv>().swap(data_tmp);
|
std::vector<PointRecv>().swap(data_tmp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//2.data_input_buff数据输出给point_recv
|
//2.data_input_buff数据输出给point_recv
|
||||||
|
|
||||||
for (int i=0;i<data_input_buff.size();i++)
|
for (size_t i=0;i<data_input_buff.size();i++)
|
||||||
{
|
{
|
||||||
(*point_recv).push_back(data_input_buff[i]);
|
(*point_recv).push_back(data_input_buff[i]);
|
||||||
|
RDP_RECORD(RdpRecPointCohesionTWS(data_input_buff[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<PointRecv>().swap(data_input_buff);
|
std::vector<PointRecv>().swap(data_input_buff);
|
||||||
|
|
||||||
|
|
||||||
//3.data_input数据输出给data_input_buff
|
//3.data_input数据输出给data_input_buff
|
||||||
for (int i=0;i<data_input->size();i++)
|
for (size_t i=0;i<data_input->size();i++)
|
||||||
{
|
{
|
||||||
data_input_buff.push_back((*data_input)[i]);
|
data_input_buff.push_back((*data_input)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Dot_Coh::Dot_Coh(void)
|
Dot_Coh::Dot_Coh(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dot_Coh::reset()
|
||||||
|
{
|
||||||
|
data_input_buff.clear();
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
#ifndef DOT_COH_H
|
#ifndef DOT_COH_H
|
||||||
#define DOT_COH_H
|
#define DOT_COH_H
|
||||||
#include "data_process_class_dll.h"
|
#include "data_process_class_dll.h"
|
||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
#include "struct.h"
|
#include "struct.h"
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -14,29 +13,23 @@ class Dot_Coh
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
// 点迹凝聚函数
|
// 点迹凝聚函数
|
||||||
int dot_coh_process( QVector <PointRecv> *data_input, //输入的点迹
|
int dot_coh_process( std::vector <PointRecv> *data_input, //输入的点迹
|
||||||
QVector <PointRecv> *point_recv, //输出点迹
|
std::vector <PointRecv> *point_recv, //输出点迹
|
||||||
struct RadarPara Work_Parameter //工作参数
|
struct RadarPara Work_Parameter //工作参数
|
||||||
);
|
);
|
||||||
|
|
||||||
//点迹凝聚函数,缓存一帧,一边输出,一边进行滑窗凝聚
|
//点迹凝聚函数,缓存一帧,一边输出,一边进行滑窗凝聚
|
||||||
int dot_coh_process_buff( QVector <PointRecv> *data_input, //输入的点迹
|
int dot_coh_process_buff( std::vector <PointRecv> *data_input, //输入的点迹
|
||||||
QVector <PointRecv> *point_recv, //输出点迹
|
std::vector <PointRecv> *point_recv, //输出点迹
|
||||||
struct RadarPara Work_Parameter //工作参数
|
struct RadarPara Work_Parameter //工作参数
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//构造函数
|
//构造函数
|
||||||
Dot_Coh();
|
Dot_Coh();
|
||||||
|
void reset();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVector <PointRecv> data_input_buff;
|
std::vector <PointRecv> data_input_buff;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,63 +1,62 @@
|
|||||||
#include "dot_coh_tas.h"
|
#include "dot_coh_tas.h"
|
||||||
#include <qmath.h>
|
#include <cmath>
|
||||||
#include"memory.h"
|
#include <cstring>
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
|
#include "rdp_record.h"
|
||||||
|
#include "rdp_record_entity.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
int Dot_Coh_TAS::dot_coh_tas_process(std::vector <PointRecv> *data_input, //输入点迹
|
||||||
|
std::vector <PointRecv> *point_recv_tas //输出点迹
|
||||||
int Dot_Coh_TAS::dot_coh_tas_process(QVector <PointRecv> *data_input, //输入点迹
|
|
||||||
QVector <PointRecv> *point_recv_tas //输出点迹
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (data_input->size() == 0) {
|
if (data_input->size() == 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int loop_of_point=0; loop_of_point<data_input->size()-1;loop_of_point++ )
|
for (size_t loop_of_point=0; loop_of_point<data_input->size()-1;loop_of_point++ )
|
||||||
{
|
{
|
||||||
if( (*data_input)[loop_of_point].Use_Flag!=1)
|
if( (*data_input)[loop_of_point].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_0_R=(*data_input)[loop_of_point].Range;
|
float point_0_R=static_cast<float>((*data_input)[loop_of_point].range);
|
||||||
float point_0_V=(*data_input)[loop_of_point].Velocity;
|
float point_0_V=static_cast<float>((*data_input)[loop_of_point].velocity);
|
||||||
float point_0_F=(*data_input)[loop_of_point].Azimuth;
|
float point_0_F=static_cast<float>((*data_input)[loop_of_point].azimuth);
|
||||||
float point_0_A=(*data_input)[loop_of_point].Amplitude;
|
float point_0_A=static_cast<float>((*data_input)[loop_of_point].amplitude);
|
||||||
for ( int i=loop_of_point+1;i<(*data_input).size();i++)
|
for ( size_t i=loop_of_point+1;i<(*data_input).size();i++)
|
||||||
{
|
{
|
||||||
if((*data_input)[loop_of_point].Use_Flag!=1)
|
if((*data_input)[loop_of_point].use_flag!=1 && (*data_input)[i].use_flag!=1)
|
||||||
{
|
{
|
||||||
float point_1_R=(*data_input)[i].Range;
|
float point_1_R=static_cast<float>((*data_input)[i].range);
|
||||||
float point_1_V=(*data_input)[i].Velocity;
|
float point_1_V=static_cast<float>((*data_input)[i].velocity);
|
||||||
float point_1_F=(*data_input)[i].Azimuth;
|
float point_1_F=static_cast<float>((*data_input)[i].azimuth);
|
||||||
float point_1_A=(*data_input)[i].Amplitude;
|
float point_1_A=static_cast<float>((*data_input)[i].amplitude);
|
||||||
|
|
||||||
//凝聚条件: 距离、方位接近
|
//凝聚条件: 距离、方位接近
|
||||||
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)
|
float delta_F = fabs(point_0_F-point_1_F)<2*PI-fabs(point_0_F-point_1_F) ? fabs(point_0_F-point_1_F) :2*PI-fabs(point_0_F-point_1_F);
|
||||||
|
if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)
|
||||||
&& point_0_A <point_1_A )
|
&& point_0_A <point_1_A )
|
||||||
{
|
{
|
||||||
point_0_R=(*data_input)[i].Range;
|
point_0_R=static_cast<float>((*data_input)[i].range);
|
||||||
point_0_V=(*data_input)[i].Velocity;
|
point_0_V=static_cast<float>((*data_input)[i].velocity);
|
||||||
point_0_A=(*data_input)[i].Amplitude;
|
point_0_A=static_cast<float>((*data_input)[i].amplitude);
|
||||||
point_0_F=(*data_input)[i].Azimuth;
|
point_0_F=static_cast<float>((*data_input)[i].azimuth);
|
||||||
(*data_input)[loop_of_point].Use_Flag=1;
|
(*data_input)[loop_of_point].use_flag=1;
|
||||||
}
|
}
|
||||||
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && fabs(point_0_F-point_1_F) <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)
|
else if( (fabs(point_0_R-point_1_R)<=DOT_COH_RANGE && delta_F <=DOT_COH_AZI/180.0*PI && fabs(point_0_V-point_1_V)<=DOT_COH_V)
|
||||||
&& point_0_A >= point_1_A)
|
&& point_0_A >= point_1_A)
|
||||||
{
|
{
|
||||||
(*data_input)[i].Use_Flag=1;
|
(*data_input)[i].use_flag=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//删除凝聚点 和 量程范围外点
|
//删除凝聚点 和 量程范围外点
|
||||||
QVector <PointRecv>::iterator Iter;
|
std::vector <PointRecv>::iterator Iter;
|
||||||
for (Iter=data_input->begin(); Iter!=data_input->end();)
|
for (Iter=data_input->begin(); Iter!=data_input->end();)
|
||||||
{
|
{
|
||||||
if((*Iter).Use_Flag==1 || (*Iter).Range <R_MIN || (*Iter).Range > R_MAX )
|
if((*Iter).use_flag==1 || (*Iter).range <R_MIN || (*Iter).range > R_MAX )
|
||||||
{
|
{
|
||||||
data_input->erase(Iter);
|
data_input->erase(Iter);
|
||||||
Iter=data_input->begin();
|
Iter=data_input->begin();
|
||||||
@@ -68,14 +67,11 @@ int Dot_Coh_TAS::dot_coh_tas_process(QVector <PointRecv> *data_in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (size_t i=0;i<data_input->size();i++)
|
||||||
for (int i=0;i<data_input->size();i++)
|
|
||||||
{
|
{
|
||||||
(*point_recv_tas).push_back((*data_input)[i]);
|
(*point_recv_tas).push_back((*data_input)[i]);
|
||||||
|
RDP_RECORD(RdpRecPointCohesionTAS((*data_input)[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
#ifndef DOT_COH_TAS_H
|
#ifndef DOT_COH_TAS_H
|
||||||
#define DOT_COH_TAS_H
|
#define DOT_COH_TAS_H
|
||||||
#include "parameters.h"
|
#include "parameters.h"
|
||||||
#include "struct.h"
|
#include "struct.h"
|
||||||
#include <QVector>
|
#include <vector>
|
||||||
|
|
||||||
class Dot_Coh_TAS
|
class Dot_Coh_TAS
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// 点迹凝聚函数
|
// 点迹凝聚函数
|
||||||
int dot_coh_tas_process(QVector <PointRecv> *data_input, //输入点迹
|
int dot_coh_tas_process(std::vector <PointRecv> *data_input, //输入点迹
|
||||||
QVector <PointRecv> *point_recv_tas //输出点迹
|
std::vector <PointRecv> *point_recv_tas //输出点迹
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // DOT_COH_TAS_H
|
#endif // DOT_COH_TAS_H
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
[patterns]
|
|
||||||
*.sh = LF
|
|
||||||
*.MINPACK = CRLF
|
|
||||||
scripts/*.in = LF
|
|
||||||
debug/msvc/*.dat = CRLF
|
|
||||||
debug/msvc/*.natvis = CRLF
|
|
||||||
unsupported/test/mpreal/*.* = CRLF
|
|
||||||
** = native
|
|
||||||
|
|
||||||
[repository]
|
|
||||||
native = LF
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
syntax: glob
|
|
||||||
qrc_*cxx
|
|
||||||
*.orig
|
|
||||||
*.pyc
|
|
||||||
*.diff
|
|
||||||
diff
|
|
||||||
*.save
|
|
||||||
save
|
|
||||||
*.old
|
|
||||||
*.gmo
|
|
||||||
*.qm
|
|
||||||
core
|
|
||||||
core.*
|
|
||||||
*.bak
|
|
||||||
*~
|
|
||||||
*build*
|
|
||||||
*.moc.*
|
|
||||||
*.moc
|
|
||||||
ui_*
|
|
||||||
CMakeCache.txt
|
|
||||||
tags
|
|
||||||
.*.swp
|
|
||||||
activity.png
|
|
||||||
*.out
|
|
||||||
*.php*
|
|
||||||
*.log
|
|
||||||
*.orig
|
|
||||||
*.rej
|
|
||||||
log
|
|
||||||
patch
|
|
||||||
a
|
|
||||||
a.*
|
|
||||||
lapack/testing
|
|
||||||
lapack/reference
|
|
||||||
@@ -1,616 +0,0 @@
|
|||||||
project(Eigen3)
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.5)
|
|
||||||
|
|
||||||
# guard against in-source builds
|
|
||||||
|
|
||||||
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
|
||||||
message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Alias Eigen_*_DIR to Eigen3_*_DIR:
|
|
||||||
|
|
||||||
set(Eigen_SOURCE_DIR ${Eigen3_SOURCE_DIR})
|
|
||||||
set(Eigen_BINARY_DIR ${Eigen3_BINARY_DIR})
|
|
||||||
|
|
||||||
# guard against bad build-type strings
|
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE "Release")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_tolower)
|
|
||||||
if( NOT cmake_build_type_tolower STREQUAL "debug"
|
|
||||||
AND NOT cmake_build_type_tolower STREQUAL "release"
|
|
||||||
AND NOT cmake_build_type_tolower STREQUAL "relwithdebinfo")
|
|
||||||
message(FATAL_ERROR "Unknown build type \"${CMAKE_BUILD_TYPE}\". Allowed values are Debug, Release, RelWithDebInfo (case-insensitive).")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# retrieve version infomation #
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
# automatically parse the version number
|
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/Eigen/src/Core/util/Macros.h" _eigen_version_header)
|
|
||||||
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen_world_version_match "${_eigen_version_header}")
|
|
||||||
set(EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}")
|
|
||||||
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen_major_version_match "${_eigen_version_header}")
|
|
||||||
set(EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}")
|
|
||||||
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen_minor_version_match "${_eigen_version_header}")
|
|
||||||
set(EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}")
|
|
||||||
set(EIGEN_VERSION_NUMBER ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})
|
|
||||||
|
|
||||||
# if we are not in a mercurial clone
|
|
||||||
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.hg)
|
|
||||||
# if the mercurial program is absent or this will leave the EIGEN_HG_CHANGESET string empty,
|
|
||||||
# but won't stop CMake.
|
|
||||||
execute_process(COMMAND hg tip -R ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE EIGEN_HGTIP_OUTPUT)
|
|
||||||
execute_process(COMMAND hg branch -R ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE EIGEN_BRANCH_OUTPUT)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# if this is the default (aka development) branch, extract the mercurial changeset number from the hg tip output...
|
|
||||||
if(EIGEN_BRANCH_OUTPUT MATCHES "default")
|
|
||||||
string(REGEX MATCH "^changeset: *[0-9]*:([0-9;a-f]+).*" EIGEN_HG_CHANGESET_MATCH "${EIGEN_HGTIP_OUTPUT}")
|
|
||||||
set(EIGEN_HG_CHANGESET "${CMAKE_MATCH_1}")
|
|
||||||
endif(EIGEN_BRANCH_OUTPUT MATCHES "default")
|
|
||||||
#...and show it next to the version number
|
|
||||||
if(EIGEN_HG_CHANGESET)
|
|
||||||
set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER} (mercurial changeset ${EIGEN_HG_CHANGESET})")
|
|
||||||
else(EIGEN_HG_CHANGESET)
|
|
||||||
set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER}")
|
|
||||||
endif(EIGEN_HG_CHANGESET)
|
|
||||||
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
|
||||||
|
|
||||||
|
|
||||||
option(EIGEN_TEST_CXX11 "Enable testing with C++11 and C++11 features (e.g. Tensor module)." OFF)
|
|
||||||
|
|
||||||
|
|
||||||
macro(ei_add_cxx_compiler_flag FLAG)
|
|
||||||
string(REGEX REPLACE "-" "" SFLAG1 ${FLAG})
|
|
||||||
string(REGEX REPLACE "\\+" "p" SFLAG ${SFLAG1})
|
|
||||||
check_cxx_compiler_flag(${FLAG} COMPILER_SUPPORT_${SFLAG})
|
|
||||||
if(COMPILER_SUPPORT_${SFLAG})
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
|
|
||||||
endif()
|
|
||||||
endmacro(ei_add_cxx_compiler_flag)
|
|
||||||
|
|
||||||
check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11)
|
|
||||||
|
|
||||||
if(EIGEN_TEST_CXX11)
|
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
||||||
if(EIGEN_COMPILER_SUPPORT_CPP11)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
#set(CMAKE_CXX_STANDARD 03)
|
|
||||||
#set(CMAKE_CXX_EXTENSIONS OFF)
|
|
||||||
ei_add_cxx_compiler_flag("-std=c++03")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# find how to link to the standard libraries #
|
|
||||||
#############################################################################
|
|
||||||
|
|
||||||
find_package(StandardMathLibrary)
|
|
||||||
|
|
||||||
|
|
||||||
set(EIGEN_TEST_CUSTOM_LINKER_FLAGS "" CACHE STRING "Additional linker flags when linking unit tests.")
|
|
||||||
set(EIGEN_TEST_CUSTOM_CXX_FLAGS "" CACHE STRING "Additional compiler flags when compiling unit tests.")
|
|
||||||
|
|
||||||
set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "")
|
|
||||||
|
|
||||||
if(NOT STANDARD_MATH_LIBRARY_FOUND)
|
|
||||||
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Can't link to the standard math library. Please report to the Eigen developers, telling them about your platform.")
|
|
||||||
|
|
||||||
else()
|
|
||||||
|
|
||||||
if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
|
|
||||||
set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} ${STANDARD_MATH_LIBRARY}")
|
|
||||||
else()
|
|
||||||
set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${STANDARD_MATH_LIBRARY}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
|
|
||||||
message(STATUS "Standard libraries to link to explicitly: ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}")
|
|
||||||
else()
|
|
||||||
message(STATUS "Standard libraries to link to explicitly: none")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_BUILD_BTL "Build benchmark suite" OFF)
|
|
||||||
|
|
||||||
# Disable pkgconfig only for native Windows builds
|
|
||||||
if(NOT WIN32 OR NOT CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
|
|
||||||
option(EIGEN_BUILD_PKGCONFIG "Build pkg-config .pc file for Eigen" ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
||||||
|
|
||||||
option(EIGEN_SPLIT_LARGE_TESTS "Split large tests into smaller executables" ON)
|
|
||||||
|
|
||||||
option(EIGEN_DEFAULT_TO_ROW_MAJOR "Use row-major as default matrix storage order" OFF)
|
|
||||||
if(EIGEN_DEFAULT_TO_ROW_MAJOR)
|
|
||||||
add_definitions("-DEIGEN_DEFAULT_TO_ROW_MAJOR")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(EIGEN_TEST_MAX_SIZE "320" CACHE STRING "Maximal matrix/vector size, default is 320")
|
|
||||||
|
|
||||||
if(NOT MSVC)
|
|
||||||
# We assume that other compilers are partly compatible with GNUCC
|
|
||||||
|
|
||||||
# clang outputs some warnings for unknown flags that are not caught by check_cxx_compiler_flag
|
|
||||||
# adding -Werror turns such warnings into errors
|
|
||||||
check_cxx_compiler_flag("-Werror" COMPILER_SUPPORT_WERROR)
|
|
||||||
if(COMPILER_SUPPORT_WERROR)
|
|
||||||
set(CMAKE_REQUIRED_FLAGS "-Werror")
|
|
||||||
endif()
|
|
||||||
ei_add_cxx_compiler_flag("-pedantic")
|
|
||||||
ei_add_cxx_compiler_flag("-Wall")
|
|
||||||
ei_add_cxx_compiler_flag("-Wextra")
|
|
||||||
#ei_add_cxx_compiler_flag("-Weverything") # clang
|
|
||||||
|
|
||||||
ei_add_cxx_compiler_flag("-Wundef")
|
|
||||||
ei_add_cxx_compiler_flag("-Wcast-align")
|
|
||||||
ei_add_cxx_compiler_flag("-Wchar-subscripts")
|
|
||||||
ei_add_cxx_compiler_flag("-Wnon-virtual-dtor")
|
|
||||||
ei_add_cxx_compiler_flag("-Wunused-local-typedefs")
|
|
||||||
ei_add_cxx_compiler_flag("-Wpointer-arith")
|
|
||||||
ei_add_cxx_compiler_flag("-Wwrite-strings")
|
|
||||||
ei_add_cxx_compiler_flag("-Wformat-security")
|
|
||||||
ei_add_cxx_compiler_flag("-Wshorten-64-to-32")
|
|
||||||
ei_add_cxx_compiler_flag("-Wlogical-op")
|
|
||||||
ei_add_cxx_compiler_flag("-Wenum-conversion")
|
|
||||||
ei_add_cxx_compiler_flag("-Wc++11-extensions")
|
|
||||||
ei_add_cxx_compiler_flag("-Wdouble-promotion")
|
|
||||||
# ei_add_cxx_compiler_flag("-Wconversion")
|
|
||||||
|
|
||||||
# -Wshadow is insanely too strict with gcc, hopefully it will become usable with gcc 6
|
|
||||||
# if(NOT CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.0.0"))
|
|
||||||
if(NOT CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
ei_add_cxx_compiler_flag("-Wshadow")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ei_add_cxx_compiler_flag("-Wno-psabi")
|
|
||||||
ei_add_cxx_compiler_flag("-Wno-variadic-macros")
|
|
||||||
ei_add_cxx_compiler_flag("-Wno-long-long")
|
|
||||||
|
|
||||||
ei_add_cxx_compiler_flag("-fno-check-new")
|
|
||||||
ei_add_cxx_compiler_flag("-fno-common")
|
|
||||||
ei_add_cxx_compiler_flag("-fstrict-aliasing")
|
|
||||||
ei_add_cxx_compiler_flag("-wd981") # disable ICC's "operands are evaluated in unspecified order" remark
|
|
||||||
ei_add_cxx_compiler_flag("-wd2304") # disable ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor
|
|
||||||
|
|
||||||
|
|
||||||
# The -ansi flag must be added last, otherwise it is also used as a linker flag by check_cxx_compiler_flag making it fails
|
|
||||||
# Moreover we should not set both -strict-ansi and -ansi
|
|
||||||
check_cxx_compiler_flag("-strict-ansi" COMPILER_SUPPORT_STRICTANSI)
|
|
||||||
ei_add_cxx_compiler_flag("-Qunused-arguments") # disable clang warning: argument unused during compilation: '-ansi'
|
|
||||||
|
|
||||||
if(COMPILER_SUPPORT_STRICTANSI)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -strict-ansi")
|
|
||||||
else()
|
|
||||||
ei_add_cxx_compiler_flag("-ansi")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ANDROID_NDK)
|
|
||||||
ei_add_cxx_compiler_flag("-pie")
|
|
||||||
ei_add_cxx_compiler_flag("-fPIE")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_FLAGS "")
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSE2)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
|
|
||||||
message(STATUS "Enabling SSE2 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSE3 "Enable/Disable SSE3 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSE3)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse3")
|
|
||||||
message(STATUS "Enabling SSE3 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSSE3 "Enable/Disable SSSE3 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSSE3)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3")
|
|
||||||
message(STATUS "Enabling SSSE3 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSE4_1 "Enable/Disable SSE4.1 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSE4_1)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
|
|
||||||
message(STATUS "Enabling SSE4.1 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSE4_2 "Enable/Disable SSE4.2 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSE4_2)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
|
|
||||||
message(STATUS "Enabling SSE4.2 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_AVX)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
|
|
||||||
message(STATUS "Enabling AVX in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_FMA "Enable/Disable FMA in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma")
|
|
||||||
message(STATUS "Enabling FMA in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_AVX512 "Enable/Disable AVX512 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_AVX512)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -fabi-version=6 -DEIGEN_ENABLE_AVX512")
|
|
||||||
message(STATUS "Enabling AVX512 in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_F16C "Enable/Disable F16C in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_F16C)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mf16c")
|
|
||||||
message(STATUS "Enabling F16C in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_ALTIVEC "Enable/Disable AltiVec in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_ALTIVEC)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mabi=altivec")
|
|
||||||
message(STATUS "Enabling AltiVec in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_VSX "Enable/Disable VSX in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_VSX)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -mvsx")
|
|
||||||
message(STATUS "Enabling VSX in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_NEON "Enable/Disable Neon in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_NEON)
|
|
||||||
if(EIGEN_TEST_FMA)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-vfpv4")
|
|
||||||
else()
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon")
|
|
||||||
endif()
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard")
|
|
||||||
message(STATUS "Enabling NEON in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_NEON64 "Enable/Disable Neon in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_NEON64)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
||||||
message(STATUS "Enabling NEON in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_ZVECTOR "Enable/Disable S390X(zEC13) ZVECTOR in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_ZVECTOR)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z13 -mzvector")
|
|
||||||
message(STATUS "Enabling S390X(zEC13) ZVECTOR in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
check_cxx_compiler_flag("-fopenmp" COMPILER_SUPPORT_OPENMP)
|
|
||||||
if(COMPILER_SUPPORT_OPENMP)
|
|
||||||
option(EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_OPENMP)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
|
|
||||||
message(STATUS "Enabling OpenMP in tests/examples")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
else(NOT MSVC)
|
|
||||||
|
|
||||||
# C4127 - conditional expression is constant
|
|
||||||
# C4714 - marked as __forceinline not inlined (I failed to deactivate it selectively)
|
|
||||||
# We can disable this warning in the unit tests since it is clear that it occurs
|
|
||||||
# because we are oftentimes returning objects that have a destructor or may
|
|
||||||
# throw exceptions - in particular in the unit tests we are throwing extra many
|
|
||||||
# exceptions to cover indexing errors.
|
|
||||||
# C4505 - unreferenced local function has been removed (impossible to deactive selectively)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /wd4127 /wd4505 /wd4714")
|
|
||||||
|
|
||||||
# replace all /Wx by /W4
|
|
||||||
string(REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
||||||
|
|
||||||
check_cxx_compiler_flag("/openmp" COMPILER_SUPPORT_OPENMP)
|
|
||||||
if(COMPILER_SUPPORT_OPENMP)
|
|
||||||
option(EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_OPENMP)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
|
|
||||||
message(STATUS "Enabling OpenMP in tests/examples")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_SSE2)
|
|
||||||
if(NOT CMAKE_CL_64)
|
|
||||||
# arch is not supported on 64 bit systems, SSE is enabled automatically.
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
|
|
||||||
endif(NOT CMAKE_CL_64)
|
|
||||||
message(STATUS "Enabling SSE2 in tests/examples")
|
|
||||||
endif(EIGEN_TEST_SSE2)
|
|
||||||
endif(NOT MSVC)
|
|
||||||
|
|
||||||
option(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION "Disable explicit vectorization in tests/examples" OFF)
|
|
||||||
option(EIGEN_TEST_X87 "Force using X87 instructions. Implies no vectorization." OFF)
|
|
||||||
option(EIGEN_TEST_32BIT "Force generating 32bit code." OFF)
|
|
||||||
|
|
||||||
if(EIGEN_TEST_X87)
|
|
||||||
set(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION ON)
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=387")
|
|
||||||
message(STATUS "Forcing use of x87 instructions in tests/examples")
|
|
||||||
else()
|
|
||||||
message(STATUS "EIGEN_TEST_X87 ignored on your compiler")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EIGEN_TEST_32BIT)
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
|
|
||||||
message(STATUS "Forcing generation of 32-bit code in tests/examples")
|
|
||||||
else()
|
|
||||||
message(STATUS "EIGEN_TEST_32BIT ignored on your compiler")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION)
|
|
||||||
add_definitions(-DEIGEN_DONT_VECTORIZE=1)
|
|
||||||
message(STATUS "Disabling vectorization in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_NO_EXPLICIT_ALIGNMENT "Disable explicit alignment (hence vectorization) in tests/examples" OFF)
|
|
||||||
if(EIGEN_TEST_NO_EXPLICIT_ALIGNMENT)
|
|
||||||
add_definitions(-DEIGEN_DONT_ALIGN=1)
|
|
||||||
message(STATUS "Disabling alignment in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(EIGEN_TEST_NO_EXCEPTIONS "Disables C++ exceptions" OFF)
|
|
||||||
if(EIGEN_TEST_NO_EXCEPTIONS)
|
|
||||||
ei_add_cxx_compiler_flag("-fno-exceptions")
|
|
||||||
message(STATUS "Disabling exceptions in tests/examples")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(EIGEN_CUDA_COMPUTE_ARCH 30 CACHE STRING "The CUDA compute architecture level to target when compiling CUDA code")
|
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
|
|
||||||
# Backward compatibility support for EIGEN_INCLUDE_INSTALL_DIR
|
|
||||||
if(EIGEN_INCLUDE_INSTALL_DIR)
|
|
||||||
message(WARNING "EIGEN_INCLUDE_INSTALL_DIR is deprecated. Use INCLUDE_INSTALL_DIR instead.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EIGEN_INCLUDE_INSTALL_DIR AND NOT INCLUDE_INSTALL_DIR)
|
|
||||||
set(INCLUDE_INSTALL_DIR ${EIGEN_INCLUDE_INSTALL_DIR}
|
|
||||||
CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen header files are installed")
|
|
||||||
else()
|
|
||||||
set(INCLUDE_INSTALL_DIR
|
|
||||||
"${CMAKE_INSTALL_INCLUDEDIR}/eigen3"
|
|
||||||
CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen header files are installed"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
set(CMAKEPACKAGE_INSTALL_DIR
|
|
||||||
"${CMAKE_INSTALL_DATADIR}/eigen3/cmake"
|
|
||||||
CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where Eigen3Config.cmake is installed"
|
|
||||||
)
|
|
||||||
set(PKGCONFIG_INSTALL_DIR
|
|
||||||
"${CMAKE_INSTALL_DATADIR}/pkgconfig"
|
|
||||||
CACHE PATH "The directory relative to CMAKE_PREFIX_PATH where eigen3.pc is installed"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# similar to set_target_properties but append the property instead of overwriting it
|
|
||||||
macro(ei_add_target_property target prop value)
|
|
||||||
|
|
||||||
get_target_property(previous ${target} ${prop})
|
|
||||||
# if the property wasn't previously set, ${previous} is now "previous-NOTFOUND" which cmake allows catching with plain if()
|
|
||||||
if(NOT previous)
|
|
||||||
set(previous "")
|
|
||||||
endif(NOT previous)
|
|
||||||
set_target_properties(${target} PROPERTIES ${prop} "${previous} ${value}")
|
|
||||||
endmacro(ei_add_target_property)
|
|
||||||
|
|
||||||
install(FILES
|
|
||||||
signature_of_eigen3_matrix_library
|
|
||||||
DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel
|
|
||||||
)
|
|
||||||
|
|
||||||
if(EIGEN_BUILD_PKGCONFIG)
|
|
||||||
configure_file(eigen3.pc.in eigen3.pc @ONLY)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eigen3.pc
|
|
||||||
DESTINATION ${PKGCONFIG_INSTALL_DIR}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(Eigen)
|
|
||||||
|
|
||||||
add_subdirectory(doc EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
option(BUILD_TESTING "Enable creation of Eigen tests." ON)
|
|
||||||
if(BUILD_TESTING)
|
|
||||||
include(EigenConfigureTesting)
|
|
||||||
|
|
||||||
if(EIGEN_LEAVE_TEST_IN_ALL_TARGET)
|
|
||||||
add_subdirectory(test) # can't do EXCLUDE_FROM_ALL here, breaks CTest
|
|
||||||
else()
|
|
||||||
add_subdirectory(test EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EIGEN_LEAVE_TEST_IN_ALL_TARGET)
|
|
||||||
add_subdirectory(blas)
|
|
||||||
add_subdirectory(lapack)
|
|
||||||
else()
|
|
||||||
add_subdirectory(blas EXCLUDE_FROM_ALL)
|
|
||||||
add_subdirectory(lapack EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# add SYCL
|
|
||||||
option(EIGEN_TEST_SYCL "Add Sycl support." OFF)
|
|
||||||
if(EIGEN_TEST_SYCL)
|
|
||||||
set (CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" "cmake/Modules/" "${CMAKE_MODULE_PATH}")
|
|
||||||
include(FindComputeCpp)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(unsupported)
|
|
||||||
|
|
||||||
add_subdirectory(demos EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
# must be after test and unsupported, for configuring buildtests.in
|
|
||||||
add_subdirectory(scripts EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
# TODO: consider also replacing EIGEN_BUILD_BTL by a custom target "make btl"?
|
|
||||||
if(EIGEN_BUILD_BTL)
|
|
||||||
add_subdirectory(bench/btl EXCLUDE_FROM_ALL)
|
|
||||||
endif(EIGEN_BUILD_BTL)
|
|
||||||
|
|
||||||
if(NOT WIN32)
|
|
||||||
add_subdirectory(bench/spbench EXCLUDE_FROM_ALL)
|
|
||||||
endif(NOT WIN32)
|
|
||||||
|
|
||||||
configure_file(scripts/cdashtesting.cmake.in cdashtesting.cmake @ONLY)
|
|
||||||
|
|
||||||
if(BUILD_TESTING)
|
|
||||||
ei_testing_print_summary()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "")
|
|
||||||
message(STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}")
|
|
||||||
message(STATUS "")
|
|
||||||
|
|
||||||
option(EIGEN_FAILTEST "Enable failtests." OFF)
|
|
||||||
if(EIGEN_FAILTEST)
|
|
||||||
add_subdirectory(failtest)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_tolower)
|
|
||||||
if(cmake_generator_tolower MATCHES "makefile")
|
|
||||||
message(STATUS "Some things you can do now:")
|
|
||||||
message(STATUS "--------------+--------------------------------------------------------------")
|
|
||||||
message(STATUS "Command | Description")
|
|
||||||
message(STATUS "--------------+--------------------------------------------------------------")
|
|
||||||
message(STATUS "make install | Install Eigen. Headers will be installed to:")
|
|
||||||
message(STATUS " | <CMAKE_INSTALL_PREFIX>/<INCLUDE_INSTALL_DIR>")
|
|
||||||
message(STATUS " | Using the following values:")
|
|
||||||
message(STATUS " | CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
|
|
||||||
message(STATUS " | INCLUDE_INSTALL_DIR: ${INCLUDE_INSTALL_DIR}")
|
|
||||||
message(STATUS " | Change the install location of Eigen headers using:")
|
|
||||||
message(STATUS " | cmake . -DCMAKE_INSTALL_PREFIX=yourprefix")
|
|
||||||
message(STATUS " | Or:")
|
|
||||||
message(STATUS " | cmake . -DINCLUDE_INSTALL_DIR=yourdir")
|
|
||||||
message(STATUS "make doc | Generate the API documentation, requires Doxygen & LaTeX")
|
|
||||||
message(STATUS "make check | Build and run the unit-tests. Read this page:")
|
|
||||||
message(STATUS " | http://eigen.tuxfamily.org/index.php?title=Tests")
|
|
||||||
message(STATUS "make blas | Build BLAS library (not the same thing as Eigen)")
|
|
||||||
message(STATUS "make uninstall| Removes files installed by make install")
|
|
||||||
message(STATUS "--------------+--------------------------------------------------------------")
|
|
||||||
else()
|
|
||||||
message(STATUS "To build/run the unit tests, read this page:")
|
|
||||||
message(STATUS " http://eigen.tuxfamily.org/index.php?title=Tests")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "")
|
|
||||||
|
|
||||||
|
|
||||||
set ( EIGEN_VERSION_STRING ${EIGEN_VERSION_NUMBER} )
|
|
||||||
set ( EIGEN_VERSION_MAJOR ${EIGEN_WORLD_VERSION} )
|
|
||||||
set ( EIGEN_VERSION_MINOR ${EIGEN_MAJOR_VERSION} )
|
|
||||||
set ( EIGEN_VERSION_PATCH ${EIGEN_MINOR_VERSION} )
|
|
||||||
set ( EIGEN_DEFINITIONS "")
|
|
||||||
set ( EIGEN_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}" )
|
|
||||||
set ( EIGEN_ROOT_DIR ${CMAKE_INSTALL_PREFIX} )
|
|
||||||
|
|
||||||
# Interface libraries require at least CMake 3.0
|
|
||||||
if (NOT CMAKE_VERSION VERSION_LESS 3.0)
|
|
||||||
include (CMakePackageConfigHelpers)
|
|
||||||
|
|
||||||
# Imported target support
|
|
||||||
add_library (eigen INTERFACE)
|
|
||||||
|
|
||||||
target_compile_definitions (eigen INTERFACE ${EIGEN_DEFINITIONS})
|
|
||||||
target_include_directories (eigen INTERFACE
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
|
||||||
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
|
|
||||||
)
|
|
||||||
|
|
||||||
# Export as title case Eigen
|
|
||||||
set_target_properties (eigen PROPERTIES EXPORT_NAME Eigen)
|
|
||||||
|
|
||||||
install (TARGETS eigen EXPORT Eigen3Targets)
|
|
||||||
|
|
||||||
configure_package_config_file (
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Eigen3Config.cmake.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
|
|
||||||
PATH_VARS EIGEN_INCLUDE_DIR EIGEN_ROOT_DIR
|
|
||||||
INSTALL_DESTINATION ${CMAKEPACKAGE_INSTALL_DIR}
|
|
||||||
NO_CHECK_REQUIRED_COMPONENTS_MACRO # Eigen does not provide components
|
|
||||||
)
|
|
||||||
# Remove CMAKE_SIZEOF_VOID_P from Eigen3ConfigVersion.cmake since Eigen does
|
|
||||||
# not depend on architecture specific settings or libraries. More
|
|
||||||
# specifically, an Eigen3Config.cmake generated from a 64 bit target can be
|
|
||||||
# used for 32 bit targets as well (and vice versa).
|
|
||||||
set (_Eigen3_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
|
|
||||||
unset (CMAKE_SIZEOF_VOID_P)
|
|
||||||
write_basic_package_version_file (Eigen3ConfigVersion.cmake
|
|
||||||
VERSION ${EIGEN_VERSION_NUMBER}
|
|
||||||
COMPATIBILITY SameMajorVersion)
|
|
||||||
set (CMAKE_SIZEOF_VOID_P ${_Eigen3_CMAKE_SIZEOF_VOID_P})
|
|
||||||
|
|
||||||
# The Eigen target will be located in the Eigen3 namespace. Other CMake
|
|
||||||
# targets can refer to it using Eigen3::Eigen.
|
|
||||||
export (TARGETS eigen NAMESPACE Eigen3:: FILE Eigen3Targets.cmake)
|
|
||||||
# Export Eigen3 package to CMake registry such that it can be easily found by
|
|
||||||
# CMake even if it has not been installed to a standard directory.
|
|
||||||
export (PACKAGE Eigen3)
|
|
||||||
|
|
||||||
install (EXPORT Eigen3Targets NAMESPACE Eigen3:: DESTINATION ${CMAKEPACKAGE_INSTALL_DIR})
|
|
||||||
|
|
||||||
else (NOT CMAKE_VERSION VERSION_LESS 3.0)
|
|
||||||
# Fallback to legacy Eigen3Config.cmake without the imported target
|
|
||||||
|
|
||||||
# If CMakePackageConfigHelpers module is available (CMake >= 2.8.8)
|
|
||||||
# create a relocatable Config file, otherwise leave the hardcoded paths
|
|
||||||
include(CMakePackageConfigHelpers OPTIONAL RESULT_VARIABLE CPCH_PATH)
|
|
||||||
|
|
||||||
if(CPCH_PATH)
|
|
||||||
configure_package_config_file (
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Eigen3ConfigLegacy.cmake.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
|
|
||||||
PATH_VARS EIGEN_INCLUDE_DIR EIGEN_ROOT_DIR
|
|
||||||
INSTALL_DESTINATION ${CMAKEPACKAGE_INSTALL_DIR}
|
|
||||||
NO_CHECK_REQUIRED_COMPONENTS_MACRO # Eigen does not provide components
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
# The PACKAGE_* variables are defined by the configure_package_config_file
|
|
||||||
# but without it we define them manually to the hardcoded paths
|
|
||||||
set(PACKAGE_INIT "")
|
|
||||||
set(PACKAGE_EIGEN_INCLUDE_DIR ${EIGEN_INCLUDE_DIR})
|
|
||||||
set(PACKAGE_EIGEN_ROOT_DIR ${EIGEN_ROOT_DIR})
|
|
||||||
configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Eigen3ConfigLegacy.cmake.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
|
|
||||||
@ONLY ESCAPE_QUOTES )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
write_basic_package_version_file( Eigen3ConfigVersion.cmake
|
|
||||||
VERSION ${EIGEN_VERSION_NUMBER}
|
|
||||||
COMPATIBILITY SameMajorVersion )
|
|
||||||
|
|
||||||
endif (NOT CMAKE_VERSION VERSION_LESS 3.0)
|
|
||||||
|
|
||||||
install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/UseEigen3.cmake
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/Eigen3ConfigVersion.cmake
|
|
||||||
DESTINATION ${CMAKEPACKAGE_INSTALL_DIR} )
|
|
||||||
|
|
||||||
# Add uninstall target
|
|
||||||
add_custom_target ( uninstall
|
|
||||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/EigenUninstall.cmake)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2011, Intel Corporation. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Intel Corporation nor the names of its contributors may
|
|
||||||
be used to endorse or promote products derived from this software without
|
|
||||||
specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
@@ -1,674 +0,0 @@
|
|||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
|
||||||
GNU General Public License for most of our software; it applies also to
|
|
||||||
any other work released this way by its authors. You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program does terminal interaction, make it output a short
|
|
||||||
notice like this when it starts in an interactive mode:
|
|
||||||
|
|
||||||
<program> Copyright (C) <year> <name of author>
|
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, your program's commands
|
|
||||||
might be different; for a GUI interface, you would use an "about box".
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
|
||||||
may consider it more useful to permit linking proprietary applications with
|
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License. But first, please read
|
|
||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
||||||
@@ -1,502 +0,0 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
Version 2.1, February 1999
|
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
|
||||||
specially designated software packages--typically libraries--of the
|
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
|
||||||
rights. These restrictions translate to certain responsibilities for
|
|
||||||
you if you distribute copies of the library or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link other code with the library, you must provide
|
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
|
||||||
library, and (2) we offer you this license, which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
|
||||||
there is no warranty for the free library. Also, if the library is
|
|
||||||
modified by someone else and passed on, the recipients should know
|
|
||||||
that what they have is not the original version, so that the original
|
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
|
||||||
a shared library, the combination of the two is legally speaking a
|
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
|
||||||
allowed to use the library. A more frequent case is that a free
|
|
||||||
library does the same job as widely used non-free libraries. In this
|
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
|
||||||
programs enables a greater number of people to use a large body of
|
|
||||||
free software. For example, permission to use the GNU C Library in
|
|
||||||
non-free programs enables many more people to use the whole GNU
|
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
|
||||||
users' freedom, it does ensure that the user of a program that is
|
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
|
||||||
program which contains a notice placed by the copyright holder or
|
|
||||||
other authorized party saying it may be distributed under the terms of
|
|
||||||
this Lesser General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
Minpack Copyright Notice (1999) University of Chicago. All rights reserved
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or
|
|
||||||
without modification, are permitted provided that the
|
|
||||||
following conditions are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer in the documentation and/or other materials
|
|
||||||
provided with the distribution.
|
|
||||||
|
|
||||||
3. The end-user documentation included with the
|
|
||||||
redistribution, if any, must include the following
|
|
||||||
acknowledgment:
|
|
||||||
|
|
||||||
"This product includes software developed by the
|
|
||||||
University of Chicago, as Operator of Argonne National
|
|
||||||
Laboratory.
|
|
||||||
|
|
||||||
Alternately, this acknowledgment may appear in the software
|
|
||||||
itself, if and wherever such third-party acknowledgments
|
|
||||||
normally appear.
|
|
||||||
|
|
||||||
4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
|
|
||||||
WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
|
|
||||||
UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
|
|
||||||
THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
|
|
||||||
OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
|
|
||||||
OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
|
|
||||||
USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
|
|
||||||
THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
|
|
||||||
DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
|
|
||||||
UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
|
|
||||||
BE CORRECTED.
|
|
||||||
|
|
||||||
5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
|
|
||||||
HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
|
|
||||||
ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
|
|
||||||
INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
|
|
||||||
ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
|
|
||||||
SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
|
|
||||||
EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
|
|
||||||
POSSIBILITY OF SUCH LOSS OR DAMAGES.
|
|
||||||
|
|
||||||
@@ -1,373 +0,0 @@
|
|||||||
Mozilla Public License Version 2.0
|
|
||||||
==================================
|
|
||||||
|
|
||||||
1. Definitions
|
|
||||||
--------------
|
|
||||||
|
|
||||||
1.1. "Contributor"
|
|
||||||
means each individual or legal entity that creates, contributes to
|
|
||||||
the creation of, or owns Covered Software.
|
|
||||||
|
|
||||||
1.2. "Contributor Version"
|
|
||||||
means the combination of the Contributions of others (if any) used
|
|
||||||
by a Contributor and that particular Contributor's Contribution.
|
|
||||||
|
|
||||||
1.3. "Contribution"
|
|
||||||
means Covered Software of a particular Contributor.
|
|
||||||
|
|
||||||
1.4. "Covered Software"
|
|
||||||
means Source Code Form to which the initial Contributor has attached
|
|
||||||
the notice in Exhibit A, the Executable Form of such Source Code
|
|
||||||
Form, and Modifications of such Source Code Form, in each case
|
|
||||||
including portions thereof.
|
|
||||||
|
|
||||||
1.5. "Incompatible With Secondary Licenses"
|
|
||||||
means
|
|
||||||
|
|
||||||
(a) that the initial Contributor has attached the notice described
|
|
||||||
in Exhibit B to the Covered Software; or
|
|
||||||
|
|
||||||
(b) that the Covered Software was made available under the terms of
|
|
||||||
version 1.1 or earlier of the License, but not also under the
|
|
||||||
terms of a Secondary License.
|
|
||||||
|
|
||||||
1.6. "Executable Form"
|
|
||||||
means any form of the work other than Source Code Form.
|
|
||||||
|
|
||||||
1.7. "Larger Work"
|
|
||||||
means a work that combines Covered Software with other material, in
|
|
||||||
a separate file or files, that is not Covered Software.
|
|
||||||
|
|
||||||
1.8. "License"
|
|
||||||
means this document.
|
|
||||||
|
|
||||||
1.9. "Licensable"
|
|
||||||
means having the right to grant, to the maximum extent possible,
|
|
||||||
whether at the time of the initial grant or subsequently, any and
|
|
||||||
all of the rights conveyed by this License.
|
|
||||||
|
|
||||||
1.10. "Modifications"
|
|
||||||
means any of the following:
|
|
||||||
|
|
||||||
(a) any file in Source Code Form that results from an addition to,
|
|
||||||
deletion from, or modification of the contents of Covered
|
|
||||||
Software; or
|
|
||||||
|
|
||||||
(b) any new file in Source Code Form that contains any Covered
|
|
||||||
Software.
|
|
||||||
|
|
||||||
1.11. "Patent Claims" of a Contributor
|
|
||||||
means any patent claim(s), including without limitation, method,
|
|
||||||
process, and apparatus claims, in any patent Licensable by such
|
|
||||||
Contributor that would be infringed, but for the grant of the
|
|
||||||
License, by the making, using, selling, offering for sale, having
|
|
||||||
made, import, or transfer of either its Contributions or its
|
|
||||||
Contributor Version.
|
|
||||||
|
|
||||||
1.12. "Secondary License"
|
|
||||||
means either the GNU General Public License, Version 2.0, the GNU
|
|
||||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
|
||||||
Public License, Version 3.0, or any later versions of those
|
|
||||||
licenses.
|
|
||||||
|
|
||||||
1.13. "Source Code Form"
|
|
||||||
means the form of the work preferred for making modifications.
|
|
||||||
|
|
||||||
1.14. "You" (or "Your")
|
|
||||||
means an individual or a legal entity exercising rights under this
|
|
||||||
License. For legal entities, "You" includes any entity that
|
|
||||||
controls, is controlled by, or is under common control with You. For
|
|
||||||
purposes of this definition, "control" means (a) the power, direct
|
|
||||||
or indirect, to cause the direction or management of such entity,
|
|
||||||
whether by contract or otherwise, or (b) ownership of more than
|
|
||||||
fifty percent (50%) of the outstanding shares or beneficial
|
|
||||||
ownership of such entity.
|
|
||||||
|
|
||||||
2. License Grants and Conditions
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
2.1. Grants
|
|
||||||
|
|
||||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
|
||||||
non-exclusive license:
|
|
||||||
|
|
||||||
(a) under intellectual property rights (other than patent or trademark)
|
|
||||||
Licensable by such Contributor to use, reproduce, make available,
|
|
||||||
modify, display, perform, distribute, and otherwise exploit its
|
|
||||||
Contributions, either on an unmodified basis, with Modifications, or
|
|
||||||
as part of a Larger Work; and
|
|
||||||
|
|
||||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
|
||||||
for sale, have made, import, and otherwise transfer either its
|
|
||||||
Contributions or its Contributor Version.
|
|
||||||
|
|
||||||
2.2. Effective Date
|
|
||||||
|
|
||||||
The licenses granted in Section 2.1 with respect to any Contribution
|
|
||||||
become effective for each Contribution on the date the Contributor first
|
|
||||||
distributes such Contribution.
|
|
||||||
|
|
||||||
2.3. Limitations on Grant Scope
|
|
||||||
|
|
||||||
The licenses granted in this Section 2 are the only rights granted under
|
|
||||||
this License. No additional rights or licenses will be implied from the
|
|
||||||
distribution or licensing of Covered Software under this License.
|
|
||||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
|
||||||
Contributor:
|
|
||||||
|
|
||||||
(a) for any code that a Contributor has removed from Covered Software;
|
|
||||||
or
|
|
||||||
|
|
||||||
(b) for infringements caused by: (i) Your and any other third party's
|
|
||||||
modifications of Covered Software, or (ii) the combination of its
|
|
||||||
Contributions with other software (except as part of its Contributor
|
|
||||||
Version); or
|
|
||||||
|
|
||||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
|
||||||
its Contributions.
|
|
||||||
|
|
||||||
This License does not grant any rights in the trademarks, service marks,
|
|
||||||
or logos of any Contributor (except as may be necessary to comply with
|
|
||||||
the notice requirements in Section 3.4).
|
|
||||||
|
|
||||||
2.4. Subsequent Licenses
|
|
||||||
|
|
||||||
No Contributor makes additional grants as a result of Your choice to
|
|
||||||
distribute the Covered Software under a subsequent version of this
|
|
||||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
|
||||||
permitted under the terms of Section 3.3).
|
|
||||||
|
|
||||||
2.5. Representation
|
|
||||||
|
|
||||||
Each Contributor represents that the Contributor believes its
|
|
||||||
Contributions are its original creation(s) or it has sufficient rights
|
|
||||||
to grant the rights to its Contributions conveyed by this License.
|
|
||||||
|
|
||||||
2.6. Fair Use
|
|
||||||
|
|
||||||
This License is not intended to limit any rights You have under
|
|
||||||
applicable copyright doctrines of fair use, fair dealing, or other
|
|
||||||
equivalents.
|
|
||||||
|
|
||||||
2.7. Conditions
|
|
||||||
|
|
||||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
|
||||||
in Section 2.1.
|
|
||||||
|
|
||||||
3. Responsibilities
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
3.1. Distribution of Source Form
|
|
||||||
|
|
||||||
All distribution of Covered Software in Source Code Form, including any
|
|
||||||
Modifications that You create or to which You contribute, must be under
|
|
||||||
the terms of this License. You must inform recipients that the Source
|
|
||||||
Code Form of the Covered Software is governed by the terms of this
|
|
||||||
License, and how they can obtain a copy of this License. You may not
|
|
||||||
attempt to alter or restrict the recipients' rights in the Source Code
|
|
||||||
Form.
|
|
||||||
|
|
||||||
3.2. Distribution of Executable Form
|
|
||||||
|
|
||||||
If You distribute Covered Software in Executable Form then:
|
|
||||||
|
|
||||||
(a) such Covered Software must also be made available in Source Code
|
|
||||||
Form, as described in Section 3.1, and You must inform recipients of
|
|
||||||
the Executable Form how they can obtain a copy of such Source Code
|
|
||||||
Form by reasonable means in a timely manner, at a charge no more
|
|
||||||
than the cost of distribution to the recipient; and
|
|
||||||
|
|
||||||
(b) You may distribute such Executable Form under the terms of this
|
|
||||||
License, or sublicense it under different terms, provided that the
|
|
||||||
license for the Executable Form does not attempt to limit or alter
|
|
||||||
the recipients' rights in the Source Code Form under this License.
|
|
||||||
|
|
||||||
3.3. Distribution of a Larger Work
|
|
||||||
|
|
||||||
You may create and distribute a Larger Work under terms of Your choice,
|
|
||||||
provided that You also comply with the requirements of this License for
|
|
||||||
the Covered Software. If the Larger Work is a combination of Covered
|
|
||||||
Software with a work governed by one or more Secondary Licenses, and the
|
|
||||||
Covered Software is not Incompatible With Secondary Licenses, this
|
|
||||||
License permits You to additionally distribute such Covered Software
|
|
||||||
under the terms of such Secondary License(s), so that the recipient of
|
|
||||||
the Larger Work may, at their option, further distribute the Covered
|
|
||||||
Software under the terms of either this License or such Secondary
|
|
||||||
License(s).
|
|
||||||
|
|
||||||
3.4. Notices
|
|
||||||
|
|
||||||
You may not remove or alter the substance of any license notices
|
|
||||||
(including copyright notices, patent notices, disclaimers of warranty,
|
|
||||||
or limitations of liability) contained within the Source Code Form of
|
|
||||||
the Covered Software, except that You may alter any license notices to
|
|
||||||
the extent required to remedy known factual inaccuracies.
|
|
||||||
|
|
||||||
3.5. Application of Additional Terms
|
|
||||||
|
|
||||||
You may choose to offer, and to charge a fee for, warranty, support,
|
|
||||||
indemnity or liability obligations to one or more recipients of Covered
|
|
||||||
Software. However, You may do so only on Your own behalf, and not on
|
|
||||||
behalf of any Contributor. You must make it absolutely clear that any
|
|
||||||
such warranty, support, indemnity, or liability obligation is offered by
|
|
||||||
You alone, and You hereby agree to indemnify every Contributor for any
|
|
||||||
liability incurred by such Contributor as a result of warranty, support,
|
|
||||||
indemnity or liability terms You offer. You may include additional
|
|
||||||
disclaimers of warranty and limitations of liability specific to any
|
|
||||||
jurisdiction.
|
|
||||||
|
|
||||||
4. Inability to Comply Due to Statute or Regulation
|
|
||||||
---------------------------------------------------
|
|
||||||
|
|
||||||
If it is impossible for You to comply with any of the terms of this
|
|
||||||
License with respect to some or all of the Covered Software due to
|
|
||||||
statute, judicial order, or regulation then You must: (a) comply with
|
|
||||||
the terms of this License to the maximum extent possible; and (b)
|
|
||||||
describe the limitations and the code they affect. Such description must
|
|
||||||
be placed in a text file included with all distributions of the Covered
|
|
||||||
Software under this License. Except to the extent prohibited by statute
|
|
||||||
or regulation, such description must be sufficiently detailed for a
|
|
||||||
recipient of ordinary skill to be able to understand it.
|
|
||||||
|
|
||||||
5. Termination
|
|
||||||
--------------
|
|
||||||
|
|
||||||
5.1. The rights granted under this License will terminate automatically
|
|
||||||
if You fail to comply with any of its terms. However, if You become
|
|
||||||
compliant, then the rights granted under this License from a particular
|
|
||||||
Contributor are reinstated (a) provisionally, unless and until such
|
|
||||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
|
||||||
ongoing basis, if such Contributor fails to notify You of the
|
|
||||||
non-compliance by some reasonable means prior to 60 days after You have
|
|
||||||
come back into compliance. Moreover, Your grants from a particular
|
|
||||||
Contributor are reinstated on an ongoing basis if such Contributor
|
|
||||||
notifies You of the non-compliance by some reasonable means, this is the
|
|
||||||
first time You have received notice of non-compliance with this License
|
|
||||||
from such Contributor, and You become compliant prior to 30 days after
|
|
||||||
Your receipt of the notice.
|
|
||||||
|
|
||||||
5.2. If You initiate litigation against any entity by asserting a patent
|
|
||||||
infringement claim (excluding declaratory judgment actions,
|
|
||||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
|
||||||
directly or indirectly infringes any patent, then the rights granted to
|
|
||||||
You by any and all Contributors for the Covered Software under Section
|
|
||||||
2.1 of this License shall terminate.
|
|
||||||
|
|
||||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
|
||||||
end user license agreements (excluding distributors and resellers) which
|
|
||||||
have been validly granted by You or Your distributors under this License
|
|
||||||
prior to termination shall survive termination.
|
|
||||||
|
|
||||||
************************************************************************
|
|
||||||
* *
|
|
||||||
* 6. Disclaimer of Warranty *
|
|
||||||
* ------------------------- *
|
|
||||||
* *
|
|
||||||
* Covered Software is provided under this License on an "as is" *
|
|
||||||
* basis, without warranty of any kind, either expressed, implied, or *
|
|
||||||
* statutory, including, without limitation, warranties that the *
|
|
||||||
* Covered Software is free of defects, merchantable, fit for a *
|
|
||||||
* particular purpose or non-infringing. The entire risk as to the *
|
|
||||||
* quality and performance of the Covered Software is with You. *
|
|
||||||
* Should any Covered Software prove defective in any respect, You *
|
|
||||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
|
||||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
|
||||||
* essential part of this License. No use of any Covered Software is *
|
|
||||||
* authorized under this License except under this disclaimer. *
|
|
||||||
* *
|
|
||||||
************************************************************************
|
|
||||||
|
|
||||||
************************************************************************
|
|
||||||
* *
|
|
||||||
* 7. Limitation of Liability *
|
|
||||||
* -------------------------- *
|
|
||||||
* *
|
|
||||||
* Under no circumstances and under no legal theory, whether tort *
|
|
||||||
* (including negligence), contract, or otherwise, shall any *
|
|
||||||
* Contributor, or anyone who distributes Covered Software as *
|
|
||||||
* permitted above, be liable to You for any direct, indirect, *
|
|
||||||
* special, incidental, or consequential damages of any character *
|
|
||||||
* including, without limitation, damages for lost profits, loss of *
|
|
||||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
|
||||||
* and all other commercial damages or losses, even if such party *
|
|
||||||
* shall have been informed of the possibility of such damages. This *
|
|
||||||
* limitation of liability shall not apply to liability for death or *
|
|
||||||
* personal injury resulting from such party's negligence to the *
|
|
||||||
* extent applicable law prohibits such limitation. Some *
|
|
||||||
* jurisdictions do not allow the exclusion or limitation of *
|
|
||||||
* incidental or consequential damages, so this exclusion and *
|
|
||||||
* limitation may not apply to You. *
|
|
||||||
* *
|
|
||||||
************************************************************************
|
|
||||||
|
|
||||||
8. Litigation
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Any litigation relating to this License may be brought only in the
|
|
||||||
courts of a jurisdiction where the defendant maintains its principal
|
|
||||||
place of business and such litigation shall be governed by laws of that
|
|
||||||
jurisdiction, without reference to its conflict-of-law provisions.
|
|
||||||
Nothing in this Section shall prevent a party's ability to bring
|
|
||||||
cross-claims or counter-claims.
|
|
||||||
|
|
||||||
9. Miscellaneous
|
|
||||||
----------------
|
|
||||||
|
|
||||||
This License represents the complete agreement concerning the subject
|
|
||||||
matter hereof. If any provision of this License is held to be
|
|
||||||
unenforceable, such provision shall be reformed only to the extent
|
|
||||||
necessary to make it enforceable. Any law or regulation which provides
|
|
||||||
that the language of a contract shall be construed against the drafter
|
|
||||||
shall not be used to construe this License against a Contributor.
|
|
||||||
|
|
||||||
10. Versions of the License
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
10.1. New Versions
|
|
||||||
|
|
||||||
Mozilla Foundation is the license steward. Except as provided in Section
|
|
||||||
10.3, no one other than the license steward has the right to modify or
|
|
||||||
publish new versions of this License. Each version will be given a
|
|
||||||
distinguishing version number.
|
|
||||||
|
|
||||||
10.2. Effect of New Versions
|
|
||||||
|
|
||||||
You may distribute the Covered Software under the terms of the version
|
|
||||||
of the License under which You originally received the Covered Software,
|
|
||||||
or under the terms of any subsequent version published by the license
|
|
||||||
steward.
|
|
||||||
|
|
||||||
10.3. Modified Versions
|
|
||||||
|
|
||||||
If you create software not governed by this License, and you want to
|
|
||||||
create a new license for such software, you may create and use a
|
|
||||||
modified version of this License if you rename the license and remove
|
|
||||||
any references to the name of the license steward (except to note that
|
|
||||||
such modified license differs from this License).
|
|
||||||
|
|
||||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
|
||||||
Licenses
|
|
||||||
|
|
||||||
If You choose to distribute Source Code Form that is Incompatible With
|
|
||||||
Secondary Licenses under the terms of this version of the License, the
|
|
||||||
notice described in Exhibit B of this License must be attached.
|
|
||||||
|
|
||||||
Exhibit A - Source Code Form License Notice
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
If it is not possible or desirable to put the notice in a particular
|
|
||||||
file, then You may include the notice in a location (such as a LICENSE
|
|
||||||
file in a relevant directory) where a recipient would be likely to look
|
|
||||||
for such a notice.
|
|
||||||
|
|
||||||
You may add additional accurate notices of copyright ownership.
|
|
||||||
|
|
||||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
|
||||||
---------------------------------------------------------
|
|
||||||
|
|
||||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
||||||
defined by the Mozilla Public License, v. 2.0.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
Eigen is primarily MPL2 licensed. See COPYING.MPL2 and these links:
|
|
||||||
http://www.mozilla.org/MPL/2.0/
|
|
||||||
http://www.mozilla.org/MPL/2.0/FAQ.html
|
|
||||||
|
|
||||||
Some files contain third-party code under BSD or LGPL licenses, whence the other
|
|
||||||
COPYING.* files here.
|
|
||||||
|
|
||||||
All the LGPL code is either LGPL 2.1-only, or LGPL 2.1-or-later.
|
|
||||||
For this reason, the COPYING.LGPL file contains the LGPL 2.1 text.
|
|
||||||
|
|
||||||
If you want to guarantee that the Eigen code that you are #including is licensed
|
|
||||||
under the MPL2 and possibly more permissive licenses (like BSD), #define this
|
|
||||||
preprocessor symbol:
|
|
||||||
EIGEN_MPL2_ONLY
|
|
||||||
For example, with most compilers, you could add this to your project CXXFLAGS:
|
|
||||||
-DEIGEN_MPL2_ONLY
|
|
||||||
This will cause a compilation error to be generated if you #include any code that is
|
|
||||||
LGPL licensed.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
## This file should be placed in the root directory of your project.
|
|
||||||
## Then modify the CMakeLists.txt file in the root directory of your
|
|
||||||
## project to incorporate the testing dashboard.
|
|
||||||
## # The following are required to uses Dart and the Cdash dashboard
|
|
||||||
## ENABLE_TESTING()
|
|
||||||
## INCLUDE(CTest)
|
|
||||||
set(CTEST_PROJECT_NAME "Eigen 3.3")
|
|
||||||
set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
|
|
||||||
|
|
||||||
set(CTEST_DROP_METHOD "http")
|
|
||||||
set(CTEST_DROP_SITE "manao.inria.fr")
|
|
||||||
set(CTEST_DROP_LOCATION "/CDash/submit.php?project=Eigen+3.3")
|
|
||||||
set(CTEST_DROP_SITE_CDASH TRUE)
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "2000")
|
|
||||||
set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "2000")
|
|
||||||
list(APPEND CTEST_CUSTOM_ERROR_EXCEPTION @EIGEN_CTEST_ERROR_EXCEPTION@)
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
include(RegexUtils)
|
|
||||||
test_escape_string_as_regex()
|
|
||||||
|
|
||||||
file(GLOB Eigen_directory_files "*")
|
|
||||||
|
|
||||||
escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
||||||
|
|
||||||
foreach(f ${Eigen_directory_files})
|
|
||||||
if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src")
|
|
||||||
list(APPEND Eigen_directory_files_to_install ${f})
|
|
||||||
endif()
|
|
||||||
endforeach(f ${Eigen_directory_files})
|
|
||||||
|
|
||||||
install(FILES
|
|
||||||
${Eigen_directory_files_to_install}
|
|
||||||
DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel
|
|
||||||
)
|
|
||||||
|
|
||||||
install(DIRECTORY src DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel FILES_MATCHING PATTERN "*.h")
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_CHOLESKY_MODULE_H
|
|
||||||
#define EIGEN_CHOLESKY_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
#include "Jacobi"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup Cholesky_Module Cholesky module
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This module provides two variants of the Cholesky decomposition for selfadjoint (hermitian) matrices.
|
|
||||||
* Those decompositions are also accessible via the following methods:
|
|
||||||
* - MatrixBase::llt()
|
|
||||||
* - MatrixBase::ldlt()
|
|
||||||
* - SelfAdjointView::llt()
|
|
||||||
* - SelfAdjointView::ldlt()
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Cholesky>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/Cholesky/LLT.h"
|
|
||||||
#include "src/Cholesky/LDLT.h"
|
|
||||||
#ifdef EIGEN_USE_LAPACKE
|
|
||||||
#ifdef EIGEN_USE_MKL
|
|
||||||
#include "mkl_lapacke.h"
|
|
||||||
#else
|
|
||||||
#include "src/misc/lapacke.h"
|
|
||||||
#endif
|
|
||||||
#include "src/Cholesky/LLT_LAPACKE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_CHOLESKY_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_CHOLMODSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <cholmod.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup CholmodSupport_Module CholmodSupport module
|
|
||||||
*
|
|
||||||
* This module provides an interface to the Cholmod library which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
|
||||||
* It provides the two following main factorization classes:
|
|
||||||
* - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization.
|
|
||||||
* - class CholmodDecomposiiton: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of the underlying factorization method (supernodal or simplicial).
|
|
||||||
*
|
|
||||||
* For the sake of completeness, this module also propose the two following classes:
|
|
||||||
* - class CholmodSimplicialLLT
|
|
||||||
* - class CholmodSimplicialLDLT
|
|
||||||
* Note that these classes does not bring any particular advantage compared to the built-in
|
|
||||||
* SimplicialLLT and SimplicialLDLT factorization classes.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/CholmodSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the cholmod headers must be accessible from the include paths, and your binary must be linked to the cholmod library and its dependencies.
|
|
||||||
* The dependencies depend on how cholmod has been compiled.
|
|
||||||
* For a cmake based project, you can use our FindCholmod.cmake module to help you in this task.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/CholmodSupport/CholmodSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_CHOLMODSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
@@ -1,537 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2007-2011 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_CORE_H
|
|
||||||
#define EIGEN_CORE_H
|
|
||||||
|
|
||||||
// first thing Eigen does: stop the compiler from committing suicide
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA)
|
|
||||||
#define EIGEN_CUDACC __CUDACC__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA)
|
|
||||||
#define EIGEN_CUDA_ARCH __CUDA_ARCH__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9)
|
|
||||||
#define EIGEN_CUDACC_VER ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100))
|
|
||||||
#elif defined(__CUDACC_VER__)
|
|
||||||
#define EIGEN_CUDACC_VER __CUDACC_VER__
|
|
||||||
#else
|
|
||||||
#define EIGEN_CUDACC_VER 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Handle NVCC/CUDA/SYCL
|
|
||||||
#if defined(__CUDACC__) || defined(__SYCL_DEVICE_ONLY__)
|
|
||||||
// Do not try asserts on CUDA and SYCL!
|
|
||||||
#ifndef EIGEN_NO_DEBUG
|
|
||||||
#define EIGEN_NO_DEBUG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EIGEN_INTERNAL_DEBUGGING
|
|
||||||
#undef EIGEN_INTERNAL_DEBUGGING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EIGEN_EXCEPTIONS
|
|
||||||
#undef EIGEN_EXCEPTIONS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// All functions callable from CUDA code must be qualified with __device__
|
|
||||||
#ifdef __CUDACC__
|
|
||||||
// Do not try to vectorize on CUDA and SYCL!
|
|
||||||
#ifndef EIGEN_DONT_VECTORIZE
|
|
||||||
#define EIGEN_DONT_VECTORIZE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EIGEN_DEVICE_FUNC __host__ __device__
|
|
||||||
// We need cuda_runtime.h to ensure that that EIGEN_USING_STD_MATH macro
|
|
||||||
// works properly on the device side
|
|
||||||
#include <cuda_runtime.h>
|
|
||||||
#else
|
|
||||||
#define EIGEN_DEVICE_FUNC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define EIGEN_DEVICE_FUNC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// When compiling CUDA device code with NVCC, pull in math functions from the
|
|
||||||
// global namespace. In host mode, and when device doee with clang, use the
|
|
||||||
// std versions.
|
|
||||||
#if defined(__CUDA_ARCH__) && defined(__NVCC__)
|
|
||||||
#define EIGEN_USING_STD_MATH(FUNC) using ::FUNC;
|
|
||||||
#else
|
|
||||||
#define EIGEN_USING_STD_MATH(FUNC) using std::FUNC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(__CUDA_ARCH__) && !defined(EIGEN_EXCEPTIONS) && !defined(EIGEN_USE_SYCL)
|
|
||||||
#define EIGEN_EXCEPTIONS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EIGEN_EXCEPTIONS
|
|
||||||
#include <new>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// then include this file where all our macros are defined. It's really important to do it first because
|
|
||||||
// it's where we do all the alignment settings (platform detection and honoring the user's will if he
|
|
||||||
// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization.
|
|
||||||
#include "src/Core/util/Macros.h"
|
|
||||||
|
|
||||||
// Disable the ipa-cp-clone optimization flag with MinGW 6.x or newer (enabled by default with -O3)
|
|
||||||
// See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556 for details.
|
|
||||||
#if EIGEN_COMP_MINGW && EIGEN_GNUC_AT_LEAST(4,6)
|
|
||||||
#pragma GCC optimize ("-fno-ipa-cp-clone")
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <complex>
|
|
||||||
|
|
||||||
// this include file manages BLAS and MKL related macros
|
|
||||||
// and inclusion of their respective header files
|
|
||||||
#include "src/Core/util/MKL_support.h"
|
|
||||||
|
|
||||||
// if alignment is disabled, then disable vectorization. Note: EIGEN_MAX_ALIGN_BYTES is the proper check, it takes into
|
|
||||||
// account both the user's will (EIGEN_MAX_ALIGN_BYTES,EIGEN_DONT_ALIGN) and our own platform checks
|
|
||||||
#if EIGEN_MAX_ALIGN_BYTES==0
|
|
||||||
#ifndef EIGEN_DONT_VECTORIZE
|
|
||||||
#define EIGEN_DONT_VECTORIZE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EIGEN_COMP_MSVC
|
|
||||||
#include <malloc.h> // for _aligned_malloc -- need it regardless of whether vectorization is enabled
|
|
||||||
#if (EIGEN_COMP_MSVC >= 1500) // 2008 or later
|
|
||||||
// Remember that usage of defined() in a #define is undefined by the standard.
|
|
||||||
// a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP.
|
|
||||||
#if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || EIGEN_ARCH_x86_64
|
|
||||||
#define EIGEN_SSE2_ON_MSVC_2008_OR_LATER
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
// Remember that usage of defined() in a #define is undefined by the standard
|
|
||||||
#if (defined __SSE2__) && ( (!EIGEN_COMP_GNUC) || EIGEN_COMP_ICC || EIGEN_GNUC_AT_LEAST(4,2) )
|
|
||||||
#define EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef EIGEN_DONT_VECTORIZE
|
|
||||||
|
|
||||||
#if defined (EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER)
|
|
||||||
|
|
||||||
// Defines symbols for compile-time detection of which instructions are
|
|
||||||
// used.
|
|
||||||
// EIGEN_VECTORIZE_YY is defined if and only if the instruction set YY is used
|
|
||||||
#define EIGEN_VECTORIZE
|
|
||||||
#define EIGEN_VECTORIZE_SSE
|
|
||||||
#define EIGEN_VECTORIZE_SSE2
|
|
||||||
|
|
||||||
// Detect sse3/ssse3/sse4:
|
|
||||||
// gcc and icc defines __SSE3__, ...
|
|
||||||
// there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you
|
|
||||||
// want to force the use of those instructions with msvc.
|
|
||||||
#ifdef __SSE3__
|
|
||||||
#define EIGEN_VECTORIZE_SSE3
|
|
||||||
#endif
|
|
||||||
#ifdef __SSSE3__
|
|
||||||
#define EIGEN_VECTORIZE_SSSE3
|
|
||||||
#endif
|
|
||||||
#ifdef __SSE4_1__
|
|
||||||
#define EIGEN_VECTORIZE_SSE4_1
|
|
||||||
#endif
|
|
||||||
#ifdef __SSE4_2__
|
|
||||||
#define EIGEN_VECTORIZE_SSE4_2
|
|
||||||
#endif
|
|
||||||
#ifdef __AVX__
|
|
||||||
#define EIGEN_VECTORIZE_AVX
|
|
||||||
#define EIGEN_VECTORIZE_SSE3
|
|
||||||
#define EIGEN_VECTORIZE_SSSE3
|
|
||||||
#define EIGEN_VECTORIZE_SSE4_1
|
|
||||||
#define EIGEN_VECTORIZE_SSE4_2
|
|
||||||
#endif
|
|
||||||
#ifdef __AVX2__
|
|
||||||
#define EIGEN_VECTORIZE_AVX2
|
|
||||||
#endif
|
|
||||||
#ifdef __FMA__
|
|
||||||
#define EIGEN_VECTORIZE_FMA
|
|
||||||
#endif
|
|
||||||
#if defined(__AVX512F__) && defined(EIGEN_ENABLE_AVX512)
|
|
||||||
#define EIGEN_VECTORIZE_AVX512
|
|
||||||
#define EIGEN_VECTORIZE_AVX2
|
|
||||||
#define EIGEN_VECTORIZE_AVX
|
|
||||||
#define EIGEN_VECTORIZE_FMA
|
|
||||||
#ifdef __AVX512DQ__
|
|
||||||
#define EIGEN_VECTORIZE_AVX512DQ
|
|
||||||
#endif
|
|
||||||
#ifdef __AVX512ER__
|
|
||||||
#define EIGEN_VECTORIZE_AVX512ER
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// include files
|
|
||||||
|
|
||||||
// This extern "C" works around a MINGW-w64 compilation issue
|
|
||||||
// https://sourceforge.net/tracker/index.php?func=detail&aid=3018394&group_id=202880&atid=983354
|
|
||||||
// In essence, intrin.h is included by windows.h and also declares intrinsics (just as emmintrin.h etc. below do).
|
|
||||||
// However, intrin.h uses an extern "C" declaration, and g++ thus complains of duplicate declarations
|
|
||||||
// with conflicting linkage. The linkage for intrinsics doesn't matter, but at that stage the compiler doesn't know;
|
|
||||||
// so, to avoid compile errors when windows.h is included after Eigen/Core, ensure intrinsics are extern "C" here too.
|
|
||||||
// notice that since these are C headers, the extern "C" is theoretically needed anyways.
|
|
||||||
extern "C" {
|
|
||||||
// In theory we should only include immintrin.h and not the other *mmintrin.h header files directly.
|
|
||||||
// Doing so triggers some issues with ICC. However old gcc versions seems to not have this file, thus:
|
|
||||||
#if EIGEN_COMP_ICC >= 1110
|
|
||||||
#include <immintrin.h>
|
|
||||||
#else
|
|
||||||
#include <mmintrin.h>
|
|
||||||
#include <emmintrin.h>
|
|
||||||
#include <xmmintrin.h>
|
|
||||||
#ifdef EIGEN_VECTORIZE_SSE3
|
|
||||||
#include <pmmintrin.h>
|
|
||||||
#endif
|
|
||||||
#ifdef EIGEN_VECTORIZE_SSSE3
|
|
||||||
#include <tmmintrin.h>
|
|
||||||
#endif
|
|
||||||
#ifdef EIGEN_VECTORIZE_SSE4_1
|
|
||||||
#include <smmintrin.h>
|
|
||||||
#endif
|
|
||||||
#ifdef EIGEN_VECTORIZE_SSE4_2
|
|
||||||
#include <nmmintrin.h>
|
|
||||||
#endif
|
|
||||||
#if defined(EIGEN_VECTORIZE_AVX) || defined(EIGEN_VECTORIZE_AVX512)
|
|
||||||
#include <immintrin.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
} // end extern "C"
|
|
||||||
#elif defined __VSX__
|
|
||||||
#define EIGEN_VECTORIZE
|
|
||||||
#define EIGEN_VECTORIZE_VSX
|
|
||||||
#include <altivec.h>
|
|
||||||
// We need to #undef all these ugly tokens defined in <altivec.h>
|
|
||||||
// => use __vector instead of vector
|
|
||||||
#undef bool
|
|
||||||
#undef vector
|
|
||||||
#undef pixel
|
|
||||||
#elif defined __ALTIVEC__
|
|
||||||
#define EIGEN_VECTORIZE
|
|
||||||
#define EIGEN_VECTORIZE_ALTIVEC
|
|
||||||
#include <altivec.h>
|
|
||||||
// We need to #undef all these ugly tokens defined in <altivec.h>
|
|
||||||
// => use __vector instead of vector
|
|
||||||
#undef bool
|
|
||||||
#undef vector
|
|
||||||
#undef pixel
|
|
||||||
#elif (defined __ARM_NEON) || (defined __ARM_NEON__)
|
|
||||||
#define EIGEN_VECTORIZE
|
|
||||||
#define EIGEN_VECTORIZE_NEON
|
|
||||||
#include <arm_neon.h>
|
|
||||||
#elif (defined __s390x__ && defined __VEC__)
|
|
||||||
#define EIGEN_VECTORIZE
|
|
||||||
#define EIGEN_VECTORIZE_ZVECTOR
|
|
||||||
#include <vecintrin.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__F16C__) && !defined(EIGEN_COMP_CLANG)
|
|
||||||
// We can use the optimized fp16 to float and float to fp16 conversion routines
|
|
||||||
#define EIGEN_HAS_FP16_C
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined __CUDACC__
|
|
||||||
#define EIGEN_VECTORIZE_CUDA
|
|
||||||
#include <vector_types.h>
|
|
||||||
#if EIGEN_CUDACC_VER >= 70500
|
|
||||||
#define EIGEN_HAS_CUDA_FP16
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined EIGEN_HAS_CUDA_FP16
|
|
||||||
#include <host_defines.h>
|
|
||||||
#include <cuda_fp16.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
|
|
||||||
#define EIGEN_HAS_OPENMP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EIGEN_HAS_OPENMP
|
|
||||||
#include <omp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// MSVC for windows mobile does not have the errno.h file
|
|
||||||
#if !(EIGEN_COMP_MSVC && EIGEN_OS_WINCE) && !EIGEN_COMP_ARM
|
|
||||||
#define EIGEN_HAS_ERRNO
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EIGEN_HAS_ERRNO
|
|
||||||
#include <cerrno>
|
|
||||||
#endif
|
|
||||||
#include <cstddef>
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <cmath>
|
|
||||||
#include <cassert>
|
|
||||||
#include <functional>
|
|
||||||
#include <iosfwd>
|
|
||||||
#include <cstring>
|
|
||||||
#include <string>
|
|
||||||
#include <limits>
|
|
||||||
#include <climits> // for CHAR_BIT
|
|
||||||
// for min/max:
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
// for std::is_nothrow_move_assignable
|
|
||||||
#ifdef EIGEN_INCLUDE_TYPE_TRAITS
|
|
||||||
#include <type_traits>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// for outputting debug info
|
|
||||||
#ifdef EIGEN_DEBUG_ASSIGN
|
|
||||||
#include <iostream>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// required for __cpuid, needs to be included after cmath
|
|
||||||
#if EIGEN_COMP_MSVC && EIGEN_ARCH_i386_OR_x86_64 && !EIGEN_OS_WINCE
|
|
||||||
#include <intrin.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** \brief Namespace containing all symbols from the %Eigen library. */
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
inline static const char *SimdInstructionSetsInUse(void) {
|
|
||||||
#if defined(EIGEN_VECTORIZE_AVX512)
|
|
||||||
return "AVX512, FMA, AVX2, AVX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_AVX)
|
|
||||||
return "AVX SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_SSE4_2)
|
|
||||||
return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_SSE4_1)
|
|
||||||
return "SSE, SSE2, SSE3, SSSE3, SSE4.1";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_SSSE3)
|
|
||||||
return "SSE, SSE2, SSE3, SSSE3";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_SSE3)
|
|
||||||
return "SSE, SSE2, SSE3";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_SSE2)
|
|
||||||
return "SSE, SSE2";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_ALTIVEC)
|
|
||||||
return "AltiVec";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_VSX)
|
|
||||||
return "VSX";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_NEON)
|
|
||||||
return "ARM NEON";
|
|
||||||
#elif defined(EIGEN_VECTORIZE_ZVECTOR)
|
|
||||||
return "S390X ZVECTOR";
|
|
||||||
#else
|
|
||||||
return "None";
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS || defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API || defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS || defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API || defined EIGEN2_SUPPORT
|
|
||||||
// This will generate an error message:
|
|
||||||
#error Eigen2-support is only available up to version 3.2. Please go to "http://eigen.tuxfamily.org/index.php?title=Eigen2" for further information
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
// we use size_t frequently and we'll never remember to prepend it with std:: everytime just to
|
|
||||||
// ensure QNX/QCC support
|
|
||||||
using std::size_t;
|
|
||||||
// gcc 4.6.0 wants std:: for ptrdiff_t
|
|
||||||
using std::ptrdiff_t;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \defgroup Core_Module Core module
|
|
||||||
* This is the main module of Eigen providing dense matrix and vector support
|
|
||||||
* (both fixed and dynamic size) with all the features corresponding to a BLAS library
|
|
||||||
* and much more...
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Core>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/Core/util/Constants.h"
|
|
||||||
#include "src/Core/util/Meta.h"
|
|
||||||
#include "src/Core/util/ForwardDeclarations.h"
|
|
||||||
#include "src/Core/util/StaticAssert.h"
|
|
||||||
#include "src/Core/util/XprHelper.h"
|
|
||||||
#include "src/Core/util/Memory.h"
|
|
||||||
|
|
||||||
#include "src/Core/NumTraits.h"
|
|
||||||
#include "src/Core/MathFunctions.h"
|
|
||||||
#include "src/Core/GenericPacketMath.h"
|
|
||||||
#include "src/Core/MathFunctionsImpl.h"
|
|
||||||
#include "src/Core/arch/Default/ConjHelper.h"
|
|
||||||
|
|
||||||
#if defined EIGEN_VECTORIZE_AVX512
|
|
||||||
#include "src/Core/arch/SSE/PacketMath.h"
|
|
||||||
#include "src/Core/arch/AVX/PacketMath.h"
|
|
||||||
#include "src/Core/arch/AVX512/PacketMath.h"
|
|
||||||
#include "src/Core/arch/AVX512/MathFunctions.h"
|
|
||||||
#elif defined EIGEN_VECTORIZE_AVX
|
|
||||||
// Use AVX for floats and doubles, SSE for integers
|
|
||||||
#include "src/Core/arch/SSE/PacketMath.h"
|
|
||||||
#include "src/Core/arch/SSE/Complex.h"
|
|
||||||
#include "src/Core/arch/SSE/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/AVX/PacketMath.h"
|
|
||||||
#include "src/Core/arch/AVX/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/AVX/Complex.h"
|
|
||||||
#include "src/Core/arch/AVX/TypeCasting.h"
|
|
||||||
#include "src/Core/arch/SSE/TypeCasting.h"
|
|
||||||
#elif defined EIGEN_VECTORIZE_SSE
|
|
||||||
#include "src/Core/arch/SSE/PacketMath.h"
|
|
||||||
#include "src/Core/arch/SSE/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/SSE/Complex.h"
|
|
||||||
#include "src/Core/arch/SSE/TypeCasting.h"
|
|
||||||
#elif defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX)
|
|
||||||
#include "src/Core/arch/AltiVec/PacketMath.h"
|
|
||||||
#include "src/Core/arch/AltiVec/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/AltiVec/Complex.h"
|
|
||||||
#elif defined EIGEN_VECTORIZE_NEON
|
|
||||||
#include "src/Core/arch/NEON/PacketMath.h"
|
|
||||||
#include "src/Core/arch/NEON/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/NEON/Complex.h"
|
|
||||||
#elif defined EIGEN_VECTORIZE_ZVECTOR
|
|
||||||
#include "src/Core/arch/ZVector/PacketMath.h"
|
|
||||||
#include "src/Core/arch/ZVector/MathFunctions.h"
|
|
||||||
#include "src/Core/arch/ZVector/Complex.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Half float support
|
|
||||||
#include "src/Core/arch/CUDA/Half.h"
|
|
||||||
#include "src/Core/arch/CUDA/PacketMathHalf.h"
|
|
||||||
#include "src/Core/arch/CUDA/TypeCasting.h"
|
|
||||||
|
|
||||||
#if defined EIGEN_VECTORIZE_CUDA
|
|
||||||
#include "src/Core/arch/CUDA/PacketMath.h"
|
|
||||||
#include "src/Core/arch/CUDA/MathFunctions.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/arch/Default/Settings.h"
|
|
||||||
|
|
||||||
#include "src/Core/functors/TernaryFunctors.h"
|
|
||||||
#include "src/Core/functors/BinaryFunctors.h"
|
|
||||||
#include "src/Core/functors/UnaryFunctors.h"
|
|
||||||
#include "src/Core/functors/NullaryFunctors.h"
|
|
||||||
#include "src/Core/functors/StlFunctors.h"
|
|
||||||
#include "src/Core/functors/AssignmentFunctors.h"
|
|
||||||
|
|
||||||
// Specialized functors to enable the processing of complex numbers
|
|
||||||
// on CUDA devices
|
|
||||||
#include "src/Core/arch/CUDA/Complex.h"
|
|
||||||
|
|
||||||
#include "src/Core/IO.h"
|
|
||||||
#include "src/Core/DenseCoeffsBase.h"
|
|
||||||
#include "src/Core/DenseBase.h"
|
|
||||||
#include "src/Core/MatrixBase.h"
|
|
||||||
#include "src/Core/EigenBase.h"
|
|
||||||
|
|
||||||
#include "src/Core/Product.h"
|
|
||||||
#include "src/Core/CoreEvaluators.h"
|
|
||||||
#include "src/Core/AssignEvaluator.h"
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874
|
|
||||||
// at least confirmed with Doxygen 1.5.5 and 1.5.6
|
|
||||||
#include "src/Core/Assign.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/ArrayBase.h"
|
|
||||||
#include "src/Core/util/BlasUtil.h"
|
|
||||||
#include "src/Core/DenseStorage.h"
|
|
||||||
#include "src/Core/NestByValue.h"
|
|
||||||
|
|
||||||
// #include "src/Core/ForceAlignedAccess.h"
|
|
||||||
|
|
||||||
#include "src/Core/ReturnByValue.h"
|
|
||||||
#include "src/Core/NoAlias.h"
|
|
||||||
#include "src/Core/PlainObjectBase.h"
|
|
||||||
#include "src/Core/Matrix.h"
|
|
||||||
#include "src/Core/Array.h"
|
|
||||||
#include "src/Core/CwiseTernaryOp.h"
|
|
||||||
#include "src/Core/CwiseBinaryOp.h"
|
|
||||||
#include "src/Core/CwiseUnaryOp.h"
|
|
||||||
#include "src/Core/CwiseNullaryOp.h"
|
|
||||||
#include "src/Core/CwiseUnaryView.h"
|
|
||||||
#include "src/Core/SelfCwiseBinaryOp.h"
|
|
||||||
#include "src/Core/Dot.h"
|
|
||||||
#include "src/Core/StableNorm.h"
|
|
||||||
#include "src/Core/Stride.h"
|
|
||||||
#include "src/Core/MapBase.h"
|
|
||||||
#include "src/Core/Map.h"
|
|
||||||
#include "src/Core/Ref.h"
|
|
||||||
#include "src/Core/Block.h"
|
|
||||||
#include "src/Core/VectorBlock.h"
|
|
||||||
#include "src/Core/Transpose.h"
|
|
||||||
#include "src/Core/DiagonalMatrix.h"
|
|
||||||
#include "src/Core/Diagonal.h"
|
|
||||||
#include "src/Core/DiagonalProduct.h"
|
|
||||||
#include "src/Core/Redux.h"
|
|
||||||
#include "src/Core/Visitor.h"
|
|
||||||
#include "src/Core/Fuzzy.h"
|
|
||||||
#include "src/Core/Swap.h"
|
|
||||||
#include "src/Core/CommaInitializer.h"
|
|
||||||
#include "src/Core/GeneralProduct.h"
|
|
||||||
#include "src/Core/Solve.h"
|
|
||||||
#include "src/Core/Inverse.h"
|
|
||||||
#include "src/Core/SolverBase.h"
|
|
||||||
#include "src/Core/PermutationMatrix.h"
|
|
||||||
#include "src/Core/Transpositions.h"
|
|
||||||
#include "src/Core/TriangularMatrix.h"
|
|
||||||
#include "src/Core/SelfAdjointView.h"
|
|
||||||
#include "src/Core/products/GeneralBlockPanelKernel.h"
|
|
||||||
#include "src/Core/products/Parallelizer.h"
|
|
||||||
#include "src/Core/ProductEvaluators.h"
|
|
||||||
#include "src/Core/products/GeneralMatrixVector.h"
|
|
||||||
#include "src/Core/products/GeneralMatrixMatrix.h"
|
|
||||||
#include "src/Core/SolveTriangular.h"
|
|
||||||
#include "src/Core/products/GeneralMatrixMatrixTriangular.h"
|
|
||||||
#include "src/Core/products/SelfadjointMatrixVector.h"
|
|
||||||
#include "src/Core/products/SelfadjointMatrixMatrix.h"
|
|
||||||
#include "src/Core/products/SelfadjointProduct.h"
|
|
||||||
#include "src/Core/products/SelfadjointRank2Update.h"
|
|
||||||
#include "src/Core/products/TriangularMatrixVector.h"
|
|
||||||
#include "src/Core/products/TriangularMatrixMatrix.h"
|
|
||||||
#include "src/Core/products/TriangularSolverMatrix.h"
|
|
||||||
#include "src/Core/products/TriangularSolverVector.h"
|
|
||||||
#include "src/Core/BandMatrix.h"
|
|
||||||
#include "src/Core/CoreIterators.h"
|
|
||||||
#include "src/Core/ConditionEstimator.h"
|
|
||||||
|
|
||||||
#include "src/Core/BooleanRedux.h"
|
|
||||||
#include "src/Core/Select.h"
|
|
||||||
#include "src/Core/VectorwiseOp.h"
|
|
||||||
#include "src/Core/Random.h"
|
|
||||||
#include "src/Core/Replicate.h"
|
|
||||||
#include "src/Core/Reverse.h"
|
|
||||||
#include "src/Core/ArrayWrapper.h"
|
|
||||||
|
|
||||||
#ifdef EIGEN_USE_BLAS
|
|
||||||
#include "src/Core/products/GeneralMatrixMatrix_BLAS.h"
|
|
||||||
#include "src/Core/products/GeneralMatrixVector_BLAS.h"
|
|
||||||
#include "src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h"
|
|
||||||
#include "src/Core/products/SelfadjointMatrixMatrix_BLAS.h"
|
|
||||||
#include "src/Core/products/SelfadjointMatrixVector_BLAS.h"
|
|
||||||
#include "src/Core/products/TriangularMatrixMatrix_BLAS.h"
|
|
||||||
#include "src/Core/products/TriangularMatrixVector_BLAS.h"
|
|
||||||
#include "src/Core/products/TriangularSolverMatrix_BLAS.h"
|
|
||||||
#endif // EIGEN_USE_BLAS
|
|
||||||
|
|
||||||
#ifdef EIGEN_USE_MKL_VML
|
|
||||||
#include "src/Core/Assign_MKL.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/GlobalFunctions.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_CORE_H
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#include "Core"
|
|
||||||
#include "LU"
|
|
||||||
#include "Cholesky"
|
|
||||||
#include "QR"
|
|
||||||
#include "SVD"
|
|
||||||
#include "Geometry"
|
|
||||||
#include "Eigenvalues"
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#include "Dense"
|
|
||||||
#include "Sparse"
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_EIGENVALUES_MODULE_H
|
|
||||||
#define EIGEN_EIGENVALUES_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include "Cholesky"
|
|
||||||
#include "Jacobi"
|
|
||||||
#include "Householder"
|
|
||||||
#include "LU"
|
|
||||||
#include "Geometry"
|
|
||||||
|
|
||||||
/** \defgroup Eigenvalues_Module Eigenvalues module
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This module mainly provides various eigenvalue solvers.
|
|
||||||
* This module also provides some MatrixBase methods, including:
|
|
||||||
* - MatrixBase::eigenvalues(),
|
|
||||||
* - MatrixBase::operatorNorm()
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Eigenvalues>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/misc/RealSvd2x2.h"
|
|
||||||
#include "src/Eigenvalues/Tridiagonalization.h"
|
|
||||||
#include "src/Eigenvalues/RealSchur.h"
|
|
||||||
#include "src/Eigenvalues/EigenSolver.h"
|
|
||||||
#include "src/Eigenvalues/SelfAdjointEigenSolver.h"
|
|
||||||
#include "src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h"
|
|
||||||
#include "src/Eigenvalues/HessenbergDecomposition.h"
|
|
||||||
#include "src/Eigenvalues/ComplexSchur.h"
|
|
||||||
#include "src/Eigenvalues/ComplexEigenSolver.h"
|
|
||||||
#include "src/Eigenvalues/RealQZ.h"
|
|
||||||
#include "src/Eigenvalues/GeneralizedEigenSolver.h"
|
|
||||||
#include "src/Eigenvalues/MatrixBaseEigenvalues.h"
|
|
||||||
#ifdef EIGEN_USE_LAPACKE
|
|
||||||
#ifdef EIGEN_USE_MKL
|
|
||||||
#include "mkl_lapacke.h"
|
|
||||||
#else
|
|
||||||
#include "src/misc/lapacke.h"
|
|
||||||
#endif
|
|
||||||
#include "src/Eigenvalues/RealSchur_LAPACKE.h"
|
|
||||||
#include "src/Eigenvalues/ComplexSchur_LAPACKE.h"
|
|
||||||
#include "src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_EIGENVALUES_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_GEOMETRY_MODULE_H
|
|
||||||
#define EIGEN_GEOMETRY_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include "SVD"
|
|
||||||
#include "LU"
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
/** \defgroup Geometry_Module Geometry module
|
|
||||||
*
|
|
||||||
* This module provides support for:
|
|
||||||
* - fixed-size homogeneous transformations
|
|
||||||
* - translation, scaling, 2D and 3D rotations
|
|
||||||
* - \link Quaternion quaternions \endlink
|
|
||||||
* - cross products (\ref MatrixBase::cross, \ref MatrixBase::cross3)
|
|
||||||
* - orthognal vector generation (\ref MatrixBase::unitOrthogonal)
|
|
||||||
* - some linear components: \link ParametrizedLine parametrized-lines \endlink and \link Hyperplane hyperplanes \endlink
|
|
||||||
* - \link AlignedBox axis aligned bounding boxes \endlink
|
|
||||||
* - \link umeyama least-square transformation fitting \endlink
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Geometry>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/Geometry/OrthoMethods.h"
|
|
||||||
#include "src/Geometry/EulerAngles.h"
|
|
||||||
|
|
||||||
#include "src/Geometry/Homogeneous.h"
|
|
||||||
#include "src/Geometry/RotationBase.h"
|
|
||||||
#include "src/Geometry/Rotation2D.h"
|
|
||||||
#include "src/Geometry/Quaternion.h"
|
|
||||||
#include "src/Geometry/AngleAxis.h"
|
|
||||||
#include "src/Geometry/Transform.h"
|
|
||||||
#include "src/Geometry/Translation.h"
|
|
||||||
#include "src/Geometry/Scaling.h"
|
|
||||||
#include "src/Geometry/Hyperplane.h"
|
|
||||||
#include "src/Geometry/ParametrizedLine.h"
|
|
||||||
#include "src/Geometry/AlignedBox.h"
|
|
||||||
#include "src/Geometry/Umeyama.h"
|
|
||||||
|
|
||||||
// Use the SSE optimized version whenever possible. At the moment the
|
|
||||||
// SSE version doesn't compile when AVX is enabled
|
|
||||||
#if defined EIGEN_VECTORIZE_SSE && !defined EIGEN_VECTORIZE_AVX
|
|
||||||
#include "src/Geometry/arch/Geometry_SSE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_GEOMETRY_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_HOUSEHOLDER_MODULE_H
|
|
||||||
#define EIGEN_HOUSEHOLDER_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup Householder_Module Householder module
|
|
||||||
* This module provides Householder transformations.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Householder>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/Householder/Householder.h"
|
|
||||||
#include "src/Householder/HouseholderSequence.h"
|
|
||||||
#include "src/Householder/BlockHouseholder.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_HOUSEHOLDER_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
|
|
||||||
#define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
#include "OrderingMethods"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module
|
|
||||||
*
|
|
||||||
* This module currently provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a squared matrix, usually very large and sparse.
|
|
||||||
* Those solvers are accessible via the following classes:
|
|
||||||
* - ConjugateGradient for selfadjoint (hermitian) matrices,
|
|
||||||
* - LeastSquaresConjugateGradient for rectangular least-square problems,
|
|
||||||
* - BiCGSTAB for general square matrices.
|
|
||||||
*
|
|
||||||
* These iterative solvers are associated with some preconditioners:
|
|
||||||
* - IdentityPreconditioner - not really useful
|
|
||||||
* - DiagonalPreconditioner - also called Jacobi preconditioner, work very well on diagonal dominant matrices.
|
|
||||||
* - IncompleteLUT - incomplete LU factorization with dual thresholding
|
|
||||||
*
|
|
||||||
* Such problems can also be solved using the direct sparse decomposition modules: SparseCholesky, CholmodSupport, UmfPackSupport, SuperLUSupport.
|
|
||||||
*
|
|
||||||
\code
|
|
||||||
#include <Eigen/IterativeLinearSolvers>
|
|
||||||
\endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/IterativeLinearSolvers/SolveWithGuess.h"
|
|
||||||
#include "src/IterativeLinearSolvers/IterativeSolverBase.h"
|
|
||||||
#include "src/IterativeLinearSolvers/BasicPreconditioners.h"
|
|
||||||
#include "src/IterativeLinearSolvers/ConjugateGradient.h"
|
|
||||||
#include "src/IterativeLinearSolvers/LeastSquareConjugateGradient.h"
|
|
||||||
#include "src/IterativeLinearSolvers/BiCGSTAB.h"
|
|
||||||
#include "src/IterativeLinearSolvers/IncompleteLUT.h"
|
|
||||||
#include "src/IterativeLinearSolvers/IncompleteCholesky.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_JACOBI_MODULE_H
|
|
||||||
#define EIGEN_JACOBI_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup Jacobi_Module Jacobi module
|
|
||||||
* This module provides Jacobi and Givens rotations.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/Jacobi>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In addition to listed classes, it defines the two following MatrixBase methods to apply a Jacobi or Givens rotation:
|
|
||||||
* - MatrixBase::applyOnTheLeft()
|
|
||||||
* - MatrixBase::applyOnTheRight().
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/Jacobi/Jacobi.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_JACOBI_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_LU_MODULE_H
|
|
||||||
#define EIGEN_LU_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup LU_Module LU module
|
|
||||||
* This module includes %LU decomposition and related notions such as matrix inversion and determinant.
|
|
||||||
* This module defines the following MatrixBase methods:
|
|
||||||
* - MatrixBase::inverse()
|
|
||||||
* - MatrixBase::determinant()
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/LU>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/misc/Kernel.h"
|
|
||||||
#include "src/misc/Image.h"
|
|
||||||
#include "src/LU/FullPivLU.h"
|
|
||||||
#include "src/LU/PartialPivLU.h"
|
|
||||||
#ifdef EIGEN_USE_LAPACKE
|
|
||||||
#ifdef EIGEN_USE_MKL
|
|
||||||
#include "mkl_lapacke.h"
|
|
||||||
#else
|
|
||||||
#include "src/misc/lapacke.h"
|
|
||||||
#endif
|
|
||||||
#include "src/LU/PartialPivLU_LAPACKE.h"
|
|
||||||
#endif
|
|
||||||
#include "src/LU/Determinant.h"
|
|
||||||
#include "src/LU/InverseImpl.h"
|
|
||||||
|
|
||||||
// Use the SSE optimized version whenever possible. At the moment the
|
|
||||||
// SSE version doesn't compile when AVX is enabled
|
|
||||||
#if defined EIGEN_VECTORIZE_SSE && !defined EIGEN_VECTORIZE_AVX
|
|
||||||
#include "src/LU/arch/Inverse_SSE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_LU_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_METISSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_METISSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <metis.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup MetisSupport_Module MetisSupport module
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/MetisSupport>
|
|
||||||
* \endcode
|
|
||||||
* This module defines an interface to the METIS reordering package (http://glaros.dtc.umn.edu/gkhome/views/metis).
|
|
||||||
* It can be used just as any other built-in method as explained in \link OrderingMethods_Module here. \endlink
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "src/MetisSupport/MetisSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_METISSUPPORT_MODULE_H
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ORDERINGMETHODS_MODULE_H
|
|
||||||
#define EIGEN_ORDERINGMETHODS_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup OrderingMethods_Module OrderingMethods module
|
|
||||||
*
|
|
||||||
* This module is currently for internal use only
|
|
||||||
*
|
|
||||||
* It defines various built-in and external ordering methods for sparse matrices.
|
|
||||||
* They are typically used to reduce the number of elements during
|
|
||||||
* the sparse matrix decomposition (LLT, LU, QR).
|
|
||||||
* Precisely, in a preprocessing step, a permutation matrix P is computed using
|
|
||||||
* those ordering methods and applied to the columns of the matrix.
|
|
||||||
* Using for instance the sparse Cholesky decomposition, it is expected that
|
|
||||||
* the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A).
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* Usage :
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/OrderingMethods>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* A simple usage is as a template parameter in the sparse decomposition classes :
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* SparseLU<MatrixType, COLAMDOrdering<int> > solver;
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* SparseQR<MatrixType, COLAMDOrdering<int> > solver;
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* It is possible as well to call directly a particular ordering method for your own purpose,
|
|
||||||
* \code
|
|
||||||
* AMDOrdering<int> ordering;
|
|
||||||
* PermutationMatrix<Dynamic, Dynamic, int> perm;
|
|
||||||
* SparseMatrix<double> A;
|
|
||||||
* //Fill the matrix ...
|
|
||||||
*
|
|
||||||
* ordering(A, perm); // Call AMD
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* \note Some of these methods (like AMD or METIS), need the sparsity pattern
|
|
||||||
* of the input matrix to be symmetric. When the matrix is structurally unsymmetric,
|
|
||||||
* Eigen computes internally the pattern of \f$A^T*A\f$ before calling the method.
|
|
||||||
* If your matrix is already symmetric (at leat in structure), you can avoid that
|
|
||||||
* by calling the method with a SelfAdjointView type.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* // Call the ordering on the pattern of the lower triangular matrix A
|
|
||||||
* ordering(A.selfadjointView<Lower>(), perm);
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef EIGEN_MPL2_ONLY
|
|
||||||
#include "src/OrderingMethods/Amd.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/OrderingMethods/Ordering.h"
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_ORDERINGMETHODS_MODULE_H
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_PASTIXSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_PASTIXSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <pastix_nompi.h>
|
|
||||||
#include <pastix.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef complex
|
|
||||||
#undef complex
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup PaStiXSupport_Module PaStiXSupport module
|
|
||||||
*
|
|
||||||
* This module provides an interface to the <a href="http://pastix.gforge.inria.fr/">PaSTiX</a> library.
|
|
||||||
* PaSTiX is a general \b supernodal, \b parallel and \b opensource sparse solver.
|
|
||||||
* It provides the two following main factorization classes:
|
|
||||||
* - class PastixLLT : a supernodal, parallel LLt Cholesky factorization.
|
|
||||||
* - class PastixLDLT: a supernodal, parallel LDLt Cholesky factorization.
|
|
||||||
* - class PastixLU : a supernodal, parallel LU factorization (optimized for a symmetric pattern).
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/PaStiXSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies.
|
|
||||||
* The dependencies depend on how PaSTiX has been compiled.
|
|
||||||
* For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/PaStiXSupport/PaStiXSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_PASTIXSUPPORT_MODULE_H
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARDISOSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_PARDISOSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include <mkl_pardiso.h>
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup PardisoSupport_Module PardisoSupport module
|
|
||||||
*
|
|
||||||
* This module brings support for the Intel(R) MKL PARDISO direct sparse solvers.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/PardisoSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the MKL headers must be accessible from the include paths, and your binary must be linked to the MKL library and its dependencies.
|
|
||||||
* See this \ref TopicUsingIntelMKL "page" for more information on MKL-Eigen integration.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/PardisoSupport/PardisoSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_PARDISOSUPPORT_MODULE_H
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_QR_MODULE_H
|
|
||||||
#define EIGEN_QR_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include "Cholesky"
|
|
||||||
#include "Jacobi"
|
|
||||||
#include "Householder"
|
|
||||||
|
|
||||||
/** \defgroup QR_Module QR module
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This module provides various QR decompositions
|
|
||||||
* This module also provides some MatrixBase methods, including:
|
|
||||||
* - MatrixBase::householderQr()
|
|
||||||
* - MatrixBase::colPivHouseholderQr()
|
|
||||||
* - MatrixBase::fullPivHouseholderQr()
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/QR>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/QR/HouseholderQR.h"
|
|
||||||
#include "src/QR/FullPivHouseholderQR.h"
|
|
||||||
#include "src/QR/ColPivHouseholderQR.h"
|
|
||||||
#include "src/QR/CompleteOrthogonalDecomposition.h"
|
|
||||||
#ifdef EIGEN_USE_LAPACKE
|
|
||||||
#ifdef EIGEN_USE_MKL
|
|
||||||
#include "mkl_lapacke.h"
|
|
||||||
#else
|
|
||||||
#include "src/misc/lapacke.h"
|
|
||||||
#endif
|
|
||||||
#include "src/QR/HouseholderQR_LAPACKE.h"
|
|
||||||
#include "src/QR/ColPivHouseholderQR_LAPACKE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_QR_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_QTMALLOC_MODULE_H
|
|
||||||
#define EIGEN_QTMALLOC_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#if (!EIGEN_MALLOC_ALREADY_ALIGNED)
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
void *qMalloc(std::size_t size)
|
|
||||||
{
|
|
||||||
return Eigen::internal::aligned_malloc(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
void qFree(void *ptr)
|
|
||||||
{
|
|
||||||
Eigen::internal::aligned_free(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *qRealloc(void *ptr, std::size_t size)
|
|
||||||
{
|
|
||||||
void* newPtr = Eigen::internal::aligned_malloc(size);
|
|
||||||
std::memcpy(newPtr, ptr, size);
|
|
||||||
Eigen::internal::aligned_free(ptr);
|
|
||||||
return newPtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // EIGEN_QTMALLOC_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPQRSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_SPQRSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include "SuiteSparseQR.hpp"
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup SPQRSupport_Module SuiteSparseQR module
|
|
||||||
*
|
|
||||||
* This module provides an interface to the SPQR library, which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SPQRSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the SPQR headers must be accessible from the include paths, and your binary must be linked to the SPQR library and its dependencies (Cholmod, AMD, COLAMD,...).
|
|
||||||
* For a cmake based project, you can use our FindSPQR.cmake and FindCholmod.Cmake modules
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/CholmodSupport/CholmodSupport.h"
|
|
||||||
#include "src/SPQRSupport/SuiteSparseQRSupport.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SVD_MODULE_H
|
|
||||||
#define EIGEN_SVD_MODULE_H
|
|
||||||
|
|
||||||
#include "QR"
|
|
||||||
#include "Householder"
|
|
||||||
#include "Jacobi"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup SVD_Module SVD module
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This module provides SVD decomposition for matrices (both real and complex).
|
|
||||||
* Two decomposition algorithms are provided:
|
|
||||||
* - JacobiSVD implementing two-sided Jacobi iterations is numerically very accurate, fast for small matrices, but very slow for larger ones.
|
|
||||||
* - BDCSVD implementing a recursive divide & conquer strategy on top of an upper-bidiagonalization which remains fast for large problems.
|
|
||||||
* These decompositions are accessible via the respective classes and following MatrixBase methods:
|
|
||||||
* - MatrixBase::jacobiSvd()
|
|
||||||
* - MatrixBase::bdcSvd()
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SVD>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/misc/RealSvd2x2.h"
|
|
||||||
#include "src/SVD/UpperBidiagonalization.h"
|
|
||||||
#include "src/SVD/SVDBase.h"
|
|
||||||
#include "src/SVD/JacobiSVD.h"
|
|
||||||
#include "src/SVD/BDCSVD.h"
|
|
||||||
#if defined(EIGEN_USE_LAPACKE) && !defined(EIGEN_USE_LAPACKE_STRICT)
|
|
||||||
#ifdef EIGEN_USE_MKL
|
|
||||||
#include "mkl_lapacke.h"
|
|
||||||
#else
|
|
||||||
#include "src/misc/lapacke.h"
|
|
||||||
#endif
|
|
||||||
#include "src/SVD/JacobiSVD_LAPACKE.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_SVD_MODULE_H
|
|
||||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPARSE_MODULE_H
|
|
||||||
#define EIGEN_SPARSE_MODULE_H
|
|
||||||
|
|
||||||
/** \defgroup Sparse_Module Sparse meta-module
|
|
||||||
*
|
|
||||||
* Meta-module including all related modules:
|
|
||||||
* - \ref SparseCore_Module
|
|
||||||
* - \ref OrderingMethods_Module
|
|
||||||
* - \ref SparseCholesky_Module
|
|
||||||
* - \ref SparseLU_Module
|
|
||||||
* - \ref SparseQR_Module
|
|
||||||
* - \ref IterativeLinearSolvers_Module
|
|
||||||
*
|
|
||||||
\code
|
|
||||||
#include <Eigen/Sparse>
|
|
||||||
\endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
#include "OrderingMethods"
|
|
||||||
#ifndef EIGEN_MPL2_ONLY
|
|
||||||
#include "SparseCholesky"
|
|
||||||
#endif
|
|
||||||
#include "SparseLU"
|
|
||||||
#include "SparseQR"
|
|
||||||
#include "IterativeLinearSolvers"
|
|
||||||
|
|
||||||
#endif // EIGEN_SPARSE_MODULE_H
|
|
||||||
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2013 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPARSECHOLESKY_MODULE_H
|
|
||||||
#define EIGEN_SPARSECHOLESKY_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
#include "OrderingMethods"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup SparseCholesky_Module SparseCholesky module
|
|
||||||
*
|
|
||||||
* This module currently provides two variants of the direct sparse Cholesky decomposition for selfadjoint (hermitian) matrices.
|
|
||||||
* Those decompositions are accessible via the following classes:
|
|
||||||
* - SimplicialLLt,
|
|
||||||
* - SimplicialLDLt
|
|
||||||
*
|
|
||||||
* Such problems can also be solved using the ConjugateGradient solver from the IterativeLinearSolvers module.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SparseCholesky>
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef EIGEN_MPL2_ONLY
|
|
||||||
#error The SparseCholesky module has nothing to offer in MPL2 only mode
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/SparseCholesky/SimplicialCholesky.h"
|
|
||||||
|
|
||||||
#ifndef EIGEN_MPL2_ONLY
|
|
||||||
#include "src/SparseCholesky/SimplicialCholesky_impl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_SPARSECHOLESKY_MODULE_H
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPARSECORE_MODULE_H
|
|
||||||
#define EIGEN_SPARSECORE_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <map>
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <cstring>
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup SparseCore_Module SparseCore module
|
|
||||||
*
|
|
||||||
* This module provides a sparse matrix representation, and basic associated matrix manipulations
|
|
||||||
* and operations.
|
|
||||||
*
|
|
||||||
* See the \ref TutorialSparse "Sparse tutorial"
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SparseCore>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* This module depends on: Core.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/SparseCore/SparseUtil.h"
|
|
||||||
#include "src/SparseCore/SparseMatrixBase.h"
|
|
||||||
#include "src/SparseCore/SparseAssign.h"
|
|
||||||
#include "src/SparseCore/CompressedStorage.h"
|
|
||||||
#include "src/SparseCore/AmbiVector.h"
|
|
||||||
#include "src/SparseCore/SparseCompressedBase.h"
|
|
||||||
#include "src/SparseCore/SparseMatrix.h"
|
|
||||||
#include "src/SparseCore/SparseMap.h"
|
|
||||||
#include "src/SparseCore/MappedSparseMatrix.h"
|
|
||||||
#include "src/SparseCore/SparseVector.h"
|
|
||||||
#include "src/SparseCore/SparseRef.h"
|
|
||||||
#include "src/SparseCore/SparseCwiseUnaryOp.h"
|
|
||||||
#include "src/SparseCore/SparseCwiseBinaryOp.h"
|
|
||||||
#include "src/SparseCore/SparseTranspose.h"
|
|
||||||
#include "src/SparseCore/SparseBlock.h"
|
|
||||||
#include "src/SparseCore/SparseDot.h"
|
|
||||||
#include "src/SparseCore/SparseRedux.h"
|
|
||||||
#include "src/SparseCore/SparseView.h"
|
|
||||||
#include "src/SparseCore/SparseDiagonalProduct.h"
|
|
||||||
#include "src/SparseCore/ConservativeSparseSparseProduct.h"
|
|
||||||
#include "src/SparseCore/SparseSparseProductWithPruning.h"
|
|
||||||
#include "src/SparseCore/SparseProduct.h"
|
|
||||||
#include "src/SparseCore/SparseDenseProduct.h"
|
|
||||||
#include "src/SparseCore/SparseSelfAdjointView.h"
|
|
||||||
#include "src/SparseCore/SparseTriangularView.h"
|
|
||||||
#include "src/SparseCore/TriangularSolver.h"
|
|
||||||
#include "src/SparseCore/SparsePermutation.h"
|
|
||||||
#include "src/SparseCore/SparseFuzzy.h"
|
|
||||||
#include "src/SparseCore/SparseSolverBase.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_SPARSECORE_MODULE_H
|
|
||||||
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2012 Désiré Nuentsa-Wakam <desire.nuentsa_wakam@inria.fr>
|
|
||||||
// Copyright (C) 2012 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPARSELU_MODULE_H
|
|
||||||
#define EIGEN_SPARSELU_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup SparseLU_Module SparseLU module
|
|
||||||
* This module defines a supernodal factorization of general sparse matrices.
|
|
||||||
* The code is fully optimized for supernode-panel updates with specialized kernels.
|
|
||||||
* Please, see the documentation of the SparseLU class for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Ordering interface
|
|
||||||
#include "OrderingMethods"
|
|
||||||
|
|
||||||
#include "src/SparseLU/SparseLU_gemm_kernel.h"
|
|
||||||
|
|
||||||
#include "src/SparseLU/SparseLU_Structs.h"
|
|
||||||
#include "src/SparseLU/SparseLU_SupernodalMatrix.h"
|
|
||||||
#include "src/SparseLU/SparseLUImpl.h"
|
|
||||||
#include "src/SparseCore/SparseColEtree.h"
|
|
||||||
#include "src/SparseLU/SparseLU_Memory.h"
|
|
||||||
#include "src/SparseLU/SparseLU_heap_relax_snode.h"
|
|
||||||
#include "src/SparseLU/SparseLU_relax_snode.h"
|
|
||||||
#include "src/SparseLU/SparseLU_pivotL.h"
|
|
||||||
#include "src/SparseLU/SparseLU_panel_dfs.h"
|
|
||||||
#include "src/SparseLU/SparseLU_kernel_bmod.h"
|
|
||||||
#include "src/SparseLU/SparseLU_panel_bmod.h"
|
|
||||||
#include "src/SparseLU/SparseLU_column_dfs.h"
|
|
||||||
#include "src/SparseLU/SparseLU_column_bmod.h"
|
|
||||||
#include "src/SparseLU/SparseLU_copy_to_ucol.h"
|
|
||||||
#include "src/SparseLU/SparseLU_pruneL.h"
|
|
||||||
#include "src/SparseLU/SparseLU_Utils.h"
|
|
||||||
#include "src/SparseLU/SparseLU.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_SPARSELU_MODULE_H
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SPARSEQR_MODULE_H
|
|
||||||
#define EIGEN_SPARSEQR_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
#include "OrderingMethods"
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
/** \defgroup SparseQR_Module SparseQR module
|
|
||||||
* \brief Provides QR decomposition for sparse matrices
|
|
||||||
*
|
|
||||||
* This module provides a simplicial version of the left-looking Sparse QR decomposition.
|
|
||||||
* The columns of the input matrix should be reordered to limit the fill-in during the
|
|
||||||
* decomposition. Built-in methods (COLAMD, AMD) or external methods (METIS) can be used to this end.
|
|
||||||
* See the \link OrderingMethods_Module OrderingMethods\endlink module for the list
|
|
||||||
* of built-in and external ordering methods.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SparseQR>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "OrderingMethods"
|
|
||||||
#include "src/SparseCore/SparseColEtree.h"
|
|
||||||
#include "src/SparseQR/SparseQR.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2009 Hauke Heibel <hauke.heibel@googlemail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_STDDEQUE_MODULE_H
|
|
||||||
#define EIGEN_STDDEQUE_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
#include <deque>
|
|
||||||
|
|
||||||
#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */
|
|
||||||
|
|
||||||
#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include "src/StlSupport/StdDeque.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // EIGEN_STDDEQUE_MODULE_H
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Hauke Heibel <hauke.heibel@googlemail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_STDLIST_MODULE_H
|
|
||||||
#define EIGEN_STDLIST_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */
|
|
||||||
|
|
||||||
#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include "src/StlSupport/StdList.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // EIGEN_STDLIST_MODULE_H
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2009 Hauke Heibel <hauke.heibel@googlemail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_STDVECTOR_MODULE_H
|
|
||||||
#define EIGEN_STDVECTOR_MODULE_H
|
|
||||||
|
|
||||||
#include "Core"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */
|
|
||||||
|
|
||||||
#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include "src/StlSupport/StdVector.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // EIGEN_STDVECTOR_MODULE_H
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_SUPERLUSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
#ifdef EMPTY
|
|
||||||
#define EIGEN_EMPTY_WAS_ALREADY_DEFINED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef int int_t;
|
|
||||||
#include <slu_Cnames.h>
|
|
||||||
#include <supermatrix.h>
|
|
||||||
#include <slu_util.h>
|
|
||||||
|
|
||||||
// slu_util.h defines a preprocessor token named EMPTY which is really polluting,
|
|
||||||
// so we remove it in favor of a SUPERLU_EMPTY token.
|
|
||||||
// If EMPTY was already defined then we don't undef it.
|
|
||||||
|
|
||||||
#if defined(EIGEN_EMPTY_WAS_ALREADY_DEFINED)
|
|
||||||
# undef EIGEN_EMPTY_WAS_ALREADY_DEFINED
|
|
||||||
#elif defined(EMPTY)
|
|
||||||
# undef EMPTY
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SUPERLU_EMPTY (-1)
|
|
||||||
|
|
||||||
namespace Eigen { struct SluMatrix; }
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup SuperLUSupport_Module SuperLUSupport module
|
|
||||||
*
|
|
||||||
* This module provides an interface to the <a href="http://crd-legacy.lbl.gov/~xiaoye/SuperLU/">SuperLU</a> library.
|
|
||||||
* It provides the following factorization class:
|
|
||||||
* - class SuperLU: a supernodal sequential LU factorization.
|
|
||||||
* - class SuperILU: a supernodal sequential incomplete LU factorization (to be used as a preconditioner for iterative methods).
|
|
||||||
*
|
|
||||||
* \warning This wrapper requires at least versions 4.0 of SuperLU. The 3.x versions are not supported.
|
|
||||||
*
|
|
||||||
* \warning When including this module, you have to use SUPERLU_EMPTY instead of EMPTY which is no longer defined because it is too polluting.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/SuperLUSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the superlu headers must be accessible from the include paths, and your binary must be linked to the superlu library and its dependencies.
|
|
||||||
* The dependencies depend on how superlu has been compiled.
|
|
||||||
* For a cmake based project, you can use our FindSuperLU.cmake module to help you in this task.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/SuperLUSupport/SuperLUSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_SUPERLUSUPPORT_MODULE_H
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_UMFPACKSUPPORT_MODULE_H
|
|
||||||
#define EIGEN_UMFPACKSUPPORT_MODULE_H
|
|
||||||
|
|
||||||
#include "SparseCore"
|
|
||||||
|
|
||||||
#include "src/Core/util/DisableStupidWarnings.h"
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <umfpack.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \ingroup Support_modules
|
|
||||||
* \defgroup UmfPackSupport_Module UmfPackSupport module
|
|
||||||
*
|
|
||||||
* This module provides an interface to the UmfPack library which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
|
||||||
* It provides the following factorization class:
|
|
||||||
* - class UmfPackLU: a multifrontal sequential LU factorization.
|
|
||||||
*
|
|
||||||
* \code
|
|
||||||
* #include <Eigen/UmfPackSupport>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* In order to use this module, the umfpack headers must be accessible from the include paths, and your binary must be linked to the umfpack library and its dependencies.
|
|
||||||
* The dependencies depend on how umfpack has been compiled.
|
|
||||||
* For a cmake based project, you can use our FindUmfPack.cmake module to help you in this task.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "src/UmfPackSupport/UmfPackSupport.h"
|
|
||||||
|
|
||||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
|
||||||
|
|
||||||
#endif // EIGEN_UMFPACKSUPPORT_MODULE_H
|
|
||||||
@@ -1,673 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2011 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2009 Keir Mierle <mierle@gmail.com>
|
|
||||||
// Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
// Copyright (C) 2011 Timothy E. Holy <tim.holy@gmail.com >
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_LDLT_H
|
|
||||||
#define EIGEN_LDLT_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
template<typename MatrixType, int UpLo> struct LDLT_Traits;
|
|
||||||
|
|
||||||
// PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef
|
|
||||||
enum SignMatrix { PositiveSemiDef, NegativeSemiDef, ZeroSign, Indefinite };
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \ingroup Cholesky_Module
|
|
||||||
*
|
|
||||||
* \class LDLT
|
|
||||||
*
|
|
||||||
* \brief Robust Cholesky decomposition of a matrix with pivoting
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the matrix of which to compute the LDL^T Cholesky decomposition
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
|
|
||||||
* The other triangular part won't be read.
|
|
||||||
*
|
|
||||||
* Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite
|
|
||||||
* matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L
|
|
||||||
* is lower triangular with a unit diagonal and D is a diagonal matrix.
|
|
||||||
*
|
|
||||||
* The decomposition uses pivoting to ensure stability, so that L will have
|
|
||||||
* zeros in the bottom right rank(A) - n submatrix. Avoiding the square root
|
|
||||||
* on D also stabilizes the computation.
|
|
||||||
*
|
|
||||||
* Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky
|
|
||||||
* decomposition to determine whether a system of equations has a solution.
|
|
||||||
*
|
|
||||||
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
|
||||||
*
|
|
||||||
* \sa MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo> class LDLT
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
enum {
|
|
||||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
||||||
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
|
||||||
UpLo = _UpLo
|
|
||||||
};
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
|
||||||
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
|
||||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
||||||
typedef Matrix<Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1> TmpMatrixType;
|
|
||||||
|
|
||||||
typedef Transpositions<RowsAtCompileTime, MaxRowsAtCompileTime> TranspositionType;
|
|
||||||
typedef PermutationMatrix<RowsAtCompileTime, MaxRowsAtCompileTime> PermutationType;
|
|
||||||
|
|
||||||
typedef internal::LDLT_Traits<MatrixType,UpLo> Traits;
|
|
||||||
|
|
||||||
/** \brief Default Constructor.
|
|
||||||
*
|
|
||||||
* The default constructor is useful in cases in which the user intends to
|
|
||||||
* perform decompositions via LDLT::compute(const MatrixType&).
|
|
||||||
*/
|
|
||||||
LDLT()
|
|
||||||
: m_matrix(),
|
|
||||||
m_transpositions(),
|
|
||||||
m_sign(internal::ZeroSign),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
/** \brief Default Constructor with memory preallocation
|
|
||||||
*
|
|
||||||
* Like the default constructor but with preallocation of the internal data
|
|
||||||
* according to the specified problem \a size.
|
|
||||||
* \sa LDLT()
|
|
||||||
*/
|
|
||||||
explicit LDLT(Index size)
|
|
||||||
: m_matrix(size, size),
|
|
||||||
m_transpositions(size),
|
|
||||||
m_temporary(size),
|
|
||||||
m_sign(internal::ZeroSign),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
/** \brief Constructor with decomposition
|
|
||||||
*
|
|
||||||
* This calculates the decomposition for the input \a matrix.
|
|
||||||
*
|
|
||||||
* \sa LDLT(Index size)
|
|
||||||
*/
|
|
||||||
template<typename InputType>
|
|
||||||
explicit LDLT(const EigenBase<InputType>& matrix)
|
|
||||||
: m_matrix(matrix.rows(), matrix.cols()),
|
|
||||||
m_transpositions(matrix.rows()),
|
|
||||||
m_temporary(matrix.rows()),
|
|
||||||
m_sign(internal::ZeroSign),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{
|
|
||||||
compute(matrix.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Constructs a LDLT factorization from a given matrix
|
|
||||||
*
|
|
||||||
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
|
|
||||||
*
|
|
||||||
* \sa LDLT(const EigenBase&)
|
|
||||||
*/
|
|
||||||
template<typename InputType>
|
|
||||||
explicit LDLT(EigenBase<InputType>& matrix)
|
|
||||||
: m_matrix(matrix.derived()),
|
|
||||||
m_transpositions(matrix.rows()),
|
|
||||||
m_temporary(matrix.rows()),
|
|
||||||
m_sign(internal::ZeroSign),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{
|
|
||||||
compute(matrix.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Clear any existing decomposition
|
|
||||||
* \sa rankUpdate(w,sigma)
|
|
||||||
*/
|
|
||||||
void setZero()
|
|
||||||
{
|
|
||||||
m_isInitialized = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a view of the upper triangular matrix U */
|
|
||||||
inline typename Traits::MatrixU matrixU() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return Traits::getU(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a view of the lower triangular matrix L */
|
|
||||||
inline typename Traits::MatrixL matrixL() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return Traits::getL(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the permutation matrix P as a transposition sequence.
|
|
||||||
*/
|
|
||||||
inline const TranspositionType& transpositionsP() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_transpositions;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the coefficients of the diagonal matrix D */
|
|
||||||
inline Diagonal<const MatrixType> vectorD() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_matrix.diagonal();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns true if the matrix is positive (semidefinite) */
|
|
||||||
inline bool isPositive() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_sign == internal::PositiveSemiDef || m_sign == internal::ZeroSign;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns true if the matrix is negative (semidefinite) */
|
|
||||||
inline bool isNegative(void) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_sign == internal::NegativeSemiDef || m_sign == internal::ZeroSign;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A.
|
|
||||||
*
|
|
||||||
* This function also supports in-place solves using the syntax <tt>x = decompositionObject.solve(x)</tt> .
|
|
||||||
*
|
|
||||||
* \note_about_checking_solutions
|
|
||||||
*
|
|
||||||
* More precisely, this method solves \f$ A x = b \f$ using the decomposition \f$ A = P^T L D L^* P \f$
|
|
||||||
* by solving the systems \f$ P^T y_1 = b \f$, \f$ L y_2 = y_1 \f$, \f$ D y_3 = y_2 \f$,
|
|
||||||
* \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then
|
|
||||||
* \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the
|
|
||||||
* least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function
|
|
||||||
* computes the least-square solution of \f$ A x = b \f$ is \f$ A \f$ is singular.
|
|
||||||
*
|
|
||||||
* \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
|
|
||||||
*/
|
|
||||||
template<typename Rhs>
|
|
||||||
inline const Solve<LDLT, Rhs>
|
|
||||||
solve(const MatrixBase<Rhs>& b) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
eigen_assert(m_matrix.rows()==b.rows()
|
|
||||||
&& "LDLT::solve(): invalid number of rows of the right hand side matrix b");
|
|
||||||
return Solve<LDLT, Rhs>(*this, b.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
bool solveInPlace(MatrixBase<Derived> &bAndX) const;
|
|
||||||
|
|
||||||
template<typename InputType>
|
|
||||||
LDLT& compute(const EigenBase<InputType>& matrix);
|
|
||||||
|
|
||||||
/** \returns an estimate of the reciprocal condition number of the matrix of
|
|
||||||
* which \c *this is the LDLT decomposition.
|
|
||||||
*/
|
|
||||||
RealScalar rcond() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Derived>
|
|
||||||
LDLT& rankUpdate(const MatrixBase<Derived>& w, const RealScalar& alpha=1);
|
|
||||||
|
|
||||||
/** \returns the internal LDLT decomposition matrix
|
|
||||||
*
|
|
||||||
* TODO: document the storage layout
|
|
||||||
*/
|
|
||||||
inline const MatrixType& matrixLDLT() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
MatrixType reconstructedMatrix() const;
|
|
||||||
|
|
||||||
/** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
|
|
||||||
*
|
|
||||||
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
|
||||||
* \code x = decomposition.adjoint().solve(b) \endcode
|
|
||||||
*/
|
|
||||||
const LDLT& adjoint() const { return *this; };
|
|
||||||
|
|
||||||
inline Index rows() const { return m_matrix.rows(); }
|
|
||||||
inline Index cols() const { return m_matrix.cols(); }
|
|
||||||
|
|
||||||
/** \brief Reports whether previous computation was successful.
|
|
||||||
*
|
|
||||||
* \returns \c Success if computation was succesful,
|
|
||||||
* \c NumericalIssue if the factorization failed because of a zero pivot.
|
|
||||||
*/
|
|
||||||
ComputationInfo info() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
return m_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
template<typename RhsType, typename DstType>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
static void check_template_parameters()
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \internal
|
|
||||||
* Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U.
|
|
||||||
* The strict upper part is used during the decomposition, the strict lower
|
|
||||||
* part correspond to the coefficients of L (its diagonal is equal to 1 and
|
|
||||||
* is not stored), and the diagonal entries correspond to D.
|
|
||||||
*/
|
|
||||||
MatrixType m_matrix;
|
|
||||||
RealScalar m_l1_norm;
|
|
||||||
TranspositionType m_transpositions;
|
|
||||||
TmpMatrixType m_temporary;
|
|
||||||
internal::SignMatrix m_sign;
|
|
||||||
bool m_isInitialized;
|
|
||||||
ComputationInfo m_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<int UpLo> struct ldlt_inplace;
|
|
||||||
|
|
||||||
template<> struct ldlt_inplace<Lower>
|
|
||||||
{
|
|
||||||
template<typename MatrixType, typename TranspositionType, typename Workspace>
|
|
||||||
static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
|
|
||||||
{
|
|
||||||
using std::abs;
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename MatrixType::RealScalar RealScalar;
|
|
||||||
typedef typename TranspositionType::StorageIndex IndexType;
|
|
||||||
eigen_assert(mat.rows()==mat.cols());
|
|
||||||
const Index size = mat.rows();
|
|
||||||
bool found_zero_pivot = false;
|
|
||||||
bool ret = true;
|
|
||||||
|
|
||||||
if (size <= 1)
|
|
||||||
{
|
|
||||||
transpositions.setIdentity();
|
|
||||||
if(size==0) sign = ZeroSign;
|
|
||||||
else if (numext::real(mat.coeff(0,0)) > static_cast<RealScalar>(0) ) sign = PositiveSemiDef;
|
|
||||||
else if (numext::real(mat.coeff(0,0)) < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
|
|
||||||
else sign = ZeroSign;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Index k = 0; k < size; ++k)
|
|
||||||
{
|
|
||||||
// Find largest diagonal element
|
|
||||||
Index index_of_biggest_in_corner;
|
|
||||||
mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner);
|
|
||||||
index_of_biggest_in_corner += k;
|
|
||||||
|
|
||||||
transpositions.coeffRef(k) = IndexType(index_of_biggest_in_corner);
|
|
||||||
if(k != index_of_biggest_in_corner)
|
|
||||||
{
|
|
||||||
// apply the transposition while taking care to consider only
|
|
||||||
// the lower triangular part
|
|
||||||
Index s = size-index_of_biggest_in_corner-1; // trailing size after the biggest element
|
|
||||||
mat.row(k).head(k).swap(mat.row(index_of_biggest_in_corner).head(k));
|
|
||||||
mat.col(k).tail(s).swap(mat.col(index_of_biggest_in_corner).tail(s));
|
|
||||||
std::swap(mat.coeffRef(k,k),mat.coeffRef(index_of_biggest_in_corner,index_of_biggest_in_corner));
|
|
||||||
for(Index i=k+1;i<index_of_biggest_in_corner;++i)
|
|
||||||
{
|
|
||||||
Scalar tmp = mat.coeffRef(i,k);
|
|
||||||
mat.coeffRef(i,k) = numext::conj(mat.coeffRef(index_of_biggest_in_corner,i));
|
|
||||||
mat.coeffRef(index_of_biggest_in_corner,i) = numext::conj(tmp);
|
|
||||||
}
|
|
||||||
if(NumTraits<Scalar>::IsComplex)
|
|
||||||
mat.coeffRef(index_of_biggest_in_corner,k) = numext::conj(mat.coeff(index_of_biggest_in_corner,k));
|
|
||||||
}
|
|
||||||
|
|
||||||
// partition the matrix:
|
|
||||||
// A00 | - | -
|
|
||||||
// lu = A10 | A11 | -
|
|
||||||
// A20 | A21 | A22
|
|
||||||
Index rs = size - k - 1;
|
|
||||||
Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
|
|
||||||
Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
|
|
||||||
Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
|
|
||||||
|
|
||||||
if(k>0)
|
|
||||||
{
|
|
||||||
temp.head(k) = mat.diagonal().real().head(k).asDiagonal() * A10.adjoint();
|
|
||||||
mat.coeffRef(k,k) -= (A10 * temp.head(k)).value();
|
|
||||||
if(rs>0)
|
|
||||||
A21.noalias() -= A20 * temp.head(k);
|
|
||||||
}
|
|
||||||
|
|
||||||
// In some previous versions of Eigen (e.g., 3.2.1), the scaling was omitted if the pivot
|
|
||||||
// was smaller than the cutoff value. However, since LDLT is not rank-revealing
|
|
||||||
// we should only make sure that we do not introduce INF or NaN values.
|
|
||||||
// Remark that LAPACK also uses 0 as the cutoff value.
|
|
||||||
RealScalar realAkk = numext::real(mat.coeffRef(k,k));
|
|
||||||
bool pivot_is_valid = (abs(realAkk) > RealScalar(0));
|
|
||||||
|
|
||||||
if(k==0 && !pivot_is_valid)
|
|
||||||
{
|
|
||||||
// The entire diagonal is zero, there is nothing more to do
|
|
||||||
// except filling the transpositions, and checking whether the matrix is zero.
|
|
||||||
sign = ZeroSign;
|
|
||||||
for(Index j = 0; j<size; ++j)
|
|
||||||
{
|
|
||||||
transpositions.coeffRef(j) = IndexType(j);
|
|
||||||
ret = ret && (mat.col(j).tail(size-j-1).array()==Scalar(0)).all();
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((rs>0) && pivot_is_valid)
|
|
||||||
A21 /= realAkk;
|
|
||||||
else if(rs>0)
|
|
||||||
ret = ret && (A21.array()==Scalar(0)).all();
|
|
||||||
|
|
||||||
if(found_zero_pivot && pivot_is_valid) ret = false; // factorization failed
|
|
||||||
else if(!pivot_is_valid) found_zero_pivot = true;
|
|
||||||
|
|
||||||
if (sign == PositiveSemiDef) {
|
|
||||||
if (realAkk < static_cast<RealScalar>(0)) sign = Indefinite;
|
|
||||||
} else if (sign == NegativeSemiDef) {
|
|
||||||
if (realAkk > static_cast<RealScalar>(0)) sign = Indefinite;
|
|
||||||
} else if (sign == ZeroSign) {
|
|
||||||
if (realAkk > static_cast<RealScalar>(0)) sign = PositiveSemiDef;
|
|
||||||
else if (realAkk < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference for the algorithm: Davis and Hager, "Multiple Rank
|
|
||||||
// Modifications of a Sparse Cholesky Factorization" (Algorithm 1)
|
|
||||||
// Trivial rearrangements of their computations (Timothy E. Holy)
|
|
||||||
// allow their algorithm to work for rank-1 updates even if the
|
|
||||||
// original matrix is not of full rank.
|
|
||||||
// Here only rank-1 updates are implemented, to reduce the
|
|
||||||
// requirement for intermediate storage and improve accuracy
|
|
||||||
template<typename MatrixType, typename WDerived>
|
|
||||||
static bool updateInPlace(MatrixType& mat, MatrixBase<WDerived>& w, const typename MatrixType::RealScalar& sigma=1)
|
|
||||||
{
|
|
||||||
using numext::isfinite;
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename MatrixType::RealScalar RealScalar;
|
|
||||||
|
|
||||||
const Index size = mat.rows();
|
|
||||||
eigen_assert(mat.cols() == size && w.size()==size);
|
|
||||||
|
|
||||||
RealScalar alpha = 1;
|
|
||||||
|
|
||||||
// Apply the update
|
|
||||||
for (Index j = 0; j < size; j++)
|
|
||||||
{
|
|
||||||
// Check for termination due to an original decomposition of low-rank
|
|
||||||
if (!(isfinite)(alpha))
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Update the diagonal terms
|
|
||||||
RealScalar dj = numext::real(mat.coeff(j,j));
|
|
||||||
Scalar wj = w.coeff(j);
|
|
||||||
RealScalar swj2 = sigma*numext::abs2(wj);
|
|
||||||
RealScalar gamma = dj*alpha + swj2;
|
|
||||||
|
|
||||||
mat.coeffRef(j,j) += swj2/alpha;
|
|
||||||
alpha += swj2/dj;
|
|
||||||
|
|
||||||
|
|
||||||
// Update the terms of L
|
|
||||||
Index rs = size-j-1;
|
|
||||||
w.tail(rs) -= wj * mat.col(j).tail(rs);
|
|
||||||
if(gamma != 0)
|
|
||||||
mat.col(j).tail(rs) += (sigma*numext::conj(wj)/gamma)*w.tail(rs);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
|
|
||||||
static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w, const typename MatrixType::RealScalar& sigma=1)
|
|
||||||
{
|
|
||||||
// Apply the permutation to the input w
|
|
||||||
tmp = transpositions * w;
|
|
||||||
|
|
||||||
return ldlt_inplace<Lower>::updateInPlace(mat,tmp,sigma);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<> struct ldlt_inplace<Upper>
|
|
||||||
{
|
|
||||||
template<typename MatrixType, typename TranspositionType, typename Workspace>
|
|
||||||
static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
|
|
||||||
{
|
|
||||||
Transpose<MatrixType> matt(mat);
|
|
||||||
return ldlt_inplace<Lower>::unblocked(matt, transpositions, temp, sign);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
|
|
||||||
static EIGEN_STRONG_INLINE bool update(MatrixType& mat, TranspositionType& transpositions, Workspace& tmp, WType& w, const typename MatrixType::RealScalar& sigma=1)
|
|
||||||
{
|
|
||||||
Transpose<MatrixType> matt(mat);
|
|
||||||
return ldlt_inplace<Lower>::update(matt, transpositions, tmp, w.conjugate(), sigma);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename MatrixType> struct LDLT_Traits<MatrixType,Lower>
|
|
||||||
{
|
|
||||||
typedef const TriangularView<const MatrixType, UnitLower> MatrixL;
|
|
||||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitUpper> MatrixU;
|
|
||||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
|
||||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename MatrixType> struct LDLT_Traits<MatrixType,Upper>
|
|
||||||
{
|
|
||||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitLower> MatrixL;
|
|
||||||
typedef const TriangularView<const MatrixType, UnitUpper> MatrixU;
|
|
||||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
|
||||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
/** Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of \a matrix
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
template<typename InputType>
|
|
||||||
LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
|
|
||||||
{
|
|
||||||
check_template_parameters();
|
|
||||||
|
|
||||||
eigen_assert(a.rows()==a.cols());
|
|
||||||
const Index size = a.rows();
|
|
||||||
|
|
||||||
m_matrix = a.derived();
|
|
||||||
|
|
||||||
// Compute matrix L1 norm = max abs column sum.
|
|
||||||
m_l1_norm = RealScalar(0);
|
|
||||||
// TODO move this code to SelfAdjointView
|
|
||||||
for (Index col = 0; col < size; ++col) {
|
|
||||||
RealScalar abs_col_sum;
|
|
||||||
if (_UpLo == Lower)
|
|
||||||
abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
|
|
||||||
else
|
|
||||||
abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
|
|
||||||
if (abs_col_sum > m_l1_norm)
|
|
||||||
m_l1_norm = abs_col_sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_transpositions.resize(size);
|
|
||||||
m_isInitialized = false;
|
|
||||||
m_temporary.resize(size);
|
|
||||||
m_sign = internal::ZeroSign;
|
|
||||||
|
|
||||||
m_info = internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign) ? Success : NumericalIssue;
|
|
||||||
|
|
||||||
m_isInitialized = true;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Update the LDLT decomposition: given A = L D L^T, efficiently compute the decomposition of A + sigma w w^T.
|
|
||||||
* \param w a vector to be incorporated into the decomposition.
|
|
||||||
* \param sigma a scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column vectors. Optional; default value is +1.
|
|
||||||
* \sa setZero()
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
template<typename Derived>
|
|
||||||
LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::rankUpdate(const MatrixBase<Derived>& w, const typename LDLT<MatrixType,_UpLo>::RealScalar& sigma)
|
|
||||||
{
|
|
||||||
typedef typename TranspositionType::StorageIndex IndexType;
|
|
||||||
const Index size = w.rows();
|
|
||||||
if (m_isInitialized)
|
|
||||||
{
|
|
||||||
eigen_assert(m_matrix.rows()==size);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_matrix.resize(size,size);
|
|
||||||
m_matrix.setZero();
|
|
||||||
m_transpositions.resize(size);
|
|
||||||
for (Index i = 0; i < size; i++)
|
|
||||||
m_transpositions.coeffRef(i) = IndexType(i);
|
|
||||||
m_temporary.resize(size);
|
|
||||||
m_sign = sigma>=0 ? internal::PositiveSemiDef : internal::NegativeSemiDef;
|
|
||||||
m_isInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal::ldlt_inplace<UpLo>::update(m_matrix, m_transpositions, m_temporary, w, sigma);
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
template<typename _MatrixType, int _UpLo>
|
|
||||||
template<typename RhsType, typename DstType>
|
|
||||||
void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
|
|
||||||
{
|
|
||||||
eigen_assert(rhs.rows() == rows());
|
|
||||||
// dst = P b
|
|
||||||
dst = m_transpositions * rhs;
|
|
||||||
|
|
||||||
// dst = L^-1 (P b)
|
|
||||||
matrixL().solveInPlace(dst);
|
|
||||||
|
|
||||||
// dst = D^-1 (L^-1 P b)
|
|
||||||
// more precisely, use pseudo-inverse of D (see bug 241)
|
|
||||||
using std::abs;
|
|
||||||
const typename Diagonal<const MatrixType>::RealReturnType vecD(vectorD());
|
|
||||||
// In some previous versions, tolerance was set to the max of 1/highest (or rather numeric_limits::min())
|
|
||||||
// and the maximal diagonal entry * epsilon as motivated by LAPACK's xGELSS:
|
|
||||||
// RealScalar tolerance = numext::maxi(vecD.array().abs().maxCoeff() * NumTraits<RealScalar>::epsilon(),RealScalar(1) / NumTraits<RealScalar>::highest());
|
|
||||||
// However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest
|
|
||||||
// diagonal element is not well justified and leads to numerical issues in some cases.
|
|
||||||
// Moreover, Lapack's xSYTRS routines use 0 for the tolerance.
|
|
||||||
// Using numeric_limits::min() gives us more robustness to denormals.
|
|
||||||
RealScalar tolerance = (std::numeric_limits<RealScalar>::min)();
|
|
||||||
|
|
||||||
for (Index i = 0; i < vecD.size(); ++i)
|
|
||||||
{
|
|
||||||
if(abs(vecD(i)) > tolerance)
|
|
||||||
dst.row(i) /= vecD(i);
|
|
||||||
else
|
|
||||||
dst.row(i).setZero();
|
|
||||||
}
|
|
||||||
|
|
||||||
// dst = L^-T (D^-1 L^-1 P b)
|
|
||||||
matrixU().solveInPlace(dst);
|
|
||||||
|
|
||||||
// dst = P^-1 (L^-T D^-1 L^-1 P b) = A^-1 b
|
|
||||||
dst = m_transpositions.transpose() * dst;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** \internal use x = ldlt_object.solve(x);
|
|
||||||
*
|
|
||||||
* This is the \em in-place version of solve().
|
|
||||||
*
|
|
||||||
* \param bAndX represents both the right-hand side matrix b and result x.
|
|
||||||
*
|
|
||||||
* \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD.
|
|
||||||
*
|
|
||||||
* This version avoids a copy when the right hand side matrix b is not
|
|
||||||
* needed anymore.
|
|
||||||
*
|
|
||||||
* \sa LDLT::solve(), MatrixBase::ldlt()
|
|
||||||
*/
|
|
||||||
template<typename MatrixType,int _UpLo>
|
|
||||||
template<typename Derived>
|
|
||||||
bool LDLT<MatrixType,_UpLo>::solveInPlace(MatrixBase<Derived> &bAndX) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
eigen_assert(m_matrix.rows() == bAndX.rows());
|
|
||||||
|
|
||||||
bAndX = this->solve(bAndX);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the matrix represented by the decomposition,
|
|
||||||
* i.e., it returns the product: P^T L D L^* P.
|
|
||||||
* This function is provided for debug purpose. */
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
MatrixType LDLT<MatrixType,_UpLo>::reconstructedMatrix() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
|
||||||
const Index size = m_matrix.rows();
|
|
||||||
MatrixType res(size,size);
|
|
||||||
|
|
||||||
// P
|
|
||||||
res.setIdentity();
|
|
||||||
res = transpositionsP() * res;
|
|
||||||
// L^* P
|
|
||||||
res = matrixU() * res;
|
|
||||||
// D(L^*P)
|
|
||||||
res = vectorD().real().asDiagonal() * res;
|
|
||||||
// L(DL^*P)
|
|
||||||
res = matrixL() * res;
|
|
||||||
// P^T (LDL^*P)
|
|
||||||
res = transpositionsP().transpose() * res;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \cholesky_module
|
|
||||||
* \returns the Cholesky decomposition with full pivoting without square root of \c *this
|
|
||||||
* \sa MatrixBase::ldlt()
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, unsigned int UpLo>
|
|
||||||
inline const LDLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
|
||||||
SelfAdjointView<MatrixType, UpLo>::ldlt() const
|
|
||||||
{
|
|
||||||
return LDLT<PlainObject,UpLo>(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \cholesky_module
|
|
||||||
* \returns the Cholesky decomposition with full pivoting without square root of \c *this
|
|
||||||
* \sa SelfAdjointView::ldlt()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline const LDLT<typename MatrixBase<Derived>::PlainObject>
|
|
||||||
MatrixBase<Derived>::ldlt() const
|
|
||||||
{
|
|
||||||
return LDLT<PlainObject>(derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_LDLT_H
|
|
||||||
@@ -1,542 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_LLT_H
|
|
||||||
#define EIGEN_LLT_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal{
|
|
||||||
template<typename MatrixType, int UpLo> struct LLT_Traits;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \ingroup Cholesky_Module
|
|
||||||
*
|
|
||||||
* \class LLT
|
|
||||||
*
|
|
||||||
* \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the matrix of which we are computing the LL^T Cholesky decomposition
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
|
|
||||||
* The other triangular part won't be read.
|
|
||||||
*
|
|
||||||
* This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
|
|
||||||
* matrix A such that A = LL^* = U^*U, where L is lower triangular.
|
|
||||||
*
|
|
||||||
* While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
|
|
||||||
* for that purpose, we recommend the Cholesky decomposition without square root which is more stable
|
|
||||||
* and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
|
|
||||||
* situations like generalised eigen problems with hermitian matrices.
|
|
||||||
*
|
|
||||||
* Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices,
|
|
||||||
* use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations
|
|
||||||
* has a solution.
|
|
||||||
*
|
|
||||||
* Example: \include LLT_example.cpp
|
|
||||||
* Output: \verbinclude LLT_example.out
|
|
||||||
*
|
|
||||||
* \b Performance: for best performance, it is recommended to use a column-major storage format
|
|
||||||
* with the Lower triangular part (the default), or, equivalently, a row-major storage format
|
|
||||||
* with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
|
|
||||||
* step, and rank-updates can be up to 3 times slower.
|
|
||||||
*
|
|
||||||
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
|
||||||
*
|
|
||||||
* Note that during the decomposition, only the lower (or upper, as defined by _UpLo) triangular part of A is considered.
|
|
||||||
* Therefore, the strict lower part does not have to store correct values.
|
|
||||||
*
|
|
||||||
* \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo> class LLT
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
enum {
|
|
||||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
|
||||||
};
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
|
||||||
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
|
||||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PacketSize = internal::packet_traits<Scalar>::size,
|
|
||||||
AlignmentMask = int(PacketSize)-1,
|
|
||||||
UpLo = _UpLo
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef internal::LLT_Traits<MatrixType,UpLo> Traits;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Default Constructor.
|
|
||||||
*
|
|
||||||
* The default constructor is useful in cases in which the user intends to
|
|
||||||
* perform decompositions via LLT::compute(const MatrixType&).
|
|
||||||
*/
|
|
||||||
LLT() : m_matrix(), m_isInitialized(false) {}
|
|
||||||
|
|
||||||
/** \brief Default Constructor with memory preallocation
|
|
||||||
*
|
|
||||||
* Like the default constructor but with preallocation of the internal data
|
|
||||||
* according to the specified problem \a size.
|
|
||||||
* \sa LLT()
|
|
||||||
*/
|
|
||||||
explicit LLT(Index size) : m_matrix(size, size),
|
|
||||||
m_isInitialized(false) {}
|
|
||||||
|
|
||||||
template<typename InputType>
|
|
||||||
explicit LLT(const EigenBase<InputType>& matrix)
|
|
||||||
: m_matrix(matrix.rows(), matrix.cols()),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{
|
|
||||||
compute(matrix.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Constructs a LDLT factorization from a given matrix
|
|
||||||
*
|
|
||||||
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
|
|
||||||
* \c MatrixType is a Eigen::Ref.
|
|
||||||
*
|
|
||||||
* \sa LLT(const EigenBase&)
|
|
||||||
*/
|
|
||||||
template<typename InputType>
|
|
||||||
explicit LLT(EigenBase<InputType>& matrix)
|
|
||||||
: m_matrix(matrix.derived()),
|
|
||||||
m_isInitialized(false)
|
|
||||||
{
|
|
||||||
compute(matrix.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a view of the upper triangular matrix U */
|
|
||||||
inline typename Traits::MatrixU matrixU() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
return Traits::getU(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a view of the lower triangular matrix L */
|
|
||||||
inline typename Traits::MatrixL matrixL() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
return Traits::getL(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
|
|
||||||
*
|
|
||||||
* Since this LLT class assumes anyway that the matrix A is invertible, the solution
|
|
||||||
* theoretically exists and is unique regardless of b.
|
|
||||||
*
|
|
||||||
* Example: \include LLT_solve.cpp
|
|
||||||
* Output: \verbinclude LLT_solve.out
|
|
||||||
*
|
|
||||||
* \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
|
|
||||||
*/
|
|
||||||
template<typename Rhs>
|
|
||||||
inline const Solve<LLT, Rhs>
|
|
||||||
solve(const MatrixBase<Rhs>& b) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
eigen_assert(m_matrix.rows()==b.rows()
|
|
||||||
&& "LLT::solve(): invalid number of rows of the right hand side matrix b");
|
|
||||||
return Solve<LLT, Rhs>(*this, b.derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
void solveInPlace(const MatrixBase<Derived> &bAndX) const;
|
|
||||||
|
|
||||||
template<typename InputType>
|
|
||||||
LLT& compute(const EigenBase<InputType>& matrix);
|
|
||||||
|
|
||||||
/** \returns an estimate of the reciprocal condition number of the matrix of
|
|
||||||
* which \c *this is the Cholesky decomposition.
|
|
||||||
*/
|
|
||||||
RealScalar rcond() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
|
|
||||||
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the LLT decomposition matrix
|
|
||||||
*
|
|
||||||
* TODO: document the storage layout
|
|
||||||
*/
|
|
||||||
inline const MatrixType& matrixLLT() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
return m_matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
MatrixType reconstructedMatrix() const;
|
|
||||||
|
|
||||||
|
|
||||||
/** \brief Reports whether previous computation was successful.
|
|
||||||
*
|
|
||||||
* \returns \c Success if computation was succesful,
|
|
||||||
* \c NumericalIssue if the matrix.appears not to be positive definite.
|
|
||||||
*/
|
|
||||||
ComputationInfo info() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
return m_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
|
|
||||||
*
|
|
||||||
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
|
||||||
* \code x = decomposition.adjoint().solve(b) \endcode
|
|
||||||
*/
|
|
||||||
const LLT& adjoint() const { return *this; };
|
|
||||||
|
|
||||||
inline Index rows() const { return m_matrix.rows(); }
|
|
||||||
inline Index cols() const { return m_matrix.cols(); }
|
|
||||||
|
|
||||||
template<typename VectorType>
|
|
||||||
LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
template<typename RhsType, typename DstType>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
static void check_template_parameters()
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \internal
|
|
||||||
* Used to compute and store L
|
|
||||||
* The strict upper part is not used and even not initialized.
|
|
||||||
*/
|
|
||||||
MatrixType m_matrix;
|
|
||||||
RealScalar m_l1_norm;
|
|
||||||
bool m_isInitialized;
|
|
||||||
ComputationInfo m_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Scalar, int UpLo> struct llt_inplace;
|
|
||||||
|
|
||||||
template<typename MatrixType, typename VectorType>
|
|
||||||
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma)
|
|
||||||
{
|
|
||||||
using std::sqrt;
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename MatrixType::RealScalar RealScalar;
|
|
||||||
typedef typename MatrixType::ColXpr ColXpr;
|
|
||||||
typedef typename internal::remove_all<ColXpr>::type ColXprCleaned;
|
|
||||||
typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
|
|
||||||
typedef Matrix<Scalar,Dynamic,1> TempVectorType;
|
|
||||||
typedef typename TempVectorType::SegmentReturnType TempVecSegment;
|
|
||||||
|
|
||||||
Index n = mat.cols();
|
|
||||||
eigen_assert(mat.rows()==n && vec.size()==n);
|
|
||||||
|
|
||||||
TempVectorType temp;
|
|
||||||
|
|
||||||
if(sigma>0)
|
|
||||||
{
|
|
||||||
// This version is based on Givens rotations.
|
|
||||||
// It is faster than the other one below, but only works for updates,
|
|
||||||
// i.e., for sigma > 0
|
|
||||||
temp = sqrt(sigma) * vec;
|
|
||||||
|
|
||||||
for(Index i=0; i<n; ++i)
|
|
||||||
{
|
|
||||||
JacobiRotation<Scalar> g;
|
|
||||||
g.makeGivens(mat(i,i), -temp(i), &mat(i,i));
|
|
||||||
|
|
||||||
Index rs = n-i-1;
|
|
||||||
if(rs>0)
|
|
||||||
{
|
|
||||||
ColXprSegment x(mat.col(i).tail(rs));
|
|
||||||
TempVecSegment y(temp.tail(rs));
|
|
||||||
apply_rotation_in_the_plane(x, y, g);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
temp = vec;
|
|
||||||
RealScalar beta = 1;
|
|
||||||
for(Index j=0; j<n; ++j)
|
|
||||||
{
|
|
||||||
RealScalar Ljj = numext::real(mat.coeff(j,j));
|
|
||||||
RealScalar dj = numext::abs2(Ljj);
|
|
||||||
Scalar wj = temp.coeff(j);
|
|
||||||
RealScalar swj2 = sigma*numext::abs2(wj);
|
|
||||||
RealScalar gamma = dj*beta + swj2;
|
|
||||||
|
|
||||||
RealScalar x = dj + swj2/beta;
|
|
||||||
if (x<=RealScalar(0))
|
|
||||||
return j;
|
|
||||||
RealScalar nLjj = sqrt(x);
|
|
||||||
mat.coeffRef(j,j) = nLjj;
|
|
||||||
beta += swj2/dj;
|
|
||||||
|
|
||||||
// Update the terms of L
|
|
||||||
Index rs = n-j-1;
|
|
||||||
if(rs)
|
|
||||||
{
|
|
||||||
temp.tail(rs) -= (wj/Ljj) * mat.col(j).tail(rs);
|
|
||||||
if(gamma != 0)
|
|
||||||
mat.col(j).tail(rs) = (nLjj/Ljj) * mat.col(j).tail(rs) + (nLjj * sigma*numext::conj(wj)/gamma)*temp.tail(rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Scalar> struct llt_inplace<Scalar, Lower>
|
|
||||||
{
|
|
||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
||||||
template<typename MatrixType>
|
|
||||||
static Index unblocked(MatrixType& mat)
|
|
||||||
{
|
|
||||||
using std::sqrt;
|
|
||||||
|
|
||||||
eigen_assert(mat.rows()==mat.cols());
|
|
||||||
const Index size = mat.rows();
|
|
||||||
for(Index k = 0; k < size; ++k)
|
|
||||||
{
|
|
||||||
Index rs = size-k-1; // remaining size
|
|
||||||
|
|
||||||
Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
|
|
||||||
Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
|
|
||||||
Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
|
|
||||||
|
|
||||||
RealScalar x = numext::real(mat.coeff(k,k));
|
|
||||||
if (k>0) x -= A10.squaredNorm();
|
|
||||||
if (x<=RealScalar(0))
|
|
||||||
return k;
|
|
||||||
mat.coeffRef(k,k) = x = sqrt(x);
|
|
||||||
if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint();
|
|
||||||
if (rs>0) A21 /= x;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename MatrixType>
|
|
||||||
static Index blocked(MatrixType& m)
|
|
||||||
{
|
|
||||||
eigen_assert(m.rows()==m.cols());
|
|
||||||
Index size = m.rows();
|
|
||||||
if(size<32)
|
|
||||||
return unblocked(m);
|
|
||||||
|
|
||||||
Index blockSize = size/8;
|
|
||||||
blockSize = (blockSize/16)*16;
|
|
||||||
blockSize = (std::min)((std::max)(blockSize,Index(8)), Index(128));
|
|
||||||
|
|
||||||
for (Index k=0; k<size; k+=blockSize)
|
|
||||||
{
|
|
||||||
// partition the matrix:
|
|
||||||
// A00 | - | -
|
|
||||||
// lu = A10 | A11 | -
|
|
||||||
// A20 | A21 | A22
|
|
||||||
Index bs = (std::min)(blockSize, size-k);
|
|
||||||
Index rs = size - k - bs;
|
|
||||||
Block<MatrixType,Dynamic,Dynamic> A11(m,k, k, bs,bs);
|
|
||||||
Block<MatrixType,Dynamic,Dynamic> A21(m,k+bs,k, rs,bs);
|
|
||||||
Block<MatrixType,Dynamic,Dynamic> A22(m,k+bs,k+bs,rs,rs);
|
|
||||||
|
|
||||||
Index ret;
|
|
||||||
if((ret=unblocked(A11))>=0) return k+ret;
|
|
||||||
if(rs>0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
|
|
||||||
if(rs>0) A22.template selfadjointView<Lower>().rankUpdate(A21,typename NumTraits<RealScalar>::Literal(-1)); // bottleneck
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename MatrixType, typename VectorType>
|
|
||||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
||||||
{
|
|
||||||
return Eigen::internal::llt_rank_update_lower(mat, vec, sigma);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Scalar> struct llt_inplace<Scalar, Upper>
|
|
||||||
{
|
|
||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
||||||
|
|
||||||
template<typename MatrixType>
|
|
||||||
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat)
|
|
||||||
{
|
|
||||||
Transpose<MatrixType> matt(mat);
|
|
||||||
return llt_inplace<Scalar, Lower>::unblocked(matt);
|
|
||||||
}
|
|
||||||
template<typename MatrixType>
|
|
||||||
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat)
|
|
||||||
{
|
|
||||||
Transpose<MatrixType> matt(mat);
|
|
||||||
return llt_inplace<Scalar, Lower>::blocked(matt);
|
|
||||||
}
|
|
||||||
template<typename MatrixType, typename VectorType>
|
|
||||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
||||||
{
|
|
||||||
Transpose<MatrixType> matt(mat);
|
|
||||||
return llt_inplace<Scalar, Lower>::rankUpdate(matt, vec.conjugate(), sigma);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename MatrixType> struct LLT_Traits<MatrixType,Lower>
|
|
||||||
{
|
|
||||||
typedef const TriangularView<const MatrixType, Lower> MatrixL;
|
|
||||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Upper> MatrixU;
|
|
||||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
|
||||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
|
||||||
static bool inplace_decomposition(MatrixType& m)
|
|
||||||
{ return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m)==-1; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename MatrixType> struct LLT_Traits<MatrixType,Upper>
|
|
||||||
{
|
|
||||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Lower> MatrixL;
|
|
||||||
typedef const TriangularView<const MatrixType, Upper> MatrixU;
|
|
||||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
|
||||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
|
||||||
static bool inplace_decomposition(MatrixType& m)
|
|
||||||
{ return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m)==-1; }
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix
|
|
||||||
*
|
|
||||||
* \returns a reference to *this
|
|
||||||
*
|
|
||||||
* Example: \include TutorialLinAlgComputeTwice.cpp
|
|
||||||
* Output: \verbinclude TutorialLinAlgComputeTwice.out
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
template<typename InputType>
|
|
||||||
LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
|
|
||||||
{
|
|
||||||
check_template_parameters();
|
|
||||||
|
|
||||||
eigen_assert(a.rows()==a.cols());
|
|
||||||
const Index size = a.rows();
|
|
||||||
m_matrix.resize(size, size);
|
|
||||||
if (!internal::is_same_dense(m_matrix, a.derived()))
|
|
||||||
m_matrix = a.derived();
|
|
||||||
|
|
||||||
// Compute matrix L1 norm = max abs column sum.
|
|
||||||
m_l1_norm = RealScalar(0);
|
|
||||||
// TODO move this code to SelfAdjointView
|
|
||||||
for (Index col = 0; col < size; ++col) {
|
|
||||||
RealScalar abs_col_sum;
|
|
||||||
if (_UpLo == Lower)
|
|
||||||
abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
|
|
||||||
else
|
|
||||||
abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
|
|
||||||
if (abs_col_sum > m_l1_norm)
|
|
||||||
m_l1_norm = abs_col_sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_isInitialized = true;
|
|
||||||
bool ok = Traits::inplace_decomposition(m_matrix);
|
|
||||||
m_info = ok ? Success : NumericalIssue;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Performs a rank one update (or dowdate) of the current decomposition.
|
|
||||||
* If A = LL^* before the rank one update,
|
|
||||||
* then after it we have LL^* = A + sigma * v v^* where \a v must be a vector
|
|
||||||
* of same dimension.
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo>
|
|
||||||
template<typename VectorType>
|
|
||||||
LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
|
|
||||||
eigen_assert(v.size()==m_matrix.cols());
|
|
||||||
eigen_assert(m_isInitialized);
|
|
||||||
if(internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix,v,sigma)>=0)
|
|
||||||
m_info = NumericalIssue;
|
|
||||||
else
|
|
||||||
m_info = Success;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
template<typename _MatrixType,int _UpLo>
|
|
||||||
template<typename RhsType, typename DstType>
|
|
||||||
void LLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
|
|
||||||
{
|
|
||||||
dst = rhs;
|
|
||||||
solveInPlace(dst);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** \internal use x = llt_object.solve(x);
|
|
||||||
*
|
|
||||||
* This is the \em in-place version of solve().
|
|
||||||
*
|
|
||||||
* \param bAndX represents both the right-hand side matrix b and result x.
|
|
||||||
*
|
|
||||||
* This version avoids a copy when the right hand side matrix b is not needed anymore.
|
|
||||||
*
|
|
||||||
* \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
|
|
||||||
* This function will const_cast it, so constness isn't honored here.
|
|
||||||
*
|
|
||||||
* \sa LLT::solve(), MatrixBase::llt()
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
template<typename Derived>
|
|
||||||
void LLT<MatrixType,_UpLo>::solveInPlace(const MatrixBase<Derived> &bAndX) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
eigen_assert(m_matrix.rows()==bAndX.rows());
|
|
||||||
matrixL().solveInPlace(bAndX);
|
|
||||||
matrixU().solveInPlace(bAndX);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the matrix represented by the decomposition,
|
|
||||||
* i.e., it returns the product: L L^*.
|
|
||||||
* This function is provided for debug purpose. */
|
|
||||||
template<typename MatrixType, int _UpLo>
|
|
||||||
MatrixType LLT<MatrixType,_UpLo>::reconstructedMatrix() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
||||||
return matrixL() * matrixL().adjoint().toDenseMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \cholesky_module
|
|
||||||
* \returns the LLT decomposition of \c *this
|
|
||||||
* \sa SelfAdjointView::llt()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline const LLT<typename MatrixBase<Derived>::PlainObject>
|
|
||||||
MatrixBase<Derived>::llt() const
|
|
||||||
{
|
|
||||||
return LLT<PlainObject>(derived());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \cholesky_module
|
|
||||||
* \returns the LLT decomposition of \c *this
|
|
||||||
* \sa SelfAdjointView::llt()
|
|
||||||
*/
|
|
||||||
template<typename MatrixType, unsigned int UpLo>
|
|
||||||
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
|
||||||
SelfAdjointView<MatrixType, UpLo>::llt() const
|
|
||||||
{
|
|
||||||
return LLT<PlainObject,UpLo>(m_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_LLT_H
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2011, Intel Corporation. All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Intel Corporation nor the names of its contributors may
|
|
||||||
be used to endorse or promote products derived from this software without
|
|
||||||
specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
********************************************************************************
|
|
||||||
* Content : Eigen bindings to LAPACKe
|
|
||||||
* LLt decomposition based on LAPACKE_?potrf function.
|
|
||||||
********************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef EIGEN_LLT_LAPACKE_H
|
|
||||||
#define EIGEN_LLT_LAPACKE_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Scalar> struct lapacke_llt;
|
|
||||||
|
|
||||||
#define EIGEN_LAPACKE_LLT(EIGTYPE, BLASTYPE, LAPACKE_PREFIX) \
|
|
||||||
template<> struct lapacke_llt<EIGTYPE> \
|
|
||||||
{ \
|
|
||||||
template<typename MatrixType> \
|
|
||||||
static inline Index potrf(MatrixType& m, char uplo) \
|
|
||||||
{ \
|
|
||||||
lapack_int matrix_order; \
|
|
||||||
lapack_int size, lda, info, StorageOrder; \
|
|
||||||
EIGTYPE* a; \
|
|
||||||
eigen_assert(m.rows()==m.cols()); \
|
|
||||||
/* Set up parameters for ?potrf */ \
|
|
||||||
size = convert_index<lapack_int>(m.rows()); \
|
|
||||||
StorageOrder = MatrixType::Flags&RowMajorBit?RowMajor:ColMajor; \
|
|
||||||
matrix_order = StorageOrder==RowMajor ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \
|
|
||||||
a = &(m.coeffRef(0,0)); \
|
|
||||||
lda = convert_index<lapack_int>(m.outerStride()); \
|
|
||||||
\
|
|
||||||
info = LAPACKE_##LAPACKE_PREFIX##potrf( matrix_order, uplo, size, (BLASTYPE*)a, lda ); \
|
|
||||||
info = (info==0) ? -1 : info>0 ? info-1 : size; \
|
|
||||||
return info; \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
template<> struct llt_inplace<EIGTYPE, Lower> \
|
|
||||||
{ \
|
|
||||||
template<typename MatrixType> \
|
|
||||||
static Index blocked(MatrixType& m) \
|
|
||||||
{ \
|
|
||||||
return lapacke_llt<EIGTYPE>::potrf(m, 'L'); \
|
|
||||||
} \
|
|
||||||
template<typename MatrixType, typename VectorType> \
|
|
||||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
|
|
||||||
{ return Eigen::internal::llt_rank_update_lower(mat, vec, sigma); } \
|
|
||||||
}; \
|
|
||||||
template<> struct llt_inplace<EIGTYPE, Upper> \
|
|
||||||
{ \
|
|
||||||
template<typename MatrixType> \
|
|
||||||
static Index blocked(MatrixType& m) \
|
|
||||||
{ \
|
|
||||||
return lapacke_llt<EIGTYPE>::potrf(m, 'U'); \
|
|
||||||
} \
|
|
||||||
template<typename MatrixType, typename VectorType> \
|
|
||||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
|
|
||||||
{ \
|
|
||||||
Transpose<MatrixType> matt(mat); \
|
|
||||||
return llt_inplace<EIGTYPE, Lower>::rankUpdate(matt, vec.conjugate(), sigma); \
|
|
||||||
} \
|
|
||||||
};
|
|
||||||
|
|
||||||
EIGEN_LAPACKE_LLT(double, double, d)
|
|
||||||
EIGEN_LAPACKE_LLT(float, float, s)
|
|
||||||
EIGEN_LAPACKE_LLT(dcomplex, lapack_complex_double, z)
|
|
||||||
EIGEN_LAPACKE_LLT(scomplex, lapack_complex_float, c)
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_LLT_LAPACKE_H
|
|
||||||
@@ -1,639 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_CHOLMODSUPPORT_H
|
|
||||||
#define EIGEN_CHOLMODSUPPORT_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Scalar> struct cholmod_configure_matrix;
|
|
||||||
|
|
||||||
template<> struct cholmod_configure_matrix<double> {
|
|
||||||
template<typename CholmodType>
|
|
||||||
static void run(CholmodType& mat) {
|
|
||||||
mat.xtype = CHOLMOD_REAL;
|
|
||||||
mat.dtype = CHOLMOD_DOUBLE;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<> struct cholmod_configure_matrix<std::complex<double> > {
|
|
||||||
template<typename CholmodType>
|
|
||||||
static void run(CholmodType& mat) {
|
|
||||||
mat.xtype = CHOLMOD_COMPLEX;
|
|
||||||
mat.dtype = CHOLMOD_DOUBLE;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Other scalar types are not yet suppotred by Cholmod
|
|
||||||
// template<> struct cholmod_configure_matrix<float> {
|
|
||||||
// template<typename CholmodType>
|
|
||||||
// static void run(CholmodType& mat) {
|
|
||||||
// mat.xtype = CHOLMOD_REAL;
|
|
||||||
// mat.dtype = CHOLMOD_SINGLE;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
//
|
|
||||||
// template<> struct cholmod_configure_matrix<std::complex<float> > {
|
|
||||||
// template<typename CholmodType>
|
|
||||||
// static void run(CholmodType& mat) {
|
|
||||||
// mat.xtype = CHOLMOD_COMPLEX;
|
|
||||||
// mat.dtype = CHOLMOD_SINGLE;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
} // namespace internal
|
|
||||||
|
|
||||||
/** Wraps the Eigen sparse matrix \a mat into a Cholmod sparse matrix object.
|
|
||||||
* Note that the data are shared.
|
|
||||||
*/
|
|
||||||
template<typename _Scalar, int _Options, typename _StorageIndex>
|
|
||||||
cholmod_sparse viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_StorageIndex> > mat)
|
|
||||||
{
|
|
||||||
cholmod_sparse res;
|
|
||||||
res.nzmax = mat.nonZeros();
|
|
||||||
res.nrow = mat.rows();
|
|
||||||
res.ncol = mat.cols();
|
|
||||||
res.p = mat.outerIndexPtr();
|
|
||||||
res.i = mat.innerIndexPtr();
|
|
||||||
res.x = mat.valuePtr();
|
|
||||||
res.z = 0;
|
|
||||||
res.sorted = 1;
|
|
||||||
if(mat.isCompressed())
|
|
||||||
{
|
|
||||||
res.packed = 1;
|
|
||||||
res.nz = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
res.packed = 0;
|
|
||||||
res.nz = mat.innerNonZeroPtr();
|
|
||||||
}
|
|
||||||
|
|
||||||
res.dtype = 0;
|
|
||||||
res.stype = -1;
|
|
||||||
|
|
||||||
if (internal::is_same<_StorageIndex,int>::value)
|
|
||||||
{
|
|
||||||
res.itype = CHOLMOD_INT;
|
|
||||||
}
|
|
||||||
else if (internal::is_same<_StorageIndex,long>::value)
|
|
||||||
{
|
|
||||||
res.itype = CHOLMOD_LONG;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
eigen_assert(false && "Index type not supported yet");
|
|
||||||
}
|
|
||||||
|
|
||||||
// setup res.xtype
|
|
||||||
internal::cholmod_configure_matrix<_Scalar>::run(res);
|
|
||||||
|
|
||||||
res.stype = 0;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename _Scalar, int _Options, typename _Index>
|
|
||||||
const cholmod_sparse viewAsCholmod(const SparseMatrix<_Scalar,_Options,_Index>& mat)
|
|
||||||
{
|
|
||||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.const_cast_derived()));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename _Scalar, int _Options, typename _Index>
|
|
||||||
const cholmod_sparse viewAsCholmod(const SparseVector<_Scalar,_Options,_Index>& mat)
|
|
||||||
{
|
|
||||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.const_cast_derived()));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a view of the Eigen sparse matrix \a mat as Cholmod sparse matrix.
|
|
||||||
* The data are not copied but shared. */
|
|
||||||
template<typename _Scalar, int _Options, typename _Index, unsigned int UpLo>
|
|
||||||
cholmod_sparse viewAsCholmod(const SparseSelfAdjointView<const SparseMatrix<_Scalar,_Options,_Index>, UpLo>& mat)
|
|
||||||
{
|
|
||||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.matrix().const_cast_derived()));
|
|
||||||
|
|
||||||
if(UpLo==Upper) res.stype = 1;
|
|
||||||
if(UpLo==Lower) res.stype = -1;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a view of the Eigen \b dense matrix \a mat as Cholmod dense matrix.
|
|
||||||
* The data are not copied but shared. */
|
|
||||||
template<typename Derived>
|
|
||||||
cholmod_dense viewAsCholmod(MatrixBase<Derived>& mat)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT((internal::traits<Derived>::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
||||||
typedef typename Derived::Scalar Scalar;
|
|
||||||
|
|
||||||
cholmod_dense res;
|
|
||||||
res.nrow = mat.rows();
|
|
||||||
res.ncol = mat.cols();
|
|
||||||
res.nzmax = res.nrow * res.ncol;
|
|
||||||
res.d = Derived::IsVectorAtCompileTime ? mat.derived().size() : mat.derived().outerStride();
|
|
||||||
res.x = (void*)(mat.derived().data());
|
|
||||||
res.z = 0;
|
|
||||||
|
|
||||||
internal::cholmod_configure_matrix<Scalar>::run(res);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a view of the Cholmod sparse matrix \a cm as an Eigen sparse matrix.
|
|
||||||
* The data are not copied but shared. */
|
|
||||||
template<typename Scalar, int Flags, typename StorageIndex>
|
|
||||||
MappedSparseMatrix<Scalar,Flags,StorageIndex> viewAsEigen(cholmod_sparse& cm)
|
|
||||||
{
|
|
||||||
return MappedSparseMatrix<Scalar,Flags,StorageIndex>
|
|
||||||
(cm.nrow, cm.ncol, static_cast<StorageIndex*>(cm.p)[cm.ncol],
|
|
||||||
static_cast<StorageIndex*>(cm.p), static_cast<StorageIndex*>(cm.i),static_cast<Scalar*>(cm.x) );
|
|
||||||
}
|
|
||||||
|
|
||||||
enum CholmodMode {
|
|
||||||
CholmodAuto, CholmodSimplicialLLt, CholmodSupernodalLLt, CholmodLDLt
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/** \ingroup CholmodSupport_Module
|
|
||||||
* \class CholmodBase
|
|
||||||
* \brief The base class for the direct Cholesky factorization of Cholmod
|
|
||||||
* \sa class CholmodSupernodalLLT, class CholmodSimplicialLDLT, class CholmodSimplicialLLT
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo, typename Derived>
|
|
||||||
class CholmodBase : public SparseSolverBase<Derived>
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
typedef SparseSolverBase<Derived> Base;
|
|
||||||
using Base::derived;
|
|
||||||
using Base::m_isInitialized;
|
|
||||||
public:
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
enum { UpLo = _UpLo };
|
|
||||||
typedef typename MatrixType::Scalar Scalar;
|
|
||||||
typedef typename MatrixType::RealScalar RealScalar;
|
|
||||||
typedef MatrixType CholMatrixType;
|
|
||||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
||||||
enum {
|
|
||||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
||||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
CholmodBase()
|
|
||||||
: m_cholmodFactor(0), m_info(Success), m_factorizationIsOk(false), m_analysisIsOk(false)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
|
|
||||||
m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
|
|
||||||
cholmod_start(&m_cholmod);
|
|
||||||
}
|
|
||||||
|
|
||||||
explicit CholmodBase(const MatrixType& matrix)
|
|
||||||
: m_cholmodFactor(0), m_info(Success), m_factorizationIsOk(false), m_analysisIsOk(false)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
|
|
||||||
m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
|
|
||||||
cholmod_start(&m_cholmod);
|
|
||||||
compute(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CholmodBase()
|
|
||||||
{
|
|
||||||
if(m_cholmodFactor)
|
|
||||||
cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
|
|
||||||
cholmod_finish(&m_cholmod);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline StorageIndex cols() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
|
|
||||||
inline StorageIndex rows() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
|
|
||||||
|
|
||||||
/** \brief Reports whether previous computation was successful.
|
|
||||||
*
|
|
||||||
* \returns \c Success if computation was succesful,
|
|
||||||
* \c NumericalIssue if the matrix.appears to be negative.
|
|
||||||
*/
|
|
||||||
ComputationInfo info() const
|
|
||||||
{
|
|
||||||
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
|
||||||
return m_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Computes the sparse Cholesky decomposition of \a matrix */
|
|
||||||
Derived& compute(const MatrixType& matrix)
|
|
||||||
{
|
|
||||||
analyzePattern(matrix);
|
|
||||||
factorize(matrix);
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Performs a symbolic decomposition on the sparsity pattern of \a matrix.
|
|
||||||
*
|
|
||||||
* This function is particularly useful when solving for several problems having the same structure.
|
|
||||||
*
|
|
||||||
* \sa factorize()
|
|
||||||
*/
|
|
||||||
void analyzePattern(const MatrixType& matrix)
|
|
||||||
{
|
|
||||||
if(m_cholmodFactor)
|
|
||||||
{
|
|
||||||
cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
|
|
||||||
m_cholmodFactor = 0;
|
|
||||||
}
|
|
||||||
cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
|
|
||||||
m_cholmodFactor = cholmod_analyze(&A, &m_cholmod);
|
|
||||||
|
|
||||||
this->m_isInitialized = true;
|
|
||||||
this->m_info = Success;
|
|
||||||
m_analysisIsOk = true;
|
|
||||||
m_factorizationIsOk = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Performs a numeric decomposition of \a matrix
|
|
||||||
*
|
|
||||||
* The given matrix must have the same sparsity pattern as the matrix on which the symbolic decomposition has been performed.
|
|
||||||
*
|
|
||||||
* \sa analyzePattern()
|
|
||||||
*/
|
|
||||||
void factorize(const MatrixType& matrix)
|
|
||||||
{
|
|
||||||
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
|
||||||
cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
|
|
||||||
cholmod_factorize_p(&A, m_shiftOffset, 0, 0, m_cholmodFactor, &m_cholmod);
|
|
||||||
|
|
||||||
// If the factorization failed, minor is the column at which it did. On success minor == n.
|
|
||||||
this->m_info = (m_cholmodFactor->minor == m_cholmodFactor->n ? Success : NumericalIssue);
|
|
||||||
m_factorizationIsOk = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a reference to the Cholmod's configuration structure to get a full control over the performed operations.
|
|
||||||
* See the Cholmod user guide for details. */
|
|
||||||
cholmod_common& cholmod() { return m_cholmod; }
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
/** \internal */
|
|
||||||
template<typename Rhs,typename Dest>
|
|
||||||
void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
|
||||||
const Index size = m_cholmodFactor->n;
|
|
||||||
EIGEN_UNUSED_VARIABLE(size);
|
|
||||||
eigen_assert(size==b.rows());
|
|
||||||
|
|
||||||
// Cholmod needs column-major stoarge without inner-stride, which corresponds to the default behavior of Ref.
|
|
||||||
Ref<const Matrix<typename Rhs::Scalar,Dynamic,Dynamic,ColMajor> > b_ref(b.derived());
|
|
||||||
|
|
||||||
cholmod_dense b_cd = viewAsCholmod(b_ref);
|
|
||||||
cholmod_dense* x_cd = cholmod_solve(CHOLMOD_A, m_cholmodFactor, &b_cd, &m_cholmod);
|
|
||||||
if(!x_cd)
|
|
||||||
{
|
|
||||||
this->m_info = NumericalIssue;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
|
|
||||||
dest = Matrix<Scalar,Dest::RowsAtCompileTime,Dest::ColsAtCompileTime>::Map(reinterpret_cast<Scalar*>(x_cd->x),b.rows(),b.cols());
|
|
||||||
cholmod_free_dense(&x_cd, &m_cholmod);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \internal */
|
|
||||||
template<typename RhsDerived, typename DestDerived>
|
|
||||||
void _solve_impl(const SparseMatrixBase<RhsDerived> &b, SparseMatrixBase<DestDerived> &dest) const
|
|
||||||
{
|
|
||||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
|
||||||
const Index size = m_cholmodFactor->n;
|
|
||||||
EIGEN_UNUSED_VARIABLE(size);
|
|
||||||
eigen_assert(size==b.rows());
|
|
||||||
|
|
||||||
// note: cs stands for Cholmod Sparse
|
|
||||||
Ref<SparseMatrix<typename RhsDerived::Scalar,ColMajor,typename RhsDerived::StorageIndex> > b_ref(b.const_cast_derived());
|
|
||||||
cholmod_sparse b_cs = viewAsCholmod(b_ref);
|
|
||||||
cholmod_sparse* x_cs = cholmod_spsolve(CHOLMOD_A, m_cholmodFactor, &b_cs, &m_cholmod);
|
|
||||||
if(!x_cs)
|
|
||||||
{
|
|
||||||
this->m_info = NumericalIssue;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
|
|
||||||
dest.derived() = viewAsEigen<typename DestDerived::Scalar,ColMajor,typename DestDerived::StorageIndex>(*x_cs);
|
|
||||||
cholmod_free_sparse(&x_cs, &m_cholmod);
|
|
||||||
}
|
|
||||||
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
|
|
||||||
|
|
||||||
/** Sets the shift parameter that will be used to adjust the diagonal coefficients during the numerical factorization.
|
|
||||||
*
|
|
||||||
* During the numerical factorization, an offset term is added to the diagonal coefficients:\n
|
|
||||||
* \c d_ii = \a offset + \c d_ii
|
|
||||||
*
|
|
||||||
* The default is \a offset=0.
|
|
||||||
*
|
|
||||||
* \returns a reference to \c *this.
|
|
||||||
*/
|
|
||||||
Derived& setShift(const RealScalar& offset)
|
|
||||||
{
|
|
||||||
m_shiftOffset[0] = double(offset);
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the determinant of the underlying matrix from the current factorization */
|
|
||||||
Scalar determinant() const
|
|
||||||
{
|
|
||||||
using std::exp;
|
|
||||||
return exp(logDeterminant());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the log determinant of the underlying matrix from the current factorization */
|
|
||||||
Scalar logDeterminant() const
|
|
||||||
{
|
|
||||||
using std::log;
|
|
||||||
using numext::real;
|
|
||||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
|
||||||
|
|
||||||
RealScalar logDet = 0;
|
|
||||||
Scalar *x = static_cast<Scalar*>(m_cholmodFactor->x);
|
|
||||||
if (m_cholmodFactor->is_super)
|
|
||||||
{
|
|
||||||
// Supernodal factorization stored as a packed list of dense column-major blocs,
|
|
||||||
// as described by the following structure:
|
|
||||||
|
|
||||||
// super[k] == index of the first column of the j-th super node
|
|
||||||
StorageIndex *super = static_cast<StorageIndex*>(m_cholmodFactor->super);
|
|
||||||
// pi[k] == offset to the description of row indices
|
|
||||||
StorageIndex *pi = static_cast<StorageIndex*>(m_cholmodFactor->pi);
|
|
||||||
// px[k] == offset to the respective dense block
|
|
||||||
StorageIndex *px = static_cast<StorageIndex*>(m_cholmodFactor->px);
|
|
||||||
|
|
||||||
Index nb_super_nodes = m_cholmodFactor->nsuper;
|
|
||||||
for (Index k=0; k < nb_super_nodes; ++k)
|
|
||||||
{
|
|
||||||
StorageIndex ncols = super[k + 1] - super[k];
|
|
||||||
StorageIndex nrows = pi[k + 1] - pi[k];
|
|
||||||
|
|
||||||
Map<const Array<Scalar,1,Dynamic>, 0, InnerStride<> > sk(x + px[k], ncols, InnerStride<>(nrows+1));
|
|
||||||
logDet += sk.real().log().sum();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Simplicial factorization stored as standard CSC matrix.
|
|
||||||
StorageIndex *p = static_cast<StorageIndex*>(m_cholmodFactor->p);
|
|
||||||
Index size = m_cholmodFactor->n;
|
|
||||||
for (Index k=0; k<size; ++k)
|
|
||||||
logDet += log(real( x[p[k]] ));
|
|
||||||
}
|
|
||||||
if (m_cholmodFactor->is_ll)
|
|
||||||
logDet *= 2.0;
|
|
||||||
return logDet;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Stream>
|
|
||||||
void dumpMemory(Stream& /*s*/)
|
|
||||||
{}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
mutable cholmod_common m_cholmod;
|
|
||||||
cholmod_factor* m_cholmodFactor;
|
|
||||||
double m_shiftOffset[2];
|
|
||||||
mutable ComputationInfo m_info;
|
|
||||||
int m_factorizationIsOk;
|
|
||||||
int m_analysisIsOk;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \ingroup CholmodSupport_Module
|
|
||||||
* \class CholmodSimplicialLLT
|
|
||||||
* \brief A simplicial direct Cholesky (LLT) factorization and solver based on Cholmod
|
|
||||||
*
|
|
||||||
* This class allows to solve for A.X = B sparse linear problems via a simplicial LL^T Cholesky factorization
|
|
||||||
* using the Cholmod library.
|
|
||||||
* This simplicial variant is equivalent to Eigen's built-in SimplicialLLT class. Therefore, it has little practical interest.
|
|
||||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
|
||||||
* X and B can be either dense or sparse.
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
|
||||||
* or Upper. Default is Lower.
|
|
||||||
*
|
|
||||||
* \implsparsesolverconcept
|
|
||||||
*
|
|
||||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
|
||||||
*
|
|
||||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
|
||||||
*
|
|
||||||
* \sa \ref TutorialSparseSolverConcept, class CholmodSupernodalLLT, class SimplicialLLT
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo = Lower>
|
|
||||||
class CholmodSimplicialLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT<_MatrixType, _UpLo> >
|
|
||||||
{
|
|
||||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT> Base;
|
|
||||||
using Base::m_cholmod;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
|
|
||||||
CholmodSimplicialLLT() : Base() { init(); }
|
|
||||||
|
|
||||||
CholmodSimplicialLLT(const MatrixType& matrix) : Base()
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
this->compute(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CholmodSimplicialLLT() {}
|
|
||||||
protected:
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
m_cholmod.final_asis = 0;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
|
||||||
m_cholmod.final_ll = 1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/** \ingroup CholmodSupport_Module
|
|
||||||
* \class CholmodSimplicialLDLT
|
|
||||||
* \brief A simplicial direct Cholesky (LDLT) factorization and solver based on Cholmod
|
|
||||||
*
|
|
||||||
* This class allows to solve for A.X = B sparse linear problems via a simplicial LDL^T Cholesky factorization
|
|
||||||
* using the Cholmod library.
|
|
||||||
* This simplicial variant is equivalent to Eigen's built-in SimplicialLDLT class. Therefore, it has little practical interest.
|
|
||||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
|
||||||
* X and B can be either dense or sparse.
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
|
||||||
* or Upper. Default is Lower.
|
|
||||||
*
|
|
||||||
* \implsparsesolverconcept
|
|
||||||
*
|
|
||||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
|
||||||
*
|
|
||||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
|
||||||
*
|
|
||||||
* \sa \ref TutorialSparseSolverConcept, class CholmodSupernodalLLT, class SimplicialLDLT
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo = Lower>
|
|
||||||
class CholmodSimplicialLDLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT<_MatrixType, _UpLo> >
|
|
||||||
{
|
|
||||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT> Base;
|
|
||||||
using Base::m_cholmod;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
|
|
||||||
CholmodSimplicialLDLT() : Base() { init(); }
|
|
||||||
|
|
||||||
CholmodSimplicialLDLT(const MatrixType& matrix) : Base()
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
this->compute(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CholmodSimplicialLDLT() {}
|
|
||||||
protected:
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \ingroup CholmodSupport_Module
|
|
||||||
* \class CholmodSupernodalLLT
|
|
||||||
* \brief A supernodal Cholesky (LLT) factorization and solver based on Cholmod
|
|
||||||
*
|
|
||||||
* This class allows to solve for A.X = B sparse linear problems via a supernodal LL^T Cholesky factorization
|
|
||||||
* using the Cholmod library.
|
|
||||||
* This supernodal variant performs best on dense enough problems, e.g., 3D FEM, or very high order 2D FEM.
|
|
||||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
|
||||||
* X and B can be either dense or sparse.
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
|
||||||
* or Upper. Default is Lower.
|
|
||||||
*
|
|
||||||
* \implsparsesolverconcept
|
|
||||||
*
|
|
||||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
|
||||||
*
|
|
||||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
|
||||||
*
|
|
||||||
* \sa \ref TutorialSparseSolverConcept
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo = Lower>
|
|
||||||
class CholmodSupernodalLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT<_MatrixType, _UpLo> >
|
|
||||||
{
|
|
||||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT> Base;
|
|
||||||
using Base::m_cholmod;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
|
|
||||||
CholmodSupernodalLLT() : Base() { init(); }
|
|
||||||
|
|
||||||
CholmodSupernodalLLT(const MatrixType& matrix) : Base()
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
this->compute(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CholmodSupernodalLLT() {}
|
|
||||||
protected:
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SUPERNODAL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \ingroup CholmodSupport_Module
|
|
||||||
* \class CholmodDecomposition
|
|
||||||
* \brief A general Cholesky factorization and solver based on Cholmod
|
|
||||||
*
|
|
||||||
* This class allows to solve for A.X = B sparse linear problems via a LL^T or LDL^T Cholesky factorization
|
|
||||||
* using the Cholmod library. The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
|
||||||
* X and B can be either dense or sparse.
|
|
||||||
*
|
|
||||||
* This variant permits to change the underlying Cholesky method at runtime.
|
|
||||||
* On the other hand, it does not provide access to the result of the factorization.
|
|
||||||
* The default is to let Cholmod automatically choose between a simplicial and supernodal factorization.
|
|
||||||
*
|
|
||||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
|
||||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
|
||||||
* or Upper. Default is Lower.
|
|
||||||
*
|
|
||||||
* \implsparsesolverconcept
|
|
||||||
*
|
|
||||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
|
||||||
*
|
|
||||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
|
||||||
*
|
|
||||||
* \sa \ref TutorialSparseSolverConcept
|
|
||||||
*/
|
|
||||||
template<typename _MatrixType, int _UpLo = Lower>
|
|
||||||
class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecomposition<_MatrixType, _UpLo> >
|
|
||||||
{
|
|
||||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodDecomposition> Base;
|
|
||||||
using Base::m_cholmod;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef _MatrixType MatrixType;
|
|
||||||
|
|
||||||
CholmodDecomposition() : Base() { init(); }
|
|
||||||
|
|
||||||
CholmodDecomposition(const MatrixType& matrix) : Base()
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
this->compute(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
~CholmodDecomposition() {}
|
|
||||||
|
|
||||||
void setMode(CholmodMode mode)
|
|
||||||
{
|
|
||||||
switch(mode)
|
|
||||||
{
|
|
||||||
case CholmodAuto:
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_AUTO;
|
|
||||||
break;
|
|
||||||
case CholmodSimplicialLLt:
|
|
||||||
m_cholmod.final_asis = 0;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
|
||||||
m_cholmod.final_ll = 1;
|
|
||||||
break;
|
|
||||||
case CholmodSupernodalLLt:
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SUPERNODAL;
|
|
||||||
break;
|
|
||||||
case CholmodLDLt:
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
protected:
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
m_cholmod.final_asis = 1;
|
|
||||||
m_cholmod.supernodal = CHOLMOD_AUTO;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_CHOLMODSUPPORT_H
|
|
||||||
@@ -1,329 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ARRAY_H
|
|
||||||
#define EIGEN_ARRAY_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
|
||||||
struct traits<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > : traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
|
|
||||||
{
|
|
||||||
typedef ArrayXpr XprKind;
|
|
||||||
typedef ArrayBase<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > XprBase;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \class Array
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief General-purpose arrays with easy API for coefficient-wise operations
|
|
||||||
*
|
|
||||||
* The %Array class is very similar to the Matrix class. It provides
|
|
||||||
* general-purpose one- and two-dimensional arrays. The difference between the
|
|
||||||
* %Array and the %Matrix class is primarily in the API: the API for the
|
|
||||||
* %Array class provides easy access to coefficient-wise operations, while the
|
|
||||||
* API for the %Matrix class provides easy access to linear-algebra
|
|
||||||
* operations.
|
|
||||||
*
|
|
||||||
* See documentation of class Matrix for detailed information on the template parameters
|
|
||||||
* storage layout.
|
|
||||||
*
|
|
||||||
* This class can be extended with the help of the plugin mechanism described on the page
|
|
||||||
* \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_ARRAY_PLUGIN.
|
|
||||||
*
|
|
||||||
* \sa \blank \ref TutorialArrayClass, \ref TopicClassHierarchy
|
|
||||||
*/
|
|
||||||
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
|
||||||
class Array
|
|
||||||
: public PlainObjectBase<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef PlainObjectBase<Array> Base;
|
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(Array)
|
|
||||||
|
|
||||||
enum { Options = _Options };
|
|
||||||
typedef typename Base::PlainObject PlainObject;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
template <typename Derived, typename OtherDerived, bool IsVector>
|
|
||||||
friend struct internal::conservative_resize_like_impl;
|
|
||||||
|
|
||||||
using Base::m_storage;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
using Base::base;
|
|
||||||
using Base::coeff;
|
|
||||||
using Base::coeffRef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The usage of
|
|
||||||
* using Base::operator=;
|
|
||||||
* fails on MSVC. Since the code below is working with GCC and MSVC, we skipped
|
|
||||||
* the usage of 'using'. This should be done only for operator=.
|
|
||||||
*/
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array& operator=(const EigenBase<OtherDerived> &other)
|
|
||||||
{
|
|
||||||
return Base::operator=(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Set all the entries to \a value.
|
|
||||||
* \sa DenseBase::setConstant(), DenseBase::fill()
|
|
||||||
*/
|
|
||||||
/* This overload is needed because the usage of
|
|
||||||
* using Base::operator=;
|
|
||||||
* fails on MSVC. Since the code below is working with GCC and MSVC, we skipped
|
|
||||||
* the usage of 'using'. This should be done only for operator=.
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array& operator=(const Scalar &value)
|
|
||||||
{
|
|
||||||
Base::setConstant(value);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Copies the value of the expression \a other into \c *this with automatic resizing.
|
|
||||||
*
|
|
||||||
* *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized),
|
|
||||||
* it will be initialized.
|
|
||||||
*
|
|
||||||
* Note that copying a row-vector into a vector (and conversely) is allowed.
|
|
||||||
* The resizing, if any, is then done in the appropriate way so that row-vectors
|
|
||||||
* remain row-vectors and vectors remain vectors.
|
|
||||||
*/
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array& operator=(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
return Base::_set(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** This is a special case of the templated operator=. Its purpose is to
|
|
||||||
* prevent a default operator= from hiding the templated operator=.
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array& operator=(const Array& other)
|
|
||||||
{
|
|
||||||
return Base::_set(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Default constructor.
|
|
||||||
*
|
|
||||||
* For fixed-size matrices, does nothing.
|
|
||||||
*
|
|
||||||
* For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix
|
|
||||||
* is called a null matrix. This constructor is the unique way to create null matrices: resizing
|
|
||||||
* a matrix to 0 is not supported.
|
|
||||||
*
|
|
||||||
* \sa resize(Index,Index)
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array() : Base()
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
// FIXME is it still needed ??
|
|
||||||
/** \internal */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
Array(internal::constructor_without_unaligned_array_assert)
|
|
||||||
: Base(internal::constructor_without_unaligned_array_assert())
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EIGEN_HAS_RVALUE_REFERENCES
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
Array(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
|
||||||
: Base(std::move(other))
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
}
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
|
||||||
{
|
|
||||||
other.swap(*this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
template<typename T>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE explicit Array(const T& x)
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
Base::template _init1<T>(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T0, typename T1>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array(const T0& val0, const T1& val1)
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
this->template _init2<T0,T1>(val0, val1);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/** \brief Constructs a fixed-sized array initialized with coefficients starting at \a data */
|
|
||||||
EIGEN_DEVICE_FUNC explicit Array(const Scalar *data);
|
|
||||||
/** Constructs a vector or row-vector with given dimension. \only_for_vectors
|
|
||||||
*
|
|
||||||
* Note that this is only useful for dynamic-size vectors. For fixed-size vectors,
|
|
||||||
* it is redundant to pass the dimension here, so it makes more sense to use the default
|
|
||||||
* constructor Array() instead.
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE explicit Array(Index dim);
|
|
||||||
/** constructs an initialized 1x1 Array with the given coefficient */
|
|
||||||
Array(const Scalar& value);
|
|
||||||
/** constructs an uninitialized array with \a rows rows and \a cols columns.
|
|
||||||
*
|
|
||||||
* This is useful for dynamic-size arrays. For fixed-size arrays,
|
|
||||||
* it is redundant to pass these parameters, so one should use the default constructor
|
|
||||||
* Array() instead. */
|
|
||||||
Array(Index rows, Index cols);
|
|
||||||
/** constructs an initialized 2D vector with given coefficients */
|
|
||||||
Array(const Scalar& val0, const Scalar& val1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** constructs an initialized 3D vector with given coefficients */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2)
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3)
|
|
||||||
m_storage.data()[0] = val0;
|
|
||||||
m_storage.data()[1] = val1;
|
|
||||||
m_storage.data()[2] = val2;
|
|
||||||
}
|
|
||||||
/** constructs an initialized 4D vector with given coefficients */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3)
|
|
||||||
{
|
|
||||||
Base::_check_template_params();
|
|
||||||
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4)
|
|
||||||
m_storage.data()[0] = val0;
|
|
||||||
m_storage.data()[1] = val1;
|
|
||||||
m_storage.data()[2] = val2;
|
|
||||||
m_storage.data()[3] = val3;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Copy constructor */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array(const Array& other)
|
|
||||||
: Base(other)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct PrivateType {};
|
|
||||||
public:
|
|
||||||
|
|
||||||
/** \sa MatrixBase::operator=(const EigenBase<OtherDerived>&) */
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Array(const EigenBase<OtherDerived> &other,
|
|
||||||
typename internal::enable_if<internal::is_convertible<typename OtherDerived::Scalar,Scalar>::value,
|
|
||||||
PrivateType>::type = PrivateType())
|
|
||||||
: Base(other.derived())
|
|
||||||
{ }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC inline Index innerStride() const { return 1; }
|
|
||||||
EIGEN_DEVICE_FUNC inline Index outerStride() const { return this->innerSize(); }
|
|
||||||
|
|
||||||
#ifdef EIGEN_ARRAY_PLUGIN
|
|
||||||
#include EIGEN_ARRAY_PLUGIN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
template<typename MatrixType, typename OtherDerived, bool SwapPointers>
|
|
||||||
friend struct internal::matrix_swap_impl;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \defgroup arraytypedefs Global array typedefs
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* Eigen defines several typedef shortcuts for most common 1D and 2D array types.
|
|
||||||
*
|
|
||||||
* The general patterns are the following:
|
|
||||||
*
|
|
||||||
* \c ArrayRowsColsType where \c Rows and \c Cols can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size,
|
|
||||||
* and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd
|
|
||||||
* for complex double.
|
|
||||||
*
|
|
||||||
* For example, \c Array33d is a fixed-size 3x3 array type of doubles, and \c ArrayXXf is a dynamic-size matrix of floats.
|
|
||||||
*
|
|
||||||
* There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is
|
|
||||||
* a fixed-size 1D array of 4 complex floats.
|
|
||||||
*
|
|
||||||
* \sa class Array
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
|
|
||||||
/** \ingroup arraytypedefs */ \
|
|
||||||
typedef Array<Type, Size, Size> Array##SizeSuffix##SizeSuffix##TypeSuffix; \
|
|
||||||
/** \ingroup arraytypedefs */ \
|
|
||||||
typedef Array<Type, Size, 1> Array##SizeSuffix##TypeSuffix;
|
|
||||||
|
|
||||||
#define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
|
|
||||||
/** \ingroup arraytypedefs */ \
|
|
||||||
typedef Array<Type, Size, Dynamic> Array##Size##X##TypeSuffix; \
|
|
||||||
/** \ingroup arraytypedefs */ \
|
|
||||||
typedef Array<Type, Dynamic, Size> Array##X##Size##TypeSuffix;
|
|
||||||
|
|
||||||
#define EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 2, 2) \
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 3, 3) \
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 4, 4) \
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
|
|
||||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
|
|
||||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
|
|
||||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
|
|
||||||
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(int, i)
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(float, f)
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(double, d)
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
|
|
||||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
|
|
||||||
|
|
||||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES
|
|
||||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS
|
|
||||||
|
|
||||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS_LARGE
|
|
||||||
|
|
||||||
#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \
|
|
||||||
using Eigen::Matrix##SizeSuffix##TypeSuffix; \
|
|
||||||
using Eigen::Vector##SizeSuffix##TypeSuffix; \
|
|
||||||
using Eigen::RowVector##SizeSuffix##TypeSuffix;
|
|
||||||
|
|
||||||
#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(TypeSuffix) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \
|
|
||||||
|
|
||||||
#define EIGEN_USING_ARRAY_TYPEDEFS \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(i) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(f) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(d) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cf) \
|
|
||||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cd)
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ARRAY_H
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ARRAYBASE_H
|
|
||||||
#define EIGEN_ARRAYBASE_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
template<typename ExpressionType> class MatrixWrapper;
|
|
||||||
|
|
||||||
/** \class ArrayBase
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Base class for all 1D and 2D array, and related expressions
|
|
||||||
*
|
|
||||||
* An array is similar to a dense vector or matrix. While matrices are mathematical
|
|
||||||
* objects with well defined linear algebra operators, an array is just a collection
|
|
||||||
* of scalar values arranged in a one or two dimensionnal fashion. As the main consequence,
|
|
||||||
* all operations applied to an array are performed coefficient wise. Furthermore,
|
|
||||||
* arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient
|
|
||||||
* constructors allowing to easily write generic code working for both scalar values
|
|
||||||
* and arrays.
|
|
||||||
*
|
|
||||||
* This class is the base that is inherited by all array expression types.
|
|
||||||
*
|
|
||||||
* \tparam Derived is the derived type, e.g., an array or an expression type.
|
|
||||||
*
|
|
||||||
* This class can be extended with the help of the plugin mechanism described on the page
|
|
||||||
* \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_ARRAYBASE_PLUGIN.
|
|
||||||
*
|
|
||||||
* \sa class MatrixBase, \ref TopicClassHierarchy
|
|
||||||
*/
|
|
||||||
template<typename Derived> class ArrayBase
|
|
||||||
: public DenseBase<Derived>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
/** The base class for a given storage type. */
|
|
||||||
typedef ArrayBase StorageBaseType;
|
|
||||||
|
|
||||||
typedef ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl;
|
|
||||||
|
|
||||||
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
||||||
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
||||||
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
|
||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
||||||
|
|
||||||
typedef DenseBase<Derived> Base;
|
|
||||||
using Base::RowsAtCompileTime;
|
|
||||||
using Base::ColsAtCompileTime;
|
|
||||||
using Base::SizeAtCompileTime;
|
|
||||||
using Base::MaxRowsAtCompileTime;
|
|
||||||
using Base::MaxColsAtCompileTime;
|
|
||||||
using Base::MaxSizeAtCompileTime;
|
|
||||||
using Base::IsVectorAtCompileTime;
|
|
||||||
using Base::Flags;
|
|
||||||
|
|
||||||
using Base::derived;
|
|
||||||
using Base::const_cast_derived;
|
|
||||||
using Base::rows;
|
|
||||||
using Base::cols;
|
|
||||||
using Base::size;
|
|
||||||
using Base::coeff;
|
|
||||||
using Base::coeffRef;
|
|
||||||
using Base::lazyAssign;
|
|
||||||
using Base::operator=;
|
|
||||||
using Base::operator+=;
|
|
||||||
using Base::operator-=;
|
|
||||||
using Base::operator*=;
|
|
||||||
using Base::operator/=;
|
|
||||||
|
|
||||||
typedef typename Base::CoeffReturnType CoeffReturnType;
|
|
||||||
|
|
||||||
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
typedef typename Base::PlainObject PlainObject;
|
|
||||||
|
|
||||||
/** \internal Represents a matrix with all coefficients equal to one another*/
|
|
||||||
typedef CwiseNullaryOp<internal::scalar_constant_op<Scalar>,PlainObject> ConstantReturnType;
|
|
||||||
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
|
|
||||||
#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase
|
|
||||||
#define EIGEN_DOC_UNARY_ADDONS(X,Y)
|
|
||||||
# include "../plugins/CommonCwiseUnaryOps.h"
|
|
||||||
# include "../plugins/MatrixCwiseUnaryOps.h"
|
|
||||||
# include "../plugins/ArrayCwiseUnaryOps.h"
|
|
||||||
# include "../plugins/CommonCwiseBinaryOps.h"
|
|
||||||
# include "../plugins/MatrixCwiseBinaryOps.h"
|
|
||||||
# include "../plugins/ArrayCwiseBinaryOps.h"
|
|
||||||
# ifdef EIGEN_ARRAYBASE_PLUGIN
|
|
||||||
# include EIGEN_ARRAYBASE_PLUGIN
|
|
||||||
# endif
|
|
||||||
#undef EIGEN_CURRENT_STORAGE_BASE_CLASS
|
|
||||||
#undef EIGEN_DOC_UNARY_ADDONS
|
|
||||||
|
|
||||||
/** Special case of the template operator=, in order to prevent the compiler
|
|
||||||
* from generating a default operator= (issue hit with g++ 4.1)
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator=(const ArrayBase& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Set all the entries to \a value.
|
|
||||||
* \sa DenseBase::setConstant(), DenseBase::fill() */
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator=(const Scalar &value)
|
|
||||||
{ Base::setConstant(value); return derived(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator+=(const Scalar& scalar);
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator-=(const Scalar& scalar);
|
|
||||||
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator+=(const ArrayBase<OtherDerived>& other);
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator-=(const ArrayBase<OtherDerived>& other);
|
|
||||||
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator*=(const ArrayBase<OtherDerived>& other);
|
|
||||||
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
Derived& operator/=(const ArrayBase<OtherDerived>& other);
|
|
||||||
|
|
||||||
public:
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
ArrayBase<Derived>& array() { return *this; }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
const ArrayBase<Derived>& array() const { return *this; }
|
|
||||||
|
|
||||||
/** \returns an \link Eigen::MatrixBase Matrix \endlink expression of this array
|
|
||||||
* \sa MatrixBase::array() */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
MatrixWrapper<Derived> matrix() { return MatrixWrapper<Derived>(derived()); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
const MatrixWrapper<const Derived> matrix() const { return MatrixWrapper<const Derived>(derived()); }
|
|
||||||
|
|
||||||
// template<typename Dest>
|
|
||||||
// inline void evalTo(Dest& dst) const { dst = matrix(); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
ArrayBase() : Base() {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
explicit ArrayBase(Index);
|
|
||||||
ArrayBase(Index,Index);
|
|
||||||
template<typename OtherDerived> explicit ArrayBase(const ArrayBase<OtherDerived>&);
|
|
||||||
protected:
|
|
||||||
// mixing arrays and matrices is not legal
|
|
||||||
template<typename OtherDerived> Derived& operator+=(const MatrixBase<OtherDerived>& )
|
|
||||||
{EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
|
|
||||||
// mixing arrays and matrices is not legal
|
|
||||||
template<typename OtherDerived> Derived& operator-=(const MatrixBase<OtherDerived>& )
|
|
||||||
{EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** replaces \c *this by \c *this - \a other.
|
|
||||||
*
|
|
||||||
* \returns a reference to \c *this
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
|
||||||
ArrayBase<Derived>::operator-=(const ArrayBase<OtherDerived> &other)
|
|
||||||
{
|
|
||||||
call_assignment(derived(), other.derived(), internal::sub_assign_op<Scalar,typename OtherDerived::Scalar>());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** replaces \c *this by \c *this + \a other.
|
|
||||||
*
|
|
||||||
* \returns a reference to \c *this
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
|
||||||
ArrayBase<Derived>::operator+=(const ArrayBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
call_assignment(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** replaces \c *this by \c *this * \a other coefficient wise.
|
|
||||||
*
|
|
||||||
* \returns a reference to \c *this
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
|
||||||
ArrayBase<Derived>::operator*=(const ArrayBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
call_assignment(derived(), other.derived(), internal::mul_assign_op<Scalar,typename OtherDerived::Scalar>());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** replaces \c *this by \c *this / \a other coefficient wise.
|
|
||||||
*
|
|
||||||
* \returns a reference to \c *this
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
|
||||||
ArrayBase<Derived>::operator/=(const ArrayBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
call_assignment(derived(), other.derived(), internal::div_assign_op<Scalar,typename OtherDerived::Scalar>());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ARRAYBASE_H
|
|
||||||
@@ -1,209 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ARRAYWRAPPER_H
|
|
||||||
#define EIGEN_ARRAYWRAPPER_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
/** \class ArrayWrapper
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Expression of a mathematical vector or matrix as an array object
|
|
||||||
*
|
|
||||||
* This class is the return type of MatrixBase::array(), and most of the time
|
|
||||||
* this is the only way it is use.
|
|
||||||
*
|
|
||||||
* \sa MatrixBase::array(), class MatrixWrapper
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
template<typename ExpressionType>
|
|
||||||
struct traits<ArrayWrapper<ExpressionType> >
|
|
||||||
: public traits<typename remove_all<typename ExpressionType::Nested>::type >
|
|
||||||
{
|
|
||||||
typedef ArrayXpr XprKind;
|
|
||||||
// Let's remove NestByRefBit
|
|
||||||
enum {
|
|
||||||
Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
|
|
||||||
LvalueBitFlag = is_lvalue<ExpressionType>::value ? LvalueBit : 0,
|
|
||||||
Flags = (Flags0 & ~(NestByRefBit | LvalueBit)) | LvalueBitFlag
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename ExpressionType>
|
|
||||||
class ArrayWrapper : public ArrayBase<ArrayWrapper<ExpressionType> >
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef ArrayBase<ArrayWrapper> Base;
|
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper)
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper)
|
|
||||||
typedef typename internal::remove_all<ExpressionType>::type NestedExpression;
|
|
||||||
|
|
||||||
typedef typename internal::conditional<
|
|
||||||
internal::is_lvalue<ExpressionType>::value,
|
|
||||||
Scalar,
|
|
||||||
const Scalar
|
|
||||||
>::type ScalarWithConstIfNotLvalue;
|
|
||||||
|
|
||||||
typedef typename internal::ref_selector<ExpressionType>::non_const_type NestedExpressionType;
|
|
||||||
|
|
||||||
using Base::coeffRef;
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
explicit EIGEN_STRONG_INLINE ArrayWrapper(ExpressionType& matrix) : m_expression(matrix) {}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index rows() const { return m_expression.rows(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index cols() const { return m_expression.cols(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index outerStride() const { return m_expression.outerStride(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index innerStride() const { return m_expression.innerStride(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar* data() const { return m_expression.data(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
|
||||||
{
|
|
||||||
return m_expression.coeffRef(rowId, colId);
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index index) const
|
|
||||||
{
|
|
||||||
return m_expression.coeffRef(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Dest>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline void evalTo(Dest& dst) const { dst = m_expression; }
|
|
||||||
|
|
||||||
const typename internal::remove_all<NestedExpressionType>::type&
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
nestedExpression() const
|
|
||||||
{
|
|
||||||
return m_expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Forwards the resizing request to the nested expression
|
|
||||||
* \sa DenseBase::resize(Index) */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void resize(Index newSize) { m_expression.resize(newSize); }
|
|
||||||
/** Forwards the resizing request to the nested expression
|
|
||||||
* \sa DenseBase::resize(Index,Index)*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void resize(Index rows, Index cols) { m_expression.resize(rows,cols); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
NestedExpressionType m_expression;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \class MatrixWrapper
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Expression of an array as a mathematical vector or matrix
|
|
||||||
*
|
|
||||||
* This class is the return type of ArrayBase::matrix(), and most of the time
|
|
||||||
* this is the only way it is use.
|
|
||||||
*
|
|
||||||
* \sa MatrixBase::matrix(), class ArrayWrapper
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
template<typename ExpressionType>
|
|
||||||
struct traits<MatrixWrapper<ExpressionType> >
|
|
||||||
: public traits<typename remove_all<typename ExpressionType::Nested>::type >
|
|
||||||
{
|
|
||||||
typedef MatrixXpr XprKind;
|
|
||||||
// Let's remove NestByRefBit
|
|
||||||
enum {
|
|
||||||
Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
|
|
||||||
LvalueBitFlag = is_lvalue<ExpressionType>::value ? LvalueBit : 0,
|
|
||||||
Flags = (Flags0 & ~(NestByRefBit | LvalueBit)) | LvalueBitFlag
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename ExpressionType>
|
|
||||||
class MatrixWrapper : public MatrixBase<MatrixWrapper<ExpressionType> >
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef MatrixBase<MatrixWrapper<ExpressionType> > Base;
|
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper)
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper)
|
|
||||||
typedef typename internal::remove_all<ExpressionType>::type NestedExpression;
|
|
||||||
|
|
||||||
typedef typename internal::conditional<
|
|
||||||
internal::is_lvalue<ExpressionType>::value,
|
|
||||||
Scalar,
|
|
||||||
const Scalar
|
|
||||||
>::type ScalarWithConstIfNotLvalue;
|
|
||||||
|
|
||||||
typedef typename internal::ref_selector<ExpressionType>::non_const_type NestedExpressionType;
|
|
||||||
|
|
||||||
using Base::coeffRef;
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
explicit inline MatrixWrapper(ExpressionType& matrix) : m_expression(matrix) {}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index rows() const { return m_expression.rows(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index cols() const { return m_expression.cols(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index outerStride() const { return m_expression.outerStride(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index innerStride() const { return m_expression.innerStride(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); }
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar* data() const { return m_expression.data(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
|
||||||
{
|
|
||||||
return m_expression.derived().coeffRef(rowId, colId);
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index index) const
|
|
||||||
{
|
|
||||||
return m_expression.coeffRef(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
const typename internal::remove_all<NestedExpressionType>::type&
|
|
||||||
nestedExpression() const
|
|
||||||
{
|
|
||||||
return m_expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Forwards the resizing request to the nested expression
|
|
||||||
* \sa DenseBase::resize(Index) */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void resize(Index newSize) { m_expression.resize(newSize); }
|
|
||||||
/** Forwards the resizing request to the nested expression
|
|
||||||
* \sa DenseBase::resize(Index,Index)*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void resize(Index rows, Index cols) { m_expression.resize(rows,cols); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
NestedExpressionType m_expression;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ARRAYWRAPPER_H
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2007 Michael Olbrich <michael.olbrich@gmx.net>
|
|
||||||
// Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ASSIGN_H
|
|
||||||
#define EIGEN_ASSIGN_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_STRONG_INLINE Derived& DenseBase<Derived>
|
|
||||||
::lazyAssign(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
enum{
|
|
||||||
SameType = internal::is_same<typename Derived::Scalar,typename OtherDerived::Scalar>::value
|
|
||||||
};
|
|
||||||
|
|
||||||
EIGEN_STATIC_ASSERT_LVALUE(Derived)
|
|
||||||
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived)
|
|
||||||
EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
|
||||||
|
|
||||||
eigen_assert(rows() == other.rows() && cols() == other.cols());
|
|
||||||
internal::call_assignment_no_alias(derived(),other.derived());
|
|
||||||
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
template <typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
template <typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
internal::call_assignment(derived(), other.derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
other.derived().evalTo(derived());
|
|
||||||
return derived();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ASSIGN_H
|
|
||||||
@@ -1,935 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2011 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
// Copyright (C) 2011-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2011-2012 Jitse Niesen <jitse@maths.leeds.ac.uk>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ASSIGN_EVALUATOR_H
|
|
||||||
#define EIGEN_ASSIGN_EVALUATOR_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
// This implementation is based on Assign.h
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 1 : the logic deciding a strategy for traversal and unrolling *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
// copy_using_evaluator_traits is based on assign_traits
|
|
||||||
|
|
||||||
template <typename DstEvaluator, typename SrcEvaluator, typename AssignFunc>
|
|
||||||
struct copy_using_evaluator_traits
|
|
||||||
{
|
|
||||||
typedef typename DstEvaluator::XprType Dst;
|
|
||||||
typedef typename Dst::Scalar DstScalar;
|
|
||||||
|
|
||||||
enum {
|
|
||||||
DstFlags = DstEvaluator::Flags,
|
|
||||||
SrcFlags = SrcEvaluator::Flags
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum {
|
|
||||||
DstAlignment = DstEvaluator::Alignment,
|
|
||||||
SrcAlignment = SrcEvaluator::Alignment,
|
|
||||||
DstHasDirectAccess = (DstFlags & DirectAccessBit) == DirectAccessBit,
|
|
||||||
JointAlignment = EIGEN_PLAIN_ENUM_MIN(DstAlignment,SrcAlignment)
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
enum {
|
|
||||||
InnerSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::SizeAtCompileTime)
|
|
||||||
: int(DstFlags)&RowMajorBit ? int(Dst::ColsAtCompileTime)
|
|
||||||
: int(Dst::RowsAtCompileTime),
|
|
||||||
InnerMaxSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime)
|
|
||||||
: int(DstFlags)&RowMajorBit ? int(Dst::MaxColsAtCompileTime)
|
|
||||||
: int(Dst::MaxRowsAtCompileTime),
|
|
||||||
OuterStride = int(outer_stride_at_compile_time<Dst>::ret),
|
|
||||||
MaxSizeAtCompileTime = Dst::SizeAtCompileTime
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO distinguish between linear traversal and inner-traversals
|
|
||||||
typedef typename find_best_packet<DstScalar,Dst::SizeAtCompileTime>::type LinearPacketType;
|
|
||||||
typedef typename find_best_packet<DstScalar,InnerSize>::type InnerPacketType;
|
|
||||||
|
|
||||||
enum {
|
|
||||||
LinearPacketSize = unpacket_traits<LinearPacketType>::size,
|
|
||||||
InnerPacketSize = unpacket_traits<InnerPacketType>::size
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum {
|
|
||||||
LinearRequiredAlignment = unpacket_traits<LinearPacketType>::alignment,
|
|
||||||
InnerRequiredAlignment = unpacket_traits<InnerPacketType>::alignment
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
enum {
|
|
||||||
DstIsRowMajor = DstFlags&RowMajorBit,
|
|
||||||
SrcIsRowMajor = SrcFlags&RowMajorBit,
|
|
||||||
StorageOrdersAgree = (int(DstIsRowMajor) == int(SrcIsRowMajor)),
|
|
||||||
MightVectorize = bool(StorageOrdersAgree)
|
|
||||||
&& (int(DstFlags) & int(SrcFlags) & ActualPacketAccessBit)
|
|
||||||
&& bool(functor_traits<AssignFunc>::PacketAccess),
|
|
||||||
MayInnerVectorize = MightVectorize
|
|
||||||
&& int(InnerSize)!=Dynamic && int(InnerSize)%int(InnerPacketSize)==0
|
|
||||||
&& int(OuterStride)!=Dynamic && int(OuterStride)%int(InnerPacketSize)==0
|
|
||||||
&& (EIGEN_UNALIGNED_VECTORIZE || int(JointAlignment)>=int(InnerRequiredAlignment)),
|
|
||||||
MayLinearize = bool(StorageOrdersAgree) && (int(DstFlags) & int(SrcFlags) & LinearAccessBit),
|
|
||||||
MayLinearVectorize = bool(MightVectorize) && bool(MayLinearize) && bool(DstHasDirectAccess)
|
|
||||||
&& (EIGEN_UNALIGNED_VECTORIZE || (int(DstAlignment)>=int(LinearRequiredAlignment)) || MaxSizeAtCompileTime == Dynamic),
|
|
||||||
/* If the destination isn't aligned, we have to do runtime checks and we don't unroll,
|
|
||||||
so it's only good for large enough sizes. */
|
|
||||||
MaySliceVectorize = bool(MightVectorize) && bool(DstHasDirectAccess)
|
|
||||||
&& (int(InnerMaxSize)==Dynamic || int(InnerMaxSize)>=(EIGEN_UNALIGNED_VECTORIZE?InnerPacketSize:(3*InnerPacketSize)))
|
|
||||||
/* slice vectorization can be slow, so we only want it if the slices are big, which is
|
|
||||||
indicated by InnerMaxSize rather than InnerSize, think of the case of a dynamic block
|
|
||||||
in a fixed-size matrix
|
|
||||||
However, with EIGEN_UNALIGNED_VECTORIZE and unrolling, slice vectorization is still worth it */
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum {
|
|
||||||
Traversal = int(MayLinearVectorize) && (LinearPacketSize>InnerPacketSize) ? int(LinearVectorizedTraversal)
|
|
||||||
: int(MayInnerVectorize) ? int(InnerVectorizedTraversal)
|
|
||||||
: int(MayLinearVectorize) ? int(LinearVectorizedTraversal)
|
|
||||||
: int(MaySliceVectorize) ? int(SliceVectorizedTraversal)
|
|
||||||
: int(MayLinearize) ? int(LinearTraversal)
|
|
||||||
: int(DefaultTraversal),
|
|
||||||
Vectorized = int(Traversal) == InnerVectorizedTraversal
|
|
||||||
|| int(Traversal) == LinearVectorizedTraversal
|
|
||||||
|| int(Traversal) == SliceVectorizedTraversal
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef typename conditional<int(Traversal)==LinearVectorizedTraversal, LinearPacketType, InnerPacketType>::type PacketType;
|
|
||||||
|
|
||||||
private:
|
|
||||||
enum {
|
|
||||||
ActualPacketSize = int(Traversal)==LinearVectorizedTraversal ? LinearPacketSize
|
|
||||||
: Vectorized ? InnerPacketSize
|
|
||||||
: 1,
|
|
||||||
UnrollingLimit = EIGEN_UNROLLING_LIMIT * ActualPacketSize,
|
|
||||||
MayUnrollCompletely = int(Dst::SizeAtCompileTime) != Dynamic
|
|
||||||
&& int(Dst::SizeAtCompileTime) * (int(DstEvaluator::CoeffReadCost)+int(SrcEvaluator::CoeffReadCost)) <= int(UnrollingLimit),
|
|
||||||
MayUnrollInner = int(InnerSize) != Dynamic
|
|
||||||
&& int(InnerSize) * (int(DstEvaluator::CoeffReadCost)+int(SrcEvaluator::CoeffReadCost)) <= int(UnrollingLimit)
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum {
|
|
||||||
Unrolling = (int(Traversal) == int(InnerVectorizedTraversal) || int(Traversal) == int(DefaultTraversal))
|
|
||||||
? (
|
|
||||||
int(MayUnrollCompletely) ? int(CompleteUnrolling)
|
|
||||||
: int(MayUnrollInner) ? int(InnerUnrolling)
|
|
||||||
: int(NoUnrolling)
|
|
||||||
)
|
|
||||||
: int(Traversal) == int(LinearVectorizedTraversal)
|
|
||||||
? ( bool(MayUnrollCompletely) && ( EIGEN_UNALIGNED_VECTORIZE || (int(DstAlignment)>=int(LinearRequiredAlignment)))
|
|
||||||
? int(CompleteUnrolling)
|
|
||||||
: int(NoUnrolling) )
|
|
||||||
: int(Traversal) == int(LinearTraversal)
|
|
||||||
? ( bool(MayUnrollCompletely) ? int(CompleteUnrolling)
|
|
||||||
: int(NoUnrolling) )
|
|
||||||
#if EIGEN_UNALIGNED_VECTORIZE
|
|
||||||
: int(Traversal) == int(SliceVectorizedTraversal)
|
|
||||||
? ( bool(MayUnrollInner) ? int(InnerUnrolling)
|
|
||||||
: int(NoUnrolling) )
|
|
||||||
#endif
|
|
||||||
: int(NoUnrolling)
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef EIGEN_DEBUG_ASSIGN
|
|
||||||
static void debug()
|
|
||||||
{
|
|
||||||
std::cerr << "DstXpr: " << typeid(typename DstEvaluator::XprType).name() << std::endl;
|
|
||||||
std::cerr << "SrcXpr: " << typeid(typename SrcEvaluator::XprType).name() << std::endl;
|
|
||||||
std::cerr.setf(std::ios::hex, std::ios::basefield);
|
|
||||||
std::cerr << "DstFlags" << " = " << DstFlags << " (" << demangle_flags(DstFlags) << " )" << std::endl;
|
|
||||||
std::cerr << "SrcFlags" << " = " << SrcFlags << " (" << demangle_flags(SrcFlags) << " )" << std::endl;
|
|
||||||
std::cerr.unsetf(std::ios::hex);
|
|
||||||
EIGEN_DEBUG_VAR(DstAlignment)
|
|
||||||
EIGEN_DEBUG_VAR(SrcAlignment)
|
|
||||||
EIGEN_DEBUG_VAR(LinearRequiredAlignment)
|
|
||||||
EIGEN_DEBUG_VAR(InnerRequiredAlignment)
|
|
||||||
EIGEN_DEBUG_VAR(JointAlignment)
|
|
||||||
EIGEN_DEBUG_VAR(InnerSize)
|
|
||||||
EIGEN_DEBUG_VAR(InnerMaxSize)
|
|
||||||
EIGEN_DEBUG_VAR(LinearPacketSize)
|
|
||||||
EIGEN_DEBUG_VAR(InnerPacketSize)
|
|
||||||
EIGEN_DEBUG_VAR(ActualPacketSize)
|
|
||||||
EIGEN_DEBUG_VAR(StorageOrdersAgree)
|
|
||||||
EIGEN_DEBUG_VAR(MightVectorize)
|
|
||||||
EIGEN_DEBUG_VAR(MayLinearize)
|
|
||||||
EIGEN_DEBUG_VAR(MayInnerVectorize)
|
|
||||||
EIGEN_DEBUG_VAR(MayLinearVectorize)
|
|
||||||
EIGEN_DEBUG_VAR(MaySliceVectorize)
|
|
||||||
std::cerr << "Traversal" << " = " << Traversal << " (" << demangle_traversal(Traversal) << ")" << std::endl;
|
|
||||||
EIGEN_DEBUG_VAR(SrcEvaluator::CoeffReadCost)
|
|
||||||
EIGEN_DEBUG_VAR(UnrollingLimit)
|
|
||||||
EIGEN_DEBUG_VAR(MayUnrollCompletely)
|
|
||||||
EIGEN_DEBUG_VAR(MayUnrollInner)
|
|
||||||
std::cerr << "Unrolling" << " = " << Unrolling << " (" << demangle_unrolling(Unrolling) << ")" << std::endl;
|
|
||||||
std::cerr << std::endl;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 2 : meta-unrollers
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/************************
|
|
||||||
*** Default traversal ***
|
|
||||||
************************/
|
|
||||||
|
|
||||||
template<typename Kernel, int Index, int Stop>
|
|
||||||
struct copy_using_evaluator_DefaultTraversal_CompleteUnrolling
|
|
||||||
{
|
|
||||||
// FIXME: this is not very clean, perhaps this information should be provided by the kernel?
|
|
||||||
typedef typename Kernel::DstEvaluatorType DstEvaluatorType;
|
|
||||||
typedef typename DstEvaluatorType::XprType DstXprType;
|
|
||||||
|
|
||||||
enum {
|
|
||||||
outer = Index / DstXprType::InnerSizeAtCompileTime,
|
|
||||||
inner = Index % DstXprType::InnerSizeAtCompileTime
|
|
||||||
};
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
kernel.assignCoeffByOuterInner(outer, inner);
|
|
||||||
copy_using_evaluator_DefaultTraversal_CompleteUnrolling<Kernel, Index+1, Stop>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Stop>
|
|
||||||
struct copy_using_evaluator_DefaultTraversal_CompleteUnrolling<Kernel, Stop, Stop>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel&) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Index_, int Stop>
|
|
||||||
struct copy_using_evaluator_DefaultTraversal_InnerUnrolling
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel, Index outer)
|
|
||||||
{
|
|
||||||
kernel.assignCoeffByOuterInner(outer, Index_);
|
|
||||||
copy_using_evaluator_DefaultTraversal_InnerUnrolling<Kernel, Index_+1, Stop>::run(kernel, outer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Stop>
|
|
||||||
struct copy_using_evaluator_DefaultTraversal_InnerUnrolling<Kernel, Stop, Stop>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel&, Index) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
/***********************
|
|
||||||
*** Linear traversal ***
|
|
||||||
***********************/
|
|
||||||
|
|
||||||
template<typename Kernel, int Index, int Stop>
|
|
||||||
struct copy_using_evaluator_LinearTraversal_CompleteUnrolling
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel& kernel)
|
|
||||||
{
|
|
||||||
kernel.assignCoeff(Index);
|
|
||||||
copy_using_evaluator_LinearTraversal_CompleteUnrolling<Kernel, Index+1, Stop>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Stop>
|
|
||||||
struct copy_using_evaluator_LinearTraversal_CompleteUnrolling<Kernel, Stop, Stop>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel&) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
/**************************
|
|
||||||
*** Inner vectorization ***
|
|
||||||
**************************/
|
|
||||||
|
|
||||||
template<typename Kernel, int Index, int Stop>
|
|
||||||
struct copy_using_evaluator_innervec_CompleteUnrolling
|
|
||||||
{
|
|
||||||
// FIXME: this is not very clean, perhaps this information should be provided by the kernel?
|
|
||||||
typedef typename Kernel::DstEvaluatorType DstEvaluatorType;
|
|
||||||
typedef typename DstEvaluatorType::XprType DstXprType;
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
|
|
||||||
enum {
|
|
||||||
outer = Index / DstXprType::InnerSizeAtCompileTime,
|
|
||||||
inner = Index % DstXprType::InnerSizeAtCompileTime,
|
|
||||||
SrcAlignment = Kernel::AssignmentTraits::SrcAlignment,
|
|
||||||
DstAlignment = Kernel::AssignmentTraits::DstAlignment
|
|
||||||
};
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
kernel.template assignPacketByOuterInner<DstAlignment, SrcAlignment, PacketType>(outer, inner);
|
|
||||||
enum { NextIndex = Index + unpacket_traits<PacketType>::size };
|
|
||||||
copy_using_evaluator_innervec_CompleteUnrolling<Kernel, NextIndex, Stop>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Stop>
|
|
||||||
struct copy_using_evaluator_innervec_CompleteUnrolling<Kernel, Stop, Stop>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel&) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Index_, int Stop, int SrcAlignment, int DstAlignment>
|
|
||||||
struct copy_using_evaluator_innervec_InnerUnrolling
|
|
||||||
{
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel, Index outer)
|
|
||||||
{
|
|
||||||
kernel.template assignPacketByOuterInner<DstAlignment, SrcAlignment, PacketType>(outer, Index_);
|
|
||||||
enum { NextIndex = Index_ + unpacket_traits<PacketType>::size };
|
|
||||||
copy_using_evaluator_innervec_InnerUnrolling<Kernel, NextIndex, Stop, SrcAlignment, DstAlignment>::run(kernel, outer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel, int Stop, int SrcAlignment, int DstAlignment>
|
|
||||||
struct copy_using_evaluator_innervec_InnerUnrolling<Kernel, Stop, Stop, SrcAlignment, DstAlignment>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &, Index) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 3 : implementation of all cases
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
// dense_assignment_loop is based on assign_impl
|
|
||||||
|
|
||||||
template<typename Kernel,
|
|
||||||
int Traversal = Kernel::AssignmentTraits::Traversal,
|
|
||||||
int Unrolling = Kernel::AssignmentTraits::Unrolling>
|
|
||||||
struct dense_assignment_loop;
|
|
||||||
|
|
||||||
/************************
|
|
||||||
*** Default traversal ***
|
|
||||||
************************/
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, DefaultTraversal, NoUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static void EIGEN_STRONG_INLINE run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
for(Index outer = 0; outer < kernel.outerSize(); ++outer) {
|
|
||||||
for(Index inner = 0; inner < kernel.innerSize(); ++inner) {
|
|
||||||
kernel.assignCoeffByOuterInner(outer, inner);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, DefaultTraversal, CompleteUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
copy_using_evaluator_DefaultTraversal_CompleteUnrolling<Kernel, 0, DstXprType::SizeAtCompileTime>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, DefaultTraversal, InnerUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
|
|
||||||
const Index outerSize = kernel.outerSize();
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer)
|
|
||||||
copy_using_evaluator_DefaultTraversal_InnerUnrolling<Kernel, 0, DstXprType::InnerSizeAtCompileTime>::run(kernel, outer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/***************************
|
|
||||||
*** Linear vectorization ***
|
|
||||||
***************************/
|
|
||||||
|
|
||||||
|
|
||||||
// The goal of unaligned_dense_assignment_loop is simply to factorize the handling
|
|
||||||
// of the non vectorizable beginning and ending parts
|
|
||||||
|
|
||||||
template <bool IsAligned = false>
|
|
||||||
struct unaligned_dense_assignment_loop
|
|
||||||
{
|
|
||||||
// if IsAligned = true, then do nothing
|
|
||||||
template <typename Kernel>
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel&, Index, Index) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct unaligned_dense_assignment_loop<false>
|
|
||||||
{
|
|
||||||
// MSVC must not inline this functions. If it does, it fails to optimize the
|
|
||||||
// packet access path.
|
|
||||||
// FIXME check which version exhibits this issue
|
|
||||||
#if EIGEN_COMP_MSVC
|
|
||||||
template <typename Kernel>
|
|
||||||
static EIGEN_DONT_INLINE void run(Kernel &kernel,
|
|
||||||
Index start,
|
|
||||||
Index end)
|
|
||||||
#else
|
|
||||||
template <typename Kernel>
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel,
|
|
||||||
Index start,
|
|
||||||
Index end)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
for (Index index = start; index < end; ++index)
|
|
||||||
kernel.assignCoeff(index);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, LinearVectorizedTraversal, NoUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
const Index size = kernel.size();
|
|
||||||
typedef typename Kernel::Scalar Scalar;
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
enum {
|
|
||||||
requestedAlignment = Kernel::AssignmentTraits::LinearRequiredAlignment,
|
|
||||||
packetSize = unpacket_traits<PacketType>::size,
|
|
||||||
dstIsAligned = int(Kernel::AssignmentTraits::DstAlignment)>=int(requestedAlignment),
|
|
||||||
dstAlignment = packet_traits<Scalar>::AlignedOnScalar ? int(requestedAlignment)
|
|
||||||
: int(Kernel::AssignmentTraits::DstAlignment),
|
|
||||||
srcAlignment = Kernel::AssignmentTraits::JointAlignment
|
|
||||||
};
|
|
||||||
const Index alignedStart = dstIsAligned ? 0 : internal::first_aligned<requestedAlignment>(kernel.dstDataPtr(), size);
|
|
||||||
const Index alignedEnd = alignedStart + ((size-alignedStart)/packetSize)*packetSize;
|
|
||||||
|
|
||||||
unaligned_dense_assignment_loop<dstIsAligned!=0>::run(kernel, 0, alignedStart);
|
|
||||||
|
|
||||||
for(Index index = alignedStart; index < alignedEnd; index += packetSize)
|
|
||||||
kernel.template assignPacket<dstAlignment, srcAlignment, PacketType>(index);
|
|
||||||
|
|
||||||
unaligned_dense_assignment_loop<>::run(kernel, alignedEnd, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, LinearVectorizedTraversal, CompleteUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
|
|
||||||
enum { size = DstXprType::SizeAtCompileTime,
|
|
||||||
packetSize =unpacket_traits<PacketType>::size,
|
|
||||||
alignedSize = (size/packetSize)*packetSize };
|
|
||||||
|
|
||||||
copy_using_evaluator_innervec_CompleteUnrolling<Kernel, 0, alignedSize>::run(kernel);
|
|
||||||
copy_using_evaluator_DefaultTraversal_CompleteUnrolling<Kernel, alignedSize, size>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**************************
|
|
||||||
*** Inner vectorization ***
|
|
||||||
**************************/
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, InnerVectorizedTraversal, NoUnrolling>
|
|
||||||
{
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
enum {
|
|
||||||
SrcAlignment = Kernel::AssignmentTraits::SrcAlignment,
|
|
||||||
DstAlignment = Kernel::AssignmentTraits::DstAlignment
|
|
||||||
};
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
const Index innerSize = kernel.innerSize();
|
|
||||||
const Index outerSize = kernel.outerSize();
|
|
||||||
const Index packetSize = unpacket_traits<PacketType>::size;
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer)
|
|
||||||
for(Index inner = 0; inner < innerSize; inner+=packetSize)
|
|
||||||
kernel.template assignPacketByOuterInner<DstAlignment, SrcAlignment, PacketType>(outer, inner);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, InnerVectorizedTraversal, CompleteUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
copy_using_evaluator_innervec_CompleteUnrolling<Kernel, 0, DstXprType::SizeAtCompileTime>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, InnerVectorizedTraversal, InnerUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
typedef typename Kernel::AssignmentTraits Traits;
|
|
||||||
const Index outerSize = kernel.outerSize();
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer)
|
|
||||||
copy_using_evaluator_innervec_InnerUnrolling<Kernel, 0, DstXprType::InnerSizeAtCompileTime,
|
|
||||||
Traits::SrcAlignment, Traits::DstAlignment>::run(kernel, outer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/***********************
|
|
||||||
*** Linear traversal ***
|
|
||||||
***********************/
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, LinearTraversal, NoUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
const Index size = kernel.size();
|
|
||||||
for(Index i = 0; i < size; ++i)
|
|
||||||
kernel.assignCoeff(i);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, LinearTraversal, CompleteUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
copy_using_evaluator_LinearTraversal_CompleteUnrolling<Kernel, 0, DstXprType::SizeAtCompileTime>::run(kernel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**************************
|
|
||||||
*** Slice vectorization ***
|
|
||||||
***************************/
|
|
||||||
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, SliceVectorizedTraversal, NoUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::Scalar Scalar;
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
enum {
|
|
||||||
packetSize = unpacket_traits<PacketType>::size,
|
|
||||||
requestedAlignment = int(Kernel::AssignmentTraits::InnerRequiredAlignment),
|
|
||||||
alignable = packet_traits<Scalar>::AlignedOnScalar || int(Kernel::AssignmentTraits::DstAlignment)>=sizeof(Scalar),
|
|
||||||
dstIsAligned = int(Kernel::AssignmentTraits::DstAlignment)>=int(requestedAlignment),
|
|
||||||
dstAlignment = alignable ? int(requestedAlignment)
|
|
||||||
: int(Kernel::AssignmentTraits::DstAlignment)
|
|
||||||
};
|
|
||||||
const Scalar *dst_ptr = kernel.dstDataPtr();
|
|
||||||
if((!bool(dstIsAligned)) && (UIntPtr(dst_ptr) % sizeof(Scalar))>0)
|
|
||||||
{
|
|
||||||
// the pointer is not aligend-on scalar, so alignment is not possible
|
|
||||||
return dense_assignment_loop<Kernel,DefaultTraversal,NoUnrolling>::run(kernel);
|
|
||||||
}
|
|
||||||
const Index packetAlignedMask = packetSize - 1;
|
|
||||||
const Index innerSize = kernel.innerSize();
|
|
||||||
const Index outerSize = kernel.outerSize();
|
|
||||||
const Index alignedStep = alignable ? (packetSize - kernel.outerStride() % packetSize) & packetAlignedMask : 0;
|
|
||||||
Index alignedStart = ((!alignable) || bool(dstIsAligned)) ? 0 : internal::first_aligned<requestedAlignment>(dst_ptr, innerSize);
|
|
||||||
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer)
|
|
||||||
{
|
|
||||||
const Index alignedEnd = alignedStart + ((innerSize-alignedStart) & ~packetAlignedMask);
|
|
||||||
// do the non-vectorizable part of the assignment
|
|
||||||
for(Index inner = 0; inner<alignedStart ; ++inner)
|
|
||||||
kernel.assignCoeffByOuterInner(outer, inner);
|
|
||||||
|
|
||||||
// do the vectorizable part of the assignment
|
|
||||||
for(Index inner = alignedStart; inner<alignedEnd; inner+=packetSize)
|
|
||||||
kernel.template assignPacketByOuterInner<dstAlignment, Unaligned, PacketType>(outer, inner);
|
|
||||||
|
|
||||||
// do the non-vectorizable part of the assignment
|
|
||||||
for(Index inner = alignedEnd; inner<innerSize ; ++inner)
|
|
||||||
kernel.assignCoeffByOuterInner(outer, inner);
|
|
||||||
|
|
||||||
alignedStart = numext::mini((alignedStart+alignedStep)%packetSize, innerSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if EIGEN_UNALIGNED_VECTORIZE
|
|
||||||
template<typename Kernel>
|
|
||||||
struct dense_assignment_loop<Kernel, SliceVectorizedTraversal, InnerUnrolling>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Kernel &kernel)
|
|
||||||
{
|
|
||||||
typedef typename Kernel::DstEvaluatorType::XprType DstXprType;
|
|
||||||
typedef typename Kernel::PacketType PacketType;
|
|
||||||
|
|
||||||
enum { size = DstXprType::InnerSizeAtCompileTime,
|
|
||||||
packetSize =unpacket_traits<PacketType>::size,
|
|
||||||
vectorizableSize = (size/packetSize)*packetSize };
|
|
||||||
|
|
||||||
for(Index outer = 0; outer < kernel.outerSize(); ++outer)
|
|
||||||
{
|
|
||||||
copy_using_evaluator_innervec_InnerUnrolling<Kernel, 0, vectorizableSize, 0, 0>::run(kernel, outer);
|
|
||||||
copy_using_evaluator_DefaultTraversal_InnerUnrolling<Kernel, vectorizableSize, size>::run(kernel, outer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 4 : Generic dense assignment kernel
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
// This class generalize the assignment of a coefficient (or packet) from one dense evaluator
|
|
||||||
// to another dense writable evaluator.
|
|
||||||
// It is parametrized by the two evaluators, and the actual assignment functor.
|
|
||||||
// This abstraction level permits to keep the evaluation loops as simple and as generic as possible.
|
|
||||||
// One can customize the assignment using this generic dense_assignment_kernel with different
|
|
||||||
// functors, or by completely overloading it, by-passing a functor.
|
|
||||||
template<typename DstEvaluatorTypeT, typename SrcEvaluatorTypeT, typename Functor, int Version = Specialized>
|
|
||||||
class generic_dense_assignment_kernel
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
typedef typename DstEvaluatorTypeT::XprType DstXprType;
|
|
||||||
typedef typename SrcEvaluatorTypeT::XprType SrcXprType;
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef DstEvaluatorTypeT DstEvaluatorType;
|
|
||||||
typedef SrcEvaluatorTypeT SrcEvaluatorType;
|
|
||||||
typedef typename DstEvaluatorType::Scalar Scalar;
|
|
||||||
typedef copy_using_evaluator_traits<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor> AssignmentTraits;
|
|
||||||
typedef typename AssignmentTraits::PacketType PacketType;
|
|
||||||
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC generic_dense_assignment_kernel(DstEvaluatorType &dst, const SrcEvaluatorType &src, const Functor &func, DstXprType& dstExpr)
|
|
||||||
: m_dst(dst), m_src(src), m_functor(func), m_dstExpr(dstExpr)
|
|
||||||
{
|
|
||||||
#ifdef EIGEN_DEBUG_ASSIGN
|
|
||||||
AssignmentTraits::debug();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC Index size() const { return m_dstExpr.size(); }
|
|
||||||
EIGEN_DEVICE_FUNC Index innerSize() const { return m_dstExpr.innerSize(); }
|
|
||||||
EIGEN_DEVICE_FUNC Index outerSize() const { return m_dstExpr.outerSize(); }
|
|
||||||
EIGEN_DEVICE_FUNC Index rows() const { return m_dstExpr.rows(); }
|
|
||||||
EIGEN_DEVICE_FUNC Index cols() const { return m_dstExpr.cols(); }
|
|
||||||
EIGEN_DEVICE_FUNC Index outerStride() const { return m_dstExpr.outerStride(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC DstEvaluatorType& dstEvaluator() { return m_dst; }
|
|
||||||
EIGEN_DEVICE_FUNC const SrcEvaluatorType& srcEvaluator() const { return m_src; }
|
|
||||||
|
|
||||||
/// Assign src(row,col) to dst(row,col) through the assignment functor.
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Index row, Index col)
|
|
||||||
{
|
|
||||||
m_functor.assignCoeff(m_dst.coeffRef(row,col), m_src.coeff(row,col));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \sa assignCoeff(Index,Index)
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Index index)
|
|
||||||
{
|
|
||||||
m_functor.assignCoeff(m_dst.coeffRef(index), m_src.coeff(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \sa assignCoeff(Index,Index)
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeffByOuterInner(Index outer, Index inner)
|
|
||||||
{
|
|
||||||
Index row = rowIndexByOuterInner(outer, inner);
|
|
||||||
Index col = colIndexByOuterInner(outer, inner);
|
|
||||||
assignCoeff(row, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignPacket(Index row, Index col)
|
|
||||||
{
|
|
||||||
m_functor.template assignPacket<StoreMode>(&m_dst.coeffRef(row,col), m_src.template packet<LoadMode,PacketType>(row,col));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignPacket(Index index)
|
|
||||||
{
|
|
||||||
m_functor.template assignPacket<StoreMode>(&m_dst.coeffRef(index), m_src.template packet<LoadMode,PacketType>(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int StoreMode, int LoadMode, typename PacketType>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignPacketByOuterInner(Index outer, Index inner)
|
|
||||||
{
|
|
||||||
Index row = rowIndexByOuterInner(outer, inner);
|
|
||||||
Index col = colIndexByOuterInner(outer, inner);
|
|
||||||
assignPacket<StoreMode,LoadMode,PacketType>(row, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner)
|
|
||||||
{
|
|
||||||
typedef typename DstEvaluatorType::ExpressionTraits Traits;
|
|
||||||
return int(Traits::RowsAtCompileTime) == 1 ? 0
|
|
||||||
: int(Traits::ColsAtCompileTime) == 1 ? inner
|
|
||||||
: int(DstEvaluatorType::Flags)&RowMajorBit ? outer
|
|
||||||
: inner;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner)
|
|
||||||
{
|
|
||||||
typedef typename DstEvaluatorType::ExpressionTraits Traits;
|
|
||||||
return int(Traits::ColsAtCompileTime) == 1 ? 0
|
|
||||||
: int(Traits::RowsAtCompileTime) == 1 ? inner
|
|
||||||
: int(DstEvaluatorType::Flags)&RowMajorBit ? inner
|
|
||||||
: outer;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC const Scalar* dstDataPtr() const
|
|
||||||
{
|
|
||||||
return m_dstExpr.data();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
DstEvaluatorType& m_dst;
|
|
||||||
const SrcEvaluatorType& m_src;
|
|
||||||
const Functor &m_functor;
|
|
||||||
// TODO find a way to avoid the needs of the original expression
|
|
||||||
DstXprType& m_dstExpr;
|
|
||||||
};
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 5 : Entry point for dense rectangular assignment
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
template<typename DstXprType,typename SrcXprType, typename Functor>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void resize_if_allowed(DstXprType &dst, const SrcXprType& src, const Functor &/*func*/)
|
|
||||||
{
|
|
||||||
EIGEN_ONLY_USED_FOR_DEBUG(dst);
|
|
||||||
EIGEN_ONLY_USED_FOR_DEBUG(src);
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename DstXprType,typename SrcXprType, typename T1, typename T2>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void resize_if_allowed(DstXprType &dst, const SrcXprType& src, const internal::assign_op<T1,T2> &/*func*/)
|
|
||||||
{
|
|
||||||
Index dstRows = src.rows();
|
|
||||||
Index dstCols = src.cols();
|
|
||||||
if(((dst.rows()!=dstRows) || (dst.cols()!=dstCols)))
|
|
||||||
dst.resize(dstRows, dstCols);
|
|
||||||
eigen_assert(dst.rows() == dstRows && dst.cols() == dstCols);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename DstXprType, typename SrcXprType, typename Functor>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop(DstXprType& dst, const SrcXprType& src, const Functor &func)
|
|
||||||
{
|
|
||||||
typedef evaluator<DstXprType> DstEvaluatorType;
|
|
||||||
typedef evaluator<SrcXprType> SrcEvaluatorType;
|
|
||||||
|
|
||||||
SrcEvaluatorType srcEvaluator(src);
|
|
||||||
|
|
||||||
// NOTE To properly handle A = (A*A.transpose())/s with A rectangular,
|
|
||||||
// we need to resize the destination after the source evaluator has been created.
|
|
||||||
resize_if_allowed(dst, src, func);
|
|
||||||
|
|
||||||
DstEvaluatorType dstEvaluator(dst);
|
|
||||||
|
|
||||||
typedef generic_dense_assignment_kernel<DstEvaluatorType,SrcEvaluatorType,Functor> Kernel;
|
|
||||||
Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
|
|
||||||
|
|
||||||
dense_assignment_loop<Kernel>::run(kernel);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename DstXprType, typename SrcXprType>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop(DstXprType& dst, const SrcXprType& src)
|
|
||||||
{
|
|
||||||
call_dense_assignment_loop(dst, src, internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar>());
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Part 6 : Generic assignment
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
// Based on the respective shapes of the destination and source,
|
|
||||||
// the class AssignmentKind determine the kind of assignment mechanism.
|
|
||||||
// AssignmentKind must define a Kind typedef.
|
|
||||||
template<typename DstShape, typename SrcShape> struct AssignmentKind;
|
|
||||||
|
|
||||||
// Assignement kind defined in this file:
|
|
||||||
struct Dense2Dense {};
|
|
||||||
struct EigenBase2EigenBase {};
|
|
||||||
|
|
||||||
template<typename,typename> struct AssignmentKind { typedef EigenBase2EigenBase Kind; };
|
|
||||||
template<> struct AssignmentKind<DenseShape,DenseShape> { typedef Dense2Dense Kind; };
|
|
||||||
|
|
||||||
// This is the main assignment class
|
|
||||||
template< typename DstXprType, typename SrcXprType, typename Functor,
|
|
||||||
typename Kind = typename AssignmentKind< typename evaluator_traits<DstXprType>::Shape , typename evaluator_traits<SrcXprType>::Shape >::Kind,
|
|
||||||
typename EnableIf = void>
|
|
||||||
struct Assignment;
|
|
||||||
|
|
||||||
|
|
||||||
// The only purpose of this call_assignment() function is to deal with noalias() / "assume-aliasing" and automatic transposition.
|
|
||||||
// Indeed, I (Gael) think that this concept of "assume-aliasing" was a mistake, and it makes thing quite complicated.
|
|
||||||
// So this intermediate function removes everything related to "assume-aliasing" such that Assignment
|
|
||||||
// does not has to bother about these annoying details.
|
|
||||||
|
|
||||||
template<typename Dst, typename Src>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment(Dst& dst, const Src& src)
|
|
||||||
{
|
|
||||||
call_assignment(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>());
|
|
||||||
}
|
|
||||||
template<typename Dst, typename Src>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment(const Dst& dst, const Src& src)
|
|
||||||
{
|
|
||||||
call_assignment(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deal with "assume-aliasing"
|
|
||||||
template<typename Dst, typename Src, typename Func>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment(Dst& dst, const Src& src, const Func& func, typename enable_if< evaluator_assume_aliasing<Src>::value, void*>::type = 0)
|
|
||||||
{
|
|
||||||
typename plain_matrix_type<Src>::type tmp(src);
|
|
||||||
call_assignment_no_alias(dst, tmp, func);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Dst, typename Src, typename Func>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment(Dst& dst, const Src& src, const Func& func, typename enable_if<!evaluator_assume_aliasing<Src>::value, void*>::type = 0)
|
|
||||||
{
|
|
||||||
call_assignment_no_alias(dst, src, func);
|
|
||||||
}
|
|
||||||
|
|
||||||
// by-pass "assume-aliasing"
|
|
||||||
// When there is no aliasing, we require that 'dst' has been properly resized
|
|
||||||
template<typename Dst, template <typename> class StorageBase, typename Src, typename Func>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment(NoAlias<Dst,StorageBase>& dst, const Src& src, const Func& func)
|
|
||||||
{
|
|
||||||
call_assignment_no_alias(dst.expression(), src, func);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<typename Dst, typename Src, typename Func>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment_no_alias(Dst& dst, const Src& src, const Func& func)
|
|
||||||
{
|
|
||||||
enum {
|
|
||||||
NeedToTranspose = ( (int(Dst::RowsAtCompileTime) == 1 && int(Src::ColsAtCompileTime) == 1)
|
|
||||||
|| (int(Dst::ColsAtCompileTime) == 1 && int(Src::RowsAtCompileTime) == 1)
|
|
||||||
) && int(Dst::SizeAtCompileTime) != 1
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef typename internal::conditional<NeedToTranspose, Transpose<Dst>, Dst>::type ActualDstTypeCleaned;
|
|
||||||
typedef typename internal::conditional<NeedToTranspose, Transpose<Dst>, Dst&>::type ActualDstType;
|
|
||||||
ActualDstType actualDst(dst);
|
|
||||||
|
|
||||||
// TODO check whether this is the right place to perform these checks:
|
|
||||||
EIGEN_STATIC_ASSERT_LVALUE(Dst)
|
|
||||||
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
|
|
||||||
EIGEN_CHECK_BINARY_COMPATIBILIY(Func,typename ActualDstTypeCleaned::Scalar,typename Src::Scalar);
|
|
||||||
|
|
||||||
Assignment<ActualDstTypeCleaned,Src,Func>::run(actualDst, src, func);
|
|
||||||
}
|
|
||||||
template<typename Dst, typename Src>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment_no_alias(Dst& dst, const Src& src)
|
|
||||||
{
|
|
||||||
call_assignment_no_alias(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Dst, typename Src, typename Func>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment_no_alias_no_transpose(Dst& dst, const Src& src, const Func& func)
|
|
||||||
{
|
|
||||||
// TODO check whether this is the right place to perform these checks:
|
|
||||||
EIGEN_STATIC_ASSERT_LVALUE(Dst)
|
|
||||||
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Dst,Src)
|
|
||||||
EIGEN_CHECK_BINARY_COMPATIBILIY(Func,typename Dst::Scalar,typename Src::Scalar);
|
|
||||||
|
|
||||||
Assignment<Dst,Src,Func>::run(dst, src, func);
|
|
||||||
}
|
|
||||||
template<typename Dst, typename Src>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
||||||
void call_assignment_no_alias_no_transpose(Dst& dst, const Src& src)
|
|
||||||
{
|
|
||||||
call_assignment_no_alias_no_transpose(dst, src, internal::assign_op<typename Dst::Scalar,typename Src::Scalar>());
|
|
||||||
}
|
|
||||||
|
|
||||||
// forward declaration
|
|
||||||
template<typename Dst, typename Src> void check_for_aliasing(const Dst &dst, const Src &src);
|
|
||||||
|
|
||||||
// Generic Dense to Dense assignment
|
|
||||||
// Note that the last template argument "Weak" is needed to make it possible to perform
|
|
||||||
// both partial specialization+SFINAE without ambiguous specialization
|
|
||||||
template< typename DstXprType, typename SrcXprType, typename Functor, typename Weak>
|
|
||||||
struct Assignment<DstXprType, SrcXprType, Functor, Dense2Dense, Weak>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
|
|
||||||
{
|
|
||||||
#ifndef EIGEN_NO_DEBUG
|
|
||||||
internal::check_for_aliasing(dst, src);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
call_dense_assignment_loop(dst, src, func);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Generic assignment through evalTo.
|
|
||||||
// TODO: not sure we have to keep that one, but it helps porting current code to new evaluator mechanism.
|
|
||||||
// Note that the last template argument "Weak" is needed to make it possible to perform
|
|
||||||
// both partial specialization+SFINAE without ambiguous specialization
|
|
||||||
template< typename DstXprType, typename SrcXprType, typename Functor, typename Weak>
|
|
||||||
struct Assignment<DstXprType, SrcXprType, Functor, EigenBase2EigenBase, Weak>
|
|
||||||
{
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
|
|
||||||
{
|
|
||||||
Index dstRows = src.rows();
|
|
||||||
Index dstCols = src.cols();
|
|
||||||
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
|
||||||
dst.resize(dstRows, dstCols);
|
|
||||||
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols());
|
|
||||||
src.evalTo(dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE The following two functions are templated to avoid their instanciation if not needed
|
|
||||||
// This is needed because some expressions supports evalTo only and/or have 'void' as scalar type.
|
|
||||||
template<typename SrcScalarType>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const internal::add_assign_op<typename DstXprType::Scalar,SrcScalarType> &/*func*/)
|
|
||||||
{
|
|
||||||
Index dstRows = src.rows();
|
|
||||||
Index dstCols = src.cols();
|
|
||||||
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
|
||||||
dst.resize(dstRows, dstCols);
|
|
||||||
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols());
|
|
||||||
src.addTo(dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename SrcScalarType>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const internal::sub_assign_op<typename DstXprType::Scalar,SrcScalarType> &/*func*/)
|
|
||||||
{
|
|
||||||
Index dstRows = src.rows();
|
|
||||||
Index dstCols = src.cols();
|
|
||||||
if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
|
|
||||||
dst.resize(dstRows, dstCols);
|
|
||||||
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols());
|
|
||||||
src.subTo(dst);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace internal
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ASSIGN_EVALUATOR_H
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2011, Intel Corporation. All rights reserved.
|
|
||||||
Copyright (C) 2015 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Intel Corporation nor the names of its contributors may
|
|
||||||
be used to endorse or promote products derived from this software without
|
|
||||||
specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
********************************************************************************
|
|
||||||
* Content : Eigen bindings to Intel(R) MKL
|
|
||||||
* MKL VML support for coefficient-wise unary Eigen expressions like a=b.sin()
|
|
||||||
********************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef EIGEN_ASSIGN_VML_H
|
|
||||||
#define EIGEN_ASSIGN_VML_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Dst, typename Src>
|
|
||||||
class vml_assign_traits
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
enum {
|
|
||||||
DstHasDirectAccess = Dst::Flags & DirectAccessBit,
|
|
||||||
SrcHasDirectAccess = Src::Flags & DirectAccessBit,
|
|
||||||
StorageOrdersAgree = (int(Dst::IsRowMajor) == int(Src::IsRowMajor)),
|
|
||||||
InnerSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::SizeAtCompileTime)
|
|
||||||
: int(Dst::Flags)&RowMajorBit ? int(Dst::ColsAtCompileTime)
|
|
||||||
: int(Dst::RowsAtCompileTime),
|
|
||||||
InnerMaxSize = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime)
|
|
||||||
: int(Dst::Flags)&RowMajorBit ? int(Dst::MaxColsAtCompileTime)
|
|
||||||
: int(Dst::MaxRowsAtCompileTime),
|
|
||||||
MaxSizeAtCompileTime = Dst::SizeAtCompileTime,
|
|
||||||
|
|
||||||
MightEnableVml = StorageOrdersAgree && DstHasDirectAccess && SrcHasDirectAccess && Src::InnerStrideAtCompileTime==1 && Dst::InnerStrideAtCompileTime==1,
|
|
||||||
MightLinearize = MightEnableVml && (int(Dst::Flags) & int(Src::Flags) & LinearAccessBit),
|
|
||||||
VmlSize = MightLinearize ? MaxSizeAtCompileTime : InnerMaxSize,
|
|
||||||
LargeEnough = VmlSize==Dynamic || VmlSize>=EIGEN_MKL_VML_THRESHOLD
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
enum {
|
|
||||||
EnableVml = MightEnableVml && LargeEnough,
|
|
||||||
Traversal = MightLinearize ? LinearTraversal : DefaultTraversal
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
#define EIGEN_PP_EXPAND(ARG) ARG
|
|
||||||
#if !defined (EIGEN_FAST_MATH) || (EIGEN_FAST_MATH != 1)
|
|
||||||
#define EIGEN_VMLMODE_EXPAND_LA , VML_HA
|
|
||||||
#else
|
|
||||||
#define EIGEN_VMLMODE_EXPAND_LA , VML_LA
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EIGEN_VMLMODE_EXPAND__
|
|
||||||
|
|
||||||
#define EIGEN_VMLMODE_PREFIX_LA vm
|
|
||||||
#define EIGEN_VMLMODE_PREFIX__ v
|
|
||||||
#define EIGEN_VMLMODE_PREFIX(VMLMODE) EIGEN_CAT(EIGEN_VMLMODE_PREFIX_,VMLMODE)
|
|
||||||
|
|
||||||
#define EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE, VMLMODE) \
|
|
||||||
template< typename DstXprType, typename SrcXprNested> \
|
|
||||||
struct Assignment<DstXprType, CwiseUnaryOp<scalar_##EIGENOP##_op<EIGENTYPE>, SrcXprNested>, assign_op<EIGENTYPE,EIGENTYPE>, \
|
|
||||||
Dense2Dense, typename enable_if<vml_assign_traits<DstXprType,SrcXprNested>::EnableVml>::type> { \
|
|
||||||
typedef CwiseUnaryOp<scalar_##EIGENOP##_op<EIGENTYPE>, SrcXprNested> SrcXprType; \
|
|
||||||
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &func) { \
|
|
||||||
resize_if_allowed(dst, src, func); \
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); \
|
|
||||||
if(vml_assign_traits<DstXprType,SrcXprNested>::Traversal==LinearTraversal) { \
|
|
||||||
VMLOP(dst.size(), (const VMLTYPE*)src.nestedExpression().data(), \
|
|
||||||
(VMLTYPE*)dst.data() EIGEN_PP_EXPAND(EIGEN_VMLMODE_EXPAND_##VMLMODE) ); \
|
|
||||||
} else { \
|
|
||||||
const Index outerSize = dst.outerSize(); \
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer) { \
|
|
||||||
const EIGENTYPE *src_ptr = src.IsRowMajor ? &(src.nestedExpression().coeffRef(outer,0)) : \
|
|
||||||
&(src.nestedExpression().coeffRef(0, outer)); \
|
|
||||||
EIGENTYPE *dst_ptr = dst.IsRowMajor ? &(dst.coeffRef(outer,0)) : &(dst.coeffRef(0, outer)); \
|
|
||||||
VMLOP( dst.innerSize(), (const VMLTYPE*)src_ptr, \
|
|
||||||
(VMLTYPE*)dst_ptr EIGEN_PP_EXPAND(EIGEN_VMLMODE_EXPAND_##VMLMODE)); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
|
|
||||||
|
|
||||||
#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, EIGEN_CAT(EIGEN_VMLMODE_PREFIX(VMLMODE),s##VMLOP), float, float, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, EIGEN_CAT(EIGEN_VMLMODE_PREFIX(VMLMODE),d##VMLOP), double, double, VMLMODE)
|
|
||||||
|
|
||||||
#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_CPLX(EIGENOP, VMLOP, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, EIGEN_CAT(EIGEN_VMLMODE_PREFIX(VMLMODE),c##VMLOP), scomplex, MKL_Complex8, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, EIGEN_CAT(EIGEN_VMLMODE_PREFIX(VMLMODE),z##VMLOP), dcomplex, MKL_Complex16, VMLMODE)
|
|
||||||
|
|
||||||
#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS(EIGENOP, VMLOP, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP, VMLMODE) \
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_CPLX(EIGENOP, VMLOP, VMLMODE)
|
|
||||||
|
|
||||||
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(sin, Sin, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(asin, Asin, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(sinh, Sinh, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(cos, Cos, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(acos, Acos, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(cosh, Cosh, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(tan, Tan, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(atan, Atan, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(tanh, Tanh, LA)
|
|
||||||
// EIGEN_MKL_VML_DECLARE_UNARY_CALLS(abs, Abs, _)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(exp, Exp, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(log, Ln, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(log10, Log10, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS(sqrt, Sqrt, _)
|
|
||||||
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(square, Sqr, _)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_CPLX(arg, Arg, _)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(round, Round, _)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(floor, Floor, _)
|
|
||||||
EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(ceil, Ceil, _)
|
|
||||||
|
|
||||||
#define EIGEN_MKL_VML_DECLARE_POW_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE, VMLMODE) \
|
|
||||||
template< typename DstXprType, typename SrcXprNested, typename Plain> \
|
|
||||||
struct Assignment<DstXprType, CwiseBinaryOp<scalar_##EIGENOP##_op<EIGENTYPE,EIGENTYPE>, SrcXprNested, \
|
|
||||||
const CwiseNullaryOp<internal::scalar_constant_op<EIGENTYPE>,Plain> >, assign_op<EIGENTYPE,EIGENTYPE>, \
|
|
||||||
Dense2Dense, typename enable_if<vml_assign_traits<DstXprType,SrcXprNested>::EnableVml>::type> { \
|
|
||||||
typedef CwiseBinaryOp<scalar_##EIGENOP##_op<EIGENTYPE,EIGENTYPE>, SrcXprNested, \
|
|
||||||
const CwiseNullaryOp<internal::scalar_constant_op<EIGENTYPE>,Plain> > SrcXprType; \
|
|
||||||
static void run(DstXprType &dst, const SrcXprType &src, const assign_op<EIGENTYPE,EIGENTYPE> &func) { \
|
|
||||||
resize_if_allowed(dst, src, func); \
|
|
||||||
eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); \
|
|
||||||
VMLTYPE exponent = reinterpret_cast<const VMLTYPE&>(src.rhs().functor().m_other); \
|
|
||||||
if(vml_assign_traits<DstXprType,SrcXprNested>::Traversal==LinearTraversal) \
|
|
||||||
{ \
|
|
||||||
VMLOP( dst.size(), (const VMLTYPE*)src.lhs().data(), exponent, \
|
|
||||||
(VMLTYPE*)dst.data() EIGEN_PP_EXPAND(EIGEN_VMLMODE_EXPAND_##VMLMODE) ); \
|
|
||||||
} else { \
|
|
||||||
const Index outerSize = dst.outerSize(); \
|
|
||||||
for(Index outer = 0; outer < outerSize; ++outer) { \
|
|
||||||
const EIGENTYPE *src_ptr = src.IsRowMajor ? &(src.lhs().coeffRef(outer,0)) : \
|
|
||||||
&(src.lhs().coeffRef(0, outer)); \
|
|
||||||
EIGENTYPE *dst_ptr = dst.IsRowMajor ? &(dst.coeffRef(outer,0)) : &(dst.coeffRef(0, outer)); \
|
|
||||||
VMLOP( dst.innerSize(), (const VMLTYPE*)src_ptr, exponent, \
|
|
||||||
(VMLTYPE*)dst_ptr EIGEN_PP_EXPAND(EIGEN_VMLMODE_EXPAND_##VMLMODE)); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
};
|
|
||||||
|
|
||||||
EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmsPowx, float, float, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmdPowx, double, double, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmcPowx, scomplex, MKL_Complex8, LA)
|
|
||||||
EIGEN_MKL_VML_DECLARE_POW_CALL(pow, vmzPowx, dcomplex, MKL_Complex16, LA)
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ASSIGN_VML_H
|
|
||||||
@@ -1,353 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_BANDMATRIX_H
|
|
||||||
#define EIGEN_BANDMATRIX_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
class BandMatrixBase : public EigenBase<Derived>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
enum {
|
|
||||||
Flags = internal::traits<Derived>::Flags,
|
|
||||||
CoeffReadCost = internal::traits<Derived>::CoeffReadCost,
|
|
||||||
RowsAtCompileTime = internal::traits<Derived>::RowsAtCompileTime,
|
|
||||||
ColsAtCompileTime = internal::traits<Derived>::ColsAtCompileTime,
|
|
||||||
MaxRowsAtCompileTime = internal::traits<Derived>::MaxRowsAtCompileTime,
|
|
||||||
MaxColsAtCompileTime = internal::traits<Derived>::MaxColsAtCompileTime,
|
|
||||||
Supers = internal::traits<Derived>::Supers,
|
|
||||||
Subs = internal::traits<Derived>::Subs,
|
|
||||||
Options = internal::traits<Derived>::Options
|
|
||||||
};
|
|
||||||
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
||||||
typedef Matrix<Scalar,RowsAtCompileTime,ColsAtCompileTime> DenseMatrixType;
|
|
||||||
typedef typename DenseMatrixType::StorageIndex StorageIndex;
|
|
||||||
typedef typename internal::traits<Derived>::CoefficientsType CoefficientsType;
|
|
||||||
typedef EigenBase<Derived> Base;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
enum {
|
|
||||||
DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic))
|
|
||||||
? 1 + Supers + Subs
|
|
||||||
: Dynamic,
|
|
||||||
SizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime)
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
using Base::derived;
|
|
||||||
using Base::rows;
|
|
||||||
using Base::cols;
|
|
||||||
|
|
||||||
/** \returns the number of super diagonals */
|
|
||||||
inline Index supers() const { return derived().supers(); }
|
|
||||||
|
|
||||||
/** \returns the number of sub diagonals */
|
|
||||||
inline Index subs() const { return derived().subs(); }
|
|
||||||
|
|
||||||
/** \returns an expression of the underlying coefficient matrix */
|
|
||||||
inline const CoefficientsType& coeffs() const { return derived().coeffs(); }
|
|
||||||
|
|
||||||
/** \returns an expression of the underlying coefficient matrix */
|
|
||||||
inline CoefficientsType& coeffs() { return derived().coeffs(); }
|
|
||||||
|
|
||||||
/** \returns a vector expression of the \a i -th column,
|
|
||||||
* only the meaningful part is returned.
|
|
||||||
* \warning the internal storage must be column major. */
|
|
||||||
inline Block<CoefficientsType,Dynamic,1> col(Index i)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT((Options&RowMajor)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
|
||||||
Index start = 0;
|
|
||||||
Index len = coeffs().rows();
|
|
||||||
if (i<=supers())
|
|
||||||
{
|
|
||||||
start = supers()-i;
|
|
||||||
len = (std::min)(rows(),std::max<Index>(0,coeffs().rows() - (supers()-i)));
|
|
||||||
}
|
|
||||||
else if (i>=rows()-subs())
|
|
||||||
len = std::max<Index>(0,coeffs().rows() - (i + 1 - rows() + subs()));
|
|
||||||
return Block<CoefficientsType,Dynamic,1>(coeffs(), start, i, len, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a vector expression of the main diagonal */
|
|
||||||
inline Block<CoefficientsType,1,SizeAtCompileTime> diagonal()
|
|
||||||
{ return Block<CoefficientsType,1,SizeAtCompileTime>(coeffs(),supers(),0,1,(std::min)(rows(),cols())); }
|
|
||||||
|
|
||||||
/** \returns a vector expression of the main diagonal (const version) */
|
|
||||||
inline const Block<const CoefficientsType,1,SizeAtCompileTime> diagonal() const
|
|
||||||
{ return Block<const CoefficientsType,1,SizeAtCompileTime>(coeffs(),supers(),0,1,(std::min)(rows(),cols())); }
|
|
||||||
|
|
||||||
template<int Index> struct DiagonalIntReturnType {
|
|
||||||
enum {
|
|
||||||
ReturnOpposite = (Options&SelfAdjoint) && (((Index)>0 && Supers==0) || ((Index)<0 && Subs==0)),
|
|
||||||
Conjugate = ReturnOpposite && NumTraits<Scalar>::IsComplex,
|
|
||||||
ActualIndex = ReturnOpposite ? -Index : Index,
|
|
||||||
DiagonalSize = (RowsAtCompileTime==Dynamic || ColsAtCompileTime==Dynamic)
|
|
||||||
? Dynamic
|
|
||||||
: (ActualIndex<0
|
|
||||||
? EIGEN_SIZE_MIN_PREFER_DYNAMIC(ColsAtCompileTime, RowsAtCompileTime + ActualIndex)
|
|
||||||
: EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime, ColsAtCompileTime - ActualIndex))
|
|
||||||
};
|
|
||||||
typedef Block<CoefficientsType,1, DiagonalSize> BuildType;
|
|
||||||
typedef typename internal::conditional<Conjugate,
|
|
||||||
CwiseUnaryOp<internal::scalar_conjugate_op<Scalar>,BuildType >,
|
|
||||||
BuildType>::type Type;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \returns a vector expression of the \a N -th sub or super diagonal */
|
|
||||||
template<int N> inline typename DiagonalIntReturnType<N>::Type diagonal()
|
|
||||||
{
|
|
||||||
return typename DiagonalIntReturnType<N>::BuildType(coeffs(), supers()-N, (std::max)(0,N), 1, diagonalLength(N));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a vector expression of the \a N -th sub or super diagonal */
|
|
||||||
template<int N> inline const typename DiagonalIntReturnType<N>::Type diagonal() const
|
|
||||||
{
|
|
||||||
return typename DiagonalIntReturnType<N>::BuildType(coeffs(), supers()-N, (std::max)(0,N), 1, diagonalLength(N));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a vector expression of the \a i -th sub or super diagonal */
|
|
||||||
inline Block<CoefficientsType,1,Dynamic> diagonal(Index i)
|
|
||||||
{
|
|
||||||
eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers()));
|
|
||||||
return Block<CoefficientsType,1,Dynamic>(coeffs(), supers()-i, std::max<Index>(0,i), 1, diagonalLength(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns a vector expression of the \a i -th sub or super diagonal */
|
|
||||||
inline const Block<const CoefficientsType,1,Dynamic> diagonal(Index i) const
|
|
||||||
{
|
|
||||||
eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers()));
|
|
||||||
return Block<const CoefficientsType,1,Dynamic>(coeffs(), supers()-i, std::max<Index>(0,i), 1, diagonalLength(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Dest> inline void evalTo(Dest& dst) const
|
|
||||||
{
|
|
||||||
dst.resize(rows(),cols());
|
|
||||||
dst.setZero();
|
|
||||||
dst.diagonal() = diagonal();
|
|
||||||
for (Index i=1; i<=supers();++i)
|
|
||||||
dst.diagonal(i) = diagonal(i);
|
|
||||||
for (Index i=1; i<=subs();++i)
|
|
||||||
dst.diagonal(-i) = diagonal(-i);
|
|
||||||
}
|
|
||||||
|
|
||||||
DenseMatrixType toDenseMatrix() const
|
|
||||||
{
|
|
||||||
DenseMatrixType res(rows(),cols());
|
|
||||||
evalTo(res);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
inline Index diagonalLength(Index i) const
|
|
||||||
{ return i<0 ? (std::min)(cols(),rows()+i) : (std::min)(rows(),cols()-i); }
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \class BandMatrix
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Represents a rectangular matrix with a banded storage
|
|
||||||
*
|
|
||||||
* \tparam _Scalar Numeric type, i.e. float, double, int
|
|
||||||
* \tparam _Rows Number of rows, or \b Dynamic
|
|
||||||
* \tparam _Cols Number of columns, or \b Dynamic
|
|
||||||
* \tparam _Supers Number of super diagonal
|
|
||||||
* \tparam _Subs Number of sub diagonal
|
|
||||||
* \tparam _Options A combination of either \b #RowMajor or \b #ColMajor, and of \b #SelfAdjoint
|
|
||||||
* The former controls \ref TopicStorageOrders "storage order", and defaults to
|
|
||||||
* column-major. The latter controls whether the matrix represents a selfadjoint
|
|
||||||
* matrix in which case either Supers of Subs have to be null.
|
|
||||||
*
|
|
||||||
* \sa class TridiagonalMatrix
|
|
||||||
*/
|
|
||||||
|
|
||||||
template<typename _Scalar, int _Rows, int _Cols, int _Supers, int _Subs, int _Options>
|
|
||||||
struct traits<BandMatrix<_Scalar,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
{
|
|
||||||
typedef _Scalar Scalar;
|
|
||||||
typedef Dense StorageKind;
|
|
||||||
typedef Eigen::Index StorageIndex;
|
|
||||||
enum {
|
|
||||||
CoeffReadCost = NumTraits<Scalar>::ReadCost,
|
|
||||||
RowsAtCompileTime = _Rows,
|
|
||||||
ColsAtCompileTime = _Cols,
|
|
||||||
MaxRowsAtCompileTime = _Rows,
|
|
||||||
MaxColsAtCompileTime = _Cols,
|
|
||||||
Flags = LvalueBit,
|
|
||||||
Supers = _Supers,
|
|
||||||
Subs = _Subs,
|
|
||||||
Options = _Options,
|
|
||||||
DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic
|
|
||||||
};
|
|
||||||
typedef Matrix<Scalar,DataRowsAtCompileTime,ColsAtCompileTime,Options&RowMajor?RowMajor:ColMajor> CoefficientsType;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename _Scalar, int Rows, int Cols, int Supers, int Subs, int Options>
|
|
||||||
class BandMatrix : public BandMatrixBase<BandMatrix<_Scalar,Rows,Cols,Supers,Subs,Options> >
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef typename internal::traits<BandMatrix>::Scalar Scalar;
|
|
||||||
typedef typename internal::traits<BandMatrix>::StorageIndex StorageIndex;
|
|
||||||
typedef typename internal::traits<BandMatrix>::CoefficientsType CoefficientsType;
|
|
||||||
|
|
||||||
explicit inline BandMatrix(Index rows=Rows, Index cols=Cols, Index supers=Supers, Index subs=Subs)
|
|
||||||
: m_coeffs(1+supers+subs,cols),
|
|
||||||
m_rows(rows), m_supers(supers), m_subs(subs)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the number of columns */
|
|
||||||
inline Index rows() const { return m_rows.value(); }
|
|
||||||
|
|
||||||
/** \returns the number of rows */
|
|
||||||
inline Index cols() const { return m_coeffs.cols(); }
|
|
||||||
|
|
||||||
/** \returns the number of super diagonals */
|
|
||||||
inline Index supers() const { return m_supers.value(); }
|
|
||||||
|
|
||||||
/** \returns the number of sub diagonals */
|
|
||||||
inline Index subs() const { return m_subs.value(); }
|
|
||||||
|
|
||||||
inline const CoefficientsType& coeffs() const { return m_coeffs; }
|
|
||||||
inline CoefficientsType& coeffs() { return m_coeffs; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
CoefficientsType m_coeffs;
|
|
||||||
internal::variable_if_dynamic<Index, Rows> m_rows;
|
|
||||||
internal::variable_if_dynamic<Index, Supers> m_supers;
|
|
||||||
internal::variable_if_dynamic<Index, Subs> m_subs;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename _CoefficientsType,int _Rows, int _Cols, int _Supers, int _Subs,int _Options>
|
|
||||||
class BandMatrixWrapper;
|
|
||||||
|
|
||||||
template<typename _CoefficientsType,int _Rows, int _Cols, int _Supers, int _Subs,int _Options>
|
|
||||||
struct traits<BandMatrixWrapper<_CoefficientsType,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
{
|
|
||||||
typedef typename _CoefficientsType::Scalar Scalar;
|
|
||||||
typedef typename _CoefficientsType::StorageKind StorageKind;
|
|
||||||
typedef typename _CoefficientsType::StorageIndex StorageIndex;
|
|
||||||
enum {
|
|
||||||
CoeffReadCost = internal::traits<_CoefficientsType>::CoeffReadCost,
|
|
||||||
RowsAtCompileTime = _Rows,
|
|
||||||
ColsAtCompileTime = _Cols,
|
|
||||||
MaxRowsAtCompileTime = _Rows,
|
|
||||||
MaxColsAtCompileTime = _Cols,
|
|
||||||
Flags = LvalueBit,
|
|
||||||
Supers = _Supers,
|
|
||||||
Subs = _Subs,
|
|
||||||
Options = _Options,
|
|
||||||
DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic
|
|
||||||
};
|
|
||||||
typedef _CoefficientsType CoefficientsType;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename _CoefficientsType,int _Rows, int _Cols, int _Supers, int _Subs,int _Options>
|
|
||||||
class BandMatrixWrapper : public BandMatrixBase<BandMatrixWrapper<_CoefficientsType,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef typename internal::traits<BandMatrixWrapper>::Scalar Scalar;
|
|
||||||
typedef typename internal::traits<BandMatrixWrapper>::CoefficientsType CoefficientsType;
|
|
||||||
typedef typename internal::traits<BandMatrixWrapper>::StorageIndex StorageIndex;
|
|
||||||
|
|
||||||
explicit inline BandMatrixWrapper(const CoefficientsType& coeffs, Index rows=_Rows, Index cols=_Cols, Index supers=_Supers, Index subs=_Subs)
|
|
||||||
: m_coeffs(coeffs),
|
|
||||||
m_rows(rows), m_supers(supers), m_subs(subs)
|
|
||||||
{
|
|
||||||
EIGEN_UNUSED_VARIABLE(cols);
|
|
||||||
//internal::assert(coeffs.cols()==cols() && (supers()+subs()+1)==coeffs.rows());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the number of columns */
|
|
||||||
inline Index rows() const { return m_rows.value(); }
|
|
||||||
|
|
||||||
/** \returns the number of rows */
|
|
||||||
inline Index cols() const { return m_coeffs.cols(); }
|
|
||||||
|
|
||||||
/** \returns the number of super diagonals */
|
|
||||||
inline Index supers() const { return m_supers.value(); }
|
|
||||||
|
|
||||||
/** \returns the number of sub diagonals */
|
|
||||||
inline Index subs() const { return m_subs.value(); }
|
|
||||||
|
|
||||||
inline const CoefficientsType& coeffs() const { return m_coeffs; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
const CoefficientsType& m_coeffs;
|
|
||||||
internal::variable_if_dynamic<Index, _Rows> m_rows;
|
|
||||||
internal::variable_if_dynamic<Index, _Supers> m_supers;
|
|
||||||
internal::variable_if_dynamic<Index, _Subs> m_subs;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \class TridiagonalMatrix
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Represents a tridiagonal matrix with a compact banded storage
|
|
||||||
*
|
|
||||||
* \tparam Scalar Numeric type, i.e. float, double, int
|
|
||||||
* \tparam Size Number of rows and cols, or \b Dynamic
|
|
||||||
* \tparam Options Can be 0 or \b SelfAdjoint
|
|
||||||
*
|
|
||||||
* \sa class BandMatrix
|
|
||||||
*/
|
|
||||||
template<typename Scalar, int Size, int Options>
|
|
||||||
class TridiagonalMatrix : public BandMatrix<Scalar,Size,Size,Options&SelfAdjoint?0:1,1,Options|RowMajor>
|
|
||||||
{
|
|
||||||
typedef BandMatrix<Scalar,Size,Size,Options&SelfAdjoint?0:1,1,Options|RowMajor> Base;
|
|
||||||
typedef typename Base::StorageIndex StorageIndex;
|
|
||||||
public:
|
|
||||||
explicit TridiagonalMatrix(Index size = Size) : Base(size,size,Options&SelfAdjoint?0:1,1) {}
|
|
||||||
|
|
||||||
inline typename Base::template DiagonalIntReturnType<1>::Type super()
|
|
||||||
{ return Base::template diagonal<1>(); }
|
|
||||||
inline const typename Base::template DiagonalIntReturnType<1>::Type super() const
|
|
||||||
{ return Base::template diagonal<1>(); }
|
|
||||||
inline typename Base::template DiagonalIntReturnType<-1>::Type sub()
|
|
||||||
{ return Base::template diagonal<-1>(); }
|
|
||||||
inline const typename Base::template DiagonalIntReturnType<-1>::Type sub() const
|
|
||||||
{ return Base::template diagonal<-1>(); }
|
|
||||||
protected:
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct BandShape {};
|
|
||||||
|
|
||||||
template<typename _Scalar, int _Rows, int _Cols, int _Supers, int _Subs, int _Options>
|
|
||||||
struct evaluator_traits<BandMatrix<_Scalar,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
: public evaluator_traits_base<BandMatrix<_Scalar,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
{
|
|
||||||
typedef BandShape Shape;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename _CoefficientsType,int _Rows, int _Cols, int _Supers, int _Subs,int _Options>
|
|
||||||
struct evaluator_traits<BandMatrixWrapper<_CoefficientsType,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
: public evaluator_traits_base<BandMatrixWrapper<_CoefficientsType,_Rows,_Cols,_Supers,_Subs,_Options> >
|
|
||||||
{
|
|
||||||
typedef BandShape Shape;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<> struct AssignmentKind<DenseShape,BandShape> { typedef EigenBase2EigenBase Kind; };
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_BANDMATRIX_H
|
|
||||||
@@ -1,452 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_BLOCK_H
|
|
||||||
#define EIGEN_BLOCK_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
||||||
struct traits<Block<XprType, BlockRows, BlockCols, InnerPanel> > : traits<XprType>
|
|
||||||
{
|
|
||||||
typedef typename traits<XprType>::Scalar Scalar;
|
|
||||||
typedef typename traits<XprType>::StorageKind StorageKind;
|
|
||||||
typedef typename traits<XprType>::XprKind XprKind;
|
|
||||||
typedef typename ref_selector<XprType>::type XprTypeNested;
|
|
||||||
typedef typename remove_reference<XprTypeNested>::type _XprTypeNested;
|
|
||||||
enum{
|
|
||||||
MatrixRows = traits<XprType>::RowsAtCompileTime,
|
|
||||||
MatrixCols = traits<XprType>::ColsAtCompileTime,
|
|
||||||
RowsAtCompileTime = MatrixRows == 0 ? 0 : BlockRows,
|
|
||||||
ColsAtCompileTime = MatrixCols == 0 ? 0 : BlockCols,
|
|
||||||
MaxRowsAtCompileTime = BlockRows==0 ? 0
|
|
||||||
: RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime)
|
|
||||||
: int(traits<XprType>::MaxRowsAtCompileTime),
|
|
||||||
MaxColsAtCompileTime = BlockCols==0 ? 0
|
|
||||||
: ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime)
|
|
||||||
: int(traits<XprType>::MaxColsAtCompileTime),
|
|
||||||
|
|
||||||
XprTypeIsRowMajor = (int(traits<XprType>::Flags)&RowMajorBit) != 0,
|
|
||||||
IsRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1
|
|
||||||
: (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0
|
|
||||||
: XprTypeIsRowMajor,
|
|
||||||
HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor),
|
|
||||||
InnerSize = IsRowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime),
|
|
||||||
InnerStrideAtCompileTime = HasSameStorageOrderAsXprType
|
|
||||||
? int(inner_stride_at_compile_time<XprType>::ret)
|
|
||||||
: int(outer_stride_at_compile_time<XprType>::ret),
|
|
||||||
OuterStrideAtCompileTime = HasSameStorageOrderAsXprType
|
|
||||||
? int(outer_stride_at_compile_time<XprType>::ret)
|
|
||||||
: int(inner_stride_at_compile_time<XprType>::ret),
|
|
||||||
|
|
||||||
// FIXME, this traits is rather specialized for dense object and it needs to be cleaned further
|
|
||||||
FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0,
|
|
||||||
FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0,
|
|
||||||
Flags = (traits<XprType>::Flags & (DirectAccessBit | (InnerPanel?CompressedAccessBit:0))) | FlagsLvalueBit | FlagsRowMajorBit,
|
|
||||||
// FIXME DirectAccessBit should not be handled by expressions
|
|
||||||
//
|
|
||||||
// Alignment is needed by MapBase's assertions
|
|
||||||
// We can sefely set it to false here. Internal alignment errors will be detected by an eigen_internal_assert in the respective evaluator
|
|
||||||
Alignment = 0
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false,
|
|
||||||
bool HasDirectAccess = internal::has_direct_access<XprType>::ret> class BlockImpl_dense;
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel, typename StorageKind> class BlockImpl;
|
|
||||||
|
|
||||||
/** \class Block
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Expression of a fixed-size or dynamic-size block
|
|
||||||
*
|
|
||||||
* \tparam XprType the type of the expression in which we are taking a block
|
|
||||||
* \tparam BlockRows the number of rows of the block we are taking at compile time (optional)
|
|
||||||
* \tparam BlockCols the number of columns of the block we are taking at compile time (optional)
|
|
||||||
* \tparam InnerPanel is true, if the block maps to a set of rows of a row major matrix or
|
|
||||||
* to set of columns of a column major matrix (optional). The parameter allows to determine
|
|
||||||
* at compile time whether aligned access is possible on the block expression.
|
|
||||||
*
|
|
||||||
* This class represents an expression of either a fixed-size or dynamic-size block. It is the return
|
|
||||||
* type of DenseBase::block(Index,Index,Index,Index) and DenseBase::block<int,int>(Index,Index) and
|
|
||||||
* most of the time this is the only way it is used.
|
|
||||||
*
|
|
||||||
* However, if you want to directly maniputate block expressions,
|
|
||||||
* for instance if you want to write a function returning such an expression, you
|
|
||||||
* will need to use this class.
|
|
||||||
*
|
|
||||||
* Here is an example illustrating the dynamic case:
|
|
||||||
* \include class_Block.cpp
|
|
||||||
* Output: \verbinclude class_Block.out
|
|
||||||
*
|
|
||||||
* \note Even though this expression has dynamic size, in the case where \a XprType
|
|
||||||
* has fixed size, this expression inherits a fixed maximal size which means that evaluating
|
|
||||||
* it does not cause a dynamic memory allocation.
|
|
||||||
*
|
|
||||||
* Here is an example illustrating the fixed-size case:
|
|
||||||
* \include class_FixedBlock.cpp
|
|
||||||
* Output: \verbinclude class_FixedBlock.out
|
|
||||||
*
|
|
||||||
* \sa DenseBase::block(Index,Index,Index,Index), DenseBase::block(Index,Index), class VectorBlock
|
|
||||||
*/
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class Block
|
|
||||||
: public BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind>
|
|
||||||
{
|
|
||||||
typedef BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind> Impl;
|
|
||||||
public:
|
|
||||||
//typedef typename Impl::Base Base;
|
|
||||||
typedef Impl Base;
|
|
||||||
EIGEN_GENERIC_PUBLIC_INTERFACE(Block)
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block)
|
|
||||||
|
|
||||||
typedef typename internal::remove_all<XprType>::type NestedExpression;
|
|
||||||
|
|
||||||
/** Column or Row constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Block(XprType& xpr, Index i) : Impl(xpr,i)
|
|
||||||
{
|
|
||||||
eigen_assert( (i>=0) && (
|
|
||||||
((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i<xpr.rows())
|
|
||||||
||((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && i<xpr.cols())));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Fixed-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Block(XprType& xpr, Index startRow, Index startCol)
|
|
||||||
: Impl(xpr, startRow, startCol)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
|
|
||||||
eigen_assert(startRow >= 0 && BlockRows >= 0 && startRow + BlockRows <= xpr.rows()
|
|
||||||
&& startCol >= 0 && BlockCols >= 0 && startCol + BlockCols <= xpr.cols());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Dynamic-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Block(XprType& xpr,
|
|
||||||
Index startRow, Index startCol,
|
|
||||||
Index blockRows, Index blockCols)
|
|
||||||
: Impl(xpr, startRow, startCol, blockRows, blockCols)
|
|
||||||
{
|
|
||||||
eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows)
|
|
||||||
&& (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols));
|
|
||||||
eigen_assert(startRow >= 0 && blockRows >= 0 && startRow <= xpr.rows() - blockRows
|
|
||||||
&& startCol >= 0 && blockCols >= 0 && startCol <= xpr.cols() - blockCols);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// The generic default implementation for dense block simplu forward to the internal::BlockImpl_dense
|
|
||||||
// that must be specialized for direct and non-direct access...
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
||||||
class BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Dense>
|
|
||||||
: public internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel>
|
|
||||||
{
|
|
||||||
typedef internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel> Impl;
|
|
||||||
typedef typename XprType::StorageIndex StorageIndex;
|
|
||||||
public:
|
|
||||||
typedef Impl Base;
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl)
|
|
||||||
EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {}
|
|
||||||
EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index startRow, Index startCol) : Impl(xpr, startRow, startCol) {}
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
|
|
||||||
: Impl(xpr, startRow, startCol, blockRows, blockCols) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
/** \internal Internal implementation of dense Blocks in the general case. */
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel, bool HasDirectAccess> class BlockImpl_dense
|
|
||||||
: public internal::dense_xpr_base<Block<XprType, BlockRows, BlockCols, InnerPanel> >::type
|
|
||||||
{
|
|
||||||
typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
|
|
||||||
typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef typename internal::dense_xpr_base<BlockType>::type Base;
|
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
|
|
||||||
|
|
||||||
// class InnerIterator; // FIXME apparently never used
|
|
||||||
|
|
||||||
/** Column or Row constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr, Index i)
|
|
||||||
: m_xpr(xpr),
|
|
||||||
// It is a row if and only if BlockRows==1 and BlockCols==XprType::ColsAtCompileTime,
|
|
||||||
// and it is a column if and only if BlockRows==XprType::RowsAtCompileTime and BlockCols==1,
|
|
||||||
// all other cases are invalid.
|
|
||||||
// The case a 1x1 matrix seems ambiguous, but the result is the same anyway.
|
|
||||||
m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0),
|
|
||||||
m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0),
|
|
||||||
m_blockRows(BlockRows==1 ? 1 : xpr.rows()),
|
|
||||||
m_blockCols(BlockCols==1 ? 1 : xpr.cols())
|
|
||||||
{}
|
|
||||||
|
|
||||||
/** Fixed-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
|
|
||||||
: m_xpr(xpr), m_startRow(startRow), m_startCol(startCol),
|
|
||||||
m_blockRows(BlockRows), m_blockCols(BlockCols)
|
|
||||||
{}
|
|
||||||
|
|
||||||
/** Dynamic-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr,
|
|
||||||
Index startRow, Index startCol,
|
|
||||||
Index blockRows, Index blockCols)
|
|
||||||
: m_xpr(xpr), m_startRow(startRow), m_startCol(startCol),
|
|
||||||
m_blockRows(blockRows), m_blockCols(blockCols)
|
|
||||||
{}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC inline Index rows() const { return m_blockRows.value(); }
|
|
||||||
EIGEN_DEVICE_FUNC inline Index cols() const { return m_blockCols.value(); }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Scalar& coeffRef(Index rowId, Index colId)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT_LVALUE(XprType)
|
|
||||||
return m_xpr.coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
|
||||||
{
|
|
||||||
return m_xpr.derived().coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const
|
|
||||||
{
|
|
||||||
return m_xpr.coeff(rowId + m_startRow.value(), colId + m_startCol.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Scalar& coeffRef(Index index)
|
|
||||||
{
|
|
||||||
EIGEN_STATIC_ASSERT_LVALUE(XprType)
|
|
||||||
return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
||||||
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const Scalar& coeffRef(Index index) const
|
|
||||||
{
|
|
||||||
return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
||||||
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline const CoeffReturnType coeff(Index index) const
|
|
||||||
{
|
|
||||||
return m_xpr.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
||||||
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int LoadMode>
|
|
||||||
inline PacketScalar packet(Index rowId, Index colId) const
|
|
||||||
{
|
|
||||||
return m_xpr.template packet<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int LoadMode>
|
|
||||||
inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
|
|
||||||
{
|
|
||||||
m_xpr.template writePacket<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value(), val);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int LoadMode>
|
|
||||||
inline PacketScalar packet(Index index) const
|
|
||||||
{
|
|
||||||
return m_xpr.template packet<Unaligned>
|
|
||||||
(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
||||||
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int LoadMode>
|
|
||||||
inline void writePacket(Index index, const PacketScalar& val)
|
|
||||||
{
|
|
||||||
m_xpr.template writePacket<Unaligned>
|
|
||||||
(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
|
|
||||||
m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), val);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
/** \sa MapBase::data() */
|
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar* data() const;
|
|
||||||
EIGEN_DEVICE_FUNC inline Index innerStride() const;
|
|
||||||
EIGEN_DEVICE_FUNC inline Index outerStride() const;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
|
||||||
{
|
|
||||||
return m_xpr;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
XprType& nestedExpression() { return m_xpr; }
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
StorageIndex startRow() const
|
|
||||||
{
|
|
||||||
return m_startRow.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
StorageIndex startCol() const
|
|
||||||
{
|
|
||||||
return m_startCol.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
XprTypeNested m_xpr;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows==1) ? 0 : Dynamic> m_startRow;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols==1) ? 0 : Dynamic> m_startCol;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, RowsAtCompileTime> m_blockRows;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, ColsAtCompileTime> m_blockCols;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \internal Internal implementation of dense Blocks in the direct access case.*/
|
|
||||||
template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
|
|
||||||
class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
|
|
||||||
: public MapBase<Block<XprType, BlockRows, BlockCols, InnerPanel> >
|
|
||||||
{
|
|
||||||
typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
|
|
||||||
typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
|
|
||||||
enum {
|
|
||||||
XprTypeIsRowMajor = (int(traits<XprType>::Flags)&RowMajorBit) != 0
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef MapBase<BlockType> Base;
|
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
|
|
||||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
|
|
||||||
|
|
||||||
/** Column or Row constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr, Index i)
|
|
||||||
: Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
|
|
||||||
|| ((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && ( XprTypeIsRowMajor)) ? xpr.innerStride() : xpr.outerStride()),
|
|
||||||
BlockRows==1 ? 1 : xpr.rows(),
|
|
||||||
BlockCols==1 ? 1 : xpr.cols()),
|
|
||||||
m_xpr(xpr),
|
|
||||||
m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0),
|
|
||||||
m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Fixed-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
|
|
||||||
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol)),
|
|
||||||
m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Dynamic-size constructor
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr,
|
|
||||||
Index startRow, Index startCol,
|
|
||||||
Index blockRows, Index blockCols)
|
|
||||||
: Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol), blockRows, blockCols),
|
|
||||||
m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
|
||||||
{
|
|
||||||
return m_xpr;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
XprType& nestedExpression() { return m_xpr; }
|
|
||||||
|
|
||||||
/** \sa MapBase::innerStride() */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index innerStride() const
|
|
||||||
{
|
|
||||||
return internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
|
||||||
? m_xpr.innerStride()
|
|
||||||
: m_xpr.outerStride();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \sa MapBase::outerStride() */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline Index outerStride() const
|
|
||||||
{
|
|
||||||
return m_outerStride;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
StorageIndex startRow() const
|
|
||||||
{
|
|
||||||
return m_startRow.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
StorageIndex startCol() const
|
|
||||||
{
|
|
||||||
return m_startCol.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef __SUNPRO_CC
|
|
||||||
// FIXME sunstudio is not friendly with the above friend...
|
|
||||||
// META-FIXME there is no 'friend' keyword around here. Is this obsolete?
|
|
||||||
protected:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
||||||
/** \internal used by allowAligned() */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols)
|
|
||||||
: Base(data, blockRows, blockCols), m_xpr(xpr)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
protected:
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
void init()
|
|
||||||
{
|
|
||||||
m_outerStride = internal::traits<BlockType>::HasSameStorageOrderAsXprType
|
|
||||||
? m_xpr.outerStride()
|
|
||||||
: m_xpr.innerStride();
|
|
||||||
}
|
|
||||||
|
|
||||||
XprTypeNested m_xpr;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows==1) ? 0 : Dynamic> m_startRow;
|
|
||||||
const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols==1) ? 0 : Dynamic> m_startCol;
|
|
||||||
Index m_outerStride;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_BLOCK_H
|
|
||||||
@@ -1,164 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_ALLANDANY_H
|
|
||||||
#define EIGEN_ALLANDANY_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template<typename Derived, int UnrollCount>
|
|
||||||
struct all_unroller
|
|
||||||
{
|
|
||||||
typedef typename Derived::ExpressionTraits Traits;
|
|
||||||
enum {
|
|
||||||
col = (UnrollCount-1) / Traits::RowsAtCompileTime,
|
|
||||||
row = (UnrollCount-1) % Traits::RowsAtCompileTime
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline bool run(const Derived &mat)
|
|
||||||
{
|
|
||||||
return all_unroller<Derived, UnrollCount-1>::run(mat) && mat.coeff(row, col);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
struct all_unroller<Derived, 0>
|
|
||||||
{
|
|
||||||
static inline bool run(const Derived &/*mat*/) { return true; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
struct all_unroller<Derived, Dynamic>
|
|
||||||
{
|
|
||||||
static inline bool run(const Derived &) { return false; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Derived, int UnrollCount>
|
|
||||||
struct any_unroller
|
|
||||||
{
|
|
||||||
typedef typename Derived::ExpressionTraits Traits;
|
|
||||||
enum {
|
|
||||||
col = (UnrollCount-1) / Traits::RowsAtCompileTime,
|
|
||||||
row = (UnrollCount-1) % Traits::RowsAtCompileTime
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline bool run(const Derived &mat)
|
|
||||||
{
|
|
||||||
return any_unroller<Derived, UnrollCount-1>::run(mat) || mat.coeff(row, col);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
struct any_unroller<Derived, 0>
|
|
||||||
{
|
|
||||||
static inline bool run(const Derived & /*mat*/) { return false; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Derived>
|
|
||||||
struct any_unroller<Derived, Dynamic>
|
|
||||||
{
|
|
||||||
static inline bool run(const Derived &) { return false; }
|
|
||||||
};
|
|
||||||
|
|
||||||
} // end namespace internal
|
|
||||||
|
|
||||||
/** \returns true if all coefficients are true
|
|
||||||
*
|
|
||||||
* Example: \include MatrixBase_all.cpp
|
|
||||||
* Output: \verbinclude MatrixBase_all.out
|
|
||||||
*
|
|
||||||
* \sa any(), Cwise::operator<()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline bool DenseBase<Derived>::all() const
|
|
||||||
{
|
|
||||||
typedef internal::evaluator<Derived> Evaluator;
|
|
||||||
enum {
|
|
||||||
unroll = SizeAtCompileTime != Dynamic
|
|
||||||
&& SizeAtCompileTime * (Evaluator::CoeffReadCost + NumTraits<Scalar>::AddCost) <= EIGEN_UNROLLING_LIMIT
|
|
||||||
};
|
|
||||||
Evaluator evaluator(derived());
|
|
||||||
if(unroll)
|
|
||||||
return internal::all_unroller<Evaluator, unroll ? int(SizeAtCompileTime) : Dynamic>::run(evaluator);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(Index j = 0; j < cols(); ++j)
|
|
||||||
for(Index i = 0; i < rows(); ++i)
|
|
||||||
if (!evaluator.coeff(i, j)) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns true if at least one coefficient is true
|
|
||||||
*
|
|
||||||
* \sa all()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline bool DenseBase<Derived>::any() const
|
|
||||||
{
|
|
||||||
typedef internal::evaluator<Derived> Evaluator;
|
|
||||||
enum {
|
|
||||||
unroll = SizeAtCompileTime != Dynamic
|
|
||||||
&& SizeAtCompileTime * (Evaluator::CoeffReadCost + NumTraits<Scalar>::AddCost) <= EIGEN_UNROLLING_LIMIT
|
|
||||||
};
|
|
||||||
Evaluator evaluator(derived());
|
|
||||||
if(unroll)
|
|
||||||
return internal::any_unroller<Evaluator, unroll ? int(SizeAtCompileTime) : Dynamic>::run(evaluator);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(Index j = 0; j < cols(); ++j)
|
|
||||||
for(Index i = 0; i < rows(); ++i)
|
|
||||||
if (evaluator.coeff(i, j)) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the number of coefficients which evaluate to true
|
|
||||||
*
|
|
||||||
* \sa all(), any()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline Eigen::Index DenseBase<Derived>::count() const
|
|
||||||
{
|
|
||||||
return derived().template cast<bool>().template cast<Index>().sum();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns true is \c *this contains at least one Not A Number (NaN).
|
|
||||||
*
|
|
||||||
* \sa allFinite()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline bool DenseBase<Derived>::hasNaN() const
|
|
||||||
{
|
|
||||||
#if EIGEN_COMP_MSVC || (defined __FAST_MATH__)
|
|
||||||
return derived().array().isNaN().any();
|
|
||||||
#else
|
|
||||||
return !((derived().array()==derived().array()).all());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns true if \c *this contains only finite numbers, i.e., no NaN and no +/-INF values.
|
|
||||||
*
|
|
||||||
* \sa hasNaN()
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline bool DenseBase<Derived>::allFinite() const
|
|
||||||
{
|
|
||||||
#if EIGEN_COMP_MSVC || (defined __FAST_MATH__)
|
|
||||||
return derived().array().isFinite().all();
|
|
||||||
#else
|
|
||||||
return !((derived()-derived()).hasNaN());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_ALLANDANY_H
|
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
// This file is part of Eigen, a lightweight C++ template library
|
|
||||||
// for linear algebra.
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
||||||
// Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
||||||
//
|
|
||||||
// This Source Code Form is subject to the terms of the Mozilla
|
|
||||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
||||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
#ifndef EIGEN_COMMAINITIALIZER_H
|
|
||||||
#define EIGEN_COMMAINITIALIZER_H
|
|
||||||
|
|
||||||
namespace Eigen {
|
|
||||||
|
|
||||||
/** \class CommaInitializer
|
|
||||||
* \ingroup Core_Module
|
|
||||||
*
|
|
||||||
* \brief Helper class used by the comma initializer operator
|
|
||||||
*
|
|
||||||
* This class is internally used to implement the comma initializer feature. It is
|
|
||||||
* the return type of MatrixBase::operator<<, and most of the time this is the only
|
|
||||||
* way it is used.
|
|
||||||
*
|
|
||||||
* \sa \blank \ref MatrixBaseCommaInitRef "MatrixBase::operator<<", CommaInitializer::finished()
|
|
||||||
*/
|
|
||||||
template<typename XprType>
|
|
||||||
struct CommaInitializer
|
|
||||||
{
|
|
||||||
typedef typename XprType::Scalar Scalar;
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline CommaInitializer(XprType& xpr, const Scalar& s)
|
|
||||||
: m_xpr(xpr), m_row(0), m_col(1), m_currentBlockRows(1)
|
|
||||||
{
|
|
||||||
m_xpr.coeffRef(0,0) = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline CommaInitializer(XprType& xpr, const DenseBase<OtherDerived>& other)
|
|
||||||
: m_xpr(xpr), m_row(0), m_col(other.cols()), m_currentBlockRows(other.rows())
|
|
||||||
{
|
|
||||||
m_xpr.block(0, 0, other.rows(), other.cols()) = other;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy/Move constructor which transfers ownership. This is crucial in
|
|
||||||
* absence of return value optimization to avoid assertions during destruction. */
|
|
||||||
// FIXME in C++11 mode this could be replaced by a proper RValue constructor
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline CommaInitializer(const CommaInitializer& o)
|
|
||||||
: m_xpr(o.m_xpr), m_row(o.m_row), m_col(o.m_col), m_currentBlockRows(o.m_currentBlockRows) {
|
|
||||||
// Mark original object as finished. In absence of R-value references we need to const_cast:
|
|
||||||
const_cast<CommaInitializer&>(o).m_row = m_xpr.rows();
|
|
||||||
const_cast<CommaInitializer&>(o).m_col = m_xpr.cols();
|
|
||||||
const_cast<CommaInitializer&>(o).m_currentBlockRows = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* inserts a scalar value in the target matrix */
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
CommaInitializer& operator,(const Scalar& s)
|
|
||||||
{
|
|
||||||
if (m_col==m_xpr.cols())
|
|
||||||
{
|
|
||||||
m_row+=m_currentBlockRows;
|
|
||||||
m_col = 0;
|
|
||||||
m_currentBlockRows = 1;
|
|
||||||
eigen_assert(m_row<m_xpr.rows()
|
|
||||||
&& "Too many rows passed to comma initializer (operator<<)");
|
|
||||||
}
|
|
||||||
eigen_assert(m_col<m_xpr.cols()
|
|
||||||
&& "Too many coefficients passed to comma initializer (operator<<)");
|
|
||||||
eigen_assert(m_currentBlockRows==1);
|
|
||||||
m_xpr.coeffRef(m_row, m_col++) = s;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* inserts a matrix expression in the target matrix */
|
|
||||||
template<typename OtherDerived>
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
CommaInitializer& operator,(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
if (m_col==m_xpr.cols() && (other.cols()!=0 || other.rows()!=m_currentBlockRows))
|
|
||||||
{
|
|
||||||
m_row+=m_currentBlockRows;
|
|
||||||
m_col = 0;
|
|
||||||
m_currentBlockRows = other.rows();
|
|
||||||
eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows()
|
|
||||||
&& "Too many rows passed to comma initializer (operator<<)");
|
|
||||||
}
|
|
||||||
eigen_assert((m_col + other.cols() <= m_xpr.cols())
|
|
||||||
&& "Too many coefficients passed to comma initializer (operator<<)");
|
|
||||||
eigen_assert(m_currentBlockRows==other.rows());
|
|
||||||
m_xpr.template block<OtherDerived::RowsAtCompileTime, OtherDerived::ColsAtCompileTime>
|
|
||||||
(m_row, m_col, other.rows(), other.cols()) = other;
|
|
||||||
m_col += other.cols();
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline ~CommaInitializer()
|
|
||||||
#if defined VERIFY_RAISES_ASSERT && (!defined EIGEN_NO_ASSERTION_CHECKING) && defined EIGEN_EXCEPTIONS
|
|
||||||
EIGEN_EXCEPTION_SPEC(Eigen::eigen_assert_exception)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
finished();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \returns the built matrix once all its coefficients have been set.
|
|
||||||
* Calling finished is 100% optional. Its purpose is to write expressions
|
|
||||||
* like this:
|
|
||||||
* \code
|
|
||||||
* quaternion.fromRotationMatrix((Matrix3f() << axis0, axis1, axis2).finished());
|
|
||||||
* \endcode
|
|
||||||
*/
|
|
||||||
EIGEN_DEVICE_FUNC
|
|
||||||
inline XprType& finished() {
|
|
||||||
eigen_assert(((m_row+m_currentBlockRows) == m_xpr.rows() || m_xpr.cols() == 0)
|
|
||||||
&& m_col == m_xpr.cols()
|
|
||||||
&& "Too few coefficients passed to comma initializer (operator<<)");
|
|
||||||
return m_xpr;
|
|
||||||
}
|
|
||||||
|
|
||||||
XprType& m_xpr; // target expression
|
|
||||||
Index m_row; // current row id
|
|
||||||
Index m_col; // current col id
|
|
||||||
Index m_currentBlockRows; // current block height
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \anchor MatrixBaseCommaInitRef
|
|
||||||
* Convenient operator to set the coefficients of a matrix.
|
|
||||||
*
|
|
||||||
* The coefficients must be provided in a row major order and exactly match
|
|
||||||
* the size of the matrix. Otherwise an assertion is raised.
|
|
||||||
*
|
|
||||||
* Example: \include MatrixBase_set.cpp
|
|
||||||
* Output: \verbinclude MatrixBase_set.out
|
|
||||||
*
|
|
||||||
* \note According the c++ standard, the argument expressions of this comma initializer are evaluated in arbitrary order.
|
|
||||||
*
|
|
||||||
* \sa CommaInitializer::finished(), class CommaInitializer
|
|
||||||
*/
|
|
||||||
template<typename Derived>
|
|
||||||
inline CommaInitializer<Derived> DenseBase<Derived>::operator<< (const Scalar& s)
|
|
||||||
{
|
|
||||||
return CommaInitializer<Derived>(*static_cast<Derived*>(this), s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \sa operator<<(const Scalar&) */
|
|
||||||
template<typename Derived>
|
|
||||||
template<typename OtherDerived>
|
|
||||||
inline CommaInitializer<Derived>
|
|
||||||
DenseBase<Derived>::operator<<(const DenseBase<OtherDerived>& other)
|
|
||||||
{
|
|
||||||
return CommaInitializer<Derived>(*static_cast<Derived *>(this), other);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end namespace Eigen
|
|
||||||
|
|
||||||
#endif // EIGEN_COMMAINITIALIZER_H
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user