Big restructure of the code, moving closer to a new version with a GUI:
- Adding a new boost version (1.63) - Decoupling FaceAnalyser from LandmarkDetector - FaceAnalyser is much easier to load with a parameters class - Moving GazeAnalyser as a separate library - GUI now uses new FaceAnalyser, LandmarkDetector, and GazeAnalyser
This commit is contained in:
parent
788356c685
commit
f98ae0747e
321 changed files with 18455 additions and 2826 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -72,3 +72,4 @@ lib/local/CppInerop/x64/
|
||||||
lib/local/FaceAnalyser/Release/
|
lib/local/FaceAnalyser/Release/
|
||||||
lib/local/LandmarkDetector/Release/
|
lib/local/LandmarkDetector/Release/
|
||||||
gui/HeadPose-live/obj/
|
gui/HeadPose-live/obj/
|
||||||
|
lib/local/GazeAnalyser/x64/
|
||||||
|
|
11
OpenFace.sln
11
OpenFace.sln
|
@ -37,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenFaceDemo", "gui\OpenFac
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeadPoseLive", "gui\HeadPose-live\HeadPoseLive.csproj", "{F396362D-821E-4EA6-9BBF-1F6050844118}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeadPoseLive", "gui\HeadPose-live\HeadPoseLive.csproj", "{F396362D-821E-4EA6-9BBF-1F6050844118}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GazeAnalyser", "lib\local\GazeAnalyser\GazeAnalyser.vcxproj", "{5F915541-F531-434F-9C81-79F5DB58012B}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
|
@ -149,6 +151,14 @@ Global
|
||||||
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|Win32.Build.0 = Release|Any CPU
|
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|Win32.Build.0 = Release|Any CPU
|
||||||
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|x64.ActiveCfg = Release|Any CPU
|
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|x64.Build.0 = Release|Any CPU
|
{F396362D-821E-4EA6-9BBF-1F6050844118}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -167,5 +177,6 @@ Global
|
||||||
{A4760F41-2B1F-4144-B7B2-62785AFFE79B} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
{A4760F41-2B1F-4144-B7B2-62785AFFE79B} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
||||||
{E143A2AA-312E-4DFE-B61D-9A87CCBC8E90} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
{E143A2AA-312E-4DFE-B61D-9A87CCBC8E90} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
||||||
{F396362D-821E-4EA6-9BBF-1F6050844118} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
{F396362D-821E-4EA6-9BBF-1F6050844118} = {C9D8D0B0-11EC-41CB-8524-2DDB5BE94297}
|
||||||
|
{5F915541-F531-434F-9C81-79F5DB58012B} = {99FEBA13-BDDF-4076-B57E-D8EF4076E20D}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -337,50 +337,10 @@ int main (int argc, char **argv)
|
||||||
cv::CascadeClassifier classifier(det_parameters.face_detector_location);
|
cv::CascadeClassifier classifier(det_parameters.face_detector_location);
|
||||||
dlib::frontal_face_detector face_detector_hog = dlib::get_frontal_face_detector();
|
dlib::frontal_face_detector face_detector_hog = dlib::get_frontal_face_detector();
|
||||||
|
|
||||||
// Loading the AU prediction models
|
// Load facial feature extractor and AU analyser (make sure it is static)
|
||||||
string au_loc = "AU_predictors/AU_all_static.txt";
|
FaceAnalysis::FaceAnalyserParameters face_analysis_params(arguments);
|
||||||
|
face_analysis_params.OptimizeForImages();
|
||||||
boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc);
|
FaceAnalysis::FaceAnalyser face_analyser(face_analysis_params);
|
||||||
if (boost::filesystem::exists(au_loc_path))
|
|
||||||
{
|
|
||||||
au_loc = au_loc_path.string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(parent_path/au_loc_path))
|
|
||||||
{
|
|
||||||
au_loc = (parent_path/au_loc_path).string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(config_path/au_loc_path))
|
|
||||||
{
|
|
||||||
au_loc = (config_path/au_loc_path).string();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cout << "Can't find AU prediction files, exiting" << endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used for image masking for AUs
|
|
||||||
string tri_loc;
|
|
||||||
boost::filesystem::path tri_loc_path = boost::filesystem::path("model/tris_68_full.txt");
|
|
||||||
if (boost::filesystem::exists(tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = tri_loc_path.string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(parent_path/tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = (parent_path/tri_loc_path).string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(config_path/tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = (config_path/tri_loc_path).string();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cout << "Can't find triangulation files, exiting" << endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
FaceAnalysis::FaceAnalyser face_analyser(vector<cv::Vec3d>(), 0.7, 112, 112, au_loc, tri_loc);
|
|
||||||
|
|
||||||
bool visualise = !det_parameters.quiet_mode;
|
bool visualise = !det_parameters.quiet_mode;
|
||||||
|
|
||||||
|
@ -464,12 +424,12 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
if (success && det_parameters.track_gaze)
|
if (success && det_parameters.track_gaze)
|
||||||
{
|
{
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model, false);
|
auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model.detected_landmarks, false);
|
||||||
|
|
||||||
// Writing out the detected landmarks (in an OS independent manner)
|
// Writing out the detected landmarks (in an OS independent manner)
|
||||||
if(!output_landmark_locations.empty())
|
if(!output_landmark_locations.empty())
|
||||||
|
@ -515,7 +475,7 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
// Draw it in reddish if uncertain, blueish if certain
|
// Draw it in reddish if uncertain, blueish if certain
|
||||||
LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy);
|
LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy);
|
||||||
FaceAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
GazeAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// displaying detected landmarks
|
// displaying detected landmarks
|
||||||
|
@ -580,11 +540,11 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
if (det_parameters.track_gaze)
|
if (det_parameters.track_gaze)
|
||||||
{
|
{
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model, false);
|
auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model.detected_landmarks, false);
|
||||||
|
|
||||||
// Writing out the detected landmarks
|
// Writing out the detected landmarks
|
||||||
if(!output_landmark_locations.empty())
|
if(!output_landmark_locations.empty())
|
||||||
|
@ -609,7 +569,7 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
// Draw it in reddish if uncertain, blueish if certain
|
// Draw it in reddish if uncertain, blueish if certain
|
||||||
LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy);
|
LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy);
|
||||||
FaceAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
GazeAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
create_display_image(read_image, display_image, clnf_model);
|
create_display_image(read_image, display_image, clnf_model);
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -160,7 +160,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -179,6 +179,9 @@
|
||||||
<ProjectReference Include="..\..\lib\local\FaceAnalyser\FaceAnalyser.vcxproj">
|
<ProjectReference Include="..\..\lib\local\FaceAnalyser\FaceAnalyser.vcxproj">
|
||||||
<Project>{0e7fc556-0e80-45ea-a876-dde4c2fedcd7}</Project>
|
<Project>{0e7fc556-0e80-45ea-a876-dde4c2fedcd7}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\local\GazeAnalyser\GazeAnalyser.vcxproj">
|
||||||
|
<Project>{5f915541-f531-434f-9c81-79f5db58012b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
||||||
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|
|
@ -119,7 +119,7 @@ void visualise_tracking(cv::Mat& captured_image, cv::Mat_<float>& depth_image, c
|
||||||
|
|
||||||
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
||||||
{
|
{
|
||||||
FaceAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
GazeAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,8 +338,8 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
if (det_parameters.track_gaze && detection_success && clnf_model.eye_model)
|
if (det_parameters.track_gaze && detection_success && clnf_model.eye_model)
|
||||||
{
|
{
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true);
|
||||||
FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
visualise_tracking(captured_image, depth_image, clnf_model, det_parameters, gazeDirection0, gazeDirection1, frame_count, fx, fy, cx, cy);
|
visualise_tracking(captured_image, depth_image, clnf_model, det_parameters, gazeDirection0, gazeDirection1, frame_count, fx, fy, cx, cy);
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -124,7 +124,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
</FunctionLevelLinking>
|
</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
</FunctionLevelLinking>
|
</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
|
@ -182,8 +182,8 @@
|
||||||
<ClCompile Include="FaceLandmarkVid.cpp" />
|
<ClCompile Include="FaceLandmarkVid.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\lib\local\FaceAnalyser\FaceAnalyser.vcxproj">
|
<ProjectReference Include="..\..\lib\local\GazeAnalyser\GazeAnalyser.vcxproj">
|
||||||
<Project>{0e7fc556-0e80-45ea-a876-dde4c2fedcd7}</Project>
|
<Project>{5f915541-f531-434f-9c81-79f5db58012b}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
||||||
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
|
|
||||||
#include <Face_utils.h>
|
#include <Face_utils.h>
|
||||||
#include <FaceAnalyser.h>
|
#include <FaceAnalyser.h>
|
||||||
|
#include <FaceAnalyserParameters.h>
|
||||||
#include <GazeEstimation.h>
|
#include <GazeEstimation.h>
|
||||||
|
|
||||||
#ifndef CONFIG_DIR
|
#ifndef CONFIG_DIR
|
||||||
|
@ -131,9 +132,8 @@ void create_directory(string output_path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_output_feature_params(vector<string> &output_similarity_aligned, vector<string> &output_hog_aligned_files, double &similarity_scale,
|
void get_output_feature_params(vector<string> &output_similarity_aligned, vector<string> &output_hog_aligned_files, bool& verbose,
|
||||||
int &similarity_size, bool &grayscale, bool& verbose, bool& dynamic, bool &output_2D_landmarks, bool &output_3D_landmarks,
|
bool &output_2D_landmarks, bool &output_3D_landmarks, bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze, vector<string> &arguments);
|
||||||
bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze, vector<string> &arguments);
|
|
||||||
|
|
||||||
void get_image_input_output_params_feats(vector<vector<string> > &input_image_files, bool& as_video, vector<string> &arguments);
|
void get_image_input_output_params_feats(vector<vector<string> > &input_image_files, bool& as_video, vector<string> &arguments);
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ void visualise_tracking(cv::Mat& captured_image, const LandmarkDetector::CLNF& f
|
||||||
|
|
||||||
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
||||||
{
|
{
|
||||||
FaceAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
GazeAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,17 +218,9 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
vector<string> arguments = get_arguments(argc, argv);
|
vector<string> arguments = get_arguments(argc, argv);
|
||||||
|
|
||||||
// Search paths
|
|
||||||
boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR);
|
|
||||||
boost::filesystem::path parent_path = boost::filesystem::path(arguments[0]).parent_path();
|
|
||||||
|
|
||||||
// Some initial parameters that can be overriden from command line
|
// Some initial parameters that can be overriden from command line
|
||||||
vector<string> input_files, depth_directories, output_files, tracked_videos_output;
|
vector<string> input_files, depth_directories, output_files, tracked_videos_output;
|
||||||
|
|
||||||
LandmarkDetector::FaceModelParameters det_parameters(arguments);
|
|
||||||
// Always track gaze in feature extraction
|
|
||||||
det_parameters.track_gaze = true;
|
|
||||||
|
|
||||||
// Get the input output file parameters
|
// Get the input output file parameters
|
||||||
|
|
||||||
// Indicates that rotation should be with respect to camera or world coordinates
|
// Indicates that rotation should be with respect to camera or world coordinates
|
||||||
|
@ -253,7 +245,6 @@ int main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
video_input = false;
|
video_input = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab camera parameters, if they are not defined (approximate values will be used)
|
// Grab camera parameters, if they are not defined (approximate values will be used)
|
||||||
|
@ -274,19 +265,10 @@ int main (int argc, char **argv)
|
||||||
fx_undefined = true;
|
fx_undefined = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The modules that are being used for tracking
|
|
||||||
LandmarkDetector::CLNF face_model(det_parameters.model_location);
|
|
||||||
|
|
||||||
vector<string> output_similarity_align;
|
vector<string> output_similarity_align;
|
||||||
vector<string> output_hog_align_files;
|
vector<string> output_hog_align_files;
|
||||||
|
|
||||||
double sim_scale = -1;
|
|
||||||
int sim_size = 112;
|
|
||||||
bool grayscale = false;
|
|
||||||
bool video_output = false;
|
bool video_output = false;
|
||||||
bool dynamic = true; // Indicates if a dynamic AU model should be used (dynamic is useful if the video is long enough to include neutral expressions)
|
|
||||||
int num_hog_rows;
|
|
||||||
int num_hog_cols;
|
|
||||||
|
|
||||||
// By default output all parameters, but these can be turned off to get smaller files or slightly faster processing times
|
// By default output all parameters, but these can be turned off to get smaller files or slightly faster processing times
|
||||||
// use -no2Dfp, -no3Dfp, -noMparams, -noPose, -noAUs, -noGaze to turn them off
|
// use -no2Dfp, -no3Dfp, -noMparams, -noPose, -noAUs, -noGaze to turn them off
|
||||||
|
@ -297,72 +279,27 @@ int main (int argc, char **argv)
|
||||||
bool output_AUs = true;
|
bool output_AUs = true;
|
||||||
bool output_gaze = true;
|
bool output_gaze = true;
|
||||||
|
|
||||||
get_output_feature_params(output_similarity_align, output_hog_align_files, sim_scale, sim_size, grayscale, verbose, dynamic,
|
get_output_feature_params(output_similarity_align, output_hog_align_files, verbose,
|
||||||
output_2D_landmarks, output_3D_landmarks, output_model_params, output_pose, output_AUs, output_gaze, arguments);
|
output_2D_landmarks, output_3D_landmarks, output_model_params, output_pose, output_AUs, output_gaze, arguments);
|
||||||
|
|
||||||
// Used for image masking
|
|
||||||
string tri_loc;
|
|
||||||
boost::filesystem::path tri_loc_path = boost::filesystem::path("model/tris_68_full.txt");
|
|
||||||
if (boost::filesystem::exists(tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = tri_loc_path.string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(parent_path/tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = (parent_path/tri_loc_path).string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(config_path/tri_loc_path))
|
|
||||||
{
|
|
||||||
tri_loc = (config_path/tri_loc_path).string();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cout << "Can't find triangulation files, exiting" << endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If multiple video files are tracked, use this to indicate if we are done
|
// If multiple video files are tracked, use this to indicate if we are done
|
||||||
bool done = false;
|
bool done = false;
|
||||||
int f_n = -1;
|
int f_n = -1;
|
||||||
int curr_img = -1;
|
int curr_img = -1;
|
||||||
|
|
||||||
string au_loc;
|
|
||||||
|
|
||||||
string au_loc_local;
|
// Load the modules that are being used for tracking and face analysis
|
||||||
if (dynamic)
|
|
||||||
{
|
|
||||||
au_loc_local = "AU_predictors/AU_all_best.txt";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
au_loc_local = "AU_predictors/AU_all_static.txt";
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc_local);
|
// Load face landmark detector
|
||||||
if (boost::filesystem::exists(au_loc_path))
|
LandmarkDetector::FaceModelParameters det_parameters(arguments);
|
||||||
{
|
// Always track gaze in feature extraction
|
||||||
au_loc = au_loc_path.string();
|
det_parameters.track_gaze = true;
|
||||||
}
|
LandmarkDetector::CLNF face_model(det_parameters.model_location);
|
||||||
else if (boost::filesystem::exists(parent_path/au_loc_path))
|
|
||||||
{
|
|
||||||
au_loc = (parent_path/au_loc_path).string();
|
|
||||||
}
|
|
||||||
else if (boost::filesystem::exists(config_path/au_loc_path))
|
|
||||||
{
|
|
||||||
au_loc = (config_path/au_loc_path).string();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cout << "Can't find AU prediction files, exiting" << endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creating a face analyser that will be used for AU extraction
|
// Load facial feature extractor and AU analyser
|
||||||
|
FaceAnalysis::FaceAnalyserParameters face_analysis_params(arguments);
|
||||||
// Make sure sim_scale is proportional to sim_size if not set
|
FaceAnalysis::FaceAnalyser face_analyser(face_analysis_params);
|
||||||
if (sim_scale == -1) sim_scale = sim_size * (0.7 / 112.0);
|
|
||||||
|
|
||||||
FaceAnalysis::FaceAnalyser face_analyser(vector<cv::Vec3d>(), sim_scale, sim_size, sim_size, au_loc, tri_loc);
|
|
||||||
|
|
||||||
while(!done) // this is not a for loop as we might also be reading from a webcam
|
while(!done) // this is not a for loop as we might also be reading from a webcam
|
||||||
{
|
{
|
||||||
|
@ -458,7 +395,7 @@ int main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
output_file.open(output_files[f_n], ios_base::out);
|
output_file.open(output_files[f_n], ios_base::out);
|
||||||
prepareOutputFile(&output_file, output_2D_landmarks, output_3D_landmarks, output_model_params, output_pose, output_AUs, output_gaze, face_model.pdm.NumberOfPoints(),
|
prepareOutputFile(&output_file, output_2D_landmarks, output_3D_landmarks, output_model_params, output_pose, output_AUs, output_gaze, face_model.pdm.NumberOfPoints(),
|
||||||
LandmarkDetector::CalculateEyeLandmarks(face_model).size(), face_model.pdm.NumberOfModes(), face_analyser.GetAUClassNames(), face_analyser.GetAURegNames());
|
LandmarkDetector::CalculateAllEyeLandmarks(face_model).size(), face_model.pdm.NumberOfModes(), face_analyser.GetAUClassNames(), face_analyser.GetAURegNames());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Saving the HOG features
|
// Saving the HOG features
|
||||||
|
@ -548,19 +485,20 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
if (det_parameters.track_gaze && detection_success && face_model.eye_model)
|
||||||
{
|
{
|
||||||
FaceAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true);
|
GazeAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true);
|
||||||
FaceAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false);
|
GazeAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false);
|
||||||
gazeAngle = FaceAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1, pose_estimate);
|
gazeAngle = GazeAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1, pose_estimate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do face alignment
|
// Do face alignment
|
||||||
cv::Mat sim_warped_img;
|
cv::Mat sim_warped_img;
|
||||||
cv::Mat_<double> hog_descriptor;
|
cv::Mat_<double> hog_descriptor;
|
||||||
|
int num_hog_rows, num_hog_cols;
|
||||||
|
|
||||||
// But only if needed in output
|
// But only if needed in output
|
||||||
if(!output_similarity_align.empty() || hog_output_file.is_open() || output_AUs)
|
if(!output_similarity_align.empty() || hog_output_file.is_open() || output_AUs)
|
||||||
{
|
{
|
||||||
face_analyser.AddNextFrame(captured_image, face_model, time_stamp, false, !det_parameters.quiet_mode);
|
face_analyser.AddNextFrame(captured_image, face_model.detected_landmarks, face_model.detection_success, time_stamp, false, !det_parameters.quiet_mode);
|
||||||
face_analyser.GetLatestAlignedFace(sim_warped_img);
|
face_analyser.GetLatestAlignedFace(sim_warped_img);
|
||||||
|
|
||||||
if(!det_parameters.quiet_mode)
|
if(!det_parameters.quiet_mode)
|
||||||
|
@ -590,11 +528,6 @@ int main (int argc, char **argv)
|
||||||
if (!output_similarity_align.empty())
|
if (!output_similarity_align.empty())
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sim_warped_img.channels() == 3 && grayscale)
|
|
||||||
{
|
|
||||||
cvtColor(sim_warped_img, sim_warped_img, CV_BGR2GRAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
char name[100];
|
char name[100];
|
||||||
|
|
||||||
// Filename is based on frame number
|
// Filename is based on frame number
|
||||||
|
@ -683,7 +616,7 @@ int main (int argc, char **argv)
|
||||||
if (output_files.size() > 0 && output_AUs)
|
if (output_files.size() > 0 && output_AUs)
|
||||||
{
|
{
|
||||||
cout << "Postprocessing the Action Unit predictions" << endl;
|
cout << "Postprocessing the Action Unit predictions" << endl;
|
||||||
face_analyser.PostprocessOutputFile(output_files[f_n], dynamic);
|
face_analyser.PostprocessOutputFile(output_files[f_n]);
|
||||||
}
|
}
|
||||||
// Reset the models for the next video
|
// Reset the models for the next video
|
||||||
face_analyser.Reset();
|
face_analyser.Reset();
|
||||||
|
@ -817,7 +750,7 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
<< ", " << gaze_angle[0] << ", " << gaze_angle[1];
|
<< ", " << gaze_angle[0] << ", " << gaze_angle[1];
|
||||||
|
|
||||||
// Output gaze landmarks
|
// Output gaze landmarks
|
||||||
vector<cv::Point2d> eye_lmks = LandmarkDetector::CalculateEyeLandmarks(face_model);
|
vector<cv::Point2d> eye_lmks = LandmarkDetector::CalculateAllEyeLandmarks(face_model);
|
||||||
for (size_t i = 0; i < eye_lmks.size(); ++i)
|
for (size_t i = 0; i < eye_lmks.size(); ++i)
|
||||||
{
|
{
|
||||||
if (face_model.tracking_initialised)
|
if (face_model.tracking_initialised)
|
||||||
|
@ -977,8 +910,7 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void get_output_feature_params(vector<string> &output_similarity_aligned, vector<string> &output_hog_aligned_files, double &similarity_scale,
|
void get_output_feature_params(vector<string> &output_similarity_aligned, vector<string> &output_hog_aligned_files, bool& verbose,
|
||||||
int &similarity_size, bool &grayscale, bool& verbose, bool& dynamic,
|
|
||||||
bool &output_2D_landmarks, bool &output_3D_landmarks, bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze,
|
bool &output_2D_landmarks, bool &output_3D_landmarks, bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze,
|
||||||
vector<string> &arguments)
|
vector<string> &arguments)
|
||||||
{
|
{
|
||||||
|
@ -994,9 +926,6 @@ void get_output_feature_params(vector<string> &output_similarity_aligned, vector
|
||||||
|
|
||||||
string output_root = "";
|
string output_root = "";
|
||||||
|
|
||||||
// By default the model is dynamic
|
|
||||||
dynamic = true;
|
|
||||||
|
|
||||||
string separator = string(1, boost::filesystem::path::preferred_separator);
|
string separator = string(1, boost::filesystem::path::preferred_separator);
|
||||||
|
|
||||||
// First check if there is a root argument (so that videos and outputs could be defined more easilly)
|
// First check if there is a root argument (so that videos and outputs could be defined more easilly)
|
||||||
|
@ -1036,29 +965,6 @@ void get_output_feature_params(vector<string> &output_similarity_aligned, vector
|
||||||
{
|
{
|
||||||
verbose = true;
|
verbose = true;
|
||||||
}
|
}
|
||||||
else if (arguments[i].compare("-au_static") == 0)
|
|
||||||
{
|
|
||||||
dynamic = false;
|
|
||||||
}
|
|
||||||
else if (arguments[i].compare("-g") == 0)
|
|
||||||
{
|
|
||||||
grayscale = true;
|
|
||||||
valid[i] = false;
|
|
||||||
}
|
|
||||||
else if (arguments[i].compare("-simscale") == 0)
|
|
||||||
{
|
|
||||||
similarity_scale = stod(arguments[i + 1]);
|
|
||||||
valid[i] = false;
|
|
||||||
valid[i + 1] = false;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (arguments[i].compare("-simsize") == 0)
|
|
||||||
{
|
|
||||||
similarity_size = stoi(arguments[i + 1]);
|
|
||||||
valid[i] = false;
|
|
||||||
valid[i + 1] = false;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (arguments[i].compare("-no2Dfp") == 0)
|
else if (arguments[i].compare("-no2Dfp") == 0)
|
||||||
{
|
{
|
||||||
output_2D_landmarks = false;
|
output_2D_landmarks = false;
|
||||||
|
|
|
@ -107,7 +107,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
@ -141,7 +141,7 @@
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<OpenMPSupport>false</OpenMPSupport>
|
<OpenMPSupport>false</OpenMPSupport>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>
|
||||||
|
@ -184,6 +184,9 @@
|
||||||
<ProjectReference Include="..\..\lib\local\FaceAnalyser\FaceAnalyser.vcxproj">
|
<ProjectReference Include="..\..\lib\local\FaceAnalyser\FaceAnalyser.vcxproj">
|
||||||
<Project>{0e7fc556-0e80-45ea-a876-dde4c2fedcd7}</Project>
|
<Project>{0e7fc556-0e80-45ea-a876-dde4c2fedcd7}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\lib\local\GazeAnalyser\GazeAnalyser.vcxproj">
|
||||||
|
<Project>{5f915541-f531-434f-9c81-79f5db58012b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
<ProjectReference Include="..\..\lib\local\LandmarkDetector\LandmarkDetector.vcxproj">
|
||||||
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
<Project>{bdc1d107-de17-4705-8e7b-cdde8bfb2bf8}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LocalDebuggerCommandArguments>
|
<LocalDebuggerCommandArguments>-asvid -no2Dfp -no3Dfp -noMparams -noPose -noGaze -fdirs "D:/Datasets/UNBC/Images/095-tv095/tv095t1afaff/" -of "./out_unbc/095-tv095_tv095t1afaff.au.txt" -fdir "D:/Datasets/UNBC/Images/095-tv095/tv095t2aeunaff/" -of "./out_unbc/095-tv095_tv095t2aeunaff.au.txt" -fdir "D:/Datasets/UNBC/Images/095-tv095/tv095t2afaff/" -of "./out_unbc/095-tv095_tv095t2afaff.au.txt"</LocalDebuggerCommandArguments>
|
||||||
</LocalDebuggerCommandArguments>
|
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
|
|
@ -55,9 +55,8 @@ using OpenCVWrappers;
|
||||||
using CppInterop;
|
using CppInterop;
|
||||||
using CppInterop.LandmarkDetector;
|
using CppInterop.LandmarkDetector;
|
||||||
using CameraInterop;
|
using CameraInterop;
|
||||||
using FaceAnalyser_Interop;
|
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using FaceAnalyser_Interop;
|
using GazeAnalyser_Interop;
|
||||||
|
|
||||||
using ZeroMQ;
|
using ZeroMQ;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
@ -304,10 +303,10 @@ namespace HeadPoseLive
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ProcessFrame(CLNF clnf_model, FaceAnalyserManaged face_analyser, FaceModelParameters model_params, RawImage frame, RawImage grayscale_frame, double fx, double fy, double cx, double cy)
|
private bool ProcessFrame(CLNF clnf_model, GazeAnalyserManaged gaze_analyser, FaceModelParameters model_params, RawImage frame, RawImage grayscale_frame, double fx, double fy, double cx, double cy)
|
||||||
{
|
{
|
||||||
bool detection_succeeding = clnf_model.DetectLandmarksInVideo(grayscale_frame, model_params);
|
bool detection_succeeding = clnf_model.DetectLandmarksInVideo(grayscale_frame, model_params);
|
||||||
face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, true, false, false);
|
gaze_analyser.AddNextFrame(clnf_model, detection_succeeding, fx, fy, cx, cy);
|
||||||
return detection_succeeding;
|
return detection_succeeding;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -393,7 +392,7 @@ namespace HeadPoseLive
|
||||||
String root = AppDomain.CurrentDomain.BaseDirectory;
|
String root = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
FaceModelParameters model_params = new FaceModelParameters(root, false);
|
FaceModelParameters model_params = new FaceModelParameters(root, false);
|
||||||
CLNF face_model = new CLNF(model_params);
|
CLNF face_model = new CLNF(model_params);
|
||||||
FaceAnalyserManaged face_analyser = new FaceAnalyserManaged(root, false, 112);
|
GazeAnalyserManaged gaze_analyser = new GazeAnalyserManaged();
|
||||||
|
|
||||||
DateTime? startTime = CurrentTime;
|
DateTime? startTime = CurrentTime;
|
||||||
|
|
||||||
|
@ -424,7 +423,7 @@ namespace HeadPoseLive
|
||||||
if (grayFrame == null)
|
if (grayFrame == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool detectionSucceeding = ProcessFrame(face_model, face_analyser, model_params, frame, grayFrame, fx, fy, cx, cy);
|
bool detectionSucceeding = ProcessFrame(face_model, gaze_analyser, model_params, frame, grayFrame, fx, fy, cx, cy);
|
||||||
|
|
||||||
lock (recording_lock)
|
lock (recording_lock)
|
||||||
{
|
{
|
||||||
|
@ -449,17 +448,17 @@ namespace HeadPoseLive
|
||||||
|
|
||||||
if (detectionSucceeding)
|
if (detectionSucceeding)
|
||||||
{
|
{
|
||||||
List<Tuple<double, double>> landmarks_doubles = face_model.CalculateLandmarks();
|
List<Tuple<double, double>> landmarks_doubles = face_model.CalculateVisibleLandmarks();
|
||||||
|
|
||||||
foreach (var p in landmarks_doubles)
|
foreach (var p in landmarks_doubles)
|
||||||
landmarks.Add(new System.Windows.Point(p.Item1, p.Item2));
|
landmarks.Add(new System.Windows.Point(p.Item1, p.Item2));
|
||||||
|
|
||||||
eye_landmarks = face_model.CalculateEyeLandmarks();
|
eye_landmarks = face_model.CalculateVisibleEyeLandmarks();
|
||||||
|
|
||||||
scale = face_model.GetRigidParams()[0];
|
scale = face_model.GetRigidParams()[0];
|
||||||
|
|
||||||
gaze_lines = face_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
gaze_lines = gaze_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
gaze_angle = face_analyser.GetGazeAngle();
|
gaze_angle = gaze_analyser.GetGazeAngle();
|
||||||
|
|
||||||
lines = face_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
lines = face_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
}
|
}
|
||||||
|
@ -467,7 +466,6 @@ namespace HeadPoseLive
|
||||||
if (reset)
|
if (reset)
|
||||||
{
|
{
|
||||||
face_model.Reset();
|
face_model.Reset();
|
||||||
face_analyser.Reset();
|
|
||||||
reset = false;
|
reset = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ using CppInterop;
|
||||||
using CppInterop.LandmarkDetector;
|
using CppInterop.LandmarkDetector;
|
||||||
using CameraInterop;
|
using CameraInterop;
|
||||||
using FaceAnalyser_Interop;
|
using FaceAnalyser_Interop;
|
||||||
|
using GazeAnalyser_Interop;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
@ -108,7 +109,7 @@ namespace OpenFaceDemo
|
||||||
FaceModelParameters clnf_params;
|
FaceModelParameters clnf_params;
|
||||||
CLNF clnf_model;
|
CLNF clnf_model;
|
||||||
FaceAnalyserManaged face_analyser;
|
FaceAnalyserManaged face_analyser;
|
||||||
|
GazeAnalyserManaged gaze_analyser;
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
|
@ -123,6 +124,7 @@ namespace OpenFaceDemo
|
||||||
clnf_params = new FaceModelParameters(root, true);
|
clnf_params = new FaceModelParameters(root, true);
|
||||||
clnf_model = new CLNF(clnf_params);
|
clnf_model = new CLNF(clnf_params);
|
||||||
face_analyser = new FaceAnalyserManaged(root, true, 112);
|
face_analyser = new FaceAnalyserManaged(root, true, 112);
|
||||||
|
gaze_analyser = new GazeAnalyserManaged();
|
||||||
|
|
||||||
Dispatcher.Invoke(DispatcherPriority.Render, new TimeSpan(0, 0, 0, 0, 200), (Action)(() =>
|
Dispatcher.Invoke(DispatcherPriority.Render, new TimeSpan(0, 0, 0, 0, 200), (Action)(() =>
|
||||||
{
|
{
|
||||||
|
@ -300,21 +302,25 @@ namespace OpenFaceDemo
|
||||||
double scale = clnf_model.GetRigidParams()[0];
|
double scale = clnf_model.GetRigidParams()[0];
|
||||||
|
|
||||||
double time_stamp = (DateTime.Now - (DateTime)startTime).TotalMilliseconds;
|
double time_stamp = (DateTime.Now - (DateTime)startTime).TotalMilliseconds;
|
||||||
// The face analysis step (only done if recording AUs, HOGs or video)
|
|
||||||
face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, true, false, false);
|
|
||||||
|
|
||||||
|
// The face analysis step (only done if recording AUs, HOGs or video)
|
||||||
|
if(detectionSucceeding)
|
||||||
|
{
|
||||||
|
face_analyser.AddNextFrame(frame, clnf_model.CalculateAllLandmarks(), detectionSucceeding, true, false);
|
||||||
|
gaze_analyser.AddNextFrame(clnf_model, detectionSucceeding, fx, fy, cx, cy);
|
||||||
|
}
|
||||||
List<Tuple<Point, Point>> lines = null;
|
List<Tuple<Point, Point>> lines = null;
|
||||||
List<Tuple<double, double>> landmarks = null;
|
List<Tuple<double, double>> landmarks = null;
|
||||||
List<Tuple<double, double>> eye_landmarks = null;
|
List<Tuple<double, double>> eye_landmarks = null;
|
||||||
List<Tuple<Point, Point>> gaze_lines = null;
|
List<Tuple<Point, Point>> gaze_lines = null;
|
||||||
Tuple<double, double> gaze_angle = face_analyser.GetGazeAngle();
|
Tuple<double, double> gaze_angle = gaze_analyser.GetGazeAngle();
|
||||||
|
|
||||||
if (detectionSucceeding)
|
if (detectionSucceeding)
|
||||||
{
|
{
|
||||||
landmarks = clnf_model.CalculateLandmarks();
|
landmarks = clnf_model.CalculateVisibleLandmarks();
|
||||||
eye_landmarks = clnf_model.CalculateEyeLandmarks();
|
eye_landmarks = clnf_model.CalculateVisibleEyeLandmarks();
|
||||||
lines = clnf_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
lines = clnf_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
gaze_lines = face_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
gaze_lines = gaze_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visualisation
|
// Visualisation
|
||||||
|
|
|
@ -48,6 +48,7 @@ using CppInterop;
|
||||||
using CppInterop.LandmarkDetector;
|
using CppInterop.LandmarkDetector;
|
||||||
using CameraInterop;
|
using CameraInterop;
|
||||||
using FaceAnalyser_Interop;
|
using FaceAnalyser_Interop;
|
||||||
|
using GazeAnalyser_Interop;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Microsoft.WindowsAPICodePack.Dialogs;
|
using Microsoft.WindowsAPICodePack.Dialogs;
|
||||||
|
|
||||||
|
@ -103,6 +104,7 @@ namespace OpenFaceOffline
|
||||||
FaceModelParameters face_model_params;
|
FaceModelParameters face_model_params;
|
||||||
CLNF clnf_model;
|
CLNF clnf_model;
|
||||||
FaceAnalyserManaged face_analyser;
|
FaceAnalyserManaged face_analyser;
|
||||||
|
GazeAnalyserManaged gaze_analyser;
|
||||||
|
|
||||||
// Recording parameters (default values)
|
// Recording parameters (default values)
|
||||||
Recorder recorder;
|
Recorder recorder;
|
||||||
|
@ -149,6 +151,7 @@ namespace OpenFaceOffline
|
||||||
clnf_model = new CLNF(face_model_params);
|
clnf_model = new CLNF(face_model_params);
|
||||||
face_analyser = new FaceAnalyserManaged(root, DynamicAUModels, image_output_size);
|
face_analyser = new FaceAnalyserManaged(root, DynamicAUModels, image_output_size);
|
||||||
|
|
||||||
|
gaze_analyser = new GazeAnalyserManaged();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
|
@ -437,11 +440,12 @@ namespace OpenFaceOffline
|
||||||
detectionSucceeding = ProcessFrame(clnf_model, face_model_params, frame, grayFrame, fx, fy, cx, cy);
|
detectionSucceeding = ProcessFrame(clnf_model, face_model_params, frame, grayFrame, fx, fy, cx, cy);
|
||||||
|
|
||||||
// The face analysis step (for AUs and eye gaze)
|
// The face analysis step (for AUs and eye gaze)
|
||||||
face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, false, ShowAppearance, false); // TODO change
|
face_analyser.AddNextFrame(frame, clnf_model.CalculateAllLandmarks(), detectionSucceeding, false, ShowAppearance); // TODO change
|
||||||
|
gaze_analyser.AddNextFrame(clnf_model, detectionSucceeding, fx, fy, cx, cy);
|
||||||
|
|
||||||
recorder.RecordFrame(clnf_model, face_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps);
|
recorder.RecordFrame(clnf_model, face_analyser, gaze_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps);
|
||||||
|
|
||||||
List<Tuple<double, double>> landmarks = clnf_model.CalculateLandmarks();
|
List<Tuple<double, double>> landmarks = clnf_model.CalculateVisibleLandmarks();
|
||||||
|
|
||||||
VisualizeFeatures(frame, landmarks, fx, fy, cx, cy, progress);
|
VisualizeFeatures(frame, landmarks, fx, fy, cx, cy, progress);
|
||||||
|
|
||||||
|
@ -517,12 +521,15 @@ namespace OpenFaceOffline
|
||||||
|
|
||||||
detectionSucceeding = ProcessFrame(clnf_model, face_model_params, frame, grayFrame, fx, fy, cx, cy);
|
detectionSucceeding = ProcessFrame(clnf_model, face_model_params, frame, grayFrame, fx, fy, cx, cy);
|
||||||
|
|
||||||
// The face analysis step (for AUs and eye gaze)
|
// The face analysis step (for AUs)
|
||||||
face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, false, ShowAppearance, false); // TODO change
|
face_analyser.AddNextFrame(frame, clnf_model.CalculateAllLandmarks(), detectionSucceeding, false, ShowAppearance);
|
||||||
|
|
||||||
recorder.RecordFrame(clnf_model, face_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps);
|
// For gaze analysis
|
||||||
|
gaze_analyser.AddNextFrame(clnf_model, detectionSucceeding, fx, fy, cx, cy);
|
||||||
|
|
||||||
List<Tuple<double, double>> landmarks = clnf_model.CalculateLandmarks();
|
recorder.RecordFrame(clnf_model, face_analyser, gaze_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps);
|
||||||
|
|
||||||
|
List<Tuple<double, double>> landmarks = clnf_model.CalculateVisibleLandmarks();
|
||||||
|
|
||||||
VisualizeFeatures(frame, landmarks, fx, fy, cx, cy, progress);
|
VisualizeFeatures(frame, landmarks, fx, fy, cx, cy, progress);
|
||||||
|
|
||||||
|
@ -579,13 +586,13 @@ namespace OpenFaceOffline
|
||||||
if (detectionSucceeding)
|
if (detectionSucceeding)
|
||||||
{
|
{
|
||||||
|
|
||||||
eye_landmarks = clnf_model.CalculateEyeLandmarks();
|
eye_landmarks = clnf_model.CalculateVisibleEyeLandmarks();
|
||||||
lines = clnf_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
lines = clnf_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
|
|
||||||
scale = clnf_model.GetRigidParams()[0];
|
scale = clnf_model.GetRigidParams()[0];
|
||||||
|
|
||||||
gaze_lines = face_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
gaze_lines = gaze_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy);
|
||||||
gaze_angle = face_analyser.GetGazeAngle();
|
gaze_angle = gaze_analyser.GetGazeAngle();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visualisation (as a separate function)
|
// Visualisation (as a separate function)
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
using CppInterop.LandmarkDetector;
|
using CppInterop.LandmarkDetector;
|
||||||
using FaceAnalyser_Interop;
|
using FaceAnalyser_Interop;
|
||||||
|
using GazeAnalyser_Interop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -100,7 +101,7 @@ namespace OpenFaceOffline
|
||||||
output_features_file.Write(", gaze_0_x, gaze_0_y, gaze_0_z, gaze_1_x, gaze_1_y, gaze_1_z, gaze_angle_x, gaze_angle_y");
|
output_features_file.Write(", gaze_0_x, gaze_0_y, gaze_0_z, gaze_1_x, gaze_1_y, gaze_1_z, gaze_angle_x, gaze_angle_y");
|
||||||
|
|
||||||
// Output gaze eye landmarks
|
// Output gaze eye landmarks
|
||||||
int gaze_num_lmks = clnf_model.CalculateEyeLandmarks().Count;
|
int gaze_num_lmks = clnf_model.CalculateAllEyeLandmarks().Count;
|
||||||
for (int i = 0; i < gaze_num_lmks; ++i)
|
for (int i = 0; i < gaze_num_lmks; ++i)
|
||||||
{
|
{
|
||||||
output_features_file.Write(", eye_lmk_x_" + i);
|
output_features_file.Write(", eye_lmk_x_" + i);
|
||||||
|
@ -187,7 +188,7 @@ namespace OpenFaceOffline
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RecordFrame(CLNF clnf_model, FaceAnalyserManaged face_analyser, bool success, int frame_ind, double time_stamp)
|
public void RecordFrame(CLNF clnf_model, FaceAnalyserManaged face_analyser, GazeAnalyserManaged gaze_analyser, bool success, int frame_ind, double time_stamp)
|
||||||
{
|
{
|
||||||
// Making sure that full stop is used instead of a comma for data recording
|
// Making sure that full stop is used instead of a comma for data recording
|
||||||
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
|
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
|
||||||
|
@ -204,13 +205,13 @@ namespace OpenFaceOffline
|
||||||
|
|
||||||
if (output_gaze)
|
if (output_gaze)
|
||||||
{
|
{
|
||||||
var gaze = face_analyser.GetGazeCamera();
|
var gaze = gaze_analyser.GetGazeCamera();
|
||||||
var gaze_angle = face_analyser.GetGazeAngle();
|
var gaze_angle = gaze_analyser.GetGazeAngle();
|
||||||
|
|
||||||
output_features_file.Write(String.Format(", {0:F5}, {1:F5}, {2:F5}, {3:F5}, {4:F5}, {5:F5}, {6:F5}, {7:F5}", gaze.Item1.Item1, gaze.Item1.Item2, gaze.Item1.Item3,
|
output_features_file.Write(String.Format(", {0:F5}, {1:F5}, {2:F5}, {3:F5}, {4:F5}, {5:F5}, {6:F5}, {7:F5}", gaze.Item1.Item1, gaze.Item1.Item2, gaze.Item1.Item3,
|
||||||
gaze.Item2.Item1, gaze.Item2.Item2, gaze.Item2.Item3, gaze_angle.Item1, gaze_angle.Item2));
|
gaze.Item2.Item1, gaze.Item2.Item2, gaze.Item2.Item3, gaze_angle.Item1, gaze_angle.Item2));
|
||||||
|
|
||||||
List<Tuple<double, double>> landmarks_2d = clnf_model.CalculateEyeLandmarks();
|
List<Tuple<double, double>> landmarks_2d = clnf_model.CalculateAllEyeLandmarks();
|
||||||
|
|
||||||
for (int i = 0; i < landmarks_2d.Count; ++i)
|
for (int i = 0; i < landmarks_2d.Count; ++i)
|
||||||
output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1);
|
output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1);
|
||||||
|
@ -225,7 +226,7 @@ namespace OpenFaceOffline
|
||||||
|
|
||||||
if (output_2D_landmarks)
|
if (output_2D_landmarks)
|
||||||
{
|
{
|
||||||
List<Tuple<double, double>> landmarks_2d = clnf_model.CalculateLandmarks();
|
List<Tuple<double, double>> landmarks_2d = clnf_model.CalculateAllLandmarks();
|
||||||
|
|
||||||
for (int i = 0; i < landmarks_2d.Count; ++i)
|
for (int i = 0; i < landmarks_2d.Count; ++i)
|
||||||
output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1);
|
output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1);
|
||||||
|
@ -292,7 +293,7 @@ namespace OpenFaceOffline
|
||||||
if (record_HOG)
|
if (record_HOG)
|
||||||
face_analyser.StopHOGRecording();
|
face_analyser.StopHOGRecording();
|
||||||
|
|
||||||
face_analyser.PostProcessOutputFile(out_filename, dynamic_AU_model);
|
face_analyser.PostProcessOutputFile(out_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
2
lib/3rdParty/boost/boost.props
vendored
2
lib/3rdParty/boost/boost.props
vendored
|
@ -9,7 +9,7 @@
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)lib\3rdParty\boost\$(PlatformTarget)\$(PlatformToolset)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)lib\3rdParty\boost\$(PlatformTarget)\$(PlatformToolset)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>libboost_filesystem-vc$(PlatformToolsetVersion)-mt-1_60.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>libboost_filesystem-vc$(PlatformToolsetVersion)-mt-1_63.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#ifndef BOOST_ALGORITHM_HPP
|
#ifndef BOOST_ALGORITHM_HPP
|
||||||
#define BOOST_ALGORITHM_HPP
|
#define BOOST_ALGORITHM_HPP
|
||||||
|
|
||||||
|
#include <functional> // for plus and multiplies
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp> // for boost::disable_if
|
#include <boost/utility/enable_if.hpp> // for boost::disable_if
|
||||||
#include <boost/type_traits/is_integral.hpp>
|
#include <boost/type_traits/is_integral.hpp>
|
||||||
|
|
||||||
|
@ -56,7 +58,7 @@ power (T x, Integer n) {
|
||||||
|
|
||||||
/// \fn power ( T x, Integer n, Operation op )
|
/// \fn power ( T x, Integer n, Operation op )
|
||||||
/// \return the value "x" raised to the power "n"
|
/// \return the value "x" raised to the power "n"
|
||||||
/// using the operaton "op".
|
/// using the operation "op".
|
||||||
///
|
///
|
||||||
/// \param x The value to be exponentiated
|
/// \param x The value to be exponentiated
|
||||||
/// \param n The exponent (must be >= 0)
|
/// \param n The exponent (must be >= 0)
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_ALL_OF_HPP
|
#ifndef BOOST_ALGORITHM_ALL_OF_HPP
|
||||||
#define BOOST_ALGORITHM_ALL_OF_HPP
|
#define BOOST_ALGORITHM_ALL_OF_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::all_of, if available
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -27,8 +26,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param p A predicate for testing the elements of the sequence
|
/// \param p A predicate for testing the elements of the sequence
|
||||||
///
|
///
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template<typename InputIterator, typename Predicate>
|
template<typename InputIterator, typename Predicate>
|
||||||
bool all_of ( InputIterator first, InputIterator last, Predicate p )
|
bool all_of ( InputIterator first, InputIterator last, Predicate p )
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_ANY_OF_HPP
|
#ifndef BOOST_ALGORITHM_ANY_OF_HPP
|
||||||
#define BOOST_ALGORITHM_ANY_OF_HPP
|
#define BOOST_ALGORITHM_ANY_OF_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::any_of, if available
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#ifndef BOOST_ALGORITHM_COPY_IF_HPP
|
#ifndef BOOST_ALGORITHM_COPY_IF_HPP
|
||||||
#define BOOST_ALGORITHM_COPY_IF_HPP
|
#define BOOST_ALGORITHM_COPY_IF_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::copy_if, if available
|
#include <utility> // for std::pair, std::make_pair
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -28,8 +28,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param result An output iterator to write the results into
|
/// \param result An output iterator to write the results into
|
||||||
/// \param p A predicate for testing the elements of the range
|
/// \param p A predicate for testing the elements of the range
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template<typename InputIterator, typename OutputIterator, typename Predicate>
|
template<typename InputIterator, typename OutputIterator, typename Predicate>
|
||||||
OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
|
OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p )
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_COPY_N_HPP
|
#ifndef BOOST_ALGORITHM_COPY_N_HPP
|
||||||
#define BOOST_ALGORITHM_COPY_N_HPP
|
#define BOOST_ALGORITHM_COPY_N_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::copy_n, if available
|
|
||||||
|
|
||||||
namespace boost { namespace algorithm {
|
namespace boost { namespace algorithm {
|
||||||
|
|
||||||
/// \fn copy_n ( InputIterator first, Size n, OutputIterator result )
|
/// \fn copy_n ( InputIterator first, Size n, OutputIterator result )
|
||||||
|
@ -25,8 +23,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param n The number of elements to copy
|
/// \param n The number of elements to copy
|
||||||
/// \param result An output iterator to write the results into
|
/// \param result An output iterator to write the results into
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template <typename InputIterator, typename Size, typename OutputIterator>
|
template <typename InputIterator, typename Size, typename OutputIterator>
|
||||||
OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result )
|
OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result )
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP
|
#ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP
|
||||||
#define BOOST_ALGORITHM_FIND_IF_NOT_HPP
|
#define BOOST_ALGORITHM_FIND_IF_NOT_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::find_if_not, if it exists
|
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -27,8 +25,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param last One past the end of the input sequence
|
/// \param last One past the end of the input sequence
|
||||||
/// \param p A predicate for testing the elements of the range
|
/// \param p A predicate for testing the elements of the range
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template<typename InputIterator, typename Predicate>
|
template<typename InputIterator, typename Predicate>
|
||||||
InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p )
|
InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p )
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_IOTA_HPP
|
#ifndef BOOST_ALGORITHM_IOTA_HPP
|
||||||
#define BOOST_ALGORITHM_IOTA_HPP
|
#define BOOST_ALGORITHM_IOTA_HPP
|
||||||
|
|
||||||
#include <numeric>
|
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -26,8 +24,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param last One past the end of the input sequence
|
/// \param last One past the end of the input sequence
|
||||||
/// \param value The initial value of the sequence to be generated
|
/// \param value The initial value of the sequence to be generated
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template <typename ForwardIterator, typename T>
|
template <typename ForwardIterator, typename T>
|
||||||
void iota ( ForwardIterator first, ForwardIterator last, T value )
|
void iota ( ForwardIterator first, ForwardIterator last, T value )
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP
|
#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP
|
||||||
#define BOOST_ALGORITHM_IS_PARTITIONED_HPP
|
#define BOOST_ALGORITHM_IS_PARTITIONED_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::is_partitioned, if available
|
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -26,8 +24,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param last One past the end of the input sequence
|
/// \param last One past the end of the input sequence
|
||||||
/// \param p The predicate to test the values with
|
/// \param p The predicate to test the values with
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template <typename InputIterator, typename UnaryPredicate>
|
template <typename InputIterator, typename UnaryPredicate>
|
||||||
bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
|
bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
#ifndef BOOST_ALGORITHM_IS_PERMUTATION11_HPP
|
#ifndef BOOST_ALGORITHM_IS_PERMUTATION11_HPP
|
||||||
#define BOOST_ALGORITHM_IS_PERMUTATION11_HPP
|
#define BOOST_ALGORITHM_IS_PERMUTATION11_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::less, tie, mismatch and is_permutation (if available)
|
#include <algorithm> // for std::find_if, count_if, mismatch
|
||||||
#include <utility> // for std::make_pair
|
#include <utility> // for std::pair
|
||||||
#include <functional> // for std::equal_to
|
#include <functional> // for std::equal_to
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
|
@ -108,8 +108,6 @@ namespace detail {
|
||||||
/// \param p The predicate to compare elements with
|
/// \param p The predicate to compare elements with
|
||||||
///
|
///
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
|
template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
|
||||||
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
||||||
ForwardIterator2 first2, BinaryPredicate p )
|
ForwardIterator2 first2, BinaryPredicate p )
|
||||||
|
@ -135,8 +133,6 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
||||||
/// \param last2 One past the end of the input sequence
|
/// \param last2 One past the end of the input sequence
|
||||||
/// \param first2 The start of the second sequence
|
/// \param first2 The start of the second sequence
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template< class ForwardIterator1, class ForwardIterator2 >
|
template< class ForwardIterator1, class ForwardIterator2 >
|
||||||
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2 )
|
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_ORDERED_HPP
|
#ifndef BOOST_ALGORITHM_ORDERED_HPP
|
||||||
#define BOOST_ALGORITHM_ORDERED_HPP
|
#define BOOST_ALGORITHM_ORDERED_HPP
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_NONE_OF_HPP
|
#ifndef BOOST_ALGORITHM_NONE_OF_HPP
|
||||||
#define BOOST_ALGORITHM_NONE_OF_HPP
|
#define BOOST_ALGORITHM_NONE_OF_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::none_of, if available
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
@ -29,9 +28,9 @@ namespace boost { namespace algorithm {
|
||||||
template<typename InputIterator, typename Predicate>
|
template<typename InputIterator, typename Predicate>
|
||||||
bool none_of ( InputIterator first, InputIterator last, Predicate p )
|
bool none_of ( InputIterator first, InputIterator last, Predicate p )
|
||||||
{
|
{
|
||||||
for ( ; first != last; ++first )
|
for ( ; first != last; ++first )
|
||||||
if ( p(*first))
|
if ( p(*first))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,7 @@
|
||||||
#ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP
|
#ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP
|
||||||
#define BOOST_ALGORITHM_PARTITION_COPY_HPP
|
#define BOOST_ALGORITHM_PARTITION_COPY_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::partition_copy, if available
|
#include <utility> // for std::pair
|
||||||
#include <utility> // for make_pair
|
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
@ -34,8 +33,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param p A predicate for dividing the elements of the input sequence.
|
/// \param p A predicate for dividing the elements of the input sequence.
|
||||||
///
|
///
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template <typename InputIterator,
|
template <typename InputIterator,
|
||||||
typename OutputIterator1, typename OutputIterator2, typename UnaryPredicate>
|
typename OutputIterator1, typename OutputIterator2, typename UnaryPredicate>
|
||||||
std::pair<OutputIterator1, OutputIterator2>
|
std::pair<OutputIterator1, OutputIterator2>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP
|
#ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP
|
||||||
#define BOOST_ALGORITHM_PARTITION_POINT_HPP
|
#define BOOST_ALGORITHM_PARTITION_POINT_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::partition_point, if available
|
#include <iterator> // for std::distance, advance
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
|
@ -27,8 +27,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param last One past the end of the input sequence
|
/// \param last One past the end of the input sequence
|
||||||
/// \param p The predicate to test the values with
|
/// \param p The predicate to test the values with
|
||||||
/// \note This function is part of the C++2011 standard library.
|
/// \note This function is part of the C++2011 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template <typename ForwardIterator, typename Predicate>
|
template <typename ForwardIterator, typename Predicate>
|
||||||
ForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )
|
ForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p )
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,8 @@
|
||||||
#define BOOST_ALGORITHM_EQUAL_HPP
|
#define BOOST_ALGORITHM_EQUAL_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::equal
|
#include <algorithm> // for std::equal
|
||||||
#include <functional> // for std::equal_to
|
#include <functional> // for std::binary_function
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
namespace boost { namespace algorithm {
|
namespace boost { namespace algorithm {
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,7 @@
|
||||||
#ifndef BOOST_ALGORITHM_IS_PERMUTATION14_HPP
|
#ifndef BOOST_ALGORITHM_IS_PERMUTATION14_HPP
|
||||||
#define BOOST_ALGORITHM_IS_PERMUTATION14_HPP
|
#define BOOST_ALGORITHM_IS_PERMUTATION14_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::less, tie, mismatch and is_permutation (if available)
|
#include <utility> // for std::pair
|
||||||
#include <utility> // for std::make_pair
|
|
||||||
#include <functional> // for std::equal_to
|
#include <functional> // for std::equal_to
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
|
@ -31,8 +30,6 @@ namespace boost { namespace algorithm {
|
||||||
/// \param first2 The start of the second sequence
|
/// \param first2 The start of the second sequence
|
||||||
/// \param last1 One past the end of the second sequence
|
/// \param last1 One past the end of the second sequence
|
||||||
/// \note This function is part of the C++2014 standard library.
|
/// \note This function is part of the C++2014 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template< class ForwardIterator1, class ForwardIterator2 >
|
template< class ForwardIterator1, class ForwardIterator2 >
|
||||||
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
||||||
ForwardIterator2 first2, ForwardIterator2 last2 )
|
ForwardIterator2 first2, ForwardIterator2 last2 )
|
||||||
|
@ -62,8 +59,6 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
||||||
/// \param pred The predicate to compare elements with
|
/// \param pred The predicate to compare elements with
|
||||||
///
|
///
|
||||||
/// \note This function is part of the C++2014 standard library.
|
/// \note This function is part of the C++2014 standard library.
|
||||||
/// We will use the standard one if it is available,
|
|
||||||
/// otherwise we have our own implementation.
|
|
||||||
template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
|
template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
|
||||||
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1,
|
||||||
ForwardIterator2 first2, ForwardIterator2 last2,
|
ForwardIterator2 first2, ForwardIterator2 last2,
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#ifndef BOOST_ALGORITHM_MISMATCH_HPP
|
#ifndef BOOST_ALGORITHM_MISMATCH_HPP
|
||||||
#define BOOST_ALGORITHM_MISMATCH_HPP
|
#define BOOST_ALGORITHM_MISMATCH_HPP
|
||||||
|
|
||||||
#include <algorithm> // for std::mismatch
|
|
||||||
#include <utility> // for std::pair
|
#include <utility> // for std::pair
|
||||||
|
|
||||||
namespace boost { namespace algorithm {
|
namespace boost { namespace algorithm {
|
||||||
|
|
75
lib/3rdParty/boost/boost/algorithm/hex.hpp
vendored
75
lib/3rdParty/boost/boost/algorithm/hex.hpp
vendored
|
@ -25,7 +25,9 @@
|
||||||
|
|
||||||
#include <boost/range/begin.hpp>
|
#include <boost/range/begin.hpp>
|
||||||
#include <boost/range/end.hpp>
|
#include <boost/range/end.hpp>
|
||||||
#include <boost/exception/all.hpp>
|
#include <boost/exception/exception.hpp>
|
||||||
|
#include <boost/exception/info.hpp>
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
#include <boost/type_traits/is_integral.hpp>
|
#include <boost/type_traits/is_integral.hpp>
|
||||||
|
@ -54,12 +56,12 @@ namespace detail {
|
||||||
/// \cond DOXYGEN_HIDE
|
/// \cond DOXYGEN_HIDE
|
||||||
|
|
||||||
template <typename T, typename OutputIterator>
|
template <typename T, typename OutputIterator>
|
||||||
OutputIterator encode_one ( T val, OutputIterator out ) {
|
OutputIterator encode_one ( T val, OutputIterator out, const char * hexDigits ) {
|
||||||
const std::size_t num_hex_digits = 2 * sizeof ( T );
|
const std::size_t num_hex_digits = 2 * sizeof ( T );
|
||||||
char res [ num_hex_digits ];
|
char res [ num_hex_digits ];
|
||||||
char *p = res + num_hex_digits;
|
char *p = res + num_hex_digits;
|
||||||
for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )
|
for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )
|
||||||
*--p = "0123456789ABCDEF" [ val & 0x0F ];
|
*--p = hexDigits [ val & 0x0F ];
|
||||||
return std::copy ( res, res + num_hex_digits, out );
|
return std::copy ( res, res + num_hex_digits, out );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +150,24 @@ template <typename InputIterator, typename OutputIterator>
|
||||||
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
||||||
hex ( InputIterator first, InputIterator last, OutputIterator out ) {
|
hex ( InputIterator first, InputIterator last, OutputIterator out ) {
|
||||||
for ( ; first != last; ++first )
|
for ( ; first != last; ++first )
|
||||||
out = detail::encode_one ( *first, out );
|
out = detail::encode_one ( *first, out, "0123456789ABCDEF" );
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( InputIterator first, InputIterator last, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param first The start of the input sequence
|
||||||
|
/// \param last One past the end of the input sequence
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename InputIterator, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
||||||
|
hex_lower ( InputIterator first, InputIterator last, OutputIterator out ) {
|
||||||
|
for ( ; first != last; ++first )
|
||||||
|
out = detail::encode_one ( *first, out, "0123456789abcdef" );
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,10 +183,27 @@ template <typename T, typename OutputIterator>
|
||||||
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
||||||
hex ( const T *ptr, OutputIterator out ) {
|
hex ( const T *ptr, OutputIterator out ) {
|
||||||
while ( *ptr )
|
while ( *ptr )
|
||||||
out = detail::encode_one ( *ptr++, out );
|
out = detail::encode_one ( *ptr++, out, "0123456789ABCDEF" );
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( const T *ptr, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param ptr A pointer to a 0-terminated sequence of data.
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename T, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
||||||
|
hex_lower ( const T *ptr, OutputIterator out ) {
|
||||||
|
while ( *ptr )
|
||||||
|
out = detail::encode_one ( *ptr++, out, "0123456789abcdef" );
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \fn hex ( const Range &r, OutputIterator out )
|
/// \fn hex ( const Range &r, OutputIterator out )
|
||||||
/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
|
/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
|
||||||
///
|
///
|
||||||
|
@ -182,6 +218,20 @@ hex ( const Range &r, OutputIterator out ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( const Range &r, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param r The input range
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename Range, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<typename Range::iterator>::value_type>, OutputIterator>::type
|
||||||
|
hex_lower ( const Range &r, OutputIterator out ) {
|
||||||
|
return hex_lower (boost::begin(r), boost::end(r), out);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out )
|
/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out )
|
||||||
/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
|
/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
|
||||||
///
|
///
|
||||||
|
@ -242,6 +292,21 @@ String hex ( const String &input ) {
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn String hex_lower ( const String &input )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param input A container to be converted
|
||||||
|
/// \return A container with the encoded text
|
||||||
|
template<typename String>
|
||||||
|
String hex_lower ( const String &input ) {
|
||||||
|
String output;
|
||||||
|
output.reserve (input.size () * (2 * sizeof (typename String::value_type)));
|
||||||
|
(void) hex_lower (input, std::back_inserter (output));
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \fn String unhex ( const String &input )
|
/// \fn String unhex ( const String &input )
|
||||||
/// \brief Converts a sequence of hexadecimal characters into a sequence of characters.
|
/// \brief Converts a sequence of hexadecimal characters into a sequence of characters.
|
||||||
///
|
///
|
||||||
|
|
161
lib/3rdParty/boost/boost/algorithm/is_palindrome.hpp
vendored
Normal file
161
lib/3rdParty/boost/boost/algorithm/is_palindrome.hpp
vendored
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2016
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See
|
||||||
|
accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
See http://www.boost.org/ for latest version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// \file is_palindrome.hpp
|
||||||
|
/// \brief Checks the input sequence on palindrome.
|
||||||
|
/// \author Alexander Zaitsev
|
||||||
|
|
||||||
|
#ifndef BOOST_ALGORITHM_IS_PALINDROME_HPP
|
||||||
|
#define BOOST_ALGORITHM_IS_PALINDROME_HPP
|
||||||
|
|
||||||
|
#include <iterator>
|
||||||
|
#include <functional>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
namespace boost { namespace algorithm {
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( BidirectionalIterator begin, BidirectionalIterator end, Predicate p )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param begin The start of the input sequence
|
||||||
|
/// \param end One past the end of the input sequence
|
||||||
|
/// \param p A predicate used to compare the values.
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
template <typename BidirectionalIterator, typename Predicate>
|
||||||
|
bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end, Predicate p )
|
||||||
|
{
|
||||||
|
if(begin == end)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
--end;
|
||||||
|
while(begin != end)
|
||||||
|
{
|
||||||
|
if(!p(*begin, *end))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
++begin;
|
||||||
|
if(begin == end)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
--end;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( BidirectionalIterator begin, BidirectionalIterator end )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param begin The start of the input sequence
|
||||||
|
/// \param end One past the end of the input sequence
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
template <typename BidirectionalIterator>
|
||||||
|
bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end)
|
||||||
|
{
|
||||||
|
if(begin == end)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
--end;
|
||||||
|
while(begin != end)
|
||||||
|
{
|
||||||
|
if(!(*begin == *end))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
++begin;
|
||||||
|
if(begin == end)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
--end;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( const R& range )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param range The range to be tested.
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
template <typename R>
|
||||||
|
bool is_palindrome(const R& range)
|
||||||
|
{
|
||||||
|
return is_palindrome(boost::begin(range), boost::end(range));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( const R& range, Predicate p )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param range The range to be tested.
|
||||||
|
/// \param p A predicate used to compare the values.
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
template <typename R, typename Predicate>
|
||||||
|
bool is_palindrome(const R& range, Predicate p)
|
||||||
|
{
|
||||||
|
return is_palindrome(boost::begin(range), boost::end(range), p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( const char* str )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param str C-string to be tested.
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
bool is_palindrome(const char* str)
|
||||||
|
{
|
||||||
|
if(!str)
|
||||||
|
return true;
|
||||||
|
return is_palindrome(str, str + strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn is_palindrome ( const char* str, Predicate p )
|
||||||
|
/// \return true if the entire sequence is palindrome
|
||||||
|
///
|
||||||
|
/// \param str C-string to be tested.
|
||||||
|
/// \param p A predicate used to compare the values.
|
||||||
|
///
|
||||||
|
/// \note This function will return true for empty sequences and for palindromes.
|
||||||
|
/// For other sequences function will return false.
|
||||||
|
/// Complexity: O(N).
|
||||||
|
template<typename Predicate>
|
||||||
|
bool is_palindrome(const char* str, Predicate p)
|
||||||
|
{
|
||||||
|
if(!str)
|
||||||
|
return true;
|
||||||
|
return is_palindrome(str, str + strlen(str), p);
|
||||||
|
}
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif // BOOST_ALGORITHM_IS_PALINDROME_HPP
|
|
@ -75,25 +75,27 @@ Requirements:
|
||||||
/// \param corpus_last One past the end of the data to search
|
/// \param corpus_last One past the end of the data to search
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
std::pair<corpusIter, corpusIter>
|
||||||
|
operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
||||||
BOOST_STATIC_ASSERT (( boost::is_same<
|
BOOST_STATIC_ASSERT (( boost::is_same<
|
||||||
typename std::iterator_traits<patIter>::value_type,
|
typename std::iterator_traits<patIter>::value_type,
|
||||||
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
||||||
|
|
||||||
if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
|
if ( corpus_first == corpus_last ) return std::make_pair(corpus_last, corpus_last); // if nothing to search, we didn't find it!
|
||||||
if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
|
if ( pat_first == pat_last ) return std::make_pair(corpus_first, corpus_first); // empty pattern matches at start
|
||||||
|
|
||||||
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
||||||
// If the pattern is larger than the corpus, we can't find it!
|
// If the pattern is larger than the corpus, we can't find it!
|
||||||
if ( k_corpus_length < k_pattern_length )
|
if ( k_corpus_length < k_pattern_length )
|
||||||
return corpus_last;
|
return std::make_pair(corpus_last, corpus_last);
|
||||||
|
|
||||||
// Do the search
|
// Do the search
|
||||||
return this->do_search ( corpus_first, corpus_last );
|
return this->do_search ( corpus_first, corpus_last );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Range>
|
template <typename Range>
|
||||||
typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
|
std::pair<typename boost::range_iterator<Range>::type, typename boost::range_iterator<Range>::type>
|
||||||
|
operator () ( Range &r ) const {
|
||||||
return (*this) (boost::begin(r), boost::end(r));
|
return (*this) (boost::begin(r), boost::end(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +114,8 @@ Requirements:
|
||||||
/// \param p A predicate used for the search comparisons.
|
/// \param p A predicate used for the search comparisons.
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
std::pair<corpusIter, corpusIter>
|
||||||
|
do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
||||||
/* ---- Do the matching ---- */
|
/* ---- Do the matching ---- */
|
||||||
corpusIter curPos = corpus_first;
|
corpusIter curPos = corpus_first;
|
||||||
const corpusIter lastPos = corpus_last - k_pattern_length;
|
const corpusIter lastPos = corpus_last - k_pattern_length;
|
||||||
|
@ -126,7 +129,7 @@ Requirements:
|
||||||
j--;
|
j--;
|
||||||
// We matched - we're done!
|
// We matched - we're done!
|
||||||
if ( j == 0 )
|
if ( j == 0 )
|
||||||
return curPos;
|
return std::make_pair(curPos, curPos + k_pattern_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since we didn't match, figure out how far to skip forward
|
// Since we didn't match, figure out how far to skip forward
|
||||||
|
@ -138,7 +141,7 @@ Requirements:
|
||||||
curPos += suffix_ [ j ];
|
curPos += suffix_ [ j ];
|
||||||
}
|
}
|
||||||
|
|
||||||
return corpus_last; // We didn't find anything
|
return std::make_pair(corpus_last, corpus_last); // We didn't find anything
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,7 +214,7 @@ Requirements:
|
||||||
/// \param pat_last One past the end of the data to search for
|
/// \param pat_last One past the end of the data to search for
|
||||||
///
|
///
|
||||||
template <typename patIter, typename corpusIter>
|
template <typename patIter, typename corpusIter>
|
||||||
corpusIter boyer_moore_search (
|
std::pair<corpusIter, corpusIter> boyer_moore_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last,
|
corpusIter corpus_first, corpusIter corpus_last,
|
||||||
patIter pat_first, patIter pat_last )
|
patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -220,7 +223,7 @@ Requirements:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename corpusIter>
|
template <typename PatternRange, typename corpusIter>
|
||||||
corpusIter boyer_moore_search (
|
std::pair<corpusIter, corpusIter> boyer_moore_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
@ -229,8 +232,9 @@ Requirements:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename patIter, typename CorpusRange>
|
template <typename patIter, typename CorpusRange>
|
||||||
typename boost::lazy_disable_if_c<
|
typename boost::disable_if_c<
|
||||||
boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
|
boost::is_same<CorpusRange, patIter>::value,
|
||||||
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type> >
|
||||||
::type
|
::type
|
||||||
boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -239,7 +243,7 @@ Requirements:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename CorpusRange>
|
template <typename PatternRange, typename CorpusRange>
|
||||||
typename boost::range_iterator<CorpusRange>::type
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type>
|
||||||
boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern )
|
boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
|
|
@ -64,33 +64,34 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
|
|
||||||
~boyer_moore_horspool () {}
|
~boyer_moore_horspool () {}
|
||||||
|
|
||||||
/// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p )
|
/// \fn operator ( corpusIter corpus_first, corpusIter corpus_last)
|
||||||
/// \brief Searches the corpus for the pattern that was passed into the constructor
|
/// \brief Searches the corpus for the pattern that was passed into the constructor
|
||||||
///
|
///
|
||||||
/// \param corpus_first The start of the data to search (Random Access Iterator)
|
/// \param corpus_first The start of the data to search (Random Access Iterator)
|
||||||
/// \param corpus_last One past the end of the data to search
|
/// \param corpus_last One past the end of the data to search
|
||||||
/// \param p A predicate used for the search comparisons.
|
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
std::pair<corpusIter, corpusIter>
|
||||||
|
operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
||||||
BOOST_STATIC_ASSERT (( boost::is_same<
|
BOOST_STATIC_ASSERT (( boost::is_same<
|
||||||
typename std::iterator_traits<patIter>::value_type,
|
typename std::iterator_traits<patIter>::value_type,
|
||||||
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
||||||
|
|
||||||
if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
|
if ( corpus_first == corpus_last ) return std::make_pair(corpus_last, corpus_last); // if nothing to search, we didn't find it!
|
||||||
if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
|
if ( pat_first == pat_last ) return std::make_pair(corpus_first, corpus_first); // empty pattern matches at start
|
||||||
|
|
||||||
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
||||||
// If the pattern is larger than the corpus, we can't find it!
|
// If the pattern is larger than the corpus, we can't find it!
|
||||||
if ( k_corpus_length < k_pattern_length )
|
if ( k_corpus_length < k_pattern_length )
|
||||||
return corpus_last;
|
return std::make_pair(corpus_last, corpus_last);
|
||||||
|
|
||||||
// Do the search
|
// Do the search
|
||||||
return this->do_search ( corpus_first, corpus_last );
|
return this->do_search ( corpus_first, corpus_last );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Range>
|
template <typename Range>
|
||||||
typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
|
std::pair<typename boost::range_iterator<Range>::type, typename boost::range_iterator<Range>::type>
|
||||||
|
operator () ( Range &r ) const {
|
||||||
return (*this) (boost::begin(r), boost::end(r));
|
return (*this) (boost::begin(r), boost::end(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +109,8 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
/// \param k_corpus_length The length of the corpus to search
|
/// \param k_corpus_length The length of the corpus to search
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
std::pair<corpusIter, corpusIter>
|
||||||
|
do_search ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
||||||
corpusIter curPos = corpus_first;
|
corpusIter curPos = corpus_first;
|
||||||
const corpusIter lastPos = corpus_last - k_pattern_length;
|
const corpusIter lastPos = corpus_last - k_pattern_length;
|
||||||
while ( curPos <= lastPos ) {
|
while ( curPos <= lastPos ) {
|
||||||
|
@ -117,14 +119,14 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
while ( pat_first [j] == curPos [j] ) {
|
while ( pat_first [j] == curPos [j] ) {
|
||||||
// We matched - we're done!
|
// We matched - we're done!
|
||||||
if ( j == 0 )
|
if ( j == 0 )
|
||||||
return curPos;
|
return std::make_pair(curPos, curPos + k_pattern_length);
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
|
|
||||||
curPos += skip_ [ curPos [ k_pattern_length - 1 ]];
|
curPos += skip_ [ curPos [ k_pattern_length - 1 ]];
|
||||||
}
|
}
|
||||||
|
|
||||||
return corpus_last;
|
return std::make_pair(corpus_last, corpus_last);
|
||||||
}
|
}
|
||||||
// \endcond
|
// \endcond
|
||||||
};
|
};
|
||||||
|
@ -142,7 +144,7 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
/// \param pat_last One past the end of the data to search for
|
/// \param pat_last One past the end of the data to search for
|
||||||
///
|
///
|
||||||
template <typename patIter, typename corpusIter>
|
template <typename patIter, typename corpusIter>
|
||||||
corpusIter boyer_moore_horspool_search (
|
std::pair<corpusIter, corpusIter> boyer_moore_horspool_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last,
|
corpusIter corpus_first, corpusIter corpus_last,
|
||||||
patIter pat_first, patIter pat_last )
|
patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -151,7 +153,7 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename corpusIter>
|
template <typename PatternRange, typename corpusIter>
|
||||||
corpusIter boyer_moore_horspool_search (
|
std::pair<corpusIter, corpusIter> boyer_moore_horspool_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
@ -160,8 +162,9 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename patIter, typename CorpusRange>
|
template <typename patIter, typename CorpusRange>
|
||||||
typename boost::lazy_disable_if_c<
|
typename boost::disable_if_c<
|
||||||
boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
|
boost::is_same<CorpusRange, patIter>::value,
|
||||||
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type> >
|
||||||
::type
|
::type
|
||||||
boyer_moore_horspool_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
boyer_moore_horspool_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -170,7 +173,7 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename CorpusRange>
|
template <typename PatternRange, typename CorpusRange>
|
||||||
typename boost::range_iterator<CorpusRange>::type
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type>
|
||||||
boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern )
|
boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
|
|
@ -79,7 +79,7 @@ namespace boost { namespace algorithm { namespace detail {
|
||||||
skip_map skip_;
|
skip_map skip_;
|
||||||
const value_type k_default_value;
|
const value_type k_default_value;
|
||||||
public:
|
public:
|
||||||
skip_table ( std::size_t patSize, value_type default_value ) : k_default_value ( default_value ) {
|
skip_table ( std::size_t /*patSize*/, value_type default_value ) : k_default_value ( default_value ) {
|
||||||
std::fill_n ( skip_.begin(), skip_.size(), default_value );
|
std::fill_n ( skip_.begin(), skip_.size(), default_value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,23 +69,26 @@ namespace boost { namespace algorithm {
|
||||||
/// \param p A predicate used for the search comparisons.
|
/// \param p A predicate used for the search comparisons.
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
std::pair<corpusIter, corpusIter>
|
||||||
|
operator () ( corpusIter corpus_first, corpusIter corpus_last ) const {
|
||||||
BOOST_STATIC_ASSERT (( boost::is_same<
|
BOOST_STATIC_ASSERT (( boost::is_same<
|
||||||
typename std::iterator_traits<patIter>::value_type,
|
typename std::iterator_traits<patIter>::value_type,
|
||||||
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
typename std::iterator_traits<corpusIter>::value_type>::value ));
|
||||||
if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it!
|
|
||||||
if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start
|
if ( corpus_first == corpus_last ) return std::make_pair(corpus_last, corpus_last); // if nothing to search, we didn't find it!
|
||||||
|
if ( pat_first == pat_last ) return std::make_pair(corpus_first, corpus_first); // empty pattern matches at start
|
||||||
|
|
||||||
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last );
|
||||||
// If the pattern is larger than the corpus, we can't find it!
|
// If the pattern is larger than the corpus, we can't find it!
|
||||||
if ( k_corpus_length < k_pattern_length )
|
if ( k_corpus_length < k_pattern_length )
|
||||||
return corpus_last;
|
return std::make_pair(corpus_last, corpus_last);
|
||||||
|
|
||||||
return do_search ( corpus_first, corpus_last, k_corpus_length );
|
return do_search ( corpus_first, corpus_last, k_corpus_length );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Range>
|
template <typename Range>
|
||||||
typename boost::range_iterator<Range>::type operator () ( Range &r ) const {
|
std::pair<typename boost::range_iterator<Range>::type, typename boost::range_iterator<Range>::type>
|
||||||
|
operator () ( Range &r ) const {
|
||||||
return (*this) (boost::begin(r), boost::end(r));
|
return (*this) (boost::begin(r), boost::end(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +106,8 @@ namespace boost { namespace algorithm {
|
||||||
/// \param p A predicate used for the search comparisons.
|
/// \param p A predicate used for the search comparisons.
|
||||||
///
|
///
|
||||||
template <typename corpusIter>
|
template <typename corpusIter>
|
||||||
corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last,
|
std::pair<corpusIter, corpusIter>
|
||||||
|
do_search ( corpusIter corpus_first, corpusIter corpus_last,
|
||||||
difference_type k_corpus_length ) const {
|
difference_type k_corpus_length ) const {
|
||||||
difference_type match_start = 0; // position in the corpus that we're matching
|
difference_type match_start = 0; // position in the corpus that we're matching
|
||||||
|
|
||||||
|
@ -135,7 +139,7 @@ namespace boost { namespace algorithm {
|
||||||
while ( match_start <= last_match ) {
|
while ( match_start <= last_match ) {
|
||||||
while ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) {
|
while ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) {
|
||||||
if ( ++idx == k_pattern_length )
|
if ( ++idx == k_pattern_length )
|
||||||
return corpus_first + match_start;
|
return std::make_pair(corpus_first + match_start, corpus_first + match_start + k_pattern_length);
|
||||||
}
|
}
|
||||||
// Figure out where to start searching again
|
// Figure out where to start searching again
|
||||||
// assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward
|
// assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward
|
||||||
|
@ -146,7 +150,7 @@ namespace boost { namespace algorithm {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// We didn't find anything
|
// We didn't find anything
|
||||||
return corpus_last;
|
return std::make_pair(corpus_last, corpus_last);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,7 +206,7 @@ namespace boost { namespace algorithm {
|
||||||
/// \param pat_last One past the end of the data to search for
|
/// \param pat_last One past the end of the data to search for
|
||||||
///
|
///
|
||||||
template <typename patIter, typename corpusIter>
|
template <typename patIter, typename corpusIter>
|
||||||
corpusIter knuth_morris_pratt_search (
|
std::pair<corpusIter, corpusIter> knuth_morris_pratt_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last,
|
corpusIter corpus_first, corpusIter corpus_last,
|
||||||
patIter pat_first, patIter pat_last )
|
patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -211,7 +215,7 @@ namespace boost { namespace algorithm {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename corpusIter>
|
template <typename PatternRange, typename corpusIter>
|
||||||
corpusIter knuth_morris_pratt_search (
|
std::pair<corpusIter, corpusIter> knuth_morris_pratt_search (
|
||||||
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
@ -220,8 +224,9 @@ namespace boost { namespace algorithm {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename patIter, typename CorpusRange>
|
template <typename patIter, typename CorpusRange>
|
||||||
typename boost::lazy_disable_if_c<
|
typename boost::disable_if_c<
|
||||||
boost::is_same<CorpusRange, patIter>::value, typename boost::range_iterator<CorpusRange> >
|
boost::is_same<CorpusRange, patIter>::value,
|
||||||
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type> >
|
||||||
::type
|
::type
|
||||||
knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last )
|
||||||
{
|
{
|
||||||
|
@ -230,7 +235,7 @@ namespace boost { namespace algorithm {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename PatternRange, typename CorpusRange>
|
template <typename PatternRange, typename CorpusRange>
|
||||||
typename boost::range_iterator<CorpusRange>::type
|
std::pair<typename boost::range_iterator<CorpusRange>::type, typename boost::range_iterator<CorpusRange>::type>
|
||||||
knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern )
|
knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern )
|
||||||
{
|
{
|
||||||
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
typedef typename boost::range_iterator<const PatternRange>::type pattern_iterator;
|
||||||
|
|
109
lib/3rdParty/boost/boost/algorithm/sort_subrange.hpp
vendored
Normal file
109
lib/3rdParty/boost/boost/algorithm/sort_subrange.hpp
vendored
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) Marshall Clow 2008-2012.
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
Revision history:
|
||||||
|
28 Sep 2015 mtc First version
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// \file sort_subrange.hpp
|
||||||
|
/// \brief Sort a subrange
|
||||||
|
/// \author Marshall Clow
|
||||||
|
///
|
||||||
|
/// Suggested by Sean Parent in his CppCon 2015 keynote
|
||||||
|
|
||||||
|
#ifndef BOOST_ALGORITHM_SORT_SUBRANGE_HPP
|
||||||
|
#define BOOST_ALGORITHM_SORT_SUBRANGE_HPP
|
||||||
|
|
||||||
|
#include <functional> // For std::less
|
||||||
|
#include <iterator> // For std::iterator_traits
|
||||||
|
#include <algorithm> // For nth_element and partial_sort
|
||||||
|
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
namespace boost { namespace algorithm {
|
||||||
|
|
||||||
|
/// \fn sort_subrange ( T const& val,
|
||||||
|
/// Iterator first, Iterator last,
|
||||||
|
/// Iterator sub_first, Iterator sub_last,
|
||||||
|
/// Pred p )
|
||||||
|
/// \brief Sort the subrange [sub_first, sub_last) that is inside
|
||||||
|
/// the range [first, last) as if you had sorted the entire range.
|
||||||
|
///
|
||||||
|
/// \param first The start of the larger range
|
||||||
|
/// \param last The end of the larger range
|
||||||
|
/// \param sub_first The start of the sub range
|
||||||
|
/// \param sub_last The end of the sub range
|
||||||
|
/// \param p A predicate to use to compare the values.
|
||||||
|
/// p ( a, b ) returns a boolean.
|
||||||
|
///
|
||||||
|
template<typename Iterator, typename Pred>
|
||||||
|
void sort_subrange (
|
||||||
|
Iterator first, Iterator last,
|
||||||
|
Iterator sub_first, Iterator sub_last,
|
||||||
|
Pred p)
|
||||||
|
{
|
||||||
|
if (sub_first == sub_last) return; // the empty sub-range is already sorted.
|
||||||
|
|
||||||
|
if (sub_first != first) { // sub-range is at the start, don't need to partition
|
||||||
|
(void) std::nth_element(first, sub_first, last, p);
|
||||||
|
++sub_first;
|
||||||
|
}
|
||||||
|
std::partial_sort(sub_first, sub_last, last, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Iterator>
|
||||||
|
void sort_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last)
|
||||||
|
{
|
||||||
|
typedef typename std::iterator_traits<Iterator>::value_type value_type;
|
||||||
|
return sort_subrange(first, last, sub_first, sub_last, std::less<value_type>());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// range versions?
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn partition_subrange ( T const& val,
|
||||||
|
/// Iterator first, Iterator last,
|
||||||
|
/// Iterator sub_first, Iterator sub_last,
|
||||||
|
/// Pred p )
|
||||||
|
/// \brief Gather the elements of the subrange [sub_first, sub_last) that is
|
||||||
|
/// inside the range [first, last) as if you had sorted the entire range.
|
||||||
|
///
|
||||||
|
/// \param first The start of the larger range
|
||||||
|
/// \param last The end of the larger range
|
||||||
|
/// \param sub_first The start of the sub range
|
||||||
|
/// \param sub_last The end of the sub range
|
||||||
|
/// \param p A predicate to use to compare the values.
|
||||||
|
/// p ( a, b ) returns a boolean.
|
||||||
|
///
|
||||||
|
template<typename Iterator, typename Pred>
|
||||||
|
void partition_subrange (
|
||||||
|
Iterator first, Iterator last,
|
||||||
|
Iterator sub_first, Iterator sub_last,
|
||||||
|
Pred p)
|
||||||
|
{
|
||||||
|
if (sub_first != first) {
|
||||||
|
(void) std::nth_element(first, sub_first, last, p);
|
||||||
|
++sub_first;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sub_last != last)
|
||||||
|
(void) std::nth_element(sub_first, sub_last, last, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Iterator>
|
||||||
|
void partition_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last)
|
||||||
|
{
|
||||||
|
typedef typename std::iterator_traits<Iterator>::value_type value_type;
|
||||||
|
return partition_subrange(first, last, sub_first, sub_last, std::less<value_type>());
|
||||||
|
}
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif // BOOST_ALGORITHM_SORT_SUBRANGE_HPP
|
|
@ -401,7 +401,6 @@ namespace boost {
|
||||||
\param Search A substring to be searched for
|
\param Search A substring to be searched for
|
||||||
\param Format A substitute string
|
\param Format A substitute string
|
||||||
\param Loc A locale used for case insensitive comparison
|
\param Loc A locale used for case insensitive comparison
|
||||||
\return A reference to the modified input
|
|
||||||
*/
|
*/
|
||||||
template<typename SequenceT, typename Range1T, typename Range2T>
|
template<typename SequenceT, typename Range1T, typename Range2T>
|
||||||
inline void ireplace_last(
|
inline void ireplace_last(
|
||||||
|
@ -643,7 +642,6 @@ namespace boost {
|
||||||
\param Input An input string
|
\param Input An input string
|
||||||
\param Search A substring to be searched for
|
\param Search A substring to be searched for
|
||||||
\param Format A substitute string
|
\param Format A substitute string
|
||||||
\return A reference to the modified input
|
|
||||||
*/
|
*/
|
||||||
template<typename SequenceT, typename Range1T, typename Range2T>
|
template<typename SequenceT, typename Range1T, typename Range2T>
|
||||||
inline void replace_all(
|
inline void replace_all(
|
||||||
|
|
13
lib/3rdParty/boost/boost/bind/arg.hpp
vendored
13
lib/3rdParty/boost/boost/bind/arg.hpp
vendored
|
@ -21,20 +21,27 @@
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
#include <boost/is_placeholder.hpp>
|
#include <boost/is_placeholder.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
|
|
||||||
|
template<bool Eq> struct _arg_eq
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
template<> struct _arg_eq<true>
|
||||||
|
{
|
||||||
|
typedef void type;
|
||||||
|
};
|
||||||
|
|
||||||
template< int I > struct arg
|
template< int I > struct arg
|
||||||
{
|
{
|
||||||
BOOST_CONSTEXPR arg()
|
BOOST_CONSTEXPR arg()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template< class T > BOOST_CONSTEXPR arg( T const & /* t */ )
|
template< class T > BOOST_CONSTEXPR arg( T const & /* t */, typename _arg_eq< I == is_placeholder<T>::value >::type * = 0 )
|
||||||
{
|
{
|
||||||
BOOST_STATIC_ASSERT( I == is_placeholder<T>::value );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
108
lib/3rdParty/boost/boost/bind/bind.hpp
vendored
108
lib/3rdParty/boost/boost/bind/bind.hpp
vendored
|
@ -887,9 +887,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist1<A1&> a( a1_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist1<A1&> a( a1_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2 > class rrlist2
|
template< class A1, class A2 > class rrlist2
|
||||||
|
@ -915,9 +923,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist2<A1&, A2&> a( a1_, a2_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist2<A1&, A2&> a( a1_, a2_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3 > class rrlist3
|
template< class A1, class A2, class A3 > class rrlist3
|
||||||
|
@ -946,9 +962,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4 > class rrlist4
|
template< class A1, class A2, class A3, class A4 > class rrlist4
|
||||||
|
@ -980,9 +1004,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4, class A5 > class rrlist5
|
template< class A1, class A2, class A3, class A4, class A5 > class rrlist5
|
||||||
|
@ -1017,9 +1049,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6
|
template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6
|
||||||
|
@ -1057,9 +1097,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7
|
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7
|
||||||
|
@ -1100,9 +1148,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8
|
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8
|
||||||
|
@ -1146,9 +1202,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9
|
template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9
|
||||||
|
@ -1195,9 +1259,17 @@ public:
|
||||||
|
|
||||||
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const
|
||||||
|
{
|
||||||
|
rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
|
|
||||||
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
|
template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const
|
||||||
|
{
|
||||||
|
rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ );
|
||||||
|
return b.eval( a );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class R, class F, class L> class bind_t
|
template<class R, class F, class L> class bind_t
|
||||||
|
|
|
@ -196,6 +196,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -39,9 +39,20 @@
|
||||||
# define BOOST_NO_TYPEID
|
# define BOOST_NO_TYPEID
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__int64) && !defined(__GNUC__)
|
#if !__has_feature(cxx_thread_local)
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __is_identifier
|
||||||
|
#if !__is_identifier(__int64) && !defined(__GNUC__)
|
||||||
# define BOOST_HAS_MS_INT64
|
# define BOOST_HAS_MS_INT64
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __has_include(<stdint.h>)
|
||||||
|
# define BOOST_HAS_STDINT_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define BOOST_HAS_NRVO
|
#define BOOST_HAS_NRVO
|
||||||
|
|
||||||
|
@ -57,16 +68,25 @@
|
||||||
#define BOOST_HAS_LONG_LONG
|
#define BOOST_HAS_LONG_LONG
|
||||||
|
|
||||||
//
|
//
|
||||||
// We disable this if the compiler is really nvcc as it
|
// We disable this if the compiler is really nvcc with C++03 as it
|
||||||
// doesn't actually support __int128 as of CUDA_VERSION=5000
|
// doesn't actually support __int128 as of CUDA_VERSION=7500
|
||||||
// even though it defines __SIZEOF_INT128__.
|
// even though it defines __SIZEOF_INT128__.
|
||||||
// See https://svn.boost.org/trac/boost/ticket/10418
|
// See https://svn.boost.org/trac/boost/ticket/10418
|
||||||
|
// https://svn.boost.org/trac/boost/ticket/11852
|
||||||
// Only re-enable this for nvcc if you're absolutely sure
|
// Only re-enable this for nvcc if you're absolutely sure
|
||||||
// of the circumstances under which it's supported.
|
// of the circumstances under which it's supported.
|
||||||
// Similarly __SIZEOF_INT128__ is defined when targetting msvc
|
// Similarly __SIZEOF_INT128__ is defined when targetting msvc
|
||||||
// compatibility even though the required support functions are absent.
|
// compatibility even though the required support functions are absent.
|
||||||
//
|
//
|
||||||
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) && !defined(_MSC_VER)
|
#if defined(__CUDACC__)
|
||||||
|
# if defined(BOOST_GCC_CXX11)
|
||||||
|
# define BOOST_NVCC_CXX11
|
||||||
|
# else
|
||||||
|
# define BOOST_NVCC_CXX03
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03) && !defined(_MSC_VER)
|
||||||
# define BOOST_HAS_INT128
|
# define BOOST_HAS_INT128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -98,11 +118,16 @@
|
||||||
//
|
//
|
||||||
// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
|
// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
|
||||||
//
|
//
|
||||||
#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
|
#if (defined(_MSC_VER) && (_MSC_VER < 1900)) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
|
||||||
# define BOOST_NO_CXX11_CHAR16_T
|
# define BOOST_NO_CXX11_CHAR16_T
|
||||||
# define BOOST_NO_CXX11_CHAR32_T
|
# define BOOST_NO_CXX11_CHAR32_T
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1800) && !defined(__GNUC__)
|
||||||
|
#define BOOST_HAS_EXPM1
|
||||||
|
#define BOOST_HAS_LOG1P
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !__has_feature(cxx_constexpr)
|
#if !__has_feature(cxx_constexpr)
|
||||||
# define BOOST_NO_CXX11_CONSTEXPR
|
# define BOOST_NO_CXX11_CONSTEXPR
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -122,6 +122,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
// Comeau C++ compiler setup:
|
// Comeau C++ compiler setup:
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
#if (__COMO_VERSION__ <= 4245)
|
#if (__COMO_VERSION__ <= 4245)
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER)
|
#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER)
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
//
|
//
|
||||||
// versions check:
|
// versions check:
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
# error "Unsupported Cray compiler, please try running the configure script."
|
# error "Unsupported Cray compiler, please try running the configure script."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -60,6 +60,7 @@
|
||||||
#define BOOST_NO_CXX11_CHAR16_T
|
#define BOOST_NO_CXX11_CHAR16_T
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
|
|
||||||
//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
|
//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
22
lib/3rdParty/boost/boost/config/compiler/gcc.hpp
vendored
22
lib/3rdParty/boost/boost/config/compiler/gcc.hpp
vendored
|
@ -133,14 +133,23 @@
|
||||||
//
|
//
|
||||||
// Recent GCC versions have __int128 when in 64-bit mode.
|
// Recent GCC versions have __int128 when in 64-bit mode.
|
||||||
//
|
//
|
||||||
// We disable this if the compiler is really nvcc as it
|
// We disable this if the compiler is really nvcc with C++03 as it
|
||||||
// doesn't actually support __int128 as of CUDA_VERSION=5000
|
// doesn't actually support __int128 as of CUDA_VERSION=7500
|
||||||
// even though it defines __SIZEOF_INT128__.
|
// even though it defines __SIZEOF_INT128__.
|
||||||
// See https://svn.boost.org/trac/boost/ticket/8048
|
// See https://svn.boost.org/trac/boost/ticket/8048
|
||||||
|
// https://svn.boost.org/trac/boost/ticket/11852
|
||||||
// Only re-enable this for nvcc if you're absolutely sure
|
// Only re-enable this for nvcc if you're absolutely sure
|
||||||
// of the circumstances under which it's supported:
|
// of the circumstances under which it's supported:
|
||||||
//
|
//
|
||||||
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
|
#if defined(__CUDACC__)
|
||||||
|
# if defined(BOOST_GCC_CXX11)
|
||||||
|
# define BOOST_NVCC_CXX11
|
||||||
|
# else
|
||||||
|
# define BOOST_NVCC_CXX03
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03)
|
||||||
# define BOOST_HAS_INT128
|
# define BOOST_HAS_INT128
|
||||||
#endif
|
#endif
|
||||||
//
|
//
|
||||||
|
@ -148,12 +157,16 @@
|
||||||
// include a std lib header to detect this - not ideal, but we'll
|
// include a std lib header to detect this - not ideal, but we'll
|
||||||
// be including <cstddef> later anyway when we select the std lib.
|
// be including <cstddef> later anyway when we select the std lib.
|
||||||
//
|
//
|
||||||
|
// Nevertheless, as of CUDA 7.5, using __float128 with the host
|
||||||
|
// compiler in pre-C++11 mode is still not supported.
|
||||||
|
// See https://svn.boost.org/trac/boost/ticket/11852
|
||||||
|
//
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#else
|
#else
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__)
|
#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) && !defined(BOOST_NVCC_CXX03)
|
||||||
# define BOOST_HAS_FLOAT128
|
# define BOOST_HAS_FLOAT128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -239,6 +252,7 @@
|
||||||
//
|
//
|
||||||
#if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11)
|
#if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11)
|
||||||
# define BOOST_NO_CXX11_ALIGNAS
|
# define BOOST_NO_CXX11_ALIGNAS
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// C++0x features in 4.8.1 and later
|
// C++0x features in 4.8.1 and later
|
||||||
|
|
|
@ -59,7 +59,8 @@
|
||||||
# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
|
# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
|
||||||
# define BOOST_NO_CXX11_INLINE_NAMESPACES
|
# define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
# define BOOST_NO_CXX11_REF_QUALIFIERS
|
# define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
# define BOOST_NO_CXX11_FINAL
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs)
|
#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs)
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
//
|
//
|
||||||
// versions check:
|
// versions check:
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// HP aCC C++ compiler setup:
|
// HP aCC C++ compiler setup:
|
||||||
|
|
||||||
#if defined(__EDG__)
|
#if defined(__EDG__)
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (__HP_aCC <= 33100)
|
#if (__HP_aCC <= 33100)
|
||||||
|
@ -123,6 +123,7 @@
|
||||||
#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
|
#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
|
See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
|
||||||
|
|
|
@ -35,6 +35,10 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (__INTEL_COMPILER <= 1600) && !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
|
||||||
|
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <boost/config/compiler/gcc.hpp>
|
#include <boost/config/compiler/gcc.hpp>
|
||||||
|
@ -90,7 +94,7 @@
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
#if defined(__INTEL_COMPILER)
|
#if defined(__INTEL_COMPILER)
|
||||||
#if __INTEL_COMPILER == 9999
|
#if __INTEL_COMPILER == 9999
|
||||||
|
@ -496,6 +500,11 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
|
||||||
# define BOOST_NO_CXX11_HDR_TUPLE
|
# define BOOST_NO_CXX11_HDR_TUPLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Broken in all versions up to 17:
|
||||||
|
#if !defined(BOOST_NO_CXX14_CONSTEXPR)
|
||||||
|
#define BOOST_NO_CXX14_CONSTEXPR
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (BOOST_INTEL_CXX_VERSION < 1200)
|
#if (BOOST_INTEL_CXX_VERSION < 1200)
|
||||||
//
|
//
|
||||||
// fenv.h appears not to work with Intel prior to 12.0:
|
// fenv.h appears not to work with Intel prior to 12.0:
|
||||||
|
@ -514,7 +523,15 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
|
||||||
# define BOOST_HAS_STDINT_H
|
# define BOOST_HAS_STDINT_H
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(__CUDACC__)
|
#if defined(__CUDACC__)
|
||||||
|
# if defined(BOOST_GCC_CXX11)
|
||||||
|
# define BOOST_NVCC_CXX11
|
||||||
|
# else
|
||||||
|
# define BOOST_NVCC_CXX03
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(BOOST_NVCC_CXX03)
|
||||||
# define BOOST_HAS_INT128
|
# define BOOST_HAS_INT128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
// Kai C++ compiler setup:
|
// Kai C++ compiler setup:
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG)
|
# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG)
|
||||||
// at least on Sun, the contents of <cwchar> is not in namespace std
|
// at least on Sun, the contents of <cwchar> is not in namespace std
|
||||||
|
|
|
@ -125,6 +125,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -14,3 +14,19 @@
|
||||||
// NVIDIA Specific support
|
// NVIDIA Specific support
|
||||||
// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
|
// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
|
||||||
#define BOOST_GPU_ENABLED __host__ __device__
|
#define BOOST_GPU_ENABLED __host__ __device__
|
||||||
|
|
||||||
|
// A bug in version 7.0 of CUDA prevents use of variadic templates in some occasions
|
||||||
|
// https://svn.boost.org/trac/boost/ticket/11897
|
||||||
|
// This is fixed in 7.5. As the following version macro was introduced in 7.5 an existance
|
||||||
|
// check is enough to detect versions < 7.5
|
||||||
|
#if !defined(__CUDACC_VER__) || (__CUDACC_VER__ < 70500)
|
||||||
|
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||||
|
#endif
|
||||||
|
// The same bug is back again in 8.0:
|
||||||
|
#if (__CUDACC_VER__ > 80000) && (__CUDACC_VER__ < 80100)
|
||||||
|
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
|
||||||
|
#endif
|
||||||
|
// Most recent CUDA (8.0) has no constexpr support in msvc mode:
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# define BOOST_NO_CXX11_CONSTEXPR
|
||||||
|
#endif
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
# define BOOST_NO_CXX11_INLINE_NAMESPACES
|
# define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
# define BOOST_NO_CXX11_REF_QUALIFIERS
|
# define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
# define BOOST_NO_CXX11_FINAL
|
# define BOOST_NO_CXX11_FINAL
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -120,6 +120,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION)
|
#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION)
|
||||||
|
|
||||||
#include "boost/config/compiler/common_edg.hpp"
|
#include <boost/config/compiler/common_edg.hpp>
|
||||||
|
|
||||||
//
|
//
|
||||||
// Threading support:
|
// Threading support:
|
||||||
|
|
|
@ -132,6 +132,7 @@
|
||||||
#define BOOST_NO_CXX11_DECLTYPE_N3276
|
#define BOOST_NO_CXX11_DECLTYPE_N3276
|
||||||
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
||||||
|
@ -151,7 +152,7 @@
|
||||||
#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
|
#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
|
||||||
# define BOOST_NO_CXX14_CONSTEXPR
|
# define BOOST_NO_CXX14_CONSTEXPR
|
||||||
#endif
|
#endif
|
||||||
#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
|
#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304) || (__cplusplus < 201402L)
|
||||||
# define BOOST_NO_CXX14_DECLTYPE_AUTO
|
# define BOOST_NO_CXX14_DECLTYPE_AUTO
|
||||||
#endif
|
#endif
|
||||||
#if (__cplusplus < 201304) // There's no SD6 check for this....
|
#if (__cplusplus < 201304) // There's no SD6 check for this....
|
||||||
|
@ -169,6 +170,13 @@
|
||||||
#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
|
#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
|
||||||
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Turn on threading support for Solaris 12.
|
||||||
|
// Ticket #11972
|
||||||
|
#if (__SUNPRO_CC >= 0x5140) && defined(__SunOS_5_12) && !defined(BOOST_HAS_THREADS)
|
||||||
|
# define BOOST_HAS_THREADS
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Version
|
// Version
|
||||||
//
|
//
|
||||||
|
|
|
@ -131,6 +131,7 @@
|
||||||
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
#define BOOST_NO_CXX11_INLINE_NAMESPACES
|
||||||
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
#define BOOST_NO_CXX11_REF_QUALIFIERS
|
||||||
#define BOOST_NO_CXX11_FINAL
|
#define BOOST_NO_CXX11_FINAL
|
||||||
|
#define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
|
||||||
// C++ 14:
|
// C++ 14:
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
||||||
|
|
|
@ -158,6 +158,11 @@
|
||||||
# define BOOST_NO_CXX11_DECLTYPE_N3276
|
# define BOOST_NO_CXX11_DECLTYPE_N3276
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if _MSC_FULL_VER >= 180020827
|
||||||
|
#define BOOST_HAS_EXPM1
|
||||||
|
#define BOOST_HAS_LOG1P
|
||||||
|
#endif
|
||||||
|
|
||||||
// C++11 features supported by VC++ 14 (aka 2015)
|
// C++11 features supported by VC++ 14 (aka 2015)
|
||||||
//
|
//
|
||||||
#if (_MSC_FULL_VER < 190023026)
|
#if (_MSC_FULL_VER < 190023026)
|
||||||
|
@ -175,6 +180,21 @@
|
||||||
# define BOOST_NO_CXX14_BINARY_LITERALS
|
# define BOOST_NO_CXX14_BINARY_LITERALS
|
||||||
# define BOOST_NO_CXX14_GENERIC_LAMBDAS
|
# define BOOST_NO_CXX14_GENERIC_LAMBDAS
|
||||||
# define BOOST_NO_CXX14_DIGIT_SEPARATORS
|
# define BOOST_NO_CXX14_DIGIT_SEPARATORS
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
#endif
|
||||||
|
// C++11 features supported by VC++ 14 update 3 (aka 2015)
|
||||||
|
//
|
||||||
|
#if (_MSC_FULL_VER < 190024210)
|
||||||
|
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
||||||
|
# define BOOST_NO_SFINAE_EXPR
|
||||||
|
# define BOOST_NO_CXX11_CONSTEXPR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// C++14 features supported by VC++ 15 Preview 5
|
||||||
|
//
|
||||||
|
#if (_MSC_VER < 1910)
|
||||||
|
# define BOOST_NO_CXX14_AGGREGATE_NSDMI
|
||||||
|
# define BOOST_NO_CXX14_CONSTEXPR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// MSVC including version 14 has not yet completely
|
// MSVC including version 14 has not yet completely
|
||||||
|
@ -193,25 +213,10 @@
|
||||||
// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
|
// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
|
||||||
// (Niels Dekker, LKEB, May 2010)
|
// (Niels Dekker, LKEB, May 2010)
|
||||||
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
|
||||||
// C++11 features not supported by any versions
|
//
|
||||||
#define BOOST_NO_SFINAE_EXPR
|
// C++ 11:
|
||||||
|
//
|
||||||
#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
|
#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
|
||||||
//
|
|
||||||
// This is somewhat supported in VC14, but we may need to wait for
|
|
||||||
// a service release before enabling:
|
|
||||||
//
|
|
||||||
#define BOOST_NO_CXX11_CONSTEXPR
|
|
||||||
|
|
||||||
// C++ 14:
|
|
||||||
#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
|
|
||||||
# define BOOST_NO_CXX14_AGGREGATE_NSDMI
|
|
||||||
#endif
|
|
||||||
#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
|
|
||||||
# define BOOST_NO_CXX14_CONSTEXPR
|
|
||||||
#endif
|
|
||||||
#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
|
|
||||||
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// prefix and suffix headers:
|
// prefix and suffix headers:
|
||||||
|
@ -288,8 +293,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// last known and checked version is 19.00.23026 (VC++ 2015 RTM):
|
// last known and checked version is 19.10.24629 (VC++ 2017 RC):
|
||||||
#if (_MSC_VER > 1900)
|
#if (_MSC_VER > 1910)
|
||||||
# if defined(BOOST_ASSERT_CONFIG)
|
# if defined(BOOST_ASSERT_CONFIG)
|
||||||
# error "Unknown compiler version - please run the configure tests and report the results"
|
# error "Unknown compiler version - please run the configure tests and report the results"
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -238,6 +238,10 @@
|
||||||
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
# define BOOST_NO_CXX14_VARIABLE_TEMPLATES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !__has_feature(cxx_thread_local)
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __cplusplus < 201400
|
#if __cplusplus < 201400
|
||||||
// All versions with __cplusplus above this value seem to support this:
|
// All versions with __cplusplus above this value seem to support this:
|
||||||
# define BOOST_NO_CXX14_DIGIT_SEPARATORS
|
# define BOOST_NO_CXX14_DIGIT_SEPARATORS
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
// boilerplate code:
|
// boilerplate code:
|
||||||
#define BOOST_HAS_UNISTD_H
|
#define BOOST_HAS_UNISTD_H
|
||||||
#include <boost/config/posix_features.hpp>
|
#include <boost/config/posix_features.hpp>
|
||||||
#ifdef __USE_GNU
|
#if defined(__USE_GNU) && !defined(__ANDROID__) && !defined(ANDROID)
|
||||||
#define BOOST_HAS_PTHREAD_YIELD
|
#define BOOST_HAS_PTHREAD_YIELD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -122,27 +122,27 @@
|
||||||
//
|
//
|
||||||
// This section allows dependency scanners to find all the headers we *might* include:
|
// This section allows dependency scanners to find all the headers we *might* include:
|
||||||
//
|
//
|
||||||
#include "boost/config/compiler/gcc_xml.hpp"
|
#include <boost/config/compiler/gcc_xml.hpp>
|
||||||
#include "boost/config/compiler/cray.hpp"
|
#include <boost/config/compiler/cray.hpp>
|
||||||
#include "boost/config/compiler/comeau.hpp"
|
#include <boost/config/compiler/comeau.hpp>
|
||||||
#include "boost/config/compiler/pathscale.hpp"
|
#include <boost/config/compiler/pathscale.hpp>
|
||||||
#include "boost/config/compiler/intel.hpp"
|
#include <boost/config/compiler/intel.hpp>
|
||||||
#include "boost/config/compiler/clang.hpp"
|
#include <boost/config/compiler/clang.hpp>
|
||||||
#include "boost/config/compiler/digitalmars.hpp"
|
#include <boost/config/compiler/digitalmars.hpp>
|
||||||
#include "boost/config/compiler/gcc.hpp"
|
#include <boost/config/compiler/gcc.hpp>
|
||||||
#include "boost/config/compiler/kai.hpp"
|
#include <boost/config/compiler/kai.hpp>
|
||||||
#include "boost/config/compiler/sgi_mipspro.hpp"
|
#include <boost/config/compiler/sgi_mipspro.hpp>
|
||||||
#include "boost/config/compiler/compaq_cxx.hpp"
|
#include <boost/config/compiler/compaq_cxx.hpp>
|
||||||
#include "boost/config/compiler/greenhills.hpp"
|
#include <boost/config/compiler/greenhills.hpp>
|
||||||
#include "boost/config/compiler/codegear.hpp"
|
#include <boost/config/compiler/codegear.hpp>
|
||||||
#include "boost/config/compiler/borland.hpp"
|
#include <boost/config/compiler/borland.hpp>
|
||||||
#include "boost/config/compiler/metrowerks.hpp"
|
#include <boost/config/compiler/metrowerks.hpp>
|
||||||
#include "boost/config/compiler/sunpro_cc.hpp"
|
#include <boost/config/compiler/sunpro_cc.hpp>
|
||||||
#include "boost/config/compiler/hp_acc.hpp"
|
#include <boost/config/compiler/hp_acc.hpp>
|
||||||
#include "boost/config/compiler/mpw.hpp"
|
#include <boost/config/compiler/mpw.hpp>
|
||||||
#include "boost/config/compiler/vacpp.hpp"
|
#include <boost/config/compiler/vacpp.hpp>
|
||||||
#include "boost/config/compiler/pgi.hpp"
|
#include <boost/config/compiler/pgi.hpp>
|
||||||
#include "boost/config/compiler/visualc.hpp"
|
#include <boost/config/compiler/visualc.hpp>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -150,13 +150,24 @@
|
||||||
#if defined(__has_include)
|
#if defined(__has_include)
|
||||||
#if !__has_include(<shared_mutex>)
|
#if !__has_include(<shared_mutex>)
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#elif __cplusplus < 201402
|
#elif (__cplusplus < 201402) && !defined(_MSC_VER)
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
#elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)
|
#elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(BOOST_INTEL) && (BOOST_INTEL <= 1400)
|
#if defined(BOOST_INTEL) && (BOOST_INTEL <= 1400)
|
||||||
// Intel's compiler can't handle this header yet:
|
// Intel's compiler can't handle this header yet:
|
||||||
# define BOOST_NO_CXX11_HDR_ATOMIC
|
# define BOOST_NO_CXX11_HDR_ATOMIC
|
||||||
|
|
|
@ -72,6 +72,13 @@
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
//
|
//
|
||||||
// Intrinsic type_traits support.
|
// Intrinsic type_traits support.
|
||||||
// The SGI STL has it's own __type_traits class, which
|
// The SGI STL has it's own __type_traits class, which
|
||||||
|
|
|
@ -32,10 +32,14 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __cplusplus < 201103
|
#if __cplusplus < 201103
|
||||||
# define BOOST_NO_CXX11_HDR_ARRAY
|
//
|
||||||
|
// These two appear to be somewhat useable in C++03 mode, there may be others...
|
||||||
|
//
|
||||||
|
//# define BOOST_NO_CXX11_HDR_ARRAY
|
||||||
|
//# define BOOST_NO_CXX11_HDR_FORWARD_LIST
|
||||||
|
|
||||||
# define BOOST_NO_CXX11_HDR_CODECVT
|
# define BOOST_NO_CXX11_HDR_CODECVT
|
||||||
# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
|
# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
|
||||||
# define BOOST_NO_CXX11_HDR_FORWARD_LIST
|
|
||||||
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
|
# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
|
||||||
# define BOOST_NO_CXX11_HDR_MUTEX
|
# define BOOST_NO_CXX11_HDR_MUTEX
|
||||||
# define BOOST_NO_CXX11_HDR_RANDOM
|
# define BOOST_NO_CXX11_HDR_RANDOM
|
||||||
|
@ -53,19 +57,48 @@
|
||||||
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
|
# define BOOST_NO_CXX11_HDR_FUNCTIONAL
|
||||||
# define BOOST_NO_CXX11_STD_ALIGN
|
# define BOOST_NO_CXX11_STD_ALIGN
|
||||||
# define BOOST_NO_CXX11_ADDRESSOF
|
# define BOOST_NO_CXX11_ADDRESSOF
|
||||||
#endif
|
# define BOOST_NO_CXX11_HDR_ATOMIC
|
||||||
|
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
|
||||||
|
# define BOOST_NO_CXX11_HDR_CHRONO
|
||||||
|
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
|
||||||
|
# define BOOST_NO_CXX11_HDR_FUTURE
|
||||||
|
#elif _LIBCPP_VERSION < 3700
|
||||||
//
|
//
|
||||||
// These appear to be unusable/incomplete so far:
|
// These appear to be unusable/incomplete so far:
|
||||||
//
|
//
|
||||||
# define BOOST_NO_CXX11_HDR_CHRONO
|
|
||||||
# define BOOST_NO_CXX11_HDR_FUTURE
|
|
||||||
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
|
|
||||||
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
|
|
||||||
# define BOOST_NO_CXX11_HDR_ATOMIC
|
# define BOOST_NO_CXX11_HDR_ATOMIC
|
||||||
|
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
|
||||||
|
# define BOOST_NO_CXX11_HDR_CHRONO
|
||||||
|
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
|
||||||
|
# define BOOST_NO_CXX11_HDR_FUTURE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if _LIBCPP_VERSION < 3700
|
||||||
// libc++ uses a non-standard messages_base
|
// libc++ uses a non-standard messages_base
|
||||||
#define BOOST_NO_STD_MESSAGES
|
#define BOOST_NO_STD_MESSAGES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
#if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L)
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
#if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L)
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
#endif
|
||||||
|
#if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L)
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (_LIBCPP_VERSION <= 1101) && !defined(BOOST_NO_CXX11_THREAD_LOCAL)
|
||||||
|
// This is a bit of a sledgehammer, because really it's just libc++abi that has no
|
||||||
|
// support for thread_local, leading to linker errors such as
|
||||||
|
// "undefined reference to `__cxa_thread_atexit'". It is fixed in the
|
||||||
|
// most recent releases of libc++abi though...
|
||||||
|
# define BOOST_NO_CXX11_THREAD_LOCAL
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__has_include)
|
#if defined(__has_include)
|
||||||
#if !__has_include(<shared_mutex>)
|
#if !__has_include(<shared_mutex>)
|
||||||
|
|
|
@ -98,6 +98,7 @@
|
||||||
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103)
|
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103)
|
||||||
# define BOOST_LIBSTDCXX11
|
# define BOOST_LIBSTDCXX11
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Decide which version of libstdc++ we have, normally
|
// Decide which version of libstdc++ we have, normally
|
||||||
// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly
|
// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly
|
||||||
|
@ -122,7 +123,9 @@
|
||||||
//
|
//
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
|
|
||||||
#if __has_include(<experimental/any>)
|
#if __has_include(<experimental/memory_resource>)
|
||||||
|
# define BOOST_LIBSTDCXX_VERSION 60100
|
||||||
|
#elif __has_include(<experimental/any>)
|
||||||
# define BOOST_LIBSTDCXX_VERSION 50100
|
# define BOOST_LIBSTDCXX_VERSION 50100
|
||||||
#elif __has_include(<shared_mutex>)
|
#elif __has_include(<shared_mutex>)
|
||||||
# define BOOST_LIBSTDCXX_VERSION 40900
|
# define BOOST_LIBSTDCXX_VERSION 40900
|
||||||
|
@ -139,6 +142,7 @@
|
||||||
#elif __has_include(<array>)
|
#elif __has_include(<array>)
|
||||||
# define BOOST_LIBSTDCXX_VERSION 40300
|
# define BOOST_LIBSTDCXX_VERSION 40300
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// GCC 4.8 and 9 add working versions of <atomic> and <regex> respectively.
|
// GCC 4.8 and 9 add working versions of <atomic> and <regex> respectively.
|
||||||
// However, we have no test for these as the headers were present but broken
|
// However, we have no test for these as the headers were present but broken
|
||||||
|
@ -151,13 +155,29 @@
|
||||||
// Oracle Solaris compiler uses it's own verison of libstdc++ but doesn't
|
// Oracle Solaris compiler uses it's own verison of libstdc++ but doesn't
|
||||||
// set __GNUC__
|
// set __GNUC__
|
||||||
//
|
//
|
||||||
|
#if __SUNPRO_CC >= 0x5140
|
||||||
|
#define BOOST_LIBSTDCXX_VERSION 50100
|
||||||
|
#else
|
||||||
#define BOOST_LIBSTDCXX_VERSION 40800
|
#define BOOST_LIBSTDCXX_VERSION 40800
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(BOOST_LIBSTDCXX_VERSION)
|
#if !defined(BOOST_LIBSTDCXX_VERSION)
|
||||||
# define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
# define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// std::auto_ptr isn't provided with _GLIBCXX_DEPRECATED=0 (GCC 4.5 and earlier)
|
||||||
|
// or _GLIBCXX_USE_DEPRECATED=0 (GCC 4.6 and later).
|
||||||
|
#if defined(BOOST_LIBSTDCXX11)
|
||||||
|
# if BOOST_LIBSTDCXX_VERSION < 40600
|
||||||
|
# if !_GLIBCXX_DEPRECATED
|
||||||
|
# define BOOST_NO_AUTO_PTR
|
||||||
|
# endif
|
||||||
|
# elif !_GLIBCXX_USE_DEPRECATED
|
||||||
|
# define BOOST_NO_AUTO_PTR
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// C++0x headers in GCC 4.3.0 and later
|
// C++0x headers in GCC 4.3.0 and later
|
||||||
//
|
//
|
||||||
#if (BOOST_LIBSTDCXX_VERSION < 40300) || !defined(BOOST_LIBSTDCXX11)
|
#if (BOOST_LIBSTDCXX_VERSION < 40300) || !defined(BOOST_LIBSTDCXX11)
|
||||||
|
@ -220,6 +240,9 @@
|
||||||
// even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively.
|
// even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively.
|
||||||
# define BOOST_NO_CXX11_HDR_REGEX
|
# define BOOST_NO_CXX11_HDR_REGEX
|
||||||
#endif
|
#endif
|
||||||
|
#if (BOOST_LIBSTDCXX_VERSION < 40900) || (__cplusplus <= 201103)
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7)))
|
#if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7)))
|
||||||
// As of clang-3.6, libstdc++ header <atomic> throws up errors with clang:
|
// As of clang-3.6, libstdc++ header <atomic> throws up errors with clang:
|
||||||
|
@ -235,6 +258,16 @@
|
||||||
# define BOOST_NO_CXX11_STD_ALIGN
|
# define BOOST_NO_CXX11_STD_ALIGN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// C++17 features in GCC 6.1 and later
|
||||||
|
//
|
||||||
|
#if (BOOST_LIBSTDCXX_VERSION < 60100) || (__cplusplus <= 201402L)
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
#endif
|
||||||
|
#if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L)
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__has_include)
|
#if defined(__has_include)
|
||||||
#if !__has_include(<shared_mutex>)
|
#if !__has_include(<shared_mutex>)
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
|
@ -247,7 +280,7 @@
|
||||||
|
|
||||||
//
|
//
|
||||||
// Headers not present on Solaris with the Oracle compiler:
|
// Headers not present on Solaris with the Oracle compiler:
|
||||||
#if defined(__SUNPRO_CC)
|
#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5140)
|
||||||
#define BOOST_NO_CXX11_HDR_FUTURE
|
#define BOOST_NO_CXX11_HDR_FUTURE
|
||||||
#define BOOST_NO_CXX11_HDR_FORWARD_LIST
|
#define BOOST_NO_CXX11_HDR_FORWARD_LIST
|
||||||
#define BOOST_NO_CXX11_HDR_ATOMIC
|
#define BOOST_NO_CXX11_HDR_ATOMIC
|
||||||
|
|
|
@ -61,6 +61,13 @@
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
#define BOOST_STDLIB "Modena C++ standard library"
|
#define BOOST_STDLIB "Modena C++ standard library"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -85,4 +85,11 @@
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
|
#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
|
||||||
|
|
|
@ -196,3 +196,10 @@
|
||||||
#else
|
#else
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
|
@ -155,4 +155,11 @@
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
#define BOOST_STDLIB "SGI standard library"
|
#define BOOST_STDLIB "SGI standard library"
|
|
@ -245,4 +245,11 @@ namespace boost { using std::min; using std::max; }
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
|
#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
|
||||||
|
|
|
@ -61,4 +61,11 @@
|
||||||
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// C++14 features
|
||||||
|
# define BOOST_NO_CXX14_STD_EXCHANGE
|
||||||
|
|
||||||
|
// C++17 features
|
||||||
|
# define BOOST_NO_CXX17_STD_APPLY
|
||||||
|
# define BOOST_NO_CXX17_STD_INVOKE
|
||||||
|
|
||||||
#define BOOST_STDLIB "Visual Age default standard library"
|
#define BOOST_STDLIB "Visual Age default standard library"
|
||||||
|
|
16
lib/3rdParty/boost/boost/config/suffix.hpp
vendored
16
lib/3rdParty/boost/boost/config/suffix.hpp
vendored
|
@ -624,12 +624,22 @@ namespace std{ using ::type_info; }
|
||||||
# define BOOST_NORETURN __declspec(noreturn)
|
# define BOOST_NORETURN __declspec(noreturn)
|
||||||
# elif defined(__GNUC__)
|
# elif defined(__GNUC__)
|
||||||
# define BOOST_NORETURN __attribute__ ((__noreturn__))
|
# define BOOST_NORETURN __attribute__ ((__noreturn__))
|
||||||
# else
|
# elif defined(__has_attribute) && defined(__SUNPRO_CC)
|
||||||
# define BOOST_NO_NORETURN
|
# if __has_attribute(noreturn)
|
||||||
# define BOOST_NORETURN
|
# define BOOST_NORETURN [[noreturn]]
|
||||||
|
# endif
|
||||||
|
# elif defined(__has_cpp_attribute)
|
||||||
|
# if __has_cpp_attribute(noreturn)
|
||||||
|
# define BOOST_NORETURN [[noreturn]]
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_NORETURN)
|
||||||
|
# define BOOST_NO_NORETURN
|
||||||
|
# define BOOST_NORETURN
|
||||||
|
#endif
|
||||||
|
|
||||||
// Branch prediction hints
|
// Branch prediction hints
|
||||||
// These macros are intended to wrap conditional expressions that yield true or false
|
// These macros are intended to wrap conditional expressions that yield true or false
|
||||||
//
|
//
|
||||||
|
|
5
lib/3rdParty/boost/boost/core/demangle.hpp
vendored
5
lib/3rdParty/boost/boost/core/demangle.hpp
vendored
|
@ -17,7 +17,10 @@
|
||||||
# pragma once
|
# pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( __clang__ ) && defined( __has_include )
|
// __has_include is currently supported by GCC and Clang. However GCC 4.9 may have issues and
|
||||||
|
// returns 1 for 'defined( __has_include )', while '__has_include' is actually not supported:
|
||||||
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63662
|
||||||
|
#if defined( __has_include ) && (!defined( BOOST_GCC ) || (__GNUC__ + 0) >= 5)
|
||||||
# if __has_include(<cxxabi.h>)
|
# if __has_include(<cxxabi.h>)
|
||||||
# define BOOST_CORE_HAS_CXXABI_H
|
# define BOOST_CORE_HAS_CXXABI_H
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -85,6 +85,22 @@ inline void throw_failed_impl(char const * excep, char const * file, int line, c
|
||||||
++test_errors();
|
++test_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In the comparisons below, it is possible that T and U are signed and unsigned integer types, which generates warnings in some compilers.
|
||||||
|
// A cleaner fix would require common_type trait or some meta-programming, which would introduce a dependency on Boost.TypeTraits. To avoid
|
||||||
|
// the dependency we just disable the warnings.
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable: 4389)
|
||||||
|
#elif defined(__clang__) && defined(__has_warning)
|
||||||
|
# if __has_warning("-Wsign-compare")
|
||||||
|
# pragma clang diagnostic push
|
||||||
|
# pragma clang diagnostic ignored "-Wsign-compare"
|
||||||
|
# endif
|
||||||
|
#elif defined(__GNUC__) && !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
|
#endif
|
||||||
|
|
||||||
template<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,
|
template<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,
|
||||||
char const * file, int line, char const * function, T const & t, U const & u )
|
char const * file, int line, char const * function, T const & t, U const & u )
|
||||||
{
|
{
|
||||||
|
@ -119,6 +135,16 @@ template<class T, class U> inline void test_ne_impl( char const * expr1, char co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#elif defined(__clang__) && defined(__has_warning)
|
||||||
|
# if __has_warning("-Wsign-compare")
|
||||||
|
# pragma clang diagnostic pop
|
||||||
|
# endif
|
||||||
|
#elif defined(__GNUC__) && !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
|
||||||
|
# pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
inline int report_errors()
|
inline int report_errors()
|
||||||
|
@ -144,6 +170,7 @@ inline int report_errors()
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
|
#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
|
||||||
|
#define BOOST_TEST_NOT(expr) BOOST_TEST(!(expr))
|
||||||
|
|
||||||
#define BOOST_ERROR(msg) ( ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
|
#define BOOST_ERROR(msg) ( ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
|
||||||
|
|
||||||
|
|
56
lib/3rdParty/boost/boost/core/scoped_enum.hpp
vendored
56
lib/3rdParty/boost/boost/core/scoped_enum.hpp
vendored
|
@ -43,7 +43,8 @@ namespace boost
|
||||||
* @throws No-throws.
|
* @throws No-throws.
|
||||||
*/
|
*/
|
||||||
template <typename UnderlyingType, typename EnumType>
|
template <typename UnderlyingType, typename EnumType>
|
||||||
UnderlyingType underlying_cast(EnumType v)
|
inline
|
||||||
|
BOOST_CONSTEXPR UnderlyingType underlying_cast(EnumType v) BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
return v.get_underlying_value_();
|
return v.get_underlying_value_();
|
||||||
}
|
}
|
||||||
|
@ -61,7 +62,7 @@ namespace boost
|
||||||
*/
|
*/
|
||||||
template <typename EnumType>
|
template <typename EnumType>
|
||||||
inline
|
inline
|
||||||
typename EnumType::enum_type native_value(EnumType e)
|
BOOST_CONSTEXPR typename EnumType::enum_type native_value(EnumType e) BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
return e.get_native_value_();
|
return e.get_native_value_();
|
||||||
}
|
}
|
||||||
|
@ -75,14 +76,15 @@ namespace boost
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename UnderlyingType, typename EnumType>
|
template <typename UnderlyingType, typename EnumType>
|
||||||
UnderlyingType underlying_cast(EnumType v)
|
inline
|
||||||
|
BOOST_CONSTEXPR UnderlyingType underlying_cast(EnumType v) BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
return static_cast<UnderlyingType>(v);
|
return static_cast<UnderlyingType>(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename EnumType>
|
template <typename EnumType>
|
||||||
inline
|
inline
|
||||||
EnumType native_value(EnumType e)
|
BOOST_CONSTEXPR EnumType native_value(EnumType e) BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +98,7 @@ namespace boost
|
||||||
#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
||||||
|
|
||||||
#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
|
#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
|
||||||
explicit operator underlying_type() const BOOST_NOEXCEPT { return get_underlying_value_(); }
|
explicit BOOST_CONSTEXPR operator underlying_type() const BOOST_NOEXCEPT { return get_underlying_value_(); }
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -115,8 +117,8 @@ namespace boost
|
||||||
typedef void is_boost_scoped_enum_tag; \
|
typedef void is_boost_scoped_enum_tag; \
|
||||||
typedef UnderlyingType underlying_type; \
|
typedef UnderlyingType underlying_type; \
|
||||||
EnumType() BOOST_NOEXCEPT {} \
|
EnumType() BOOST_NOEXCEPT {} \
|
||||||
explicit EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {} \
|
explicit BOOST_CONSTEXPR EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {} \
|
||||||
underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; } \
|
BOOST_CONSTEXPR underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; } \
|
||||||
BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
|
BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
|
||||||
private: \
|
private: \
|
||||||
underlying_type v_; \
|
underlying_type v_; \
|
||||||
|
@ -125,30 +127,30 @@ namespace boost
|
||||||
enum enum_type
|
enum enum_type
|
||||||
|
|
||||||
#define BOOST_SCOPED_ENUM_DECLARE_END2() \
|
#define BOOST_SCOPED_ENUM_DECLARE_END2() \
|
||||||
enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \
|
BOOST_CONSTEXPR enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \
|
||||||
friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \
|
||||||
friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \
|
friend BOOST_CONSTEXPR bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \
|
||||||
friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \
|
||||||
friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \
|
||||||
friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \
|
friend BOOST_CONSTEXPR bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \
|
||||||
friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \
|
||||||
friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \
|
||||||
friend bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \
|
friend BOOST_CONSTEXPR bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \
|
||||||
friend bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \
|
||||||
friend bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \
|
||||||
friend bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \
|
friend BOOST_CONSTEXPR bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \
|
||||||
friend bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \
|
||||||
friend bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \
|
||||||
friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \
|
friend BOOST_CONSTEXPR bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \
|
||||||
friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \
|
||||||
friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \
|
||||||
friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \
|
friend BOOST_CONSTEXPR bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \
|
||||||
friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \
|
friend BOOST_CONSTEXPR bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \
|
#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \
|
||||||
; \
|
; \
|
||||||
EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \
|
BOOST_CONSTEXPR EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \
|
||||||
BOOST_SCOPED_ENUM_DECLARE_END2()
|
BOOST_SCOPED_ENUM_DECLARE_END2()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,7 +28,11 @@ namespace detail
|
||||||
inline void current_function_helper()
|
inline void current_function_helper()
|
||||||
{
|
{
|
||||||
|
|
||||||
#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)
|
#if defined( BOOST_DISABLE_CURRENT_FUNCTION )
|
||||||
|
|
||||||
|
# define BOOST_CURRENT_FUNCTION "(unknown)"
|
||||||
|
|
||||||
|
#elif defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)
|
||||||
|
|
||||||
# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__
|
# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__
|
||||||
|
|
||||||
|
|
13
lib/3rdParty/boost/boost/detail/iterator.hpp
vendored
13
lib/3rdParty/boost/boost/detail/iterator.hpp
vendored
|
@ -9,6 +9,9 @@
|
||||||
// This header is obsolete and will be deprecated.
|
// This header is obsolete and will be deprecated.
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
#if defined(__SUNPRO_CC) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
|
||||||
|
#include <cstddef>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost
|
namespace boost
|
||||||
{
|
{
|
||||||
|
@ -19,6 +22,16 @@ namespace detail
|
||||||
using std::iterator_traits;
|
using std::iterator_traits;
|
||||||
using std::distance;
|
using std::distance;
|
||||||
|
|
||||||
|
#if defined(__SUNPRO_CC) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
|
||||||
|
// std::distance from stlport with Oracle compiler 12.4 and 12.5 fails to deduce template parameters
|
||||||
|
// when one of the arguments is an array and the other one is a pointer.
|
||||||
|
template< typename T, std::size_t N >
|
||||||
|
inline typename std::iterator_traits< T* >::difference_type distance(T (&left)[N], T* right)
|
||||||
|
{
|
||||||
|
return std::distance(static_cast< T* >(left), right);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
|
@ -105,16 +105,18 @@ BOOST_UTF8_BEGIN_NAMESPACE
|
||||||
// See utf8_codecvt_facet.ipp for the implementation. //
|
// See utf8_codecvt_facet.ipp for the implementation. //
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|
||||||
|
#ifndef BOOST_UTF8_DECL
|
||||||
|
#define BOOST_UTF8_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
struct BOOST_UTF8_DECL utf8_codecvt_facet :
|
struct BOOST_SYMBOL_VISIBLE utf8_codecvt_facet :
|
||||||
public std::codecvt<wchar_t, char, std::mbstate_t>
|
public std::codecvt<wchar_t, char, std::mbstate_t>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit utf8_codecvt_facet(std::size_t no_locale_manage=0)
|
BOOST_UTF8_DECL explicit utf8_codecvt_facet(std::size_t no_locale_manage=0);
|
||||||
: std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
|
virtual ~utf8_codecvt_facet(){}
|
||||||
{}
|
|
||||||
protected:
|
protected:
|
||||||
virtual std::codecvt_base::result do_in(
|
BOOST_UTF8_DECL virtual std::codecvt_base::result do_in(
|
||||||
std::mbstate_t& state,
|
std::mbstate_t& state,
|
||||||
const char * from,
|
const char * from,
|
||||||
const char * from_end,
|
const char * from_end,
|
||||||
|
@ -124,7 +126,7 @@ protected:
|
||||||
wchar_t*& to_next
|
wchar_t*& to_next
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
virtual std::codecvt_base::result do_out(
|
BOOST_UTF8_DECL virtual std::codecvt_base::result do_out(
|
||||||
std::mbstate_t & state,
|
std::mbstate_t & state,
|
||||||
const wchar_t * from,
|
const wchar_t * from,
|
||||||
const wchar_t * from_end,
|
const wchar_t * from_end,
|
||||||
|
@ -148,11 +150,11 @@ protected:
|
||||||
return get_octet_count(lead_octet) - 1;
|
return get_octet_count(lead_octet) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int get_octet_count(unsigned char lead_octet);
|
BOOST_UTF8_DECL static unsigned int get_octet_count(unsigned char lead_octet);
|
||||||
|
|
||||||
// How many "continuing octets" will be needed for this word
|
// How many "continuing octets" will be needed for this word
|
||||||
// == total octets - 1.
|
// == total octets - 1.
|
||||||
int get_cont_octet_out_count(wchar_t word) const ;
|
BOOST_UTF8_DECL int get_cont_octet_out_count(wchar_t word) const ;
|
||||||
|
|
||||||
virtual bool do_always_noconv() const BOOST_NOEXCEPT_OR_NOTHROW {
|
virtual bool do_always_noconv() const BOOST_NOEXCEPT_OR_NOTHROW {
|
||||||
return false;
|
return false;
|
||||||
|
@ -176,7 +178,7 @@ protected:
|
||||||
|
|
||||||
// How many char objects can I process to get <= max_limit
|
// How many char objects can I process to get <= max_limit
|
||||||
// wchar_t objects?
|
// wchar_t objects?
|
||||||
virtual int do_length(
|
BOOST_UTF8_DECL virtual int do_length(
|
||||||
const std::mbstate_t &,
|
const std::mbstate_t &,
|
||||||
const char * from,
|
const char * from,
|
||||||
const char * from_end,
|
const char * from_end,
|
||||||
|
|
|
@ -30,8 +30,14 @@ BOOST_UTF8_BEGIN_NAMESPACE
|
||||||
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
||||||
// implementation for wchar_t
|
// implementation for wchar_t
|
||||||
|
|
||||||
|
BOOST_UTF8_DECL utf8_codecvt_facet::utf8_codecvt_facet(
|
||||||
|
std::size_t no_locale_manage
|
||||||
|
) :
|
||||||
|
std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
|
||||||
|
{}
|
||||||
|
|
||||||
// Translate incoming UTF-8 into UCS-4
|
// Translate incoming UTF-8 into UCS-4
|
||||||
std::codecvt_base::result utf8_codecvt_facet::do_in(
|
BOOST_UTF8_DECL std::codecvt_base::result utf8_codecvt_facet::do_in(
|
||||||
std::mbstate_t& /*state*/,
|
std::mbstate_t& /*state*/,
|
||||||
const char * from,
|
const char * from,
|
||||||
const char * from_end,
|
const char * from_end,
|
||||||
|
@ -108,7 +114,7 @@ std::codecvt_base::result utf8_codecvt_facet::do_in(
|
||||||
else return std::codecvt_base::partial;
|
else return std::codecvt_base::partial;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::codecvt_base::result utf8_codecvt_facet::do_out(
|
BOOST_UTF8_DECL std::codecvt_base::result utf8_codecvt_facet::do_out(
|
||||||
std::mbstate_t& /*state*/,
|
std::mbstate_t& /*state*/,
|
||||||
const wchar_t * from,
|
const wchar_t * from,
|
||||||
const wchar_t * from_end,
|
const wchar_t * from_end,
|
||||||
|
@ -170,7 +176,7 @@ std::codecvt_base::result utf8_codecvt_facet::do_out(
|
||||||
|
|
||||||
// How many char objects can I process to get <= max_limit
|
// How many char objects can I process to get <= max_limit
|
||||||
// wchar_t objects?
|
// wchar_t objects?
|
||||||
int utf8_codecvt_facet::do_length(
|
BOOST_UTF8_DECL int utf8_codecvt_facet::do_length(
|
||||||
const std::mbstate_t &,
|
const std::mbstate_t &,
|
||||||
const char * from,
|
const char * from,
|
||||||
const char * from_end,
|
const char * from_end,
|
||||||
|
@ -198,10 +204,10 @@ int utf8_codecvt_facet::do_length(
|
||||||
last_octet_count = (get_octet_count(*from_next));
|
last_octet_count = (get_octet_count(*from_next));
|
||||||
++char_count;
|
++char_count;
|
||||||
}
|
}
|
||||||
return static_cast<int>(from_next-from_end);
|
return static_cast<int>(from_next-from);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int utf8_codecvt_facet::get_octet_count(
|
BOOST_UTF8_DECL unsigned int utf8_codecvt_facet::get_octet_count(
|
||||||
unsigned char lead_octet
|
unsigned char lead_octet
|
||||||
){
|
){
|
||||||
// if the 0-bit (MSB) is 0, then 1 character
|
// if the 0-bit (MSB) is 0, then 1 character
|
||||||
|
@ -273,7 +279,7 @@ int get_cont_octet_out_count_impl<4>(wchar_t word){
|
||||||
|
|
||||||
// How many "continuing octets" will be needed for this word
|
// How many "continuing octets" will be needed for this word
|
||||||
// == total octets - 1.
|
// == total octets - 1.
|
||||||
int utf8_codecvt_facet::get_cont_octet_out_count(
|
BOOST_UTF8_DECL int utf8_codecvt_facet::get_cont_octet_out_count(
|
||||||
wchar_t word
|
wchar_t word
|
||||||
) const {
|
) const {
|
||||||
return detail::get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);
|
return detail::get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);
|
||||||
|
|
|
@ -10,25 +10,16 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
#ifndef BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
||||||
#define BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
#define BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/get_current_process.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Windows CE define GetCurrentProcess as an inline function in kfuncs.h
|
#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403)
|
||||||
#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )
|
#pragma message "This header is deprecated, use boost/detail/winapi/get_current_process.hpp instead."
|
||||||
extern "C" {
|
#elif defined(_MSC_VER)
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentProcess(BOOST_DETAIL_WINAPI_VOID);
|
#pragma message("This header is deprecated, use boost/detail/winapi/get_current_process.hpp instead.")
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace detail {
|
|
||||||
namespace winapi {
|
|
||||||
using ::GetCurrentProcess;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
#endif // BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP
|
||||||
|
|
|
@ -10,25 +10,16 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
#ifndef BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
||||||
#define BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
#define BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/get_current_thread.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Windows CE define GetCurrentThread as an inline function in kfuncs.h
|
#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403)
|
||||||
#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE )
|
#pragma message "This header is deprecated, use boost/detail/winapi/get_current_thread.hpp instead."
|
||||||
extern "C" {
|
#elif defined(_MSC_VER)
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentThread(BOOST_DETAIL_WINAPI_VOID);
|
#pragma message("This header is deprecated, use boost/detail/winapi/get_current_thread.hpp instead.")
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace detail {
|
|
||||||
namespace winapi {
|
|
||||||
using ::GetCurrentThread;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
#endif // BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP
|
||||||
|
|
|
@ -10,24 +10,16 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
#ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
||||||
#define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
#define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/get_last_error.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined( BOOST_USE_WINDOWS_H )
|
#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403)
|
||||||
extern "C" {
|
#pragma message "This header is deprecated, use boost/detail/winapi/get_last_error.hpp instead."
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetLastError(BOOST_DETAIL_WINAPI_VOID);
|
#elif defined(_MSC_VER)
|
||||||
}
|
#pragma message("This header is deprecated, use boost/detail/winapi/get_last_error.hpp instead.")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace detail {
|
|
||||||
namespace winapi {
|
|
||||||
using ::GetLastError;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
#endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
|
||||||
|
|
|
@ -9,52 +9,16 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
#ifndef BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
||||||
#define BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
#define BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/config.hpp>
|
#include <boost/detail/winapi/get_process_times.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Windows CE does not define GetProcessTimes
|
#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403)
|
||||||
#if !defined( UNDER_CE )
|
#pragma message "This header is deprecated, use boost/detail/winapi/get_process_times.hpp instead."
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#pragma message("This header is deprecated, use boost/detail/winapi/get_process_times.hpp instead.")
|
||||||
#include <boost/detail/winapi/time.hpp>
|
|
||||||
|
|
||||||
#if !defined( BOOST_USE_WINDOWS_H )
|
|
||||||
extern "C" {
|
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
|
|
||||||
GetProcessTimes(
|
|
||||||
boost::detail::winapi::HANDLE_ hProcess,
|
|
||||||
::_FILETIME* lpCreationTime,
|
|
||||||
::_FILETIME* lpExitTime,
|
|
||||||
::_FILETIME* lpKernelTime,
|
|
||||||
::_FILETIME* lpUserTime);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace detail {
|
|
||||||
namespace winapi {
|
|
||||||
|
|
||||||
BOOST_FORCEINLINE BOOL_ GetProcessTimes(
|
|
||||||
HANDLE_ hProcess,
|
|
||||||
LPFILETIME_ lpCreationTime,
|
|
||||||
LPFILETIME_ lpExitTime,
|
|
||||||
LPFILETIME_ lpKernelTime,
|
|
||||||
LPFILETIME_ lpUserTime)
|
|
||||||
{
|
|
||||||
return ::GetProcessTimes(
|
|
||||||
hProcess,
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpCreationTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpExitTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpKernelTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpUserTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // !defined( UNDER_CE )
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
#endif // BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP
|
||||||
|
|
|
@ -10,46 +10,16 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
#ifndef BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
||||||
#define BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
#define BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/get_thread_times.hpp>
|
||||||
#include <boost/detail/winapi/time.hpp>
|
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined( BOOST_USE_WINDOWS_H )
|
#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403)
|
||||||
extern "C" {
|
#pragma message "This header is deprecated, use boost/detail/winapi/get_thread_times.hpp instead."
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
|
#elif defined(_MSC_VER)
|
||||||
GetThreadTimes(
|
#pragma message("This header is deprecated, use boost/detail/winapi/get_thread_times.hpp instead.")
|
||||||
boost::detail::winapi::HANDLE_ hThread,
|
|
||||||
::_FILETIME* lpCreationTime,
|
|
||||||
::_FILETIME* lpExitTime,
|
|
||||||
::_FILETIME* lpKernelTime,
|
|
||||||
::_FILETIME* lpUserTime);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace detail {
|
|
||||||
namespace winapi {
|
|
||||||
|
|
||||||
BOOST_FORCEINLINE BOOL_ GetThreadTimes(
|
|
||||||
HANDLE_ hThread,
|
|
||||||
LPFILETIME_ lpCreationTime,
|
|
||||||
LPFILETIME_ lpExitTime,
|
|
||||||
LPFILETIME_ lpKernelTime,
|
|
||||||
LPFILETIME_ lpUserTime)
|
|
||||||
{
|
|
||||||
return ::GetThreadTimes(
|
|
||||||
hThread,
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpCreationTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpExitTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpKernelTime),
|
|
||||||
reinterpret_cast< ::_FILETIME* >(lpUserTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
#endif // BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP
|
||||||
|
|
84
lib/3rdParty/boost/boost/detail/winapi/access_rights.hpp
vendored
Normal file
84
lib/3rdParty/boost/boost/detail/winapi/access_rights.hpp
vendored
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
// access_rights.hpp --------------------------------------------------------------//
|
||||||
|
|
||||||
|
// Copyright 2016 Andrey Semashev
|
||||||
|
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BOOST_DETAIL_WINAPI_ACCESS_RIGHTS_HPP
|
||||||
|
#define BOOST_DETAIL_WINAPI_ACCESS_RIGHTS_HPP
|
||||||
|
|
||||||
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace detail {
|
||||||
|
namespace winapi {
|
||||||
|
|
||||||
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const DWORD_ DELETE_ = DELETE;
|
||||||
|
const DWORD_ READ_CONTROL_ = READ_CONTROL;
|
||||||
|
const DWORD_ WRITE_DAC_ = WRITE_DAC;
|
||||||
|
const DWORD_ WRITE_OWNER_ = WRITE_OWNER;
|
||||||
|
const DWORD_ SYNCHRONIZE_ = SYNCHRONIZE;
|
||||||
|
|
||||||
|
const DWORD_ STANDARD_RIGHTS_ALL_ = STANDARD_RIGHTS_ALL;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_EXECUTE_ = STANDARD_RIGHTS_EXECUTE;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_READ_ = STANDARD_RIGHTS_READ;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_REQUIRED_ = STANDARD_RIGHTS_REQUIRED;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_WRITE_ = STANDARD_RIGHTS_WRITE;
|
||||||
|
|
||||||
|
const DWORD_ SPECIFIC_RIGHTS_ALL_ = SPECIFIC_RIGHTS_ALL;
|
||||||
|
|
||||||
|
const DWORD_ ACCESS_SYSTEM_SECURITY_ = ACCESS_SYSTEM_SECURITY;
|
||||||
|
|
||||||
|
const DWORD_ MAXIMUM_ALLOWED_ = MAXIMUM_ALLOWED;
|
||||||
|
|
||||||
|
const DWORD_ GENERIC_ALL_ = GENERIC_ALL;
|
||||||
|
const DWORD_ GENERIC_EXECUTE_ = GENERIC_EXECUTE;
|
||||||
|
const DWORD_ GENERIC_WRITE_ = GENERIC_WRITE;
|
||||||
|
const DWORD_ GENERIC_READ_ = GENERIC_READ;
|
||||||
|
|
||||||
|
typedef ::ACCESS_MASK ACCESS_MASK_;
|
||||||
|
typedef ::PACCESS_MASK PACCESS_MASK_;
|
||||||
|
|
||||||
|
#else // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const DWORD_ DELETE_ = 0x00010000;
|
||||||
|
const DWORD_ READ_CONTROL_ = 0x00020000;
|
||||||
|
const DWORD_ WRITE_DAC_ = 0x00040000;
|
||||||
|
const DWORD_ WRITE_OWNER_ = 0x00080000;
|
||||||
|
const DWORD_ SYNCHRONIZE_ = 0x00100000;
|
||||||
|
|
||||||
|
const DWORD_ STANDARD_RIGHTS_ALL_ = 0x001F0000;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_EXECUTE_ = READ_CONTROL_;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_READ_ = READ_CONTROL_;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_REQUIRED_ = 0x000F0000;
|
||||||
|
const DWORD_ STANDARD_RIGHTS_WRITE_ = READ_CONTROL_;
|
||||||
|
|
||||||
|
const DWORD_ SPECIFIC_RIGHTS_ALL_ = 0x0000FFFF;
|
||||||
|
|
||||||
|
const DWORD_ ACCESS_SYSTEM_SECURITY_ = 0x01000000;
|
||||||
|
|
||||||
|
const DWORD_ MAXIMUM_ALLOWED_ = 0x02000000;
|
||||||
|
|
||||||
|
const DWORD_ GENERIC_ALL_ = 0x10000000;
|
||||||
|
const DWORD_ GENERIC_EXECUTE_ = 0x20000000;
|
||||||
|
const DWORD_ GENERIC_WRITE_ = 0x40000000;
|
||||||
|
const DWORD_ GENERIC_READ_ = 0x80000000;
|
||||||
|
|
||||||
|
typedef DWORD_ ACCESS_MASK_;
|
||||||
|
typedef ACCESS_MASK_* PACCESS_MASK_;
|
||||||
|
|
||||||
|
#endif // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BOOST_DETAIL_WINAPI_ACCESS_RIGHTS_HPP
|
|
@ -98,6 +98,10 @@ typedef ::PDWORD PDWORD_;
|
||||||
typedef ::LPDWORD LPDWORD_;
|
typedef ::LPDWORD LPDWORD_;
|
||||||
typedef ::HANDLE HANDLE_;
|
typedef ::HANDLE HANDLE_;
|
||||||
typedef ::PHANDLE PHANDLE_;
|
typedef ::PHANDLE PHANDLE_;
|
||||||
|
typedef ::SHORT SHORT_;
|
||||||
|
typedef ::PSHORT PSHORT_;
|
||||||
|
typedef ::USHORT USHORT_;
|
||||||
|
typedef ::PUSHORT PUSHORT_;
|
||||||
typedef ::INT INT_;
|
typedef ::INT INT_;
|
||||||
typedef ::PINT PINT_;
|
typedef ::PINT PINT_;
|
||||||
typedef ::LPINT LPINT_;
|
typedef ::LPINT LPINT_;
|
||||||
|
@ -150,6 +154,10 @@ typedef DWORD_* LPDWORD_;
|
||||||
typedef void* HANDLE_;
|
typedef void* HANDLE_;
|
||||||
typedef void** PHANDLE_;
|
typedef void** PHANDLE_;
|
||||||
|
|
||||||
|
typedef short SHORT_;
|
||||||
|
typedef SHORT_* PSHORT_;
|
||||||
|
typedef unsigned short USHORT_;
|
||||||
|
typedef USHORT_* PUSHORT_;
|
||||||
typedef int INT_;
|
typedef int INT_;
|
||||||
typedef INT_* PINT_;
|
typedef INT_* PINT_;
|
||||||
typedef INT_* LPINT_;
|
typedef INT_* LPINT_;
|
||||||
|
|
108
lib/3rdParty/boost/boost/detail/winapi/character_code_conversion.hpp
vendored
Normal file
108
lib/3rdParty/boost/boost/detail/winapi/character_code_conversion.hpp
vendored
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
// character_code_conversion.hpp --------------------------------------------------------------//
|
||||||
|
|
||||||
|
// Copyright 2016 Andrey Semashev
|
||||||
|
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BOOST_DETAIL_WINAPI_CHARACTER_CODE_CONVERSION_HPP
|
||||||
|
#define BOOST_DETAIL_WINAPI_CHARACTER_CODE_CONVERSION_HPP
|
||||||
|
|
||||||
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( BOOST_USE_WINDOWS_H )
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT int WINAPI
|
||||||
|
MultiByteToWideChar(
|
||||||
|
boost::detail::winapi::UINT_ CodePage,
|
||||||
|
boost::detail::winapi::DWORD_ dwFlags,
|
||||||
|
boost::detail::winapi::LPCSTR_ lpMultiByteStr,
|
||||||
|
int cbMultiByte,
|
||||||
|
boost::detail::winapi::LPWSTR_ lpWideCharStr,
|
||||||
|
int cchWideChar);
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT int WINAPI
|
||||||
|
WideCharToMultiByte(
|
||||||
|
boost::detail::winapi::UINT_ CodePage,
|
||||||
|
boost::detail::winapi::DWORD_ dwFlags,
|
||||||
|
boost::detail::winapi::LPCWSTR_ lpWideCharStr,
|
||||||
|
int cchWideChar,
|
||||||
|
boost::detail::winapi::LPSTR_ lpMultiByteStr,
|
||||||
|
int cbMultiByte,
|
||||||
|
boost::detail::winapi::LPCSTR_ lpDefaultChar,
|
||||||
|
boost::detail::winapi::LPBOOL_ lpUsedDefaultChar);
|
||||||
|
|
||||||
|
} // extern "C"
|
||||||
|
#endif // #if !defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace detail {
|
||||||
|
namespace winapi {
|
||||||
|
|
||||||
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const UINT_ CP_ACP_ = CP_ACP;
|
||||||
|
const UINT_ CP_OEMCP_ = CP_OEMCP;
|
||||||
|
const UINT_ CP_MACCP_ = CP_MACCP;
|
||||||
|
const UINT_ CP_THREAD_ACP_ = CP_THREAD_ACP;
|
||||||
|
const UINT_ CP_SYMBOL_ = CP_SYMBOL;
|
||||||
|
const UINT_ CP_UTF7_ = CP_UTF7;
|
||||||
|
const UINT_ CP_UTF8_ = CP_UTF8;
|
||||||
|
|
||||||
|
const DWORD_ MB_PRECOMPOSED_ = MB_PRECOMPOSED;
|
||||||
|
const DWORD_ MB_COMPOSITE_ = MB_COMPOSITE;
|
||||||
|
const DWORD_ MB_USEGLYPHCHARS_ = MB_USEGLYPHCHARS;
|
||||||
|
const DWORD_ MB_ERR_INVALID_CHARS_ = MB_ERR_INVALID_CHARS;
|
||||||
|
|
||||||
|
const DWORD_ WC_COMPOSITECHECK_ = WC_COMPOSITECHECK;
|
||||||
|
const DWORD_ WC_DISCARDNS_ = WC_DISCARDNS;
|
||||||
|
const DWORD_ WC_SEPCHARS_ = WC_SEPCHARS;
|
||||||
|
const DWORD_ WC_DEFAULTCHAR_ = WC_DEFAULTCHAR;
|
||||||
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
|
||||||
|
const DWORD_ WC_NO_BEST_FIT_CHARS_ = WC_NO_BEST_FIT_CHARS;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const UINT_ CP_ACP_ = 0u;
|
||||||
|
const UINT_ CP_OEMCP_ = 1u;
|
||||||
|
const UINT_ CP_MACCP_ = 2u;
|
||||||
|
const UINT_ CP_THREAD_ACP_ = 3u;
|
||||||
|
const UINT_ CP_SYMBOL_ = 42u;
|
||||||
|
const UINT_ CP_UTF7_ = 65000u;
|
||||||
|
const UINT_ CP_UTF8_ = 65001u;
|
||||||
|
|
||||||
|
const DWORD_ MB_PRECOMPOSED_ = 0x00000001;
|
||||||
|
const DWORD_ MB_COMPOSITE_ = 0x00000002;
|
||||||
|
const DWORD_ MB_USEGLYPHCHARS_ = 0x00000004;
|
||||||
|
const DWORD_ MB_ERR_INVALID_CHARS_ = 0x00000008;
|
||||||
|
|
||||||
|
const DWORD_ WC_COMPOSITECHECK_ = 0x00000200;
|
||||||
|
const DWORD_ WC_DISCARDNS_ = 0x00000010;
|
||||||
|
const DWORD_ WC_SEPCHARS_ = 0x00000020;
|
||||||
|
const DWORD_ WC_DEFAULTCHAR_ = 0x00000040;
|
||||||
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN2K
|
||||||
|
const DWORD_ WC_NO_BEST_FIT_CHARS_ = 0x00000400;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
|
||||||
|
// This constant is not present in MinGW
|
||||||
|
const DWORD_ WC_ERR_INVALID_CHARS_ = 0x00000080;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using ::MultiByteToWideChar;
|
||||||
|
using ::WideCharToMultiByte;
|
||||||
|
|
||||||
|
} // namespace winapi
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_DETAIL_WINAPI_CHARACTER_CODE_CONVERSION_HPP
|
|
@ -57,6 +57,13 @@ namespace winapi {
|
||||||
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CONDITION_VARIABLE {
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CONDITION_VARIABLE {
|
||||||
PVOID_ Ptr;
|
PVOID_ Ptr;
|
||||||
} CONDITION_VARIABLE_, *PCONDITION_VARIABLE_;
|
} CONDITION_VARIABLE_, *PCONDITION_VARIABLE_;
|
||||||
|
|
||||||
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
|
#define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE_INIT CONDITION_VARIABLE_INIT
|
||||||
|
#else
|
||||||
|
#define BOOST_DETAIL_WINAPI_CONDITION_VARIABLE {0}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct _RTL_CRITICAL_SECTION;
|
struct _RTL_CRITICAL_SECTION;
|
||||||
struct _RTL_SRWLOCK;
|
struct _RTL_SRWLOCK;
|
||||||
|
|
||||||
|
|
|
@ -9,15 +9,10 @@
|
||||||
#ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
#ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
||||||
#define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
#define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
#if defined __MINGW32__
|
#if defined __MINGW32__
|
||||||
#include <_mingw.h>
|
#include <_mingw.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// BOOST_WINAPI_IS_MINGW indicates that the target Windows SDK is provided by MinGW (http://mingw.org/).
|
// BOOST_WINAPI_IS_MINGW indicates that the target Windows SDK is provided by MinGW (http://mingw.org/).
|
||||||
// BOOST_WINAPI_IS_MINGW_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org).
|
// BOOST_WINAPI_IS_MINGW_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org).
|
||||||
#if defined __MINGW32__
|
#if defined __MINGW32__
|
||||||
|
@ -51,7 +46,7 @@
|
||||||
#define BOOST_USE_WINAPI_VERSION WINVER
|
#define BOOST_USE_WINAPI_VERSION WINVER
|
||||||
#else
|
#else
|
||||||
// By default use Windows Vista API on compilers that support it and XP on the others
|
// By default use Windows Vista API on compilers that support it and XP on the others
|
||||||
#if (defined(_MSC_VER) && _MSC_VER <= 1400) || defined(BOOST_WINAPI_IS_MINGW)
|
#if (defined(_MSC_VER) && _MSC_VER < 1500) || defined(BOOST_WINAPI_IS_MINGW)
|
||||||
#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP
|
#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP
|
||||||
#else
|
#else
|
||||||
#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6
|
#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6
|
||||||
|
@ -69,4 +64,10 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
#endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
#include <boost/detail/winapi/detail/cast_ptr.hpp>
|
#include <boost/detail/winapi/detail/cast_ptr.hpp>
|
||||||
#if defined( BOOST_USE_WINDOWS_H ) && defined( BOOST_WINAPI_IS_MINGW )
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
// MinGW does not include this header as part of windows.h
|
// This header is not always included as part of windows.h
|
||||||
#include <wincrypt.h>
|
#include <wincrypt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
171
lib/3rdParty/boost/boost/detail/winapi/dbghelp.hpp
vendored
Normal file
171
lib/3rdParty/boost/boost/detail/winapi/dbghelp.hpp
vendored
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
// dbghelp.hpp --------------------------------------------------------------//
|
||||||
|
|
||||||
|
// Copyright 2015 Klemens Morgenstern
|
||||||
|
// Copyright 2016 Jorge Lodos
|
||||||
|
// Copyright 2016 Andrey Semashev
|
||||||
|
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BOOST_DETAIL_WINAPI_DBGHELP_HPP
|
||||||
|
#define BOOST_DETAIL_WINAPI_DBGHELP_HPP
|
||||||
|
|
||||||
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
|
|
||||||
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
|
#if !defined( BOOST_WINAPI_IS_MINGW )
|
||||||
|
#include <dbghelp.h>
|
||||||
|
#else
|
||||||
|
// In MinGW there is no dbghelp.h but an older imagehlp.h header defines some of the symbols from it.
|
||||||
|
// Note that the user has to link with libimagehlp.a instead of libdbghelp.a for it to work.
|
||||||
|
#include <imagehlp.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Some symbols declared below are not present in all versions of Windows SDK, MinGW and MinGW-w64.
|
||||||
|
// dbghelp.h/imagehlp.h define the API_VERSION_NUMBER macro which we use to detect its version.
|
||||||
|
// When the macro is not available we can only guess based on the compiler version or SDK type.
|
||||||
|
#if defined(API_VERSION_NUMBER)
|
||||||
|
#if API_VERSION_NUMBER >= 11
|
||||||
|
// UnDecorateSymbolNameW available since Windows SDK 6.0A and MinGW-w64 (as of 2016-02-14)
|
||||||
|
#define BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW
|
||||||
|
#endif
|
||||||
|
#elif defined(_MSC_VER) && _MSC_VER >= 1500
|
||||||
|
// Until MSVC 9.0 Windows SDK was bundled in Visual Studio and didn't have UnDecorateSymbolNameW.
|
||||||
|
// Supposedly, Windows SDK 6.0A was the first standalone one and it is used with MSVC 9.0.
|
||||||
|
#define BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW
|
||||||
|
#elif !defined(BOOST_WINAPI_IS_MINGW)
|
||||||
|
// MinGW does not provide UnDecorateSymbolNameW (as of 2016-02-14)
|
||||||
|
#define BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( BOOST_USE_WINDOWS_H )
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
struct API_VERSION;
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
|
||||||
|
UnDecorateSymbolName(
|
||||||
|
boost::detail::winapi::LPCSTR_ DecoratedName,
|
||||||
|
boost::detail::winapi::LPSTR_ UnDecoratedName,
|
||||||
|
boost::detail::winapi::DWORD_ UndecoratedLength,
|
||||||
|
boost::detail::winapi::DWORD_ Flags);
|
||||||
|
|
||||||
|
#if defined( BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW )
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
|
||||||
|
UnDecorateSymbolNameW(
|
||||||
|
boost::detail::winapi::LPCWSTR_ DecoratedName,
|
||||||
|
boost::detail::winapi::LPWSTR_ UnDecoratedName,
|
||||||
|
boost::detail::winapi::DWORD_ UndecoratedLength,
|
||||||
|
boost::detail::winapi::DWORD_ Flags);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT API_VERSION* WINAPI
|
||||||
|
ImagehlpApiVersion(BOOST_DETAIL_WINAPI_VOID);
|
||||||
|
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace detail {
|
||||||
|
namespace winapi {
|
||||||
|
|
||||||
|
#if defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const DWORD_ UNDNAME_COMPLETE_ = UNDNAME_COMPLETE;
|
||||||
|
const DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = UNDNAME_NO_LEADING_UNDERSCORES;
|
||||||
|
const DWORD_ UNDNAME_NO_MS_KEYWORDS_ = UNDNAME_NO_MS_KEYWORDS;
|
||||||
|
const DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = UNDNAME_NO_FUNCTION_RETURNS;
|
||||||
|
const DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = UNDNAME_NO_ALLOCATION_MODEL;
|
||||||
|
const DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = UNDNAME_NO_ALLOCATION_LANGUAGE;
|
||||||
|
const DWORD_ UNDNAME_NO_MS_THISTYPE_ = UNDNAME_NO_MS_THISTYPE;
|
||||||
|
const DWORD_ UNDNAME_NO_CV_THISTYPE_ = UNDNAME_NO_CV_THISTYPE;
|
||||||
|
const DWORD_ UNDNAME_NO_THISTYPE_ = UNDNAME_NO_THISTYPE;
|
||||||
|
const DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = UNDNAME_NO_ACCESS_SPECIFIERS;
|
||||||
|
const DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = UNDNAME_NO_THROW_SIGNATURES;
|
||||||
|
const DWORD_ UNDNAME_NO_MEMBER_TYPE_ = UNDNAME_NO_MEMBER_TYPE;
|
||||||
|
const DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = UNDNAME_NO_RETURN_UDT_MODEL;
|
||||||
|
const DWORD_ UNDNAME_32_BIT_DECODE_ = UNDNAME_32_BIT_DECODE;
|
||||||
|
const DWORD_ UNDNAME_NAME_ONLY_ = UNDNAME_NAME_ONLY;
|
||||||
|
const DWORD_ UNDNAME_NO_ARGUMENTS_ = UNDNAME_NO_ARGUMENTS;
|
||||||
|
const DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = UNDNAME_NO_SPECIAL_SYMS;
|
||||||
|
|
||||||
|
#else // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
const DWORD_ UNDNAME_COMPLETE_ = 0x00000000;
|
||||||
|
const DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = 0x00000001;
|
||||||
|
const DWORD_ UNDNAME_NO_MS_KEYWORDS_ = 0x00000002;
|
||||||
|
const DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = 0x00000004;
|
||||||
|
const DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = 0x00000008;
|
||||||
|
const DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = 0x00000010;
|
||||||
|
const DWORD_ UNDNAME_NO_MS_THISTYPE_ = 0x00000020;
|
||||||
|
const DWORD_ UNDNAME_NO_CV_THISTYPE_ = 0x00000040;
|
||||||
|
const DWORD_ UNDNAME_NO_THISTYPE_ = 0x00000060;
|
||||||
|
const DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = 0x00000080;
|
||||||
|
const DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = 0x00000100;
|
||||||
|
const DWORD_ UNDNAME_NO_MEMBER_TYPE_ = 0x00000200;
|
||||||
|
const DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = 0x00000400;
|
||||||
|
const DWORD_ UNDNAME_32_BIT_DECODE_ = 0x00000800;
|
||||||
|
const DWORD_ UNDNAME_NAME_ONLY_ = 0x00001000;
|
||||||
|
const DWORD_ UNDNAME_NO_ARGUMENTS_ = 0x00002000;
|
||||||
|
const DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = 0x00004000;
|
||||||
|
|
||||||
|
#endif // defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
using ::UnDecorateSymbolName;
|
||||||
|
#if defined( BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW )
|
||||||
|
using ::UnDecorateSymbolNameW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS API_VERSION {
|
||||||
|
USHORT_ MajorVersion;
|
||||||
|
USHORT_ MinorVersion;
|
||||||
|
USHORT_ Revision;
|
||||||
|
USHORT_ Reserved;
|
||||||
|
} API_VERSION_, *LPAPI_VERSION_;
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE LPAPI_VERSION_ ImagehlpApiVersion()
|
||||||
|
{
|
||||||
|
return reinterpret_cast<LPAPI_VERSION_>(::ImagehlpApiVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE DWORD_ undecorate_symbol_name(
|
||||||
|
LPCSTR_ DecoratedName,
|
||||||
|
LPSTR_ UnDecoratedName,
|
||||||
|
DWORD_ UndecoratedLength,
|
||||||
|
DWORD_ Flags)
|
||||||
|
{
|
||||||
|
return ::UnDecorateSymbolName(
|
||||||
|
DecoratedName,
|
||||||
|
UnDecoratedName,
|
||||||
|
UndecoratedLength,
|
||||||
|
Flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined( BOOST_DETAIL_WINAPI_HAS_UNDECORATESYMBOLNAMEW )
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE DWORD_ undecorate_symbol_name(
|
||||||
|
LPCWSTR_ DecoratedName,
|
||||||
|
LPWSTR_ UnDecoratedName,
|
||||||
|
DWORD_ UndecoratedLength,
|
||||||
|
DWORD_ Flags)
|
||||||
|
{
|
||||||
|
return ::UnDecorateSymbolNameW(
|
||||||
|
DecoratedName,
|
||||||
|
UnDecoratedName,
|
||||||
|
UndecoratedLength,
|
||||||
|
Flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BOOST_DETAIL_WINAPI_DBGHELP_HPP
|
|
@ -11,6 +11,7 @@
|
||||||
#define BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP
|
#define BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP
|
||||||
|
|
||||||
#include <boost/detail/winapi/basic_types.hpp>
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
|
#include <boost/detail/winapi/get_system_directory.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
25
lib/3rdParty/boost/boost/detail/winapi/dll.hpp
vendored
25
lib/3rdParty/boost/boost/detail/winapi/dll.hpp
vendored
|
@ -77,8 +77,17 @@ GetModuleFileNameW(
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
|
||||||
FreeLibrary(boost::detail::winapi::HMODULE_ hModule);
|
FreeLibrary(boost::detail::winapi::HMODULE_ hModule);
|
||||||
|
|
||||||
|
#if !defined( UNDER_CE )
|
||||||
BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI
|
||||||
GetProcAddress(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCSTR_ lpProcName);
|
GetProcAddress(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCSTR_ lpProcName);
|
||||||
|
#else
|
||||||
|
// On Windows CE there are two functions: GetProcAddressA (since Windows CE 3.0) and GetProcAddressW.
|
||||||
|
// GetProcAddress is a macro that is _always_ defined to GetProcAddressW.
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI
|
||||||
|
GetProcAddressA(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCSTR_ lpProcName);
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI
|
||||||
|
GetProcAddressW(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCWSTR_ lpProcName);
|
||||||
|
#endif
|
||||||
|
|
||||||
struct _MEMORY_BASIC_INFORMATION;
|
struct _MEMORY_BASIC_INFORMATION;
|
||||||
|
|
||||||
|
@ -140,7 +149,23 @@ using ::LoadLibraryExW;
|
||||||
using ::GetModuleHandleW;
|
using ::GetModuleHandleW;
|
||||||
using ::GetModuleFileNameW;
|
using ::GetModuleFileNameW;
|
||||||
using ::FreeLibrary;
|
using ::FreeLibrary;
|
||||||
|
|
||||||
|
#if !defined( UNDER_CE )
|
||||||
|
// For backward compatibility, don't use directly. Use get_proc_address instead.
|
||||||
using ::GetProcAddress;
|
using ::GetProcAddress;
|
||||||
|
#else
|
||||||
|
using ::GetProcAddressA;
|
||||||
|
using ::GetProcAddressW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE FARPROC_ get_proc_address(HMODULE_ hModule, LPCSTR_ lpProcName)
|
||||||
|
{
|
||||||
|
#if !defined( UNDER_CE )
|
||||||
|
return ::GetProcAddress(hModule, lpProcName);
|
||||||
|
#else
|
||||||
|
return ::GetProcAddressA(hModule, lpProcName);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, ULONG_PTR_ dwLength)
|
BOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, ULONG_PTR_ dwLength)
|
||||||
{
|
{
|
||||||
|
|
118
lib/3rdParty/boost/boost/detail/winapi/environment.hpp
vendored
Normal file
118
lib/3rdParty/boost/boost/detail/winapi/environment.hpp
vendored
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
// environment.hpp --------------------------------------------------------------//
|
||||||
|
|
||||||
|
// Copyright 2016 Klemens D. Morgenstern
|
||||||
|
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#ifndef BOOST_DETAIL_WINAPI_ENVIRONMENT_HPP_
|
||||||
|
#define BOOST_DETAIL_WINAPI_ENVIRONMENT_HPP_
|
||||||
|
|
||||||
|
#include <boost/detail/winapi/basic_types.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( BOOST_USE_WINDOWS_H )
|
||||||
|
extern "C" {
|
||||||
|
#if !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::LPSTR_ WINAPI GetEnvironmentStringsA();
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI FreeEnvironmentStringsA(boost::detail::winapi::LPSTR_);
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetEnvironmentVariableA(
|
||||||
|
boost::detail::winapi::LPCSTR_ lpName,
|
||||||
|
boost::detail::winapi::LPSTR_ lpBuffer,
|
||||||
|
boost::detail::winapi::DWORD_ nSize
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI SetEnvironmentVariableA(
|
||||||
|
boost::detail::winapi::LPCSTR_ lpName,
|
||||||
|
boost::detail::winapi::LPCSTR_ lpValue
|
||||||
|
);
|
||||||
|
#endif // !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::LPWSTR_ WINAPI GetEnvironmentStringsW();
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI FreeEnvironmentStringsW(boost::detail::winapi::LPWSTR_);
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetEnvironmentVariableW(
|
||||||
|
boost::detail::winapi::LPCWSTR_ lpName,
|
||||||
|
boost::detail::winapi::LPWSTR_ lpBuffer,
|
||||||
|
boost::detail::winapi::DWORD_ nSize
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI SetEnvironmentVariableW(
|
||||||
|
boost::detail::winapi::LPCWSTR_ lpName,
|
||||||
|
boost::detail::winapi::LPCWSTR_ lpValue
|
||||||
|
);
|
||||||
|
} // extern "C"
|
||||||
|
#endif // !defined( BOOST_USE_WINDOWS_H )
|
||||||
|
|
||||||
|
namespace boost { namespace detail { namespace winapi {
|
||||||
|
|
||||||
|
#if !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
using ::GetEnvironmentStringsA;
|
||||||
|
using ::FreeEnvironmentStringsA;
|
||||||
|
using ::GetEnvironmentVariableA;
|
||||||
|
using ::SetEnvironmentVariableA;
|
||||||
|
#endif // !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
|
||||||
|
using ::GetEnvironmentStringsW;
|
||||||
|
using ::FreeEnvironmentStringsW;
|
||||||
|
using ::GetEnvironmentVariableW;
|
||||||
|
using ::SetEnvironmentVariableW;
|
||||||
|
|
||||||
|
template< typename Char >
|
||||||
|
Char* get_environment_strings();
|
||||||
|
|
||||||
|
#if !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
|
||||||
|
template< >
|
||||||
|
BOOST_FORCEINLINE char* get_environment_strings< char >()
|
||||||
|
{
|
||||||
|
return GetEnvironmentStringsA();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOL_ free_environment_strings(boost::detail::winapi::LPSTR_ p)
|
||||||
|
{
|
||||||
|
return FreeEnvironmentStringsA(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE DWORD_ get_environment_variable(LPCSTR_ name, LPSTR_ buffer, DWORD_ size)
|
||||||
|
{
|
||||||
|
return GetEnvironmentVariableA(name, buffer, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOL_ set_environment_variable(LPCSTR_ name, LPCSTR_ value)
|
||||||
|
{
|
||||||
|
return SetEnvironmentVariableA(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !defined( BOOST_NO_ANSI_APIS )
|
||||||
|
|
||||||
|
template< >
|
||||||
|
BOOST_FORCEINLINE wchar_t* get_environment_strings< wchar_t >()
|
||||||
|
{
|
||||||
|
return GetEnvironmentStringsW();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOL_ free_environment_strings(boost::detail::winapi::LPWSTR_ p)
|
||||||
|
{
|
||||||
|
return FreeEnvironmentStringsW(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE DWORD_ get_environment_variable(LPCWSTR_ name, LPWSTR_ buffer, DWORD_ size)
|
||||||
|
{
|
||||||
|
return GetEnvironmentVariableW(name, buffer, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOL_ set_environment_variable(LPCWSTR_ name, LPCWSTR_ value)
|
||||||
|
{
|
||||||
|
return SetEnvironmentVariableW(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace winapi
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_DETAIL_WINAPI_ENVIRONMENT_HPP_
|
2959
lib/3rdParty/boost/boost/detail/winapi/error_codes.hpp
vendored
Normal file
2959
lib/3rdParty/boost/boost/detail/winapi/error_codes.hpp
vendored
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue