diff --git a/.gitignore b/.gitignore index cd86514..8defd04 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,4 @@ lib/local/CppInerop/x64/ lib/local/FaceAnalyser/Release/ lib/local/LandmarkDetector/Release/ gui/HeadPose-live/obj/ +lib/local/GazeAnalyser/x64/ diff --git a/OpenFace.sln b/OpenFace.sln index 6fc60b8..bd93c32 100644 --- a/OpenFace.sln +++ b/OpenFace.sln @@ -37,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenFaceDemo", "gui\OpenFac EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeadPoseLive", "gui\HeadPose-live\HeadPoseLive.csproj", "{F396362D-821E-4EA6-9BBF-1F6050844118}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GazeAnalyser", "lib\local\GazeAnalyser\GazeAnalyser.vcxproj", "{5F915541-F531-434F-9C81-79F5DB58012B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution 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|x64.ActiveCfg = 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 GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -167,5 +177,6 @@ Global {A4760F41-2B1F-4144-B7B2-62785AFFE79B} = {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} + {5F915541-F531-434F-9C81-79F5DB58012B} = {99FEBA13-BDDF-4076-B57E-D8EF4076E20D} EndGlobalSection EndGlobal diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp index 5accd22..3d3a3c4 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp @@ -336,51 +336,11 @@ int main (int argc, char **argv) cv::CascadeClassifier classifier(det_parameters.face_detector_location); dlib::frontal_face_detector face_detector_hog = dlib::get_frontal_face_detector(); - - // Loading the AU prediction models - string au_loc = "AU_predictors/AU_all_static.txt"; - - boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc); - 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(), 0.7, 112, 112, au_loc, tri_loc); + + // Load facial feature extractor and AU analyser (make sure it is static) + FaceAnalysis::FaceAnalyserParameters face_analysis_params(arguments); + face_analysis_params.OptimizeForImages(); + FaceAnalysis::FaceAnalyser face_analyser(face_analysis_params); bool visualise = !det_parameters.quiet_mode; @@ -464,12 +424,12 @@ int main (int argc, char **argv) if (success && det_parameters.track_gaze) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + 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) if(!output_landmark_locations.empty()) @@ -515,7 +475,7 @@ int main (int argc, char **argv) // 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); - 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 @@ -580,11 +540,11 @@ int main (int argc, char **argv) if (det_parameters.track_gaze) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + 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 if(!output_landmark_locations.empty()) @@ -609,7 +569,7 @@ int main (int argc, char **argv) // 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); - 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); diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj b/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj index d9358b2..a4f00c1 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj @@ -108,7 +108,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) StreamingSIMDExtensions2 true @@ -123,7 +123,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) AdvancedVectorExtensions true @@ -140,7 +140,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -160,7 +160,7 @@ true true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -179,6 +179,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp index 818fdf0..37804a5 100644 --- a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp +++ b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp @@ -119,7 +119,7 @@ void visualise_tracking(cv::Mat& captured_image, cv::Mat_& depth_image, c 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) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + 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); diff --git a/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj b/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj index 71666c9..94efc70 100644 --- a/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj +++ b/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj @@ -108,7 +108,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -124,7 +124,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -143,7 +143,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed StreamingSIMDExtensions2 @@ -165,7 +165,7 @@ true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed AdvancedVectorExtensions @@ -182,8 +182,8 @@ - - {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/exe/FeatureExtraction/FeatureExtraction.cpp b/exe/FeatureExtraction/FeatureExtraction.cpp index 7e13b2f..adfec09 100644 --- a/exe/FeatureExtraction/FeatureExtraction.cpp +++ b/exe/FeatureExtraction/FeatureExtraction.cpp @@ -55,6 +55,7 @@ #include #include +#include #include #ifndef CONFIG_DIR @@ -131,9 +132,8 @@ void create_directory(string output_path) } } -void get_output_feature_params(vector &output_similarity_aligned, vector &output_hog_aligned_files, double &similarity_scale, - 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, vector &arguments); +void get_output_feature_params(vector &output_similarity_aligned, vector &output_hog_aligned_files, bool& verbose, + bool &output_2D_landmarks, bool &output_3D_landmarks, bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze, vector &arguments); void get_image_input_output_params_feats(vector > &input_image_files, bool& as_video, vector &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) { - 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,16 +218,8 @@ int main (int argc, char **argv) vector 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 vector 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 @@ -253,7 +245,6 @@ int main (int argc, char **argv) { video_input = false; } - } // Grab camera parameters, if they are not defined (approximate values will be used) @@ -274,20 +265,11 @@ int main (int argc, char **argv) fx_undefined = true; } - // The modules that are being used for tracking - LandmarkDetector::CLNF face_model(det_parameters.model_location); - vector output_similarity_align; vector output_hog_align_files; - double sim_scale = -1; - int sim_size = 112; - bool grayscale = 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 // use -no2Dfp, -no3Dfp, -noMparams, -noPose, -noAUs, -noGaze to turn them off bool output_2D_landmarks = true; @@ -297,72 +279,27 @@ int main (int argc, char **argv) bool output_AUs = 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); - // 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 bool done = false; int f_n = -1; int curr_img = -1; - string au_loc; - string au_loc_local; - if (dynamic) - { - au_loc_local = "AU_predictors/AU_all_best.txt"; - } - else - { - au_loc_local = "AU_predictors/AU_all_static.txt"; - } + // Load the modules that are being used for tracking and face analysis - boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc_local); - 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; - } + // Load face landmark detector + LandmarkDetector::FaceModelParameters det_parameters(arguments); + // Always track gaze in feature extraction + det_parameters.track_gaze = true; + LandmarkDetector::CLNF face_model(det_parameters.model_location); - // Creating a face analyser that will be used for AU extraction - - // Make sure sim_scale is proportional to sim_size if not set - if (sim_scale == -1) sim_scale = sim_size * (0.7 / 112.0); - - FaceAnalysis::FaceAnalyser face_analyser(vector(), sim_scale, sim_size, sim_size, au_loc, tri_loc); + // Load facial feature extractor and AU analyser + FaceAnalysis::FaceAnalyserParameters face_analysis_params(arguments); + FaceAnalysis::FaceAnalyser face_analyser(face_analysis_params); 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); 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 @@ -548,19 +485,20 @@ int main (int argc, char **argv) if (det_parameters.track_gaze && detection_success && face_model.eye_model) { - FaceAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false); - gazeAngle = FaceAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1, pose_estimate); + GazeAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false); + gazeAngle = GazeAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1, pose_estimate); } // Do face alignment cv::Mat sim_warped_img; cv::Mat_ hog_descriptor; + int num_hog_rows, num_hog_cols; // But only if needed in output 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); if(!det_parameters.quiet_mode) @@ -590,11 +528,6 @@ int main (int argc, char **argv) if (!output_similarity_align.empty()) { - if (sim_warped_img.channels() == 3 && grayscale) - { - cvtColor(sim_warped_img, sim_warped_img, CV_BGR2GRAY); - } - char name[100]; // Filename is based on frame number @@ -683,7 +616,7 @@ int main (int argc, char **argv) if (output_files.size() > 0 && output_AUs) { 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 face_analyser.Reset(); @@ -817,7 +750,7 @@ void outputAllFeatures(std::ofstream* output_file, bool output_2D_landmarks, boo << ", " << gaze_angle[0] << ", " << gaze_angle[1]; // Output gaze landmarks - vector eye_lmks = LandmarkDetector::CalculateEyeLandmarks(face_model); + vector eye_lmks = LandmarkDetector::CalculateAllEyeLandmarks(face_model); for (size_t i = 0; i < eye_lmks.size(); ++i) { 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 &output_similarity_aligned, vector &output_hog_aligned_files, double &similarity_scale, - int &similarity_size, bool &grayscale, bool& verbose, bool& dynamic, +void get_output_feature_params(vector &output_similarity_aligned, vector &output_hog_aligned_files, bool& verbose, bool &output_2D_landmarks, bool &output_3D_landmarks, bool &output_model_params, bool &output_pose, bool &output_AUs, bool &output_gaze, vector &arguments) { @@ -994,9 +926,6 @@ void get_output_feature_params(vector &output_similarity_aligned, vector string output_root = ""; - // By default the model is dynamic - dynamic = true; - 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) @@ -1036,29 +965,6 @@ void get_output_feature_params(vector &output_similarity_aligned, vector { 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) { output_2D_landmarks = false; diff --git a/exe/FeatureExtraction/FeatureExtraction.vcxproj b/exe/FeatureExtraction/FeatureExtraction.vcxproj index 69fb3d1..3ab9996 100644 --- a/exe/FeatureExtraction/FeatureExtraction.vcxproj +++ b/exe/FeatureExtraction/FeatureExtraction.vcxproj @@ -107,7 +107,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -123,7 +123,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -141,7 +141,7 @@ false true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed StreamingSIMDExtensions2 @@ -163,7 +163,7 @@ false true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed AdvancedVectorExtensions @@ -184,6 +184,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/exe/FeatureExtraction/FeatureExtraction.vcxproj.user b/exe/FeatureExtraction/FeatureExtraction.vcxproj.user index 08d8206..366ab88 100644 --- a/exe/FeatureExtraction/FeatureExtraction.vcxproj.user +++ b/exe/FeatureExtraction/FeatureExtraction.vcxproj.user @@ -11,8 +11,7 @@ WindowsLocalDebugger - - + -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" WindowsLocalDebugger diff --git a/gui/HeadPose-live/MainWindow.xaml.cs b/gui/HeadPose-live/MainWindow.xaml.cs index 704ba7a..f2c5c7d 100644 --- a/gui/HeadPose-live/MainWindow.xaml.cs +++ b/gui/HeadPose-live/MainWindow.xaml.cs @@ -55,9 +55,8 @@ using OpenCVWrappers; using CppInterop; using CppInterop.LandmarkDetector; using CameraInterop; -using FaceAnalyser_Interop; using System.Windows.Threading; -using FaceAnalyser_Interop; +using GazeAnalyser_Interop; using ZeroMQ; 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); - 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; } @@ -393,7 +392,7 @@ namespace HeadPoseLive String root = AppDomain.CurrentDomain.BaseDirectory; FaceModelParameters model_params = new FaceModelParameters(root, false); CLNF face_model = new CLNF(model_params); - FaceAnalyserManaged face_analyser = new FaceAnalyserManaged(root, false, 112); + GazeAnalyserManaged gaze_analyser = new GazeAnalyserManaged(); DateTime? startTime = CurrentTime; @@ -424,7 +423,7 @@ namespace HeadPoseLive if (grayFrame == null) 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) { @@ -449,17 +448,17 @@ namespace HeadPoseLive if (detectionSucceeding) { - List> landmarks_doubles = face_model.CalculateLandmarks(); + List> landmarks_doubles = face_model.CalculateVisibleLandmarks(); foreach (var p in landmarks_doubles) 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]; - gaze_lines = face_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy); - gaze_angle = face_analyser.GetGazeAngle(); + gaze_lines = gaze_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy); + gaze_angle = gaze_analyser.GetGazeAngle(); lines = face_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy); } @@ -467,7 +466,6 @@ namespace HeadPoseLive if (reset) { face_model.Reset(); - face_analyser.Reset(); reset = false; } diff --git a/gui/OpenFaceDemo/MainWindow.xaml.cs b/gui/OpenFaceDemo/MainWindow.xaml.cs index cbcee36..d6fd885 100644 --- a/gui/OpenFaceDemo/MainWindow.xaml.cs +++ b/gui/OpenFaceDemo/MainWindow.xaml.cs @@ -55,6 +55,7 @@ using CppInterop; using CppInterop.LandmarkDetector; using CameraInterop; using FaceAnalyser_Interop; +using GazeAnalyser_Interop; using System.Windows.Threading; using System.Diagnostics; @@ -108,7 +109,7 @@ namespace OpenFaceDemo FaceModelParameters clnf_params; CLNF clnf_model; FaceAnalyserManaged face_analyser; - + GazeAnalyserManaged gaze_analyser; public MainWindow() { @@ -123,6 +124,7 @@ namespace OpenFaceDemo clnf_params = new FaceModelParameters(root, true); clnf_model = new CLNF(clnf_params); face_analyser = new FaceAnalyserManaged(root, true, 112); + gaze_analyser = new GazeAnalyserManaged(); 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 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> lines = null; List> landmarks = null; List> eye_landmarks = null; List> gaze_lines = null; - Tuple gaze_angle = face_analyser.GetGazeAngle(); + Tuple gaze_angle = gaze_analyser.GetGazeAngle(); if (detectionSucceeding) { - landmarks = clnf_model.CalculateLandmarks(); - eye_landmarks = clnf_model.CalculateEyeLandmarks(); + landmarks = clnf_model.CalculateVisibleLandmarks(); + eye_landmarks = clnf_model.CalculateVisibleEyeLandmarks(); 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 diff --git a/gui/OpenFaceOffline/MainWindow.xaml.cs b/gui/OpenFaceOffline/MainWindow.xaml.cs index 34b57bb..d8ac6fb 100644 --- a/gui/OpenFaceOffline/MainWindow.xaml.cs +++ b/gui/OpenFaceOffline/MainWindow.xaml.cs @@ -48,6 +48,7 @@ using CppInterop; using CppInterop.LandmarkDetector; using CameraInterop; using FaceAnalyser_Interop; +using GazeAnalyser_Interop; using System.Globalization; using Microsoft.WindowsAPICodePack.Dialogs; @@ -103,6 +104,7 @@ namespace OpenFaceOffline FaceModelParameters face_model_params; CLNF clnf_model; FaceAnalyserManaged face_analyser; + GazeAnalyserManaged gaze_analyser; // Recording parameters (default values) Recorder recorder; @@ -149,6 +151,7 @@ namespace OpenFaceOffline clnf_model = new CLNF(face_model_params); 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); // The face analysis step (for AUs and eye gaze) - face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, false, ShowAppearance, false); // TODO change - - recorder.RecordFrame(clnf_model, face_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps); + face_analyser.AddNextFrame(frame, clnf_model.CalculateAllLandmarks(), detectionSucceeding, false, ShowAppearance); // TODO change + gaze_analyser.AddNextFrame(clnf_model, detectionSucceeding, fx, fy, cx, cy); - List> landmarks = clnf_model.CalculateLandmarks(); + recorder.RecordFrame(clnf_model, face_analyser, gaze_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps); + + List> landmarks = clnf_model.CalculateVisibleLandmarks(); 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); - // The face analysis step (for AUs and eye gaze) - face_analyser.AddNextFrame(frame, clnf_model, fx, fy, cx, cy, false, ShowAppearance, false); // TODO change + // The face analysis step (for AUs) + 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> landmarks = clnf_model.CalculateLandmarks(); + recorder.RecordFrame(clnf_model, face_analyser, gaze_analyser, detectionSucceeding, frame_id + 1, ((double)frame_id) / fps); + + List> landmarks = clnf_model.CalculateVisibleLandmarks(); VisualizeFeatures(frame, landmarks, fx, fy, cx, cy, progress); @@ -579,13 +586,13 @@ namespace OpenFaceOffline if (detectionSucceeding) { - eye_landmarks = clnf_model.CalculateEyeLandmarks(); + eye_landmarks = clnf_model.CalculateVisibleEyeLandmarks(); lines = clnf_model.CalculateBox((float)fx, (float)fy, (float)cx, (float)cy); scale = clnf_model.GetRigidParams()[0]; - gaze_lines = face_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy); - gaze_angle = face_analyser.GetGazeAngle(); + gaze_lines = gaze_analyser.CalculateGazeLines(scale, (float)fx, (float)fy, (float)cx, (float)cy); + gaze_angle = gaze_analyser.GetGazeAngle(); } // Visualisation (as a separate function) diff --git a/gui/OpenFaceOffline/Recorder.cs b/gui/OpenFaceOffline/Recorder.cs index e7c8e45..4f2b865 100644 --- a/gui/OpenFaceOffline/Recorder.cs +++ b/gui/OpenFaceOffline/Recorder.cs @@ -34,6 +34,7 @@ using CppInterop.LandmarkDetector; using FaceAnalyser_Interop; +using GazeAnalyser_Interop; using System; using System.Collections.Generic; 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 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) { 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 System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); @@ -204,13 +205,13 @@ namespace OpenFaceOffline if (output_gaze) { - var gaze = face_analyser.GetGazeCamera(); - var gaze_angle = face_analyser.GetGazeAngle(); + var gaze = gaze_analyser.GetGazeCamera(); + 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, gaze.Item2.Item1, gaze.Item2.Item2, gaze.Item2.Item3, gaze_angle.Item1, gaze_angle.Item2)); - List> landmarks_2d = clnf_model.CalculateEyeLandmarks(); + List> landmarks_2d = clnf_model.CalculateAllEyeLandmarks(); for (int i = 0; i < landmarks_2d.Count; ++i) output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1); @@ -225,7 +226,7 @@ namespace OpenFaceOffline if (output_2D_landmarks) { - List> landmarks_2d = clnf_model.CalculateLandmarks(); + List> landmarks_2d = clnf_model.CalculateAllLandmarks(); for (int i = 0; i < landmarks_2d.Count; ++i) output_features_file.Write(", {0:F2}", landmarks_2d[i].Item1); @@ -292,7 +293,7 @@ namespace OpenFaceOffline if (record_HOG) face_analyser.StopHOGRecording(); - face_analyser.PostProcessOutputFile(out_filename, dynamic_AU_model); + face_analyser.PostProcessOutputFile(out_filename); } } diff --git a/lib/3rdParty/boost/boost.props b/lib/3rdParty/boost/boost.props index 1c36251..5dd95e1 100644 --- a/lib/3rdParty/boost/boost.props +++ b/lib/3rdParty/boost/boost.props @@ -9,7 +9,7 @@ $(SolutionDir)lib\3rdParty\boost\$(PlatformTarget)\$(PlatformToolset)\lib;%(AdditionalLibraryDirectories) - libboost_filesystem-vc$(PlatformToolsetVersion)-mt-1_60.lib;%(AdditionalDependencies) + libboost_filesystem-vc$(PlatformToolsetVersion)-mt-1_63.lib;%(AdditionalDependencies) diff --git a/lib/3rdParty/boost/boost/algorithm/algorithm.hpp b/lib/3rdParty/boost/boost/algorithm/algorithm.hpp index 0cf6c45..ab0d4af 100644 --- a/lib/3rdParty/boost/boost/algorithm/algorithm.hpp +++ b/lib/3rdParty/boost/boost/algorithm/algorithm.hpp @@ -17,6 +17,8 @@ #ifndef BOOST_ALGORITHM_HPP #define BOOST_ALGORITHM_HPP +#include // for plus and multiplies + #include // for boost::disable_if #include @@ -56,7 +58,7 @@ power (T x, Integer n) { /// \fn power ( T x, Integer n, Operation op ) /// \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 n The exponent (must be >= 0) diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/all_of.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/all_of.hpp index 39cab39..8280b18 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/all_of.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/all_of.hpp @@ -12,7 +12,6 @@ #ifndef BOOST_ALGORITHM_ALL_OF_HPP #define BOOST_ALGORITHM_ALL_OF_HPP -#include // for std::all_of, if available #include #include @@ -27,8 +26,6 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the sequence /// /// \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 bool all_of ( InputIterator first, InputIterator last, Predicate p ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/any_of.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/any_of.hpp index cf69348..e68135a 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/any_of.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/any_of.hpp @@ -14,7 +14,6 @@ #ifndef BOOST_ALGORITHM_ANY_OF_HPP #define BOOST_ALGORITHM_ANY_OF_HPP -#include // for std::any_of, if available #include #include diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/copy_if.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/copy_if.hpp index d869caf..73e85d9 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/copy_if.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/copy_if.hpp @@ -12,7 +12,7 @@ #ifndef BOOST_ALGORITHM_COPY_IF_HPP #define BOOST_ALGORITHM_COPY_IF_HPP -#include // for std::copy_if, if available +#include // for std::pair, std::make_pair #include #include @@ -28,8 +28,6 @@ namespace boost { namespace algorithm { /// \param result An output iterator to write the results into /// \param p A predicate for testing the elements of the range /// \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 OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/copy_n.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/copy_n.hpp index ebfe889..ac88085 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/copy_n.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/copy_n.hpp @@ -12,8 +12,6 @@ #ifndef BOOST_ALGORITHM_COPY_N_HPP #define BOOST_ALGORITHM_COPY_N_HPP -#include // for std::copy_n, if available - namespace boost { namespace algorithm { /// \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 result An output iterator to write the results into /// \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 OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/find_if_not.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/find_if_not.hpp index 414697c..02ff4dc 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/find_if_not.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/find_if_not.hpp @@ -12,8 +12,6 @@ #ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP #define BOOST_ALGORITHM_FIND_IF_NOT_HPP -#include // for std::find_if_not, if it exists - #include #include @@ -27,8 +25,6 @@ namespace boost { namespace algorithm { /// \param last One past the end of the input sequence /// \param p A predicate for testing the elements of the range /// \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 InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/iota.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/iota.hpp index 2e638ec..675093f 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/iota.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/iota.hpp @@ -12,8 +12,6 @@ #ifndef BOOST_ALGORITHM_IOTA_HPP #define BOOST_ALGORITHM_IOTA_HPP -#include - #include #include @@ -26,8 +24,6 @@ namespace boost { namespace algorithm { /// \param last One past the end of the input sequence /// \param value The initial value of the sequence to be generated /// \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 void iota ( ForwardIterator first, ForwardIterator last, T value ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/is_partitioned.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/is_partitioned.hpp index cdabd97..cb6c71e 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/is_partitioned.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/is_partitioned.hpp @@ -12,8 +12,6 @@ #ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP #define BOOST_ALGORITHM_IS_PARTITIONED_HPP -#include // for std::is_partitioned, if available - #include #include @@ -26,8 +24,6 @@ namespace boost { namespace algorithm { /// \param last One past the end of the input sequence /// \param p The predicate to test the values with /// \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 bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/is_permutation.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/is_permutation.hpp index ec902dc..0098cd5 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/is_permutation.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/is_permutation.hpp @@ -12,8 +12,8 @@ #ifndef BOOST_ALGORITHM_IS_PERMUTATION11_HPP #define BOOST_ALGORITHM_IS_PERMUTATION11_HPP -#include // for std::less, tie, mismatch and is_permutation (if available) -#include // for std::make_pair +#include // for std::find_if, count_if, mismatch +#include // for std::pair #include // for std::equal_to #include @@ -108,8 +108,6 @@ namespace detail { /// \param p The predicate to compare elements with /// /// \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 > bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, 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 first2 The start of the second sequence /// \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 > bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2 ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/is_sorted.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/is_sorted.hpp index f6062da..f4dbb38 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/is_sorted.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/is_sorted.hpp @@ -13,7 +13,6 @@ #ifndef BOOST_ALGORITHM_ORDERED_HPP #define BOOST_ALGORITHM_ORDERED_HPP -#include #include #include diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/none_of.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/none_of.hpp index 67be3d1..ba13144 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/none_of.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/none_of.hpp @@ -12,7 +12,6 @@ #ifndef BOOST_ALGORITHM_NONE_OF_HPP #define BOOST_ALGORITHM_NONE_OF_HPP -#include // for std::none_of, if available #include #include @@ -29,9 +28,9 @@ namespace boost { namespace algorithm { template bool none_of ( InputIterator first, InputIterator last, Predicate p ) { -for ( ; first != last; ++first ) - if ( p(*first)) - return false; + for ( ; first != last; ++first ) + if ( p(*first)) + return false; return true; } diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/partition_copy.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/partition_copy.hpp index 2d8c3e9..f347f21 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/partition_copy.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/partition_copy.hpp @@ -12,8 +12,7 @@ #ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP #define BOOST_ALGORITHM_PARTITION_COPY_HPP -#include // for std::partition_copy, if available -#include // for make_pair +#include // for std::pair #include #include @@ -34,8 +33,6 @@ namespace boost { namespace algorithm { /// \param p A predicate for dividing the elements of the input sequence. /// /// \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 std::pair diff --git a/lib/3rdParty/boost/boost/algorithm/cxx11/partition_point.hpp b/lib/3rdParty/boost/boost/algorithm/cxx11/partition_point.hpp index f1310c3..2c2767a 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx11/partition_point.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx11/partition_point.hpp @@ -12,7 +12,7 @@ #ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP #define BOOST_ALGORITHM_PARTITION_POINT_HPP -#include // for std::partition_point, if available +#include // for std::distance, advance #include #include @@ -27,8 +27,6 @@ namespace boost { namespace algorithm { /// \param last One past the end of the input sequence /// \param p The predicate to test the values with /// \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 ForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p ) { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx14/equal.hpp b/lib/3rdParty/boost/boost/algorithm/cxx14/equal.hpp index cfc62d5..f1539f8 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx14/equal.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx14/equal.hpp @@ -13,7 +13,8 @@ #define BOOST_ALGORITHM_EQUAL_HPP #include // for std::equal -#include // for std::equal_to +#include // for std::binary_function +#include namespace boost { namespace algorithm { diff --git a/lib/3rdParty/boost/boost/algorithm/cxx14/is_permutation.hpp b/lib/3rdParty/boost/boost/algorithm/cxx14/is_permutation.hpp index 9346881..639446b 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx14/is_permutation.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx14/is_permutation.hpp @@ -12,8 +12,7 @@ #ifndef BOOST_ALGORITHM_IS_PERMUTATION14_HPP #define BOOST_ALGORITHM_IS_PERMUTATION14_HPP -#include // for std::less, tie, mismatch and is_permutation (if available) -#include // for std::make_pair +#include // for std::pair #include // for std::equal_to #include @@ -31,8 +30,6 @@ namespace boost { namespace algorithm { /// \param first2 The start 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. -/// We will use the standard one if it is available, -/// otherwise we have our own implementation. template< class ForwardIterator1, class ForwardIterator2 > bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 ) @@ -62,8 +59,6 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, /// \param pred The predicate to compare elements with /// /// \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 > bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, diff --git a/lib/3rdParty/boost/boost/algorithm/cxx14/mismatch.hpp b/lib/3rdParty/boost/boost/algorithm/cxx14/mismatch.hpp index 926ab19..c3de418 100644 --- a/lib/3rdParty/boost/boost/algorithm/cxx14/mismatch.hpp +++ b/lib/3rdParty/boost/boost/algorithm/cxx14/mismatch.hpp @@ -12,7 +12,6 @@ #ifndef BOOST_ALGORITHM_MISMATCH_HPP #define BOOST_ALGORITHM_MISMATCH_HPP -#include // for std::mismatch #include // for std::pair namespace boost { namespace algorithm { diff --git a/lib/3rdParty/boost/boost/algorithm/hex.hpp b/lib/3rdParty/boost/boost/algorithm/hex.hpp index 145a414..739e89f 100644 --- a/lib/3rdParty/boost/boost/algorithm/hex.hpp +++ b/lib/3rdParty/boost/boost/algorithm/hex.hpp @@ -1,9 +1,9 @@ -/* +/* Copyright (c) Marshall Clow 2011-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) - + Thanks to Nevin for his comments/help. */ @@ -13,7 +13,7 @@ */ /// \file hex.hpp -/// \brief Convert sequence of integral types into a sequence of hexadecimal +/// \brief Convert sequence of integral types into a sequence of hexadecimal /// characters and back. Based on the MySQL functions HEX and UNHEX /// \author Marshall Clow @@ -25,7 +25,9 @@ #include #include -#include +#include +#include +#include #include #include @@ -33,17 +35,17 @@ namespace boost { namespace algorithm { -/*! - \struct hex_decode_error - \brief Base exception class for all hex decoding errors +/*! + \struct hex_decode_error + \brief Base exception class for all hex decoding errors */ /*! - \struct non_hex_input + \struct non_hex_input \brief Thrown when a non-hex value (0-9, A-F) encountered when decoding. Contains the offending character -*/ /*! - \struct not_enough_input +*/ /*! + \struct not_enough_input \brief Thrown when the input sequence unexpectedly ends - + */ struct hex_decode_error : virtual boost::exception, virtual std::exception {}; struct not_enough_input : virtual hex_decode_error {}; @@ -54,12 +56,12 @@ namespace detail { /// \cond DOXYGEN_HIDE template - 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 ); char res [ num_hex_digits ]; char *p = res + num_hex_digits; 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 ); } @@ -106,12 +108,12 @@ namespace detail { typedef T value_type; }; - template + template bool iter_end ( Iterator current, Iterator last ) { return current == last; } - + template bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\0'; } - + // What can we assume here about the inputs? // is std::iterator_traits::value_type always 'char' ? // Could it be wchar_t, say? Does it matter? @@ -124,11 +126,11 @@ namespace detail { // Need to make sure that we get can read that many chars here. for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) { - if ( pred ( first, last )) + if ( pred ( first, last )) BOOST_THROW_EXCEPTION (not_enough_input ()); res = ( 16 * res ) + hex_char_to_int (*first); } - + *out = res; return ++out; } @@ -138,7 +140,7 @@ namespace detail { /// \fn hex ( InputIterator first, InputIterator last, OutputIterator out ) /// \brief Converts a sequence of integral types into a 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 @@ -148,14 +150,31 @@ template typename boost::enable_if::value_type>, OutputIterator>::type hex ( InputIterator first, InputIterator last, OutputIterator out ) { 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 boost::enable_if::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; + } + /// \fn hex ( const T *ptr, OutputIterator out ) /// \brief Converts a sequence of integral types into a 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 @@ -164,13 +183,30 @@ template typename boost::enable_if, OutputIterator>::type hex ( const T *ptr, OutputIterator out ) { while ( *ptr ) - out = detail::encode_one ( *ptr++, out ); + out = detail::encode_one ( *ptr++, out, "0123456789ABCDEF" ); 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 boost::enable_if, 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 ) /// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. -/// +/// /// \param r The input range /// \param out An output iterator to the results into /// \return The updated output iterator @@ -182,9 +218,23 @@ 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 boost::enable_if::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 ) /// \brief Converts a sequence of hexadecimal characters into a sequence of integers. -/// +/// /// \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 @@ -200,7 +250,7 @@ OutputIterator unhex ( InputIterator first, InputIterator last, OutputIterator o /// \fn unhex ( const T *ptr, OutputIterator out ) /// \brief Converts a sequence of hexadecimal characters into a sequence of integers. -/// +/// /// \param ptr A pointer to a null-terminated input sequence. /// \param out An output iterator to the results into /// \return The updated output iterator @@ -218,7 +268,7 @@ OutputIterator unhex ( const T *ptr, OutputIterator out ) { /// \fn OutputIterator unhex ( const Range &r, OutputIterator out ) /// \brief Converts a sequence of hexadecimal characters into a sequence of integers. -/// +/// /// \param r The input range /// \param out An output iterator to the results into /// \return The updated output iterator @@ -231,7 +281,7 @@ OutputIterator unhex ( const Range &r, OutputIterator out ) { /// \fn String hex ( const String &input ) /// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. -/// +/// /// \param input A container to be converted /// \return A container with the encoded text template @@ -242,9 +292,24 @@ String hex ( const String &input ) { 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 +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 ) /// \brief Converts a sequence of hexadecimal characters into a sequence of characters. -/// +/// /// \param input A container to be converted /// \return A container with the decoded text template diff --git a/lib/3rdParty/boost/boost/algorithm/is_palindrome.hpp b/lib/3rdParty/boost/boost/algorithm/is_palindrome.hpp new file mode 100644 index 0000000..cc63e18 --- /dev/null +++ b/lib/3rdParty/boost/boost/algorithm/is_palindrome.hpp @@ -0,0 +1,161 @@ +/* + Copyright (c) Alexander Zaitsev , 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 +#include +#include + +#include +#include + +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 +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 +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 +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 +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 +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 diff --git a/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore.hpp b/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore.hpp index c5fe9fa..65a809d 100644 --- a/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore.hpp +++ b/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore.hpp @@ -75,25 +75,27 @@ Requirements: /// \param corpus_last One past the end of the data to search /// template - corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + std::pair + operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { BOOST_STATIC_ASSERT (( boost::is_same< typename std::iterator_traits::value_type, typename std::iterator_traits::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 ); // If the pattern is larger than the corpus, we can't find it! if ( k_corpus_length < k_pattern_length ) - return corpus_last; + return std::make_pair(corpus_last, corpus_last); // Do the search - return this->do_search ( corpus_first, corpus_last ); + return this->do_search ( corpus_first, corpus_last ); } template - typename boost::range_iterator::type operator () ( Range &r ) const { + std::pair::type, typename boost::range_iterator::type> + operator () ( Range &r ) const { return (*this) (boost::begin(r), boost::end(r)); } @@ -112,7 +114,8 @@ Requirements: /// \param p A predicate used for the search comparisons. /// template - corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { + std::pair + do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { /* ---- Do the matching ---- */ corpusIter curPos = corpus_first; const corpusIter lastPos = corpus_last - k_pattern_length; @@ -126,7 +129,7 @@ Requirements: j--; // We matched - we're done! 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 @@ -138,7 +141,7 @@ Requirements: 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 /// template - corpusIter boyer_moore_search ( + std::pair boyer_moore_search ( corpusIter corpus_first, corpusIter corpus_last, patIter pat_first, patIter pat_last ) { @@ -220,7 +223,7 @@ Requirements: } template - corpusIter boyer_moore_search ( + std::pair boyer_moore_search ( corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; @@ -229,8 +232,9 @@ Requirements: } template - typename boost::lazy_disable_if_c< - boost::is_same::value, typename boost::range_iterator > + typename boost::disable_if_c< + boost::is_same::value, + std::pair::type, typename boost::range_iterator::type> > ::type boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last ) { @@ -239,7 +243,7 @@ Requirements: } template - typename boost::range_iterator::type + std::pair::type, typename boost::range_iterator::type> boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; diff --git a/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore_horspool.hpp b/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore_horspool.hpp index 758ded2..aacb5cb 100644 --- a/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore_horspool.hpp +++ b/lib/3rdParty/boost/boost/algorithm/searching/boyer_moore_horspool.hpp @@ -64,33 +64,34 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html ~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 /// /// \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 p A predicate used for the search comparisons. /// template - corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + std::pair + operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { BOOST_STATIC_ASSERT (( boost::is_same< typename std::iterator_traits::value_type, typename std::iterator_traits::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 ); // If the pattern is larger than the corpus, we can't find it! if ( k_corpus_length < k_pattern_length ) - return corpus_last; + return std::make_pair(corpus_last, corpus_last); // Do the search return this->do_search ( corpus_first, corpus_last ); } template - typename boost::range_iterator::type operator () ( Range &r ) const { + std::pair::type, typename boost::range_iterator::type> + operator () ( Range &r ) const { 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 /// template - corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { + std::pair + do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { corpusIter curPos = corpus_first; const corpusIter lastPos = corpus_last - k_pattern_length; while ( curPos <= lastPos ) { @@ -117,14 +119,14 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html while ( pat_first [j] == curPos [j] ) { // We matched - we're done! if ( j == 0 ) - return curPos; + return std::make_pair(curPos, curPos + k_pattern_length); j--; } curPos += skip_ [ curPos [ k_pattern_length - 1 ]]; } - return corpus_last; + return std::make_pair(corpus_last, corpus_last); } // \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 /// template - corpusIter boyer_moore_horspool_search ( + std::pair boyer_moore_horspool_search ( corpusIter corpus_first, corpusIter corpus_last, patIter pat_first, patIter pat_last ) { @@ -151,7 +153,7 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html } template - corpusIter boyer_moore_horspool_search ( + std::pair boyer_moore_horspool_search ( corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; @@ -160,8 +162,9 @@ http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html } template - typename boost::lazy_disable_if_c< - boost::is_same::value, typename boost::range_iterator > + typename boost::disable_if_c< + boost::is_same::value, + std::pair::type, typename boost::range_iterator::type> > ::type 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 boost::range_iterator::type + std::pair::type, typename boost::range_iterator::type> boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; diff --git a/lib/3rdParty/boost/boost/algorithm/searching/detail/bm_traits.hpp b/lib/3rdParty/boost/boost/algorithm/searching/detail/bm_traits.hpp index b39e539..1214363 100644 --- a/lib/3rdParty/boost/boost/algorithm/searching/detail/bm_traits.hpp +++ b/lib/3rdParty/boost/boost/algorithm/searching/detail/bm_traits.hpp @@ -79,7 +79,7 @@ namespace boost { namespace algorithm { namespace detail { skip_map skip_; const value_type k_default_value; 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 ); } diff --git a/lib/3rdParty/boost/boost/algorithm/searching/knuth_morris_pratt.hpp b/lib/3rdParty/boost/boost/algorithm/searching/knuth_morris_pratt.hpp index aaeeb51..c890c9c 100644 --- a/lib/3rdParty/boost/boost/algorithm/searching/knuth_morris_pratt.hpp +++ b/lib/3rdParty/boost/boost/algorithm/searching/knuth_morris_pratt.hpp @@ -69,23 +69,26 @@ namespace boost { namespace algorithm { /// \param p A predicate used for the search comparisons. /// template - corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + std::pair + operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { BOOST_STATIC_ASSERT (( boost::is_same< typename std::iterator_traits::value_type, typename std::iterator_traits::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 ); // If the pattern is larger than the corpus, we can't find it! 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 boost::range_iterator::type operator () ( Range &r ) const { + std::pair::type, typename boost::range_iterator::type> + operator () ( Range &r ) const { 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. /// template - corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last, + std::pair + do_search ( corpusIter corpus_first, corpusIter corpus_last, difference_type k_corpus_length ) const { 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 ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) { 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 // assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward @@ -146,7 +150,7 @@ namespace boost { namespace algorithm { #endif // 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 /// template - corpusIter knuth_morris_pratt_search ( + std::pair knuth_morris_pratt_search ( corpusIter corpus_first, corpusIter corpus_last, patIter pat_first, patIter pat_last ) { @@ -211,7 +215,7 @@ namespace boost { namespace algorithm { } template - corpusIter knuth_morris_pratt_search ( + std::pair knuth_morris_pratt_search ( corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; @@ -220,8 +224,9 @@ namespace boost { namespace algorithm { } template - typename boost::lazy_disable_if_c< - boost::is_same::value, typename boost::range_iterator > + typename boost::disable_if_c< + boost::is_same::value, + std::pair::type, typename boost::range_iterator::type> > ::type knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last ) { @@ -230,7 +235,7 @@ namespace boost { namespace algorithm { } template - typename boost::range_iterator::type + std::pair::type, typename boost::range_iterator::type> knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern ) { typedef typename boost::range_iterator::type pattern_iterator; diff --git a/lib/3rdParty/boost/boost/algorithm/sort_subrange.hpp b/lib/3rdParty/boost/boost/algorithm/sort_subrange.hpp new file mode 100644 index 0000000..7fb2cb5 --- /dev/null +++ b/lib/3rdParty/boost/boost/algorithm/sort_subrange.hpp @@ -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 // For std::less +#include // For std::iterator_traits +#include // For nth_element and partial_sort + +#include +#include + +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 + 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 + void sort_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last) + { + typedef typename std::iterator_traits::value_type value_type; + return sort_subrange(first, last, sub_first, sub_last, std::less()); + } + +/// 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 + 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 + void partition_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last) + { + typedef typename std::iterator_traits::value_type value_type; + return partition_subrange(first, last, sub_first, sub_last, std::less()); + } + +}} + +#endif // BOOST_ALGORITHM_SORT_SUBRANGE_HPP diff --git a/lib/3rdParty/boost/boost/algorithm/string/replace.hpp b/lib/3rdParty/boost/boost/algorithm/string/replace.hpp index 0c04e47..2adb031 100644 --- a/lib/3rdParty/boost/boost/algorithm/string/replace.hpp +++ b/lib/3rdParty/boost/boost/algorithm/string/replace.hpp @@ -401,7 +401,6 @@ namespace boost { \param Search A substring to be searched for \param Format A substitute string \param Loc A locale used for case insensitive comparison - \return A reference to the modified input */ template inline void ireplace_last( @@ -643,7 +642,6 @@ namespace boost { \param Input An input string \param Search A substring to be searched for \param Format A substitute string - \return A reference to the modified input */ template inline void replace_all( diff --git a/lib/3rdParty/boost/boost/bind/arg.hpp b/lib/3rdParty/boost/boost/bind/arg.hpp index a74b829..cb52e66 100644 --- a/lib/3rdParty/boost/boost/bind/arg.hpp +++ b/lib/3rdParty/boost/boost/bind/arg.hpp @@ -21,20 +21,27 @@ #include #include -#include namespace boost { +template struct _arg_eq +{ +}; + +template<> struct _arg_eq +{ + typedef void type; +}; + template< int I > struct 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::value >::type * = 0 ) { - BOOST_STATIC_ASSERT( I == is_placeholder::value ); } }; diff --git a/lib/3rdParty/boost/boost/bind/bind.hpp b/lib/3rdParty/boost/boost/bind/bind.hpp index f793551..85d675a 100644 --- a/lib/3rdParty/boost/boost/bind/bind.hpp +++ b/lib/3rdParty/boost/boost/bind/bind.hpp @@ -887,9 +887,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist1 a( a1_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist1 a( a1_ ); + return b.eval( a ); + } }; template< class A1, class A2 > class rrlist2 @@ -915,9 +923,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist2 a( a1_, a2_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist2 a( a1_, a2_ ); + return b.eval( a ); + } }; template< class A1, class A2, class A3 > class rrlist3 @@ -946,9 +962,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist3 a( a1_, a2_, a3_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist3 a( a1_, a2_, a3_ ); + return b.eval( a ); + } }; template< class A1, class A2, class A3, class A4 > class rrlist4 @@ -980,9 +1004,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist4 a( a1_, a2_, a3_, a4_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist4 a( a1_, a2_, a3_, a4_ ); + return b.eval( a ); + } }; template< class A1, class A2, class A3, class A4, class A5 > class rrlist5 @@ -1017,9 +1049,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist5 a( a1_, a2_, a3_, a4_, a5_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist5 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 @@ -1057,9 +1097,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist6 a( a1_, a2_, a3_, a4_, a5_, a6_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist6 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 @@ -1100,9 +1148,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist7 a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist7 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 @@ -1146,9 +1202,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist8 a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist8 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 @@ -1195,9 +1259,17 @@ public: template T & operator[] (reference_wrapper const & v) const { return v.get(); } - template typename result_traits::type operator[] (bind_t & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t & b) const + { + rrlist9 a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ ); + return b.eval( a ); + } - template typename result_traits::type operator[] (bind_t const & b) const { return b.eval(*this); } + template typename result_traits::type operator[] (bind_t const & b) const + { + rrlist9 a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ ); + return b.eval( a ); + } }; template class bind_t diff --git a/lib/3rdParty/boost/boost/config/compiler/borland.hpp b/lib/3rdParty/boost/boost/config/compiler/borland.hpp index 80dd230..ccd930e 100644 --- a/lib/3rdParty/boost/boost/config/compiler/borland.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/borland.hpp @@ -196,6 +196,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/clang.hpp b/lib/3rdParty/boost/boost/config/compiler/clang.hpp index 5481e5e..150e3c0 100644 --- a/lib/3rdParty/boost/boost/config/compiler/clang.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/clang.hpp @@ -39,9 +39,20 @@ # define BOOST_NO_TYPEID #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 #endif +#endif + +#if __has_include() +# define BOOST_HAS_STDINT_H +#endif + #define BOOST_HAS_NRVO @@ -57,16 +68,25 @@ #define BOOST_HAS_LONG_LONG // -// We disable this if the compiler is really nvcc as it -// doesn't actually support __int128 as of CUDA_VERSION=5000 +// We disable this if the compiler is really nvcc with C++03 as it +// doesn't actually support __int128 as of CUDA_VERSION=7500 // even though it defines __SIZEOF_INT128__. // 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 // of the circumstances under which it's supported. // Similarly __SIZEOF_INT128__ is defined when targetting msvc // 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 #endif @@ -98,11 +118,16 @@ // // 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_CHAR32_T #endif +#if defined(_MSC_VER) && (_MSC_VER >= 1800) && !defined(__GNUC__) +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + #if !__has_feature(cxx_constexpr) # define BOOST_NO_CXX11_CONSTEXPR #endif diff --git a/lib/3rdParty/boost/boost/config/compiler/codegear.hpp b/lib/3rdParty/boost/boost/config/compiler/codegear.hpp index 02bd792..e2f6061 100644 --- a/lib/3rdParty/boost/boost/config/compiler/codegear.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/codegear.hpp @@ -122,6 +122,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/comeau.hpp b/lib/3rdParty/boost/boost/config/compiler/comeau.hpp index 278222d..0984160 100644 --- a/lib/3rdParty/boost/boost/config/compiler/comeau.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/comeau.hpp @@ -12,7 +12,7 @@ // Comeau C++ compiler setup: -#include "boost/config/compiler/common_edg.hpp" +#include #if (__COMO_VERSION__ <= 4245) diff --git a/lib/3rdParty/boost/boost/config/compiler/common_edg.hpp b/lib/3rdParty/boost/boost/config/compiler/common_edg.hpp index b92e574..c09faeb 100644 --- a/lib/3rdParty/boost/boost/config/compiler/common_edg.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/common_edg.hpp @@ -106,6 +106,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/compaq_cxx.hpp b/lib/3rdParty/boost/boost/config/compiler/compaq_cxx.hpp index b44486c..4d6b8ab 100644 --- a/lib/3rdParty/boost/boost/config/compiler/compaq_cxx.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/compaq_cxx.hpp @@ -9,7 +9,7 @@ #define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER) -#include "boost/config/compiler/common_edg.hpp" +#include // // versions check: diff --git a/lib/3rdParty/boost/boost/config/compiler/cray.hpp b/lib/3rdParty/boost/boost/config/compiler/cray.hpp index 3f66043..837f815 100644 --- a/lib/3rdParty/boost/boost/config/compiler/cray.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/cray.hpp @@ -21,7 +21,7 @@ # error "Unsupported Cray compiler, please try running the configure script." #endif -#include "boost/config/compiler/common_edg.hpp" +#include // @@ -60,6 +60,7 @@ #define BOOST_NO_CXX11_CHAR16_T #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL //#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG diff --git a/lib/3rdParty/boost/boost/config/compiler/digitalmars.hpp b/lib/3rdParty/boost/boost/config/compiler/digitalmars.hpp index a3d293c..c344aae 100644 --- a/lib/3rdParty/boost/boost/config/compiler/digitalmars.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/digitalmars.hpp @@ -82,6 +82,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/gcc.hpp b/lib/3rdParty/boost/boost/config/compiler/gcc.hpp index d9dd59d..e319d04 100644 --- a/lib/3rdParty/boost/boost/config/compiler/gcc.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/gcc.hpp @@ -133,14 +133,23 @@ // // Recent GCC versions have __int128 when in 64-bit mode. // -// We disable this if the compiler is really nvcc as it -// doesn't actually support __int128 as of CUDA_VERSION=5000 +// We disable this if the compiler is really nvcc with C++03 as it +// doesn't actually support __int128 as of CUDA_VERSION=7500 // even though it defines __SIZEOF_INT128__. // 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 // 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 #endif // @@ -148,12 +157,16 @@ // include a std lib header to detect this - not ideal, but we'll // be including 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 #include #else #include #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 #endif @@ -239,6 +252,7 @@ // #if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11) # define BOOST_NO_CXX11_ALIGNAS +# define BOOST_NO_CXX11_THREAD_LOCAL #endif // C++0x features in 4.8.1 and later diff --git a/lib/3rdParty/boost/boost/config/compiler/gcc_xml.hpp b/lib/3rdParty/boost/boost/config/compiler/gcc_xml.hpp index c11f29d..b56c786 100644 --- a/lib/3rdParty/boost/boost/config/compiler/gcc_xml.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/gcc_xml.hpp @@ -59,7 +59,8 @@ # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES # define BOOST_NO_CXX11_INLINE_NAMESPACES # define BOOST_NO_CXX11_REF_QUALIFIERS -#define BOOST_NO_CXX11_FINAL +# define BOOST_NO_CXX11_FINAL +# define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/greenhills.hpp b/lib/3rdParty/boost/boost/config/compiler/greenhills.hpp index 038b6b2..a76a07c 100644 --- a/lib/3rdParty/boost/boost/config/compiler/greenhills.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/greenhills.hpp @@ -9,7 +9,7 @@ #define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs) -#include "boost/config/compiler/common_edg.hpp" +#include // // versions check: diff --git a/lib/3rdParty/boost/boost/config/compiler/hp_acc.hpp b/lib/3rdParty/boost/boost/config/compiler/hp_acc.hpp index fb63839..a773b8c 100644 --- a/lib/3rdParty/boost/boost/config/compiler/hp_acc.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/hp_acc.hpp @@ -13,7 +13,7 @@ // HP aCC C++ compiler setup: #if defined(__EDG__) -#include "boost/config/compiler/common_edg.hpp" +#include #endif #if (__HP_aCC <= 33100) @@ -123,6 +123,7 @@ #define BOOST_NO_CXX11_TRAILING_RESULT_TYPES #define BOOST_NO_CXX11_INLINE_NAMESPACES #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 diff --git a/lib/3rdParty/boost/boost/config/compiler/intel.hpp b/lib/3rdParty/boost/boost/config/compiler/intel.hpp index 7789b94..1885ea2 100644 --- a/lib/3rdParty/boost/boost/config/compiler/intel.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/intel.hpp @@ -35,6 +35,10 @@ #endif +#if (__INTEL_COMPILER <= 1600) && !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES) +# define BOOST_NO_CXX14_VARIABLE_TEMPLATES +#endif + #else #include @@ -90,7 +94,7 @@ #else -#include "boost/config/compiler/common_edg.hpp" +#include #if defined(__INTEL_COMPILER) #if __INTEL_COMPILER == 9999 @@ -496,6 +500,11 @@ template<> struct assert_intrinsic_wchar_t {}; # define BOOST_NO_CXX11_HDR_TUPLE #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) // // fenv.h appears not to work with Intel prior to 12.0: @@ -514,7 +523,15 @@ template<> struct assert_intrinsic_wchar_t {}; # define BOOST_HAS_STDINT_H #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 #endif diff --git a/lib/3rdParty/boost/boost/config/compiler/kai.hpp b/lib/3rdParty/boost/boost/config/compiler/kai.hpp index 2337e6a..960d501 100644 --- a/lib/3rdParty/boost/boost/config/compiler/kai.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/kai.hpp @@ -9,7 +9,7 @@ // Kai C++ compiler setup: -#include "boost/config/compiler/common_edg.hpp" +#include # if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG) // at least on Sun, the contents of is not in namespace std diff --git a/lib/3rdParty/boost/boost/config/compiler/metrowerks.hpp b/lib/3rdParty/boost/boost/config/compiler/metrowerks.hpp index c930143..3c5e228 100644 --- a/lib/3rdParty/boost/boost/config/compiler/metrowerks.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/metrowerks.hpp @@ -125,6 +125,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/mpw.hpp b/lib/3rdParty/boost/boost/config/compiler/mpw.hpp index 76045bc..084f9e1 100644 --- a/lib/3rdParty/boost/boost/config/compiler/mpw.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/mpw.hpp @@ -74,6 +74,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/nvcc.hpp b/lib/3rdParty/boost/boost/config/compiler/nvcc.hpp index bbe81f6..b31d4f4 100644 --- a/lib/3rdParty/boost/boost/config/compiler/nvcc.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/nvcc.hpp @@ -14,3 +14,19 @@ // NVIDIA Specific support // BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and 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 diff --git a/lib/3rdParty/boost/boost/config/compiler/pathscale.hpp b/lib/3rdParty/boost/boost/config/compiler/pathscale.hpp index 7c211c4..a5e65af 100644 --- a/lib/3rdParty/boost/boost/config/compiler/pathscale.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/pathscale.hpp @@ -82,6 +82,7 @@ # define BOOST_NO_CXX11_INLINE_NAMESPACES # define BOOST_NO_CXX11_REF_QUALIFIERS # define BOOST_NO_CXX11_FINAL +# define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/pgi.hpp b/lib/3rdParty/boost/boost/config/compiler/pgi.hpp index e5605c9..fa2d5e4 100644 --- a/lib/3rdParty/boost/boost/config/compiler/pgi.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/pgi.hpp @@ -120,6 +120,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/sgi_mipspro.hpp b/lib/3rdParty/boost/boost/config/compiler/sgi_mipspro.hpp index 9068831..54433c9 100644 --- a/lib/3rdParty/boost/boost/config/compiler/sgi_mipspro.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/sgi_mipspro.hpp @@ -9,7 +9,7 @@ #define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) -#include "boost/config/compiler/common_edg.hpp" +#include // // Threading support: diff --git a/lib/3rdParty/boost/boost/config/compiler/sunpro_cc.hpp b/lib/3rdParty/boost/boost/config/compiler/sunpro_cc.hpp index 6017660..ac259fc 100644 --- a/lib/3rdParty/boost/boost/config/compiler/sunpro_cc.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/sunpro_cc.hpp @@ -132,6 +132,7 @@ #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_USER_DEFINED_LITERALS #define BOOST_NO_CXX11_REF_QUALIFIERS +#define BOOST_NO_CXX11_THREAD_LOCAL #endif #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION @@ -151,7 +152,7 @@ #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) # define BOOST_NO_CXX14_CONSTEXPR #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 #endif #if (__cplusplus < 201304) // There's no SD6 check for this.... @@ -169,6 +170,13 @@ #if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #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 // diff --git a/lib/3rdParty/boost/boost/config/compiler/vacpp.hpp b/lib/3rdParty/boost/boost/config/compiler/vacpp.hpp index 6c228ea..3fbed9f 100644 --- a/lib/3rdParty/boost/boost/config/compiler/vacpp.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/vacpp.hpp @@ -131,6 +131,7 @@ #define BOOST_NO_CXX11_INLINE_NAMESPACES #define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_THREAD_LOCAL // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) diff --git a/lib/3rdParty/boost/boost/config/compiler/visualc.hpp b/lib/3rdParty/boost/boost/config/compiler/visualc.hpp index baaab58..cdbc9b6 100644 --- a/lib/3rdParty/boost/boost/config/compiler/visualc.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/visualc.hpp @@ -158,6 +158,11 @@ # define BOOST_NO_CXX11_DECLTYPE_N3276 #endif +#if _MSC_FULL_VER >= 180020827 +#define BOOST_HAS_EXPM1 +#define BOOST_HAS_LOG1P +#endif + // C++11 features supported by VC++ 14 (aka 2015) // #if (_MSC_FULL_VER < 190023026) @@ -175,6 +180,21 @@ # define BOOST_NO_CXX14_BINARY_LITERALS # define BOOST_NO_CXX14_GENERIC_LAMBDAS # 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 // 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 // (Niels Dekker, LKEB, May 2010) #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 -// -// 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: @@ -288,8 +293,8 @@ #endif // -// last known and checked version is 19.00.23026 (VC++ 2015 RTM): -#if (_MSC_VER > 1900) +// last known and checked version is 19.10.24629 (VC++ 2017 RC): +#if (_MSC_VER > 1910) # if defined(BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # else diff --git a/lib/3rdParty/boost/boost/config/compiler/xlcpp.hpp b/lib/3rdParty/boost/boost/config/compiler/xlcpp.hpp index e369ece..2aaafc3 100644 --- a/lib/3rdParty/boost/boost/config/compiler/xlcpp.hpp +++ b/lib/3rdParty/boost/boost/config/compiler/xlcpp.hpp @@ -238,6 +238,10 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +#if !__has_feature(cxx_thread_local) +# define BOOST_NO_CXX11_THREAD_LOCAL +#endif + #if __cplusplus < 201400 // All versions with __cplusplus above this value seem to support this: # define BOOST_NO_CXX14_DIGIT_SEPARATORS diff --git a/lib/3rdParty/boost/boost/config/platform/linux.hpp b/lib/3rdParty/boost/boost/config/platform/linux.hpp index 6fa5f45..8c43c7b 100644 --- a/lib/3rdParty/boost/boost/config/platform/linux.hpp +++ b/lib/3rdParty/boost/boost/config/platform/linux.hpp @@ -72,7 +72,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H #include -#ifdef __USE_GNU +#if defined(__USE_GNU) && !defined(__ANDROID__) && !defined(ANDROID) #define BOOST_HAS_PTHREAD_YIELD #endif diff --git a/lib/3rdParty/boost/boost/config/select_compiler_config.hpp b/lib/3rdParty/boost/boost/config/select_compiler_config.hpp index 4d87093..7a75708 100644 --- a/lib/3rdParty/boost/boost/config/select_compiler_config.hpp +++ b/lib/3rdParty/boost/boost/config/select_compiler_config.hpp @@ -122,27 +122,27 @@ // // This section allows dependency scanners to find all the headers we *might* include: // -#include "boost/config/compiler/gcc_xml.hpp" -#include "boost/config/compiler/cray.hpp" -#include "boost/config/compiler/comeau.hpp" -#include "boost/config/compiler/pathscale.hpp" -#include "boost/config/compiler/intel.hpp" -#include "boost/config/compiler/clang.hpp" -#include "boost/config/compiler/digitalmars.hpp" -#include "boost/config/compiler/gcc.hpp" -#include "boost/config/compiler/kai.hpp" -#include "boost/config/compiler/sgi_mipspro.hpp" -#include "boost/config/compiler/compaq_cxx.hpp" -#include "boost/config/compiler/greenhills.hpp" -#include "boost/config/compiler/codegear.hpp" -#include "boost/config/compiler/borland.hpp" -#include "boost/config/compiler/metrowerks.hpp" -#include "boost/config/compiler/sunpro_cc.hpp" -#include "boost/config/compiler/hp_acc.hpp" -#include "boost/config/compiler/mpw.hpp" -#include "boost/config/compiler/vacpp.hpp" -#include "boost/config/compiler/pgi.hpp" -#include "boost/config/compiler/visualc.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #endif diff --git a/lib/3rdParty/boost/boost/config/stdlib/dinkumware.hpp b/lib/3rdParty/boost/boost/config/stdlib/dinkumware.hpp index af8ddda..8cf5d4d 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/dinkumware.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/dinkumware.hpp @@ -150,13 +150,24 @@ #if defined(__has_include) #if !__has_include() # define BOOST_NO_CXX14_HDR_SHARED_MUTEX -#elif __cplusplus < 201402 +#elif (__cplusplus < 201402) && !defined(_MSC_VER) # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif #elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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) // Intel's compiler can't handle this header yet: # define BOOST_NO_CXX11_HDR_ATOMIC diff --git a/lib/3rdParty/boost/boost/config/stdlib/libcomo.hpp b/lib/3rdParty/boost/boost/config/stdlib/libcomo.hpp index 941498d..e3fc627 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/libcomo.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/libcomo.hpp @@ -72,6 +72,13 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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. // The SGI STL has it's own __type_traits class, which diff --git a/lib/3rdParty/boost/boost/config/stdlib/libcpp.hpp b/lib/3rdParty/boost/boost/config/stdlib/libcpp.hpp index ab5d123..2eea999 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/libcpp.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/libcpp.hpp @@ -32,10 +32,14 @@ #endif #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_CONDITION_VARIABLE -# define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM @@ -53,19 +57,48 @@ # define BOOST_NO_CXX11_HDR_FUNCTIONAL # define BOOST_NO_CXX11_STD_ALIGN # 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: // -# 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_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 #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 !__has_include() diff --git a/lib/3rdParty/boost/boost/config/stdlib/libstdcpp3.hpp b/lib/3rdParty/boost/boost/config/stdlib/libstdcpp3.hpp index 9718bed..557767b 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/libstdcpp3.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/libstdcpp3.hpp @@ -98,6 +98,7 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103) # define BOOST_LIBSTDCXX11 #endif + // // Decide which version of libstdc++ we have, normally // stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly @@ -122,7 +123,9 @@ // #ifdef __clang__ -#if __has_include() +#if __has_include() +# define BOOST_LIBSTDCXX_VERSION 60100 +#elif __has_include() # define BOOST_LIBSTDCXX_VERSION 50100 #elif __has_include() # define BOOST_LIBSTDCXX_VERSION 40900 @@ -139,6 +142,7 @@ #elif __has_include() # define BOOST_LIBSTDCXX_VERSION 40300 #endif + // // GCC 4.8 and 9 add working versions of and respectively. // 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 // set __GNUC__ // +#if __SUNPRO_CC >= 0x5140 +#define BOOST_LIBSTDCXX_VERSION 50100 +#else #define BOOST_LIBSTDCXX_VERSION 40800 #endif +#endif #if !defined(BOOST_LIBSTDCXX_VERSION) # define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #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 // #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. # define BOOST_NO_CXX11_HDR_REGEX #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))) // As of clang-3.6, libstdc++ header throws up errors with clang: @@ -235,6 +258,16 @@ # define BOOST_NO_CXX11_STD_ALIGN #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 !__has_include() # define BOOST_NO_CXX14_HDR_SHARED_MUTEX @@ -247,7 +280,7 @@ // // 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_FORWARD_LIST #define BOOST_NO_CXX11_HDR_ATOMIC diff --git a/lib/3rdParty/boost/boost/config/stdlib/modena.hpp b/lib/3rdParty/boost/boost/config/stdlib/modena.hpp index 7a85e0c..fa4a818 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/modena.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/modena.hpp @@ -61,6 +61,13 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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" diff --git a/lib/3rdParty/boost/boost/config/stdlib/msl.hpp b/lib/3rdParty/boost/boost/config/stdlib/msl.hpp index dd2775e..8f21a13 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/msl.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/msl.hpp @@ -85,4 +85,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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__) diff --git a/lib/3rdParty/boost/boost/config/stdlib/roguewave.hpp b/lib/3rdParty/boost/boost/config/stdlib/roguewave.hpp index 97a2b0b..437d38d 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/roguewave.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/roguewave.hpp @@ -196,3 +196,10 @@ #else # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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 diff --git a/lib/3rdParty/boost/boost/config/stdlib/sgi.hpp b/lib/3rdParty/boost/boost/config/stdlib/sgi.hpp index c805271..8d2f849 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/sgi.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/sgi.hpp @@ -155,4 +155,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif -#define BOOST_STDLIB "SGI standard library" \ No newline at end of file +// 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" diff --git a/lib/3rdParty/boost/boost/config/stdlib/stlport.hpp b/lib/3rdParty/boost/boost/config/stdlib/stlport.hpp index bbc4176..518f9ef 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/stlport.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/stlport.hpp @@ -245,4 +245,11 @@ namespace boost { using std::min; using std::max; } # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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) diff --git a/lib/3rdParty/boost/boost/config/stdlib/vacpp.hpp b/lib/3rdParty/boost/boost/config/stdlib/vacpp.hpp index 4ccd0d2..f9afef6 100644 --- a/lib/3rdParty/boost/boost/config/stdlib/vacpp.hpp +++ b/lib/3rdParty/boost/boost/config/stdlib/vacpp.hpp @@ -61,4 +61,11 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #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" diff --git a/lib/3rdParty/boost/boost/config/suffix.hpp b/lib/3rdParty/boost/boost/config/suffix.hpp index 17bf102..eeaec2b 100644 --- a/lib/3rdParty/boost/boost/config/suffix.hpp +++ b/lib/3rdParty/boost/boost/config/suffix.hpp @@ -624,12 +624,22 @@ namespace std{ using ::type_info; } # define BOOST_NORETURN __declspec(noreturn) # elif defined(__GNUC__) # define BOOST_NORETURN __attribute__ ((__noreturn__)) -# else -# define BOOST_NO_NORETURN -# define BOOST_NORETURN +# elif defined(__has_attribute) && defined(__SUNPRO_CC) +# if __has_attribute(noreturn) +# define BOOST_NORETURN [[noreturn]] +# endif +# elif defined(__has_cpp_attribute) +# if __has_cpp_attribute(noreturn) +# define BOOST_NORETURN [[noreturn]] +# endif # endif #endif +#if !defined(BOOST_NORETURN) +# define BOOST_NO_NORETURN +# define BOOST_NORETURN +#endif + // Branch prediction hints // These macros are intended to wrap conditional expressions that yield true or false // diff --git a/lib/3rdParty/boost/boost/core/demangle.hpp b/lib/3rdParty/boost/boost/core/demangle.hpp index 44aeb8d..f13c26a 100644 --- a/lib/3rdParty/boost/boost/core/demangle.hpp +++ b/lib/3rdParty/boost/boost/core/demangle.hpp @@ -17,7 +17,10 @@ # pragma once #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() # define BOOST_CORE_HAS_CXXABI_H # endif diff --git a/lib/3rdParty/boost/boost/core/lightweight_test.hpp b/lib/3rdParty/boost/boost/core/lightweight_test.hpp index cdc8a72..d6db024 100644 --- a/lib/3rdParty/boost/boost/core/lightweight_test.hpp +++ b/lib/3rdParty/boost/boost/core/lightweight_test.hpp @@ -85,6 +85,22 @@ inline void throw_failed_impl(char const * excep, char const * file, int line, c ++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 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 ) { @@ -119,6 +135,16 @@ template 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 inline int report_errors() @@ -144,6 +170,7 @@ inline int report_errors() } // namespace boost #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) ) diff --git a/lib/3rdParty/boost/boost/core/scoped_enum.hpp b/lib/3rdParty/boost/boost/core/scoped_enum.hpp index 78c548b..56dd0ed 100644 --- a/lib/3rdParty/boost/boost/core/scoped_enum.hpp +++ b/lib/3rdParty/boost/boost/core/scoped_enum.hpp @@ -43,7 +43,8 @@ namespace boost * @throws No-throws. */ template - UnderlyingType underlying_cast(EnumType v) + inline + BOOST_CONSTEXPR UnderlyingType underlying_cast(EnumType v) BOOST_NOEXCEPT { return v.get_underlying_value_(); } @@ -61,7 +62,7 @@ namespace boost */ template 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_(); } @@ -75,14 +76,15 @@ namespace boost }; template - UnderlyingType underlying_cast(EnumType v) + inline + BOOST_CONSTEXPR UnderlyingType underlying_cast(EnumType v) BOOST_NOEXCEPT { return static_cast(v); } template inline - EnumType native_value(EnumType e) + BOOST_CONSTEXPR EnumType native_value(EnumType e) BOOST_NOEXCEPT { return e; } @@ -96,7 +98,7 @@ namespace boost #ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #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 @@ -115,8 +117,8 @@ namespace boost typedef void is_boost_scoped_enum_tag; \ typedef UnderlyingType underlying_type; \ EnumType() BOOST_NOEXCEPT {} \ - explicit EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {} \ - underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; } \ + explicit BOOST_CONSTEXPR EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {} \ + BOOST_CONSTEXPR underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; } \ BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \ private: \ underlying_type v_; \ @@ -125,30 +127,30 @@ namespace boost enum enum_type #define BOOST_SCOPED_ENUM_DECLARE_END2() \ - 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 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 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 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_)(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 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 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_); } \ + BOOST_CONSTEXPR enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \ + friend BOOST_CONSTEXPR 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, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \ + friend BOOST_CONSTEXPR bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==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 BOOST_CONSTEXPR bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \ + friend BOOST_CONSTEXPR bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \ + friend BOOST_CONSTEXPR bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)(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, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \ + friend BOOST_CONSTEXPR bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>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 BOOST_CONSTEXPR bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \ + 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) \ ; \ - EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \ + BOOST_CONSTEXPR EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \ BOOST_SCOPED_ENUM_DECLARE_END2() /** diff --git a/lib/3rdParty/boost/boost/current_function.hpp b/lib/3rdParty/boost/boost/current_function.hpp index 5c113f8..86955cb 100644 --- a/lib/3rdParty/boost/boost/current_function.hpp +++ b/lib/3rdParty/boost/boost/current_function.hpp @@ -28,7 +28,11 @@ namespace detail 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__ diff --git a/lib/3rdParty/boost/boost/detail/iterator.hpp b/lib/3rdParty/boost/boost/detail/iterator.hpp index c2e8f1e..2498ef4 100644 --- a/lib/3rdParty/boost/boost/detail/iterator.hpp +++ b/lib/3rdParty/boost/boost/detail/iterator.hpp @@ -9,6 +9,9 @@ // This header is obsolete and will be deprecated. #include +#if defined(__SUNPRO_CC) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) +#include +#endif namespace boost { @@ -19,6 +22,16 @@ namespace detail using std::iterator_traits; 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 boost diff --git a/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.hpp b/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.hpp index 2d7ed8b..d2fa26d 100644 --- a/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.hpp +++ b/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.hpp @@ -105,16 +105,18 @@ BOOST_UTF8_BEGIN_NAMESPACE // 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 { public: - explicit utf8_codecvt_facet(std::size_t no_locale_manage=0) - : std::codecvt(no_locale_manage) - {} + BOOST_UTF8_DECL explicit utf8_codecvt_facet(std::size_t no_locale_manage=0); + virtual ~utf8_codecvt_facet(){} protected: - virtual std::codecvt_base::result do_in( + BOOST_UTF8_DECL virtual std::codecvt_base::result do_in( std::mbstate_t& state, const char * from, const char * from_end, @@ -124,7 +126,7 @@ protected: wchar_t*& to_next ) const; - virtual std::codecvt_base::result do_out( + BOOST_UTF8_DECL virtual std::codecvt_base::result do_out( std::mbstate_t & state, const wchar_t * from, const wchar_t * from_end, @@ -148,11 +150,11 @@ protected: 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 // == 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 { return false; @@ -176,7 +178,7 @@ protected: // How many char objects can I process to get <= max_limit // wchar_t objects? - virtual int do_length( + BOOST_UTF8_DECL virtual int do_length( const std::mbstate_t &, const char * from, const char * from_end, diff --git a/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.ipp b/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.ipp index d39170f..753466b 100644 --- a/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.ipp +++ b/lib/3rdParty/boost/boost/detail/utf8_codecvt_facet.ipp @@ -30,8 +30,14 @@ BOOST_UTF8_BEGIN_NAMESPACE /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // implementation for wchar_t +BOOST_UTF8_DECL utf8_codecvt_facet::utf8_codecvt_facet( + std::size_t no_locale_manage +) : + std::codecvt(no_locale_manage) +{} + // 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*/, const char * from, const char * from_end, @@ -108,7 +114,7 @@ std::codecvt_base::result utf8_codecvt_facet::do_in( 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*/, const wchar_t * from, 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 // wchar_t objects? -int utf8_codecvt_facet::do_length( +BOOST_UTF8_DECL int utf8_codecvt_facet::do_length( const std::mbstate_t &, const char * from, const char * from_end, @@ -198,10 +204,10 @@ int utf8_codecvt_facet::do_length( last_octet_count = (get_octet_count(*from_next)); ++char_count; } - return static_cast(from_next-from_end); + return static_cast(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 ){ // 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 // == 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 ) const { return detail::get_cont_octet_out_count_impl(word); diff --git a/lib/3rdParty/boost/boost/detail/winapi/GetCurrentProcess.hpp b/lib/3rdParty/boost/boost/detail/winapi/GetCurrentProcess.hpp index 431b52f..9f56478 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/GetCurrentProcess.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/GetCurrentProcess.hpp @@ -10,25 +10,16 @@ #ifndef BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP #define BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -// Windows CE define GetCurrentProcess as an inline function in kfuncs.h -#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) -extern "C" { -BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentProcess(BOOST_DETAIL_WINAPI_VOID); -} +#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403) +#pragma message "This header is deprecated, use boost/detail/winapi/get_current_process.hpp instead." +#elif defined(_MSC_VER) +#pragma message("This header is deprecated, use boost/detail/winapi/get_current_process.hpp instead.") #endif -namespace boost { -namespace detail { -namespace winapi { -using ::GetCurrentProcess; -} -} -} - #endif // BOOST_DETAIL_WINAPI_GETCURRENTPROCESS_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/GetCurrentThread.hpp b/lib/3rdParty/boost/boost/detail/winapi/GetCurrentThread.hpp index cbcdc97..52dea5a 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/GetCurrentThread.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/GetCurrentThread.hpp @@ -10,25 +10,16 @@ #ifndef BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP #define BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -// Windows CE define GetCurrentThread as an inline function in kfuncs.h -#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) -extern "C" { -BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentThread(BOOST_DETAIL_WINAPI_VOID); -} +#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403) +#pragma message "This header is deprecated, use boost/detail/winapi/get_current_thread.hpp instead." +#elif defined(_MSC_VER) +#pragma message("This header is deprecated, use boost/detail/winapi/get_current_thread.hpp instead.") #endif -namespace boost { -namespace detail { -namespace winapi { -using ::GetCurrentThread; -} -} -} - #endif // BOOST_DETAIL_WINAPI_GETCURRENTTHREAD_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/GetLastError.hpp b/lib/3rdParty/boost/boost/detail/winapi/GetLastError.hpp index 8874ba8..8860f80 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/GetLastError.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/GetLastError.hpp @@ -10,24 +10,16 @@ #ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP #define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if !defined( BOOST_USE_WINDOWS_H ) -extern "C" { -BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetLastError(BOOST_DETAIL_WINAPI_VOID); -} +#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403) +#pragma message "This header is deprecated, use boost/detail/winapi/get_last_error.hpp instead." +#elif defined(_MSC_VER) +#pragma message("This header is deprecated, use boost/detail/winapi/get_last_error.hpp instead.") #endif -namespace boost { -namespace detail { -namespace winapi { -using ::GetLastError; -} -} -} - #endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/GetProcessTimes.hpp b/lib/3rdParty/boost/boost/detail/winapi/GetProcessTimes.hpp index 41b3f0e..8f625e6 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/GetProcessTimes.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/GetProcessTimes.hpp @@ -9,52 +9,16 @@ #ifndef BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP #define BOOST_DETAIL_WINAPI_GETPROCESSTIMES_HPP -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -// Windows CE does not define GetProcessTimes -#if !defined( UNDER_CE ) - -#include -#include - -#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); -} +#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403) +#pragma message "This header is deprecated, use boost/detail/winapi/get_process_times.hpp instead." +#elif defined(_MSC_VER) +#pragma message("This header is deprecated, use boost/detail/winapi/get_process_times.hpp instead.") #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 diff --git a/lib/3rdParty/boost/boost/detail/winapi/GetThreadTimes.hpp b/lib/3rdParty/boost/boost/detail/winapi/GetThreadTimes.hpp index 2e1eb8f..62c853c 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/GetThreadTimes.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/GetThreadTimes.hpp @@ -10,46 +10,16 @@ #ifndef BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP #define BOOST_DETAIL_WINAPI_GETTHREADTIMES_HPP -#include -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if !defined( BOOST_USE_WINDOWS_H ) -extern "C" { -BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI -GetThreadTimes( - boost::detail::winapi::HANDLE_ hThread, - ::_FILETIME* lpCreationTime, - ::_FILETIME* lpExitTime, - ::_FILETIME* lpKernelTime, - ::_FILETIME* lpUserTime); -} +#if defined(__GNUC__) && (((__GNUC__*100)+__GNUC_MINOR__) > 403) +#pragma message "This header is deprecated, use boost/detail/winapi/get_thread_times.hpp instead." +#elif defined(_MSC_VER) +#pragma message("This header is deprecated, use boost/detail/winapi/get_thread_times.hpp instead.") #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 diff --git a/lib/3rdParty/boost/boost/detail/winapi/access_rights.hpp b/lib/3rdParty/boost/boost/detail/winapi/access_rights.hpp new file mode 100644 index 0000000..951edb1 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/access_rights.hpp @@ -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 + +#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 diff --git a/lib/3rdParty/boost/boost/detail/winapi/basic_types.hpp b/lib/3rdParty/boost/boost/detail/winapi/basic_types.hpp index 717e934..30df135 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/basic_types.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/basic_types.hpp @@ -98,6 +98,10 @@ typedef ::PDWORD PDWORD_; typedef ::LPDWORD LPDWORD_; typedef ::HANDLE HANDLE_; typedef ::PHANDLE PHANDLE_; +typedef ::SHORT SHORT_; +typedef ::PSHORT PSHORT_; +typedef ::USHORT USHORT_; +typedef ::PUSHORT PUSHORT_; typedef ::INT INT_; typedef ::PINT PINT_; typedef ::LPINT LPINT_; @@ -150,6 +154,10 @@ typedef DWORD_* LPDWORD_; typedef void* HANDLE_; typedef void** PHANDLE_; +typedef short SHORT_; +typedef SHORT_* PSHORT_; +typedef unsigned short USHORT_; +typedef USHORT_* PUSHORT_; typedef int INT_; typedef INT_* PINT_; typedef INT_* LPINT_; diff --git a/lib/3rdParty/boost/boost/detail/winapi/character_code_conversion.hpp b/lib/3rdParty/boost/boost/detail/winapi/character_code_conversion.hpp new file mode 100644 index 0000000..d7c4cbe --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/character_code_conversion.hpp @@ -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 + +#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 diff --git a/lib/3rdParty/boost/boost/detail/winapi/condition_variable.hpp b/lib/3rdParty/boost/boost/detail/winapi/condition_variable.hpp index b47a537..7182d75 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/condition_variable.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/condition_variable.hpp @@ -57,6 +57,13 @@ namespace winapi { typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _RTL_CONDITION_VARIABLE { PVOID_ Ptr; } 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_SRWLOCK; diff --git a/lib/3rdParty/boost/boost/detail/winapi/config.hpp b/lib/3rdParty/boost/boost/detail/winapi/config.hpp index c67d670..1f08c2a 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/config.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/config.hpp @@ -9,15 +9,10 @@ #ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_ #define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_ -#include #if defined __MINGW32__ #include <_mingw.h> #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_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org). #if defined __MINGW32__ @@ -51,7 +46,7 @@ #define BOOST_USE_WINAPI_VERSION WINVER #else // 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 #else #define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6 @@ -69,4 +64,10 @@ #endif #endif +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + #endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/crypt.hpp b/lib/3rdParty/boost/boost/detail/winapi/crypt.hpp index 4d2ebed..0650845 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/crypt.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/crypt.hpp @@ -12,8 +12,8 @@ #include #include -#if defined( BOOST_USE_WINDOWS_H ) && defined( BOOST_WINAPI_IS_MINGW ) -// MinGW does not include this header as part of windows.h +#if defined( BOOST_USE_WINDOWS_H ) +// This header is not always included as part of windows.h #include #endif diff --git a/lib/3rdParty/boost/boost/detail/winapi/dbghelp.hpp b/lib/3rdParty/boost/boost/detail/winapi/dbghelp.hpp new file mode 100644 index 0000000..74add55 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/dbghelp.hpp @@ -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 + +#if defined( BOOST_USE_WINDOWS_H ) +#if !defined( BOOST_WINAPI_IS_MINGW ) +#include +#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 +#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(::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 diff --git a/lib/3rdParty/boost/boost/detail/winapi/directory_management.hpp b/lib/3rdParty/boost/boost/detail/winapi/directory_management.hpp index 61e406b..1da53c3 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/directory_management.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/directory_management.hpp @@ -11,6 +11,7 @@ #define BOOST_DETAIL_WINAPI_DIRECTORY_MANAGEMENT_HPP #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once diff --git a/lib/3rdParty/boost/boost/detail/winapi/dll.hpp b/lib/3rdParty/boost/boost/detail/winapi/dll.hpp index 5172f33..2872936 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/dll.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/dll.hpp @@ -77,8 +77,17 @@ GetModuleFileNameW( BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI FreeLibrary(boost::detail::winapi::HMODULE_ hModule); +#if !defined( UNDER_CE ) BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI 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; @@ -140,7 +149,23 @@ using ::LoadLibraryExW; using ::GetModuleHandleW; using ::GetModuleFileNameW; using ::FreeLibrary; + +#if !defined( UNDER_CE ) +// For backward compatibility, don't use directly. Use get_proc_address instead. 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) { diff --git a/lib/3rdParty/boost/boost/detail/winapi/environment.hpp b/lib/3rdParty/boost/boost/detail/winapi/environment.hpp new file mode 100644 index 0000000..c777c46 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/environment.hpp @@ -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 + +#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_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/error_codes.hpp b/lib/3rdParty/boost/boost/detail/winapi/error_codes.hpp new file mode 100644 index 0000000..e364fb0 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/error_codes.hpp @@ -0,0 +1,2959 @@ +// error_codes.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_ERROR_CODES_HPP_ +#define BOOST_DETAIL_WINAPI_ERROR_CODES_HPP_ + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +namespace boost { +namespace detail { +namespace winapi { + +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_XPS_ = 82; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_XAML_ = 43; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USN_ = 129; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BLBUI_ = 128; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SPP_ = 256; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WSB_ONLINE_ = 133; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DLS_ = 153; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BLB_CLI_ = 121; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BLB_ = 120; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WSBAPP_ = 122; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WPN_ = 62; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WMAAECMA_ = 1996; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINRM_ = 51; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINPE_ = 61; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWSUPDATE_ = 36; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWS_STORE_ = 63; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWS_SETUP_ = 48; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWS_DEFENDER_ = 80; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWS_CE_ = 24; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINDOWS_ = 8; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WINCODEC_DWRITE_DWM_ = 2200; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WIA_ = 33; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WER_ = 27; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WEP_ = 2049; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WEB_SOCKET_ = 886; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WEB_ = 885; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_VOLSNAP_ = 130; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_VOLMGR_ = 56; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_VISUALCPP_ = 109; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_VIRTUALIZATION_ = 55; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_VHD_ = 58; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_URT_ = 19; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_UMI_ = 22; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_UI_ = 42; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_TPM_SOFTWARE_ = 41; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_TPM_SERVICES_ = 40; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_TIERING_ = 131; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SYNCENGINE_ = 2050; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SXS_ = 23; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_STORAGE_ = 3; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_STATE_MANAGEMENT_ = 34; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SSPI_ = 9; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_SPACES_ = 231; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SOS_ = 160; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SCARD_ = 16; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SHELL_ = 39; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SETUPAPI_ = 15; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SECURITY_ = 9; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SDIAG_ = 60; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_SDBUS_ = 2305; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_RPC_ = 1; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_RESTORE_ = 256; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_SCRIPT_ = 112; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_PARSE_ = 113; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_RAS_ = 83; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_POWERSHELL_ = 84; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_PLA_ = 48; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_PIDGENX_ = 2561; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_P2P_INT_ = 98; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_P2P_ = 99; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_OPC_ = 81; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_ONLINE_ID_ = 134; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WIN32_ = 7; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_CONTROL_ = 10; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_WEBSERVICES_ = 61; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_NULL_ = 0; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_NDIS_ = 52; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_NAP_ = 39; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_MOBILE_ = 1793; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_METADIRECTORY_ = 35; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_MSMQ_ = 14; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_MEDIASERVER_ = 13; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_MBN_ = 84; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_LINGUISTIC_SERVICES_ = 305; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_LEAP_ = 2184; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_JSCRIPT_ = 2306; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_INTERNET_ = 12; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_ITF_ = 4; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_INPUT_ = 64; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_HYPERVISOR_ = 53; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_ACCELERATOR_ = 1536; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_HTTP_ = 25; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_GRAPHICS_ = 38; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_FWP_ = 50; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_FVE_ = 49; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_FILTER_MANAGER_ = 31; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_EAS_ = 85; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_EAP_ = 66; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DXGI_DDI_ = 2171; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DXGI_ = 2170; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DPLAY_ = 21; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DMSERVER_ = 256; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DISPATCH_ = 2; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DIRECTORYSERVICE_ = 37; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DIRECTMUSIC_ = 2168; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DIRECT3D11_ = 2172; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DIRECT3D10_ = 2169; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DIRECT2D_ = 2201; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DAF_ = 100; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_UTIL_ = 260; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT_ = 272; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_TFTP_ = 264; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_PXE_ = 263; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER_ = 289; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT_ = 290; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT_ = 259; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_IMAGING_ = 258; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING_ = 278; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_SERVER_ = 257; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER_ = 293; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEPLOYMENT_SERVICES_BINLSVC_ = 261; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEFRAG_ = 2304; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_DEBUGGERS_ = 176; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_CONFIGURATION_ = 33; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_COMPLUS_ = 17; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_USERMODE_COMMONLOG_ = 26; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_CMI_ = 54; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_CERT_ = 11; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BLUETOOTH_ATT_ = 101; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BCD_ = 57; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_BACKGROUNDCOPY_ = 32; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_AUDIOSTREAMING_ = 1094; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_AUDCLNT_ = 2185; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_AUDIO_ = 102; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_ACTION_QUEUE_ = 44; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_ACS_ = 20; +BOOST_CONSTEXPR_OR_CONST DWORD_ FACILITY_AAF_ = 18; + +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUCCESS_ = 0; +BOOST_CONSTEXPR_OR_CONST DWORD_ NO_ERROR_ = 0; + +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FUNCTION_ = 1; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_NOT_FOUND_ = 2; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATH_NOT_FOUND_ = 3; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_OPEN_FILES_ = 4; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_DENIED_ = 5; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_HANDLE_ = 6; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ARENA_TRASHED_ = 7; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_ENOUGH_MEMORY_ = 8; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_BLOCK_ = 9; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_ENVIRONMENT_ = 10; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_FORMAT_ = 11; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ACCESS_ = 12; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DATA_ = 13; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OUTOFMEMORY_ = 14; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DRIVE_ = 15; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CURRENT_DIRECTORY_ = 16; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SAME_DEVICE_ = 17; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_FILES_ = 18; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRITE_PROTECT_ = 19; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_UNIT_ = 20; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_READY_ = 21; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_COMMAND_ = 22; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CRC_ = 23; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_LENGTH_ = 24; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEEK_ = 25; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_DOS_DISK_ = 26; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECTOR_NOT_FOUND_ = 27; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OUT_OF_PAPER_ = 28; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRITE_FAULT_ = 29; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_READ_FAULT_ = 30; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GEN_FAILURE_ = 31; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHARING_VIOLATION_ = 32; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOCK_VIOLATION_ = 33; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRONG_DISK_ = 34; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHARING_BUFFER_EXCEEDED_ = 36; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HANDLE_EOF_ = 38; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HANDLE_DISK_FULL_ = 39; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SUPPORTED_ = 50; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REM_NOT_LIST_ = 51; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DUP_NAME_ = 52; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_NETPATH_ = 53; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETWORK_BUSY_ = 54; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEV_NOT_EXIST_ = 55; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_CMDS_ = 56; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ADAP_HDW_ERR_ = 57; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_NET_RESP_ = 58; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNEXP_NET_ERR_ = 59; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_REM_ADAP_ = 60; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTQ_FULL_ = 61; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SPOOL_SPACE_ = 62; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINT_CANCELLED_ = 63; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETNAME_DELETED_ = 64; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETWORK_ACCESS_DENIED_ = 65; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DEV_TYPE_ = 66; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_NET_NAME_ = 67; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_NAMES_ = 68; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_SESS_ = 69; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHARING_PAUSED_ = 70; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQ_NOT_ACCEP_ = 71; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REDIR_PAUSED_ = 72; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_EXISTS_ = 80; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_MAKE_ = 82; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_I24_ = 83; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OUT_OF_STRUCTURES_ = 84; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_ASSIGNED_ = 85; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PASSWORD_ = 86; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PARAMETER_ = 87; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NET_WRITE_FAULT_ = 88; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_PROC_SLOTS_ = 89; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_SEMAPHORES_ = 100; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXCL_SEM_ALREADY_OWNED_ = 101; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEM_IS_SET_ = 102; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_SEM_REQUESTS_ = 103; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_AT_INTERRUPT_TIME_ = 104; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEM_OWNER_DIED_ = 105; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEM_USER_LIMIT_ = 106; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_CHANGE_ = 107; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVE_LOCKED_ = 108; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BROKEN_PIPE_ = 109; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPEN_FAILED_ = 110; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BUFFER_OVERFLOW_ = 111; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_FULL_ = 112; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_SEARCH_HANDLES_ = 113; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TARGET_HANDLE_ = 114; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CATEGORY_ = 117; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_VERIFY_SWITCH_ = 118; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DRIVER_LEVEL_ = 119; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CALL_NOT_IMPLEMENTED_ = 120; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEM_TIMEOUT_ = 121; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSUFFICIENT_BUFFER_ = 122; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_NAME_ = 123; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LEVEL_ = 124; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_VOLUME_LABEL_ = 125; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MOD_NOT_FOUND_ = 126; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROC_NOT_FOUND_ = 127; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_NO_CHILDREN_ = 128; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CHILD_NOT_COMPLETE_ = 129; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIRECT_ACCESS_HANDLE_ = 130; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NEGATIVE_SEEK_ = 131; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEEK_ON_DEVICE_ = 132; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_JOIN_TARGET_ = 133; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_JOINED_ = 134; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_SUBSTED_ = 135; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_JOINED_ = 136; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SUBSTED_ = 137; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOIN_TO_JOIN_ = 138; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUBST_TO_SUBST_ = 139; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOIN_TO_SUBST_ = 140; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUBST_TO_JOIN_ = 141; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BUSY_DRIVE_ = 142; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SAME_DRIVE_ = 143; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIR_NOT_ROOT_ = 144; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIR_NOT_EMPTY_ = 145; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_SUBST_PATH_ = 146; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_JOIN_PATH_ = 147; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATH_BUSY_ = 148; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IS_SUBST_TARGET_ = 149; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_TRACE_ = 150; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EVENT_COUNT_ = 151; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_MUXWAITERS_ = 152; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LIST_FORMAT_ = 153; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LABEL_TOO_LONG_ = 154; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_TCBS_ = 155; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SIGNAL_REFUSED_ = 156; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISCARDED_ = 157; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_LOCKED_ = 158; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_THREADID_ADDR_ = 159; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_ARGUMENTS_ = 160; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_PATHNAME_ = 161; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SIGNAL_PENDING_ = 162; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MAX_THRDS_REACHED_ = 164; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOCK_FAILED_ = 167; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BUSY_ = 170; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_SUPPORT_IN_PROGRESS_ = 171; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANCEL_VIOLATION_ = 173; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ATOMIC_LOCKS_NOT_SUPPORTED_ = 174; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SEGMENT_NUMBER_ = 180; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ORDINAL_ = 182; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_EXISTS_ = 183; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FLAG_NUMBER_ = 186; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEM_NOT_FOUND_ = 187; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_STARTING_CODESEG_ = 188; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_STACKSEG_ = 189; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MODULETYPE_ = 190; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EXE_SIGNATURE_ = 191; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXE_MARKED_INVALID_ = 192; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_EXE_FORMAT_ = 193; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ITERATED_DATA_EXCEEDS_64k_ = 194; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MINALLOCSIZE_ = 195; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DYNLINK_FROM_INVALID_RING_ = 196; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IOPL_NOT_ENABLED_ = 197; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SEGDPL_ = 198; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_AUTODATASEG_EXCEEDS_64k_ = 199; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RING2SEG_MUST_BE_MOVABLE_ = 200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RELOC_CHAIN_XEEDS_SEGLIM_ = 201; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INFLOOP_IN_RELOC_CHAIN_ = 202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENVVAR_NOT_FOUND_ = 203; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SIGNAL_SENT_ = 205; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILENAME_EXCED_RANGE_ = 206; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RING2_STACK_IN_USE_ = 207; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_META_EXPANSION_TOO_LONG_ = 208; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SIGNAL_NUMBER_ = 209; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_1_INACTIVE_ = 210; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOCKED_ = 212; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_MODULES_ = 214; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NESTING_NOT_ALLOWED_ = 215; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXE_MACHINE_TYPE_MISMATCH_ = 216; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY_ = 217; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY_ = 218; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_CHECKED_OUT_ = 220; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CHECKOUT_REQUIRED_ = 221; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_FILE_TYPE_ = 222; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_TOO_LARGE_ = 223; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FORMS_AUTH_REQUIRED_ = 224; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VIRUS_INFECTED_ = 225; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VIRUS_DELETED_ = 226; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PIPE_LOCAL_ = 229; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_PIPE_ = 230; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PIPE_BUSY_ = 231; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_DATA_ = 232; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PIPE_NOT_CONNECTED_ = 233; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MORE_DATA_ = 234; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VC_DISCONNECTED_ = 240; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EA_NAME_ = 254; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EA_LIST_INCONSISTENT_ = 255; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_ITEMS_ = 259; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_COPY_ = 266; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIRECTORY_ = 267; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EAS_DIDNT_FIT_ = 275; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EA_FILE_CORRUPT_ = 276; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EA_TABLE_FULL_ = 277; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EA_HANDLE_ = 278; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EAS_NOT_SUPPORTED_ = 282; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_OWNER_ = 288; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_POSTS_ = 298; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PARTIAL_COPY_ = 299; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPLOCK_NOT_GRANTED_ = 300; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_OPLOCK_PROTOCOL_ = 301; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_TOO_FRAGMENTED_ = 302; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DELETE_PENDING_ = 303; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING_ = 304; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME_ = 305; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECURITY_STREAM_IS_INCONSISTENT_ = 306; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LOCK_RANGE_ = 307; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT_ = 308; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOTIFICATION_GUID_ALREADY_DEFINED_ = 309; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EXCEPTION_HANDLER_ = 310; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DUPLICATE_PRIVILEGES_ = 311; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_RANGES_PROCESSED_ = 312; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_ALLOWED_ON_SYSTEM_FILE_ = 313; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_RESOURCES_EXHAUSTED_ = 314; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TOKEN_ = 315; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_FEATURE_NOT_SUPPORTED_ = 316; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MR_MID_NOT_FOUND_ = 317; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SCOPE_NOT_FOUND_ = 318; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNDEFINED_SCOPE_ = 319; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CAP_ = 320; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_UNREACHABLE_ = 321; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_NO_RESOURCES_ = 322; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATA_CHECKSUM_ERROR_ = 323; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERMIXED_KERNEL_EA_OPERATION_ = 324; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED_ = 326; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OFFSET_ALIGNMENT_VIOLATION_ = 327; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FIELD_IN_PARAMETER_LIST_ = 328; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPERATION_IN_PROGRESS_ = 329; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DEVICE_PATH_ = 330; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_DESCRIPTORS_ = 331; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SCRUB_DATA_DISABLED_ = 332; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_REDUNDANT_STORAGE_ = 333; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESIDENT_FILE_NOT_SUPPORTED_ = 334; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COMPRESSED_FILE_NOT_SUPPORTED_ = 335; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIRECTORY_NOT_SUPPORTED_ = 336; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_READ_FROM_COPY_ = 337; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FT_WRITE_FAILURE_ = 338; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FT_DI_SCAN_REQUIRED_ = 339; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_KERNEL_INFO_VERSION_ = 340; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PEP_INFO_VERSION_ = 341; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_NOT_EXTERNALLY_BACKED_ = 342; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN_ = 343; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_NOACTION_REBOOT_ = 350; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_SHUTDOWN_ = 351; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_RESTART_ = 352; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MAX_SESSIONS_REACHED_ = 353; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_MODE_ALREADY_BACKGROUND_ = 400; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_MODE_NOT_BACKGROUND_ = 401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_MODE_ALREADY_BACKGROUND_ = 402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_MODE_NOT_BACKGROUND_ = 403; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_HARDWARE_ERROR_ = 483; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ADDRESS_ = 487; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_USER_PROFILE_LOAD_ = 500; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ARITHMETIC_OVERFLOW_ = 534; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PIPE_CONNECTED_ = 535; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PIPE_LISTENING_ = 536; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VERIFIER_STOP_ = 537; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ABIOS_ERROR_ = 538; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WX86_WARNING_ = 539; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WX86_ERROR_ = 540; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TIMER_NOT_CANCELED_ = 541; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNWIND_ = 542; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_STACK_ = 543; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_UNWIND_TARGET_ = 544; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PORT_ATTRIBUTES_ = 545; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PORT_MESSAGE_TOO_LONG_ = 546; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_QUOTA_LOWER_ = 547; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_ALREADY_ATTACHED_ = 548; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTRUCTION_MISALIGNMENT_ = 549; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILING_NOT_STARTED_ = 550; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILING_NOT_STOPPED_ = 551; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COULD_NOT_INTERPRET_ = 552; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILING_AT_LIMIT_ = 553; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_WAIT_ = 554; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_TERMINATE_SELF_ = 555; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNEXPECTED_MM_CREATE_ERR_ = 556; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNEXPECTED_MM_MAP_ERROR_ = 557; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNEXPECTED_MM_EXTEND_ERR_ = 558; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_FUNCTION_TABLE_ = 559; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_GUID_TRANSLATION_ = 560; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LDT_SIZE_ = 561; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LDT_OFFSET_ = 563; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LDT_DESCRIPTOR_ = 564; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_THREADS_ = 565; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_NOT_IN_PROCESS_ = 566; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGEFILE_QUOTA_EXCEEDED_ = 567; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_SERVER_CONFLICT_ = 568; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYNCHRONIZATION_REQUIRED_ = 569; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NET_OPEN_FAILED_ = 570; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IO_PRIVILEGE_FAILED_ = 571; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTROL_C_EXIT_ = 572; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MISSING_SYSTEMFILE_ = 573; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNHANDLED_EXCEPTION_ = 574; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_INIT_FAILURE_ = 575; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGEFILE_CREATE_FAILED_ = 576; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_IMAGE_HASH_ = 577; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_PAGEFILE_ = 578; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ILLEGAL_FLOAT_CONTEXT_ = 579; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_EVENT_PAIR_ = 580; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_CTRLR_CONFIG_ERROR_ = 581; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ILLEGAL_CHARACTER_ = 582; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNDEFINED_CHARACTER_ = 583; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOPPY_VOLUME_ = 584; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT_ = 585; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BACKUP_CONTROLLER_ = 586; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUTANT_LIMIT_EXCEEDED_ = 587; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FS_DRIVER_REQUIRED_ = 588; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_LOAD_REGISTRY_FILE_ = 589; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEBUG_ATTACH_FAILED_ = 590; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_PROCESS_TERMINATED_ = 591; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATA_NOT_ACCEPTED_ = 592; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VDM_HARD_ERROR_ = 593; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_CANCEL_TIMEOUT_ = 594; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPLY_MESSAGE_MISMATCH_ = 595; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOST_WRITEBEHIND_DATA_ = 596; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLIENT_SERVER_PARAMETERS_INVALID_ = 597; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_TINY_STREAM_ = 598; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STACK_OVERFLOW_READ_ = 599; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONVERT_TO_LARGE_ = 600; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FOUND_OUT_OF_SCOPE_ = 601; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALLOCATE_BUCKET_ = 602; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MARSHALL_OVERFLOW_ = 603; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_VARIANT_ = 604; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_COMPRESSION_BUFFER_ = 605; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_AUDIT_FAILED_ = 606; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TIMER_RESOLUTION_NOT_SET_ = 607; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSUFFICIENT_LOGON_INFO_ = 608; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DLL_ENTRYPOINT_ = 609; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_SERVICE_ENTRYPOINT_ = 610; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IP_ADDRESS_CONFLICT1_ = 611; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IP_ADDRESS_CONFLICT2_ = 612; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REGISTRY_QUOTA_LIMIT_ = 613; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_CALLBACK_ACTIVE_ = 614; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PWD_TOO_SHORT_ = 615; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PWD_TOO_RECENT_ = 616; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PWD_HISTORY_CONFLICT_ = 617; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNSUPPORTED_COMPRESSION_ = 618; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_HW_PROFILE_ = 619; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PLUGPLAY_DEVICE_PATH_ = 620; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUOTA_LIST_INCONSISTENT_ = 621; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVALUATION_EXPIRATION_ = 622; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ILLEGAL_DLL_RELOCATION_ = 623; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DLL_INIT_FAILED_LOGOFF_ = 624; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VALIDATE_CONTINUE_ = 625; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_MATCHES_ = 626; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RANGE_LIST_CONFLICT_ = 627; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVER_SID_MISMATCH_ = 628; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_ENABLE_DENY_ONLY_ = 629; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOAT_MULTIPLE_FAULTS_ = 630; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOAT_MULTIPLE_TRAPS_ = 631; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOINTERFACE_ = 632; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_FAILED_SLEEP_ = 633; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_SYSTEM_FILE_ = 634; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COMMITMENT_MINIMUM_ = 635; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_RESTART_ENUMERATION_ = 636; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_IMAGE_BAD_SIGNATURE_ = 637; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_REBOOT_REQUIRED_ = 638; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSUFFICIENT_POWER_ = 639; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MULTIPLE_FAULT_VIOLATION_ = 640; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_SHUTDOWN_ = 641; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PORT_NOT_SET_ = 642; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_VERSION_CHECK_FAILURE_ = 643; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RANGE_NOT_FOUND_ = 644; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SAFE_MODE_DRIVER_ = 646; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAILED_DRIVER_ENTRY_ = 647; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_ENUMERATION_ERROR_ = 648; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MOUNT_POINT_NOT_RESOLVED_ = 649; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DEVICE_OBJECT_PARAMETER_ = 650; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_OCCURED_ = 651; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_DATABASE_ERROR_ = 652; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_HIVE_TOO_LARGE_ = 653; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_FAILED_PRIOR_UNLOAD_ = 654; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLSNAP_PREPARE_HIBERNATE_ = 655; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HIBERNATION_FAILURE_ = 656; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PWD_TOO_LONG_ = 657; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_SYSTEM_LIMITATION_ = 665; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ASSERTION_FAILURE_ = 668; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACPI_ERROR_ = 669; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WOW_ASSERTION_ = 670; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_BAD_MPS_TABLE_ = 671; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_TRANSLATION_FAILED_ = 672; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_IRQ_TRANSLATION_FAILED_ = 673; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PNP_INVALID_ID_ = 674; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAKE_SYSTEM_DEBUGGER_ = 675; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HANDLES_CLOSED_ = 676; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXTRANEOUS_INFORMATION_ = 677; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RXACT_COMMIT_NECESSARY_ = 678; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_CHECK_ = 679; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GUID_SUBSTITUTION_MADE_ = 680; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STOPPED_ON_SYMLINK_ = 681; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LONGJUMP_ = 682; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PLUGPLAY_QUERY_VETOED_ = 683; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNWIND_CONSOLIDATE_ = 684; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REGISTRY_HIVE_RECOVERED_ = 685; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DLL_MIGHT_BE_INSECURE_ = 686; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DLL_MIGHT_BE_INCOMPATIBLE_ = 687; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_EXCEPTION_NOT_HANDLED_ = 688; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_REPLY_LATER_ = 689; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE_ = 690; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_TERMINATE_THREAD_ = 691; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_TERMINATE_PROCESS_ = 692; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_CONTROL_C_ = 693; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_PRINTEXCEPTION_C_ = 694; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_RIPEXCEPTION_ = 695; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_CONTROL_BREAK_ = 696; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_COMMAND_EXCEPTION_ = 697; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_NAME_EXISTS_ = 698; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_WAS_SUSPENDED_ = 699; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMAGE_NOT_AT_BASE_ = 700; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RXACT_STATE_CREATED_ = 701; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SEGMENT_NOTIFICATION_ = 702; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_CURRENT_DIRECTORY_ = 703; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FT_READ_RECOVERY_FROM_BACKUP_ = 704; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FT_WRITE_RECOVERY_ = 705; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMAGE_MACHINE_TYPE_MISMATCH_ = 706; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECEIVE_PARTIAL_ = 707; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECEIVE_EXPEDITED_ = 708; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECEIVE_PARTIAL_EXPEDITED_ = 709; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVENT_DONE_ = 710; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVENT_PENDING_ = 711; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CHECKING_FILE_SYSTEM_ = 712; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FATAL_APP_EXIT_ = 713; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PREDEFINED_HANDLE_ = 714; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAS_UNLOCKED_ = 715; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NOTIFICATION_ = 716; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAS_LOCKED_ = 717; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_HARD_ERROR_ = 718; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_WIN32_ = 719; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE_ = 720; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_YIELD_PERFORMED_ = 721; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TIMER_RESUME_IGNORED_ = 722; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ARBITRATION_UNHANDLED_ = 723; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CARDBUS_NOT_SUPPORTED_ = 724; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MP_PROCESSOR_MISMATCH_ = 725; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HIBERNATED_ = 726; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESUME_HIBERNATION_ = 727; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FIRMWARE_UPDATED_ = 728; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVERS_LEAKING_LOCKED_PAGES_ = 729; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAKE_SYSTEM_ = 730; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_1_ = 731; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_2_ = 732; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_3_ = 733; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_63_ = 734; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ABANDONED_WAIT_0_ = 735; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ABANDONED_WAIT_63_ = 736; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_USER_APC_ = 737; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_KERNEL_APC_ = 738; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALERTED_ = 739; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ELEVATION_REQUIRED_ = 740; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPARSE_ = 741; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPLOCK_BREAK_IN_PROGRESS_ = 742; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLUME_MOUNTED_ = 743; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RXACT_COMMITTED_ = 744; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOTIFY_CLEANUP_ = 745; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED_ = 746; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGE_FAULT_TRANSITION_ = 747; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGE_FAULT_DEMAND_ZERO_ = 748; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGE_FAULT_COPY_ON_WRITE_ = 749; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGE_FAULT_GUARD_PAGE_ = 750; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGE_FAULT_PAGING_FILE_ = 751; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CACHE_PAGE_LOCKED_ = 752; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CRASH_DUMP_ = 753; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BUFFER_ALL_ZEROS_ = 754; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPARSE_OBJECT_ = 755; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_REQUIREMENTS_CHANGED_ = 756; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSLATION_COMPLETE_ = 757; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOTHING_TO_TERMINATE_ = 758; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_NOT_IN_JOB_ = 759; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_IN_JOB_ = 760; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLSNAP_HIBERNATE_READY_ = 761; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY_ = 762; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED_ = 763; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERRUPT_STILL_CONNECTED_ = 764; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WAIT_FOR_OPLOCK_ = 765; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_EXCEPTION_HANDLED_ = 766; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DBG_CONTINUE_ = 767; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CALLBACK_POP_STACK_ = 768; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COMPRESSION_DISABLED_ = 769; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANTFETCHBACKWARDS_ = 770; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANTSCROLLBACKWARDS_ = 771; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ROWSNOTRELEASED_ = 772; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_ACCESSOR_FLAGS_ = 773; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ERRORS_ENCOUNTERED_ = 774; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_CAPABLE_ = 775; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQUEST_OUT_OF_SEQUENCE_ = 776; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VERSION_PARSE_ERROR_ = 777; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BADSTARTPOSITION_ = 778; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMORY_HARDWARE_ = 779; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_REPAIR_DISABLED_ = 780; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE_ = 781; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_POWERSTATE_TRANSITION_ = 782; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION_ = 783; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_EXCEPTION_ = 784; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_AUDIT_BY_POLICY_ = 785; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY_ = 786; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ABANDON_HIBERFILE_ = 787; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED_ = 788; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR_ = 789; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR_ = 790; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_MCFG_TABLE_ = 791; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_REPAIR_REDIRECTED_ = 792; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_REPAIR_UNSUCCESSFUL_ = 793; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_LOG_OVERFULL_ = 794; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_LOG_CORRUPTED_ = 795; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_LOG_UNAVAILABLE_ = 796; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_LOG_DELETED_FULL_ = 797; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORRUPT_LOG_CLEARED_ = 798; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ORPHAN_NAME_EXHAUSTED_ = 799; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE_ = 800; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_GRANT_REQUESTED_OPLOCK_ = 801; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_BREAK_OPLOCK_ = 802; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPLOCK_HANDLE_CLOSED_ = 803; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_ACE_CONDITION_ = 804; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ACE_CONDITION_ = 805; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_HANDLE_REVOKED_ = 806; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMAGE_AT_DIFFERENT_BASE_ = 807; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENCRYPTED_IO_NOT_POSSIBLE_ = 808; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EA_ACCESS_DENIED_ = 994; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPERATION_ABORTED_ = 995; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IO_INCOMPLETE_ = 996; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IO_PENDING_ = 997; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOACCESS_ = 998; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SWAPERROR_ = 999; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STACK_OVERFLOW_ = 1001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MESSAGE_ = 1002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CAN_NOT_COMPLETE_ = 1003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FLAGS_ = 1004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNRECOGNIZED_VOLUME_ = 1005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_INVALID_ = 1006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FULLSCREEN_MODE_ = 1007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_TOKEN_ = 1008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BADDB_ = 1009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BADKEY_ = 1010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANTOPEN_ = 1011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANTREAD_ = 1012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANTWRITE_ = 1013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REGISTRY_RECOVERED_ = 1014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REGISTRY_CORRUPT_ = 1015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REGISTRY_IO_FAILED_ = 1016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_REGISTRY_FILE_ = 1017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_KEY_DELETED_ = 1018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_LOG_SPACE_ = 1019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_KEY_HAS_CHILDREN_ = 1020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CHILD_MUST_BE_VOLATILE_ = 1021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOTIFY_ENUM_DIR_ = 1022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENT_SERVICES_RUNNING_ = 1051; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SERVICE_CONTROL_ = 1052; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_REQUEST_TIMEOUT_ = 1053; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NO_THREAD_ = 1054; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_DATABASE_LOCKED_ = 1055; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_ALREADY_RUNNING_ = 1056; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SERVICE_ACCOUNT_ = 1057; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_DISABLED_ = 1058; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CIRCULAR_DEPENDENCY_ = 1059; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_DOES_NOT_EXIST_ = 1060; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_CANNOT_ACCEPT_CTRL_ = 1061; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NOT_ACTIVE_ = 1062; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAILED_SERVICE_CONTROLLER_CONNECT_ = 1063; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXCEPTION_IN_SERVICE_ = 1064; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATABASE_DOES_NOT_EXIST_ = 1065; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_SPECIFIC_ERROR_ = 1066; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_ABORTED_ = 1067; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_DEPENDENCY_FAIL_ = 1068; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_LOGON_FAILED_ = 1069; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_START_HANG_ = 1070; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SERVICE_LOCK_ = 1071; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_MARKED_FOR_DELETE_ = 1072; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_EXISTS_ = 1073; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_RUNNING_LKG_ = 1074; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_DEPENDENCY_DELETED_ = 1075; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BOOT_ALREADY_ACCEPTED_ = 1076; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NEVER_STARTED_ = 1077; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DUPLICATE_SERVICE_NAME_ = 1078; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIFFERENT_SERVICE_ACCOUNT_ = 1079; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_DETECT_DRIVER_FAILURE_ = 1080; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_DETECT_PROCESS_ABORT_ = 1081; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_RECOVERY_PROGRAM_ = 1082; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NOT_IN_EXE_ = 1083; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SAFEBOOT_SERVICE_ = 1084; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_END_OF_MEDIA_ = 1100; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILEMARK_DETECTED_ = 1101; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BEGINNING_OF_MEDIA_ = 1102; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SETMARK_DETECTED_ = 1103; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_DATA_DETECTED_ = 1104; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PARTITION_FAILURE_ = 1105; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_BLOCK_LENGTH_ = 1106; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_NOT_PARTITIONED_ = 1107; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_LOCK_MEDIA_ = 1108; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_UNLOAD_MEDIA_ = 1109; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_CHANGED_ = 1110; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BUS_RESET_ = 1111; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MEDIA_IN_DRIVE_ = 1112; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_UNICODE_TRANSLATION_ = 1113; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DLL_INIT_FAILED_ = 1114; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHUTDOWN_IN_PROGRESS_ = 1115; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SHUTDOWN_IN_PROGRESS_ = 1116; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IO_DEVICE_ = 1117; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERIAL_NO_DEVICE_ = 1118; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IRQ_BUSY_ = 1119; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MORE_WRITES_ = 1120; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COUNTER_TIMEOUT_ = 1121; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOPPY_ID_MARK_NOT_FOUND_ = 1122; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOPPY_WRONG_CYLINDER_ = 1123; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOPPY_UNKNOWN_ERROR_ = 1124; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOPPY_BAD_REGISTERS_ = 1125; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_RECALIBRATE_FAILED_ = 1126; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_OPERATION_FAILED_ = 1127; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_RESET_FAILED_ = 1128; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EOM_OVERFLOW_ = 1129; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_ENOUGH_SERVER_MEMORY_ = 1130; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POSSIBLE_DEADLOCK_ = 1131; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MAPPED_ALIGNMENT_ = 1132; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SET_POWER_STATE_VETOED_ = 1140; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SET_POWER_STATE_FAILED_ = 1141; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_LINKS_ = 1142; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OLD_WIN_VERSION_ = 1150; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_WRONG_OS_ = 1151; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SINGLE_INSTANCE_APP_ = 1152; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RMODE_APP_ = 1153; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DLL_ = 1154; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_ASSOCIATION_ = 1155; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DDE_FAIL_ = 1156; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DLL_NOT_FOUND_ = 1157; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_USER_HANDLES_ = 1158; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MESSAGE_SYNC_ONLY_ = 1159; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SOURCE_ELEMENT_EMPTY_ = 1160; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DESTINATION_ELEMENT_FULL_ = 1161; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ILLEGAL_ELEMENT_ADDRESS_ = 1162; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MAGAZINE_NOT_PRESENT_ = 1163; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_REINITIALIZATION_NEEDED_ = 1164; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_REQUIRES_CLEANING_ = 1165; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_DOOR_OPEN_ = 1166; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_NOT_CONNECTED_ = 1167; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_FOUND_ = 1168; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MATCH_ = 1169; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SET_NOT_FOUND_ = 1170; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POINT_NOT_FOUND_ = 1171; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_TRACKING_SERVICE_ = 1172; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_VOLUME_ID_ = 1173; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_REMOVE_REPLACED_ = 1175; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_MOVE_REPLACEMENT_ = 1176; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_MOVE_REPLACEMENT_2_ = 1177; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOURNAL_DELETE_IN_PROGRESS_ = 1178; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOURNAL_NOT_ACTIVE_ = 1179; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POTENTIAL_FILE_FOUND_ = 1180; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOURNAL_ENTRY_DELETED_ = 1181; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHUTDOWN_IS_SCHEDULED_ = 1190; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHUTDOWN_USERS_LOGGED_ON_ = 1191; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DEVICE_ = 1200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_UNAVAIL_ = 1201; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_ALREADY_REMEMBERED_ = 1202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_NET_OR_BAD_PATH_ = 1203; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_PROVIDER_ = 1204; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_OPEN_PROFILE_ = 1205; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_PROFILE_ = 1206; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_CONTAINER_ = 1207; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXTENDED_ERROR_ = 1208; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_GROUPNAME_ = 1209; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_COMPUTERNAME_ = 1210; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EVENTNAME_ = 1211; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DOMAINNAME_ = 1212; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SERVICENAME_ = 1213; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_NETNAME_ = 1214; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SHARENAME_ = 1215; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PASSWORDNAME_ = 1216; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MESSAGENAME_ = 1217; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MESSAGEDEST_ = 1218; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SESSION_CREDENTIAL_CONFLICT_ = 1219; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOTE_SESSION_LIMIT_EXCEEDED_ = 1220; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DUP_DOMAINNAME_ = 1221; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_NETWORK_ = 1222; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANCELLED_ = 1223; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_USER_MAPPED_FILE_ = 1224; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_REFUSED_ = 1225; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GRACEFUL_DISCONNECT_ = 1226; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ADDRESS_ALREADY_ASSOCIATED_ = 1227; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ADDRESS_NOT_ASSOCIATED_ = 1228; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_INVALID_ = 1229; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_ACTIVE_ = 1230; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETWORK_UNREACHABLE_ = 1231; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOST_UNREACHABLE_ = 1232; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROTOCOL_UNREACHABLE_ = 1233; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PORT_UNREACHABLE_ = 1234; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQUEST_ABORTED_ = 1235; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_ABORTED_ = 1236; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RETRY_ = 1237; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTION_COUNT_LIMIT_ = 1238; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGIN_TIME_RESTRICTION_ = 1239; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGIN_WKSTA_RESTRICTION_ = 1240; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCORRECT_ADDRESS_ = 1241; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_REGISTERED_ = 1242; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NOT_FOUND_ = 1243; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_AUTHENTICATED_ = 1244; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_LOGGED_ON_ = 1245; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTINUE_ = 1246; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_INITIALIZED_ = 1247; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_MORE_DEVICES_ = 1248; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_SITE_ = 1249; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_CONTROLLER_EXISTS_ = 1250; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ONLY_IF_CONNECTED_ = 1251; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OVERRIDE_NOCHANGES_ = 1252; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_USER_PROFILE_ = 1253; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SUPPORTED_ON_SBS_ = 1254; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVER_SHUTDOWN_IN_PROGRESS_ = 1255; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOST_DOWN_ = 1256; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NON_ACCOUNT_SID_ = 1257; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NON_DOMAIN_SID_ = 1258; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APPHELP_BLOCK_ = 1259; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_DISABLED_BY_POLICY_ = 1260; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REG_NAT_CONSUMPTION_ = 1261; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CSCSHARE_OFFLINE_ = 1262; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PKINIT_FAILURE_ = 1263; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SMARTCARD_SUBSYSTEM_FAILURE_ = 1264; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOWNGRADE_DETECTED_ = 1265; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MACHINE_LOCKED_ = 1271; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CALLBACK_SUPPLIED_INVALID_DATA_ = 1273; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED_ = 1274; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_BLOCKED_ = 1275; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_IMPORT_OF_NON_DLL_ = 1276; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_DISABLED_WEBBLADE_ = 1277; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER_ = 1278; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECOVERY_FAILURE_ = 1279; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_FIBER_ = 1280; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_THREAD_ = 1281; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STACK_BUFFER_OVERRUN_ = 1282; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PARAMETER_QUOTA_EXCEEDED_ = 1283; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEBUGGER_INACTIVE_ = 1284; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DELAY_LOAD_FAILED_ = 1285; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VDM_DISALLOWED_ = 1286; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNIDENTIFIED_ERROR_ = 1287; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CRUNTIME_PARAMETER_ = 1288; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BEYOND_VDL_ = 1289; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCOMPATIBLE_SERVICE_SID_TYPE_ = 1290; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVER_PROCESS_TERMINATED_ = 1291; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMPLEMENTATION_LIMIT_ = 1292; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROCESS_IS_PROTECTED_ = 1293; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICE_NOTIFY_CLIENT_LAGGING_ = 1294; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_QUOTA_EXCEEDED_ = 1295; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTENT_BLOCKED_ = 1296; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE_ = 1297; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_HANG_ = 1298; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LABEL_ = 1299; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_ALL_ASSIGNED_ = 1300; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SOME_NOT_MAPPED_ = 1301; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_QUOTAS_FOR_ACCOUNT_ = 1302; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOCAL_USER_SESSION_KEY_ = 1303; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NULL_LM_PASSWORD_ = 1304; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_REVISION_ = 1305; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REVISION_MISMATCH_ = 1306; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_OWNER_ = 1307; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRIMARY_GROUP_ = 1308; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_IMPERSONATION_TOKEN_ = 1309; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_DISABLE_MANDATORY_ = 1310; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_LOGON_SERVERS_ = 1311; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_LOGON_SESSION_ = 1312; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_PRIVILEGE_ = 1313; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRIVILEGE_NOT_HELD_ = 1314; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ACCOUNT_NAME_ = 1315; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_USER_EXISTS_ = 1316; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_USER_ = 1317; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GROUP_EXISTS_ = 1318; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_GROUP_ = 1319; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMBER_IN_GROUP_ = 1320; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMBER_NOT_IN_GROUP_ = 1321; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LAST_ADMIN_ = 1322; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRONG_PASSWORD_ = 1323; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ILL_FORMED_PASSWORD_ = 1324; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PASSWORD_RESTRICTION_ = 1325; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_FAILURE_ = 1326; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCOUNT_RESTRICTION_ = 1327; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LOGON_HOURS_ = 1328; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_WORKSTATION_ = 1329; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PASSWORD_EXPIRED_ = 1330; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCOUNT_DISABLED_ = 1331; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NONE_MAPPED_ = 1332; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_LUIDS_REQUESTED_ = 1333; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LUIDS_EXHAUSTED_ = 1334; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SUB_AUTHORITY_ = 1335; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ACL_ = 1336; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SID_ = 1337; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SECURITY_DESCR_ = 1338; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_INHERITANCE_ACL_ = 1340; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVER_DISABLED_ = 1341; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVER_NOT_DISABLED_ = 1342; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ID_AUTHORITY_ = 1343; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALLOTTED_SPACE_EXCEEDED_ = 1344; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_GROUP_ATTRIBUTES_ = 1345; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_IMPERSONATION_LEVEL_ = 1346; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_OPEN_ANONYMOUS_ = 1347; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_VALIDATION_CLASS_ = 1348; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_TOKEN_TYPE_ = 1349; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SECURITY_ON_OBJECT_ = 1350; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_ACCESS_DOMAIN_INFO_ = 1351; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SERVER_STATE_ = 1352; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DOMAIN_STATE_ = 1353; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DOMAIN_ROLE_ = 1354; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_DOMAIN_ = 1355; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_EXISTS_ = 1356; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_LIMIT_EXCEEDED_ = 1357; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERNAL_DB_CORRUPTION_ = 1358; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERNAL_ERROR_ = 1359; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GENERIC_NOT_MAPPED_ = 1360; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DESCRIPTOR_FORMAT_ = 1361; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_LOGON_PROCESS_ = 1362; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_SESSION_EXISTS_ = 1363; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_PACKAGE_ = 1364; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_LOGON_SESSION_STATE_ = 1365; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_SESSION_COLLISION_ = 1366; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LOGON_TYPE_ = 1367; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_IMPERSONATE_ = 1368; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RXACT_INVALID_STATE_ = 1369; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RXACT_COMMIT_FAILURE_ = 1370; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPECIAL_ACCOUNT_ = 1371; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPECIAL_GROUP_ = 1372; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPECIAL_USER_ = 1373; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMBERS_PRIMARY_GROUP_ = 1374; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOKEN_ALREADY_IN_USE_ = 1375; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_ALIAS_ = 1376; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMBER_NOT_IN_ALIAS_ = 1377; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEMBER_IN_ALIAS_ = 1378; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALIAS_EXISTS_ = 1379; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_NOT_GRANTED_ = 1380; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_SECRETS_ = 1381; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECRET_TOO_LONG_ = 1382; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INTERNAL_DB_ERROR_ = 1383; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_CONTEXT_IDS_ = 1384; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOGON_TYPE_NOT_GRANTED_ = 1385; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NT_CROSS_ENCRYPTION_REQUIRED_ = 1386; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUCH_MEMBER_ = 1387; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MEMBER_ = 1388; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TOO_MANY_SIDS_ = 1389; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LM_CROSS_ENCRYPTION_REQUIRED_ = 1390; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_INHERITANCE_ = 1391; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_CORRUPT_ = 1392; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_CORRUPT_ = 1393; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_USER_SESSION_KEY_ = 1394; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LICENSE_QUOTA_EXCEEDED_ = 1395; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRONG_TARGET_NAME_ = 1396; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUTUAL_AUTH_FAILED_ = 1397; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TIME_SKEW_ = 1398; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CURRENT_DOMAIN_NOT_ALLOWED_ = 1399; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_WINDOW_HANDLE_ = 1400; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MENU_HANDLE_ = 1401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CURSOR_HANDLE_ = 1402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ACCEL_HANDLE_ = 1403; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_HOOK_HANDLE_ = 1404; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DWP_HANDLE_ = 1405; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TLW_WITH_WSCHILD_ = 1406; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_FIND_WND_CLASS_ = 1407; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WINDOW_OF_OTHER_THREAD_ = 1408; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOTKEY_ALREADY_REGISTERED_ = 1409; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLASS_ALREADY_EXISTS_ = 1410; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLASS_DOES_NOT_EXIST_ = 1411; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLASS_HAS_WINDOWS_ = 1412; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_INDEX_ = 1413; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ICON_HANDLE_ = 1414; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRIVATE_DIALOG_INDEX_ = 1415; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LISTBOX_ID_NOT_FOUND_ = 1416; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_WILDCARD_CHARACTERS_ = 1417; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLIPBOARD_NOT_OPEN_ = 1418; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOTKEY_NOT_REGISTERED_ = 1419; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WINDOW_NOT_DIALOG_ = 1420; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTROL_ID_NOT_FOUND_ = 1421; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_COMBOBOX_MESSAGE_ = 1422; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WINDOW_NOT_COMBOBOX_ = 1423; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_EDIT_HEIGHT_ = 1424; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DC_NOT_FOUND_ = 1425; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_HOOK_FILTER_ = 1426; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FILTER_PROC_ = 1427; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOOK_NEEDS_HMOD_ = 1428; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GLOBAL_ONLY_HOOK_ = 1429; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_JOURNAL_HOOK_SET_ = 1430; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOOK_NOT_INSTALLED_ = 1431; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LB_MESSAGE_ = 1432; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SETCOUNT_ON_BAD_LB_ = 1433; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LB_WITHOUT_TABSTOPS_ = 1434; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DESTROY_OBJECT_OF_OTHER_THREAD_ = 1435; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CHILD_WINDOW_MENU_ = 1436; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SYSTEM_MENU_ = 1437; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MSGBOX_STYLE_ = 1438; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SPI_VALUE_ = 1439; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SCREEN_ALREADY_LOCKED_ = 1440; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HWNDS_HAVE_DIFF_PARENT_ = 1441; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_CHILD_WINDOW_ = 1442; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_GW_COMMAND_ = 1443; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_THREAD_ID_ = 1444; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NON_MDICHILD_WINDOW_ = 1445; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POPUP_ALREADY_ACTIVE_ = 1446; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SCROLLBARS_ = 1447; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SCROLLBAR_RANGE_ = 1448; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SHOWWIN_COMMAND_ = 1449; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SYSTEM_RESOURCES_ = 1450; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NONPAGED_SYSTEM_RESOURCES_ = 1451; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGED_SYSTEM_RESOURCES_ = 1452; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WORKING_SET_QUOTA_ = 1453; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PAGEFILE_QUOTA_ = 1454; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COMMITMENT_LIMIT_ = 1455; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MENU_ITEM_NOT_FOUND_ = 1456; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_KEYBOARD_HANDLE_ = 1457; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOOK_TYPE_NOT_ALLOWED_ = 1458; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION_ = 1459; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TIMEOUT_ = 1460; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MONITOR_HANDLE_ = 1461; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCORRECT_SIZE_ = 1462; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYMLINK_CLASS_DISABLED_ = 1463; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYMLINK_NOT_SUPPORTED_ = 1464; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_XML_PARSE_ERROR_ = 1465; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_XMLDSIG_ERROR_ = 1466; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESTART_APPLICATION_ = 1467; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRONG_COMPARTMENT_ = 1468; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_AUTHIP_FAILURE_ = 1469; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_NVRAM_RESOURCES_ = 1470; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_GUI_PROCESS_ = 1471; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVENTLOG_FILE_CORRUPT_ = 1500; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVENTLOG_CANT_START_ = 1501; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_FILE_FULL_ = 1502; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVENTLOG_FILE_CHANGED_ = 1503; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TASK_NAME_ = 1550; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TASK_INDEX_ = 1551; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_THREAD_ALREADY_IN_TASK_ = 1552; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_SERVICE_FAILURE_ = 1601; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_USEREXIT_ = 1602; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_FAILURE_ = 1603; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_SUSPEND_ = 1604; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PRODUCT_ = 1605; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_FEATURE_ = 1606; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_COMPONENT_ = 1607; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PROPERTY_ = 1608; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_HANDLE_STATE_ = 1609; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_CONFIGURATION_ = 1610; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INDEX_ABSENT_ = 1611; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_SOURCE_ABSENT_ = 1612; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_VERSION_ = 1613; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRODUCT_UNINSTALLED_ = 1614; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_QUERY_SYNTAX_ = 1615; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FIELD_ = 1616; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_REMOVED_ = 1617; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_ALREADY_RUNNING_ = 1618; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_OPEN_FAILED_ = 1619; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_INVALID_ = 1620; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_UI_FAILURE_ = 1621; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_LOG_FAILURE_ = 1622; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_LANGUAGE_UNSUPPORTED_ = 1623; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_TRANSFORM_FAILURE_ = 1624; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_REJECTED_ = 1625; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FUNCTION_NOT_CALLED_ = 1626; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FUNCTION_FAILED_ = 1627; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TABLE_ = 1628; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATATYPE_MISMATCH_ = 1629; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNSUPPORTED_TYPE_ = 1630; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CREATE_FAILED_ = 1631; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_TEMP_UNWRITABLE_ = 1632; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PLATFORM_UNSUPPORTED_ = 1633; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_NOTUSED_ = 1634; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_PACKAGE_OPEN_FAILED_ = 1635; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_PACKAGE_INVALID_ = 1636; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_PACKAGE_UNSUPPORTED_ = 1637; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRODUCT_VERSION_ = 1638; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_COMMAND_LINE_ = 1639; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_REMOTE_DISALLOWED_ = 1640; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUCCESS_REBOOT_INITIATED_ = 1641; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_TARGET_NOT_FOUND_ = 1642; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_PACKAGE_REJECTED_ = 1643; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_TRANSFORM_REJECTED_ = 1644; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_REMOTE_PROHIBITED_ = 1645; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_REMOVAL_UNSUPPORTED_ = 1646; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PATCH_ = 1647; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_NO_SEQUENCE_ = 1648; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_REMOVAL_DISALLOWED_ = 1649; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PATCH_XML_ = 1650; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT_ = 1651; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_SERVICE_SAFEBOOT_ = 1652; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_FAST_EXCEPTION_ = 1653; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_REJECTED_ = 1654; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DYNAMIC_CODE_BLOCKED_ = 1655; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_STRING_BINDING_ = 1700; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_WRONG_KIND_OF_BINDING_ = 1701; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_BINDING_ = 1702; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROTSEQ_NOT_SUPPORTED_ = 1703; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_RPC_PROTSEQ_ = 1704; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_STRING_UUID_ = 1705; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_ENDPOINT_FORMAT_ = 1706; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_NET_ADDR_ = 1707; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_ENDPOINT_FOUND_ = 1708; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_TIMEOUT_ = 1709; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_OBJECT_NOT_FOUND_ = 1710; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ALREADY_REGISTERED_ = 1711; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_TYPE_ALREADY_REGISTERED_ = 1712; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ALREADY_LISTENING_ = 1713; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_PROTSEQS_REGISTERED_ = 1714; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOT_LISTENING_ = 1715; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_MGR_TYPE_ = 1716; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_IF_ = 1717; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_BINDINGS_ = 1718; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_PROTSEQS_ = 1719; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CANT_CREATE_ENDPOINT_ = 1720; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_OUT_OF_RESOURCES_ = 1721; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_SERVER_UNAVAILABLE_ = 1722; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_SERVER_TOO_BUSY_ = 1723; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_NETWORK_OPTIONS_ = 1724; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_CALL_ACTIVE_ = 1725; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CALL_FAILED_ = 1726; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CALL_FAILED_DNE_ = 1727; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROTOCOL_ERROR_ = 1728; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROXY_ACCESS_DENIED_ = 1729; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNSUPPORTED_TRANS_SYN_ = 1730; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNSUPPORTED_TYPE_ = 1732; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_TAG_ = 1733; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_BOUND_ = 1734; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_ENTRY_NAME_ = 1735; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_NAME_SYNTAX_ = 1736; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNSUPPORTED_NAME_SYNTAX_ = 1737; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UUID_NO_ADDRESS_ = 1739; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_DUPLICATE_ENDPOINT_ = 1740; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_AUTHN_TYPE_ = 1741; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_MAX_CALLS_TOO_SMALL_ = 1742; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_STRING_TOO_LONG_ = 1743; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROTSEQ_NOT_FOUND_ = 1744; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROCNUM_OUT_OF_RANGE_ = 1745; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_BINDING_HAS_NO_AUTH_ = 1746; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_AUTHN_SERVICE_ = 1747; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_AUTHN_LEVEL_ = 1748; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_AUTH_IDENTITY_ = 1749; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNKNOWN_AUTHZ_SERVICE_ = 1750; +BOOST_CONSTEXPR_OR_CONST DWORD_ EPT_S_INVALID_ENTRY_ = 1751; +BOOST_CONSTEXPR_OR_CONST DWORD_ EPT_S_CANT_PERFORM_OP_ = 1752; +BOOST_CONSTEXPR_OR_CONST DWORD_ EPT_S_NOT_REGISTERED_ = 1753; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOTHING_TO_EXPORT_ = 1754; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INCOMPLETE_NAME_ = 1755; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_VERS_OPTION_ = 1756; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_MORE_MEMBERS_ = 1757; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOT_ALL_OBJS_UNEXPORTED_ = 1758; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INTERFACE_NOT_FOUND_ = 1759; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ENTRY_ALREADY_EXISTS_ = 1760; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ENTRY_NOT_FOUND_ = 1761; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NAME_SERVICE_UNAVAILABLE_ = 1762; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_NAF_ID_ = 1763; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CANNOT_SUPPORT_ = 1764; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_CONTEXT_AVAILABLE_ = 1765; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INTERNAL_ERROR_ = 1766; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ZERO_DIVIDE_ = 1767; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ADDRESS_ERROR_ = 1768; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_FP_DIV_ZERO_ = 1769; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_FP_UNDERFLOW_ = 1770; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_FP_OVERFLOW_ = 1771; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_NO_MORE_ENTRIES_ = 1772; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_CHAR_TRANS_OPEN_FAIL_ = 1773; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_CHAR_TRANS_SHORT_FILE_ = 1774; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_IN_NULL_CONTEXT_ = 1775; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_CONTEXT_DAMAGED_ = 1777; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_HANDLES_MISMATCH_ = 1778; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_SS_CANNOT_GET_CALL_HANDLE_ = 1779; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_NULL_REF_POINTER_ = 1780; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_ENUM_VALUE_OUT_OF_RANGE_ = 1781; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_BYTE_COUNT_TOO_SMALL_ = 1782; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_BAD_STUB_DATA_ = 1783; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_USER_BUFFER_ = 1784; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNRECOGNIZED_MEDIA_ = 1785; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_TRUST_LSA_SECRET_ = 1786; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_TRUST_SAM_ACCOUNT_ = 1787; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRUSTED_DOMAIN_FAILURE_ = 1788; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRUSTED_RELATIONSHIP_FAILURE_ = 1789; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRUST_FAILURE_ = 1790; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CALL_IN_PROGRESS_ = 1791; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETLOGON_NOT_STARTED_ = 1792; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCOUNT_EXPIRED_ = 1793; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REDIRECTOR_HAS_OPEN_HANDLES_ = 1794; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_ALREADY_INSTALLED_ = 1795; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PORT_ = 1796; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PRINTER_DRIVER_ = 1797; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PRINTPROCESSOR_ = 1798; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_SEPARATOR_FILE_ = 1799; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRIORITY_ = 1800; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRINTER_NAME_ = 1801; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_ALREADY_EXISTS_ = 1802; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRINTER_COMMAND_ = 1803; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DATATYPE_ = 1804; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_ENVIRONMENT_ = 1805; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_MORE_BINDINGS_ = 1806; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT_ = 1807; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT_ = 1808; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOLOGON_SERVER_TRUST_ACCOUNT_ = 1809; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_TRUST_INCONSISTENT_ = 1810; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVER_HAS_OPEN_HANDLES_ = 1811; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_DATA_NOT_FOUND_ = 1812; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_TYPE_NOT_FOUND_ = 1813; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NAME_NOT_FOUND_ = 1814; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_LANG_NOT_FOUND_ = 1815; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_ENOUGH_QUOTA_ = 1816; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_INTERFACES_ = 1817; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_CALL_CANCELLED_ = 1818; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_BINDING_INCOMPLETE_ = 1819; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_COMM_FAILURE_ = 1820; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UNSUPPORTED_AUTHN_LEVEL_ = 1821; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NO_PRINC_NAME_ = 1822; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOT_RPC_ERROR_ = 1823; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_UUID_LOCAL_ONLY_ = 1824; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_SEC_PKG_ERROR_ = 1825; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOT_CANCELLED_ = 1826; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_INVALID_ES_ACTION_ = 1827; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_WRONG_ES_VERSION_ = 1828; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_WRONG_STUB_VERSION_ = 1829; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_INVALID_PIPE_OBJECT_ = 1830; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_WRONG_PIPE_ORDER_ = 1831; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_WRONG_PIPE_VERSION_ = 1832; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_COOKIE_AUTH_FAILED_ = 1833; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_GROUP_MEMBER_NOT_FOUND_ = 1898; +BOOST_CONSTEXPR_OR_CONST DWORD_ EPT_S_CANT_CREATE_ = 1899; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_OBJECT_ = 1900; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TIME_ = 1901; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FORM_NAME_ = 1902; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_FORM_SIZE_ = 1903; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALREADY_WAITING_ = 1904; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DELETED_ = 1905; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRINTER_STATE_ = 1906; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PASSWORD_MUST_CHANGE_ = 1907; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_CONTROLLER_NOT_FOUND_ = 1908; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACCOUNT_LOCKED_OUT_ = 1909; +BOOST_CONSTEXPR_OR_CONST DWORD_ OR_INVALID_OXID_ = 1910; +BOOST_CONSTEXPR_OR_CONST DWORD_ OR_INVALID_OID_ = 1911; +BOOST_CONSTEXPR_OR_CONST DWORD_ OR_INVALID_SET_ = 1912; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_SEND_INCOMPLETE_ = 1913; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_ASYNC_HANDLE_ = 1914; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INVALID_ASYNC_CALL_ = 1915; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_PIPE_CLOSED_ = 1916; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_PIPE_DISCIPLINE_ERROR_ = 1917; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_X_PIPE_EMPTY_ = 1918; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SITENAME_ = 1919; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_ACCESS_FILE_ = 1920; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_RESOLVE_FILENAME_ = 1921; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_ENTRY_TYPE_MISMATCH_ = 1922; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_NOT_ALL_OBJS_EXPORTED_ = 1923; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_INTERFACE_NOT_EXPORTED_ = 1924; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PROFILE_NOT_ADDED_ = 1925; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PRF_ELT_NOT_ADDED_ = 1926; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_PRF_ELT_NOT_REMOVED_ = 1927; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_GRP_ELT_NOT_ADDED_ = 1928; +BOOST_CONSTEXPR_OR_CONST DWORD_ RPC_S_GRP_ELT_NOT_REMOVED_ = 1929; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_KM_DRIVER_BLOCKED_ = 1930; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTEXT_EXPIRED_ = 1931; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PER_USER_TRUST_QUOTA_EXCEEDED_ = 1932; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED_ = 1933; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED_ = 1934; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_AUTHENTICATION_FIREWALL_FAILED_ = 1935; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED_ = 1936; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NTLM_BLOCKED_ = 1937; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PASSWORD_CHANGE_REQUIRED_ = 1938; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PIXEL_FORMAT_ = 2000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_DRIVER_ = 2001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_WINDOW_STYLE_ = 2002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_METAFILE_NOT_SUPPORTED_ = 2003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSFORM_NOT_SUPPORTED_ = 2004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLIPPING_NOT_SUPPORTED_ = 2005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CMM_ = 2010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PROFILE_ = 2011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TAG_NOT_FOUND_ = 2012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TAG_NOT_PRESENT_ = 2013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DUPLICATE_TAG_ = 2014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE_ = 2015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILE_NOT_FOUND_ = 2016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_COLORSPACE_ = 2017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ICM_NOT_ENABLED_ = 2018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DELETING_ICM_XFORM_ = 2019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TRANSFORM_ = 2020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COLORSPACE_MISMATCH_ = 2021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_COLORINDEX_ = 2022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROFILE_DOES_NOT_MATCH_DEVICE_ = 2023; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTED_OTHER_PASSWORD_ = 2108; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT_ = 2109; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_USERNAME_ = 2202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_CONNECTED_ = 2250; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPEN_FILES_ = 2401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACTIVE_CONNECTIONS_ = 2402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_IN_USE_ = 2404; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNKNOWN_PRINT_MONITOR_ = 3000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_IN_USE_ = 3001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPOOL_FILE_NOT_FOUND_ = 3002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPL_NO_STARTDOC_ = 3003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPL_NO_ADDJOB_ = 3004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED_ = 3005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINT_MONITOR_ALREADY_INSTALLED_ = 3006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRINT_MONITOR_ = 3007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINT_MONITOR_IN_USE_ = 3008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_HAS_JOBS_QUEUED_ = 3009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUCCESS_REBOOT_REQUIRED_ = 3010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SUCCESS_RESTART_REQUIRED_ = 3011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_NOT_FOUND_ = 3012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_WARNED_ = 3013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_BLOCKED_ = 3014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_PACKAGE_IN_USE_ = 3015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND_ = 3016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_REBOOT_REQUIRED_ = 3017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FAIL_REBOOT_INITIATED_ = 3018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED_ = 3019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINT_JOB_RESTART_REQUIRED_ = 3020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PRINTER_DRIVER_MANIFEST_ = 3021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PRINTER_NOT_SHAREABLE_ = 3022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQUEST_PAUSED_ = 3050; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IO_REISSUE_AS_CACHED_ = 3950; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WINS_INTERNAL_ = 4000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CAN_NOT_DEL_LOCAL_WINS_ = 4001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATIC_INIT_ = 4002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INC_BACKUP_ = 4003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FULL_BACKUP_ = 4004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REC_NON_EXISTENT_ = 4005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RPL_NOT_ALLOWED_ = 4006; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED_ = 4050; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO_ = 4051; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_MISSING_DATA_ = 4052; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_NO_MORE_ = 4053; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_NOT_INITIALIZED_ = 4054; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_ALREADY_INITIALIZED_ = 4055; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS_ = 4056; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_INVALIDATED_ = 4057; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_ALREADY_EXISTS_ = 4058; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_OPERATION_NOTFOUND_ = 4059; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_ALREADY_COMPLETED_ = 4060; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_OUT_OF_BOUNDS_ = 4061; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_VERSION_UNSUPPORTED_ = 4062; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_INVALID_CONFIGURATION_ = 4063; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_NOT_LICENSED_ = 4064; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_SERVICE_UNAVAILABLE_ = 4065; +BOOST_CONSTEXPR_OR_CONST DWORD_ PEERDIST_ERROR_TRUST_FAILURE_ = 4066; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DHCP_ADDRESS_CONFLICT_ = 4100; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_GUID_NOT_FOUND_ = 4200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_INSTANCE_NOT_FOUND_ = 4201; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_ITEMID_NOT_FOUND_ = 4202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_TRY_AGAIN_ = 4203; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_DP_NOT_FOUND_ = 4204; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_UNRESOLVED_INSTANCE_REF_ = 4205; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_ALREADY_ENABLED_ = 4206; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_GUID_DISCONNECTED_ = 4207; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_SERVER_UNAVAILABLE_ = 4208; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_DP_FAILED_ = 4209; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_INVALID_MOF_ = 4210; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_INVALID_REGINFO_ = 4211; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_ALREADY_DISABLED_ = 4212; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_READ_ONLY_ = 4213; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WMI_SET_FAILURE_ = 4214; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_APPCONTAINER_ = 4250; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APPCONTAINER_REQUIRED_ = 4251; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SUPPORTED_IN_APPCONTAINER_ = 4252; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_PACKAGE_SID_LENGTH_ = 4253; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MEDIA_ = 4300; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_LIBRARY_ = 4301; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_MEDIA_POOL_ = 4302; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DRIVE_MEDIA_MISMATCH_ = 4303; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_OFFLINE_ = 4304; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LIBRARY_OFFLINE_ = 4305; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EMPTY_ = 4306; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_EMPTY_ = 4307; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_UNAVAILABLE_ = 4308; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_DISABLED_ = 4309; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CLEANER_ = 4310; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_CLEAN_ = 4311; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_NOT_FOUND_ = 4312; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATABASE_FAILURE_ = 4313; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATABASE_FULL_ = 4314; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_INCOMPATIBLE_ = 4315; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NOT_PRESENT_ = 4316; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_OPERATION_ = 4317; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIA_NOT_AVAILABLE_ = 4318; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEVICE_NOT_AVAILABLE_ = 4319; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REQUEST_REFUSED_ = 4320; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_DRIVE_OBJECT_ = 4321; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LIBRARY_FULL_ = 4322; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MEDIUM_NOT_ACCESSIBLE_ = 4323; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_LOAD_MEDIUM_ = 4324; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_INVENTORY_DRIVE_ = 4325; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_INVENTORY_SLOT_ = 4326; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_INVENTORY_TRANSPORT_ = 4327; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSPORT_FULL_ = 4328; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CONTROLLING_IEPORT_ = 4329; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA_ = 4330; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLEANER_SLOT_SET_ = 4331; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLEANER_SLOT_NOT_SET_ = 4332; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLEANER_CARTRIDGE_SPENT_ = 4333; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNEXPECTED_OMID_ = 4334; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_DELETE_LAST_ITEM_ = 4335; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MESSAGE_EXCEEDS_MAX_SIZE_ = 4336; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLUME_CONTAINS_SYS_FILES_ = 4337; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INDIGENOUS_TYPE_ = 4338; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SUPPORTING_DRIVES_ = 4339; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLEANER_CARTRIDGE_INSTALLED_ = 4340; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IEPORT_FULL_ = 4341; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_OFFLINE_ = 4350; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOTE_STORAGE_NOT_ACTIVE_ = 4351; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOTE_STORAGE_MEDIA_ERROR_ = 4352; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_A_REPARSE_POINT_ = 4390; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPARSE_ATTRIBUTE_CONFLICT_ = 4391; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_REPARSE_DATA_ = 4392; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPARSE_TAG_INVALID_ = 4393; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REPARSE_TAG_MISMATCH_ = 4394; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_DATA_NOT_FOUND_ = 4400; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_DATA_EXPIRED_ = 4401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_DATA_CORRUPT_ = 4402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_DATA_LIMIT_EXCEEDED_ = 4403; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APP_DATA_REBOOT_REQUIRED_ = 4404; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_ROLLBACK_DETECTED_ = 4420; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_POLICY_VIOLATION_ = 4421; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_INVALID_POLICY_ = 4422; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND_ = 4423; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_POLICY_NOT_SIGNED_ = 4424; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_NOT_ENABLED_ = 4425; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECUREBOOT_FILE_REPLACED_ = 4426; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED_ = 4440; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED_ = 4441; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED_ = 4442; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED_ = 4443; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLUME_NOT_SIS_ENABLED_ = 4500; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENT_RESOURCE_EXISTS_ = 5001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENCY_NOT_FOUND_ = 5002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENCY_ALREADY_EXISTS_ = 5003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NOT_ONLINE_ = 5004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOST_NODE_NOT_AVAILABLE_ = 5005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NOT_AVAILABLE_ = 5006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NOT_FOUND_ = 5007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHUTDOWN_CLUSTER_ = 5008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_EVICT_ACTIVE_NODE_ = 5009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_ALREADY_EXISTS_ = 5010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_IN_LIST_ = 5011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GROUP_NOT_AVAILABLE_ = 5012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GROUP_NOT_FOUND_ = 5013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GROUP_NOT_ONLINE_ = 5014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOST_NODE_NOT_RESOURCE_OWNER_ = 5015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HOST_NODE_NOT_GROUP_OWNER_ = 5016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESMON_CREATE_FAILED_ = 5017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESMON_ONLINE_FAILED_ = 5018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_ONLINE_ = 5019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUM_RESOURCE_ = 5020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_QUORUM_CAPABLE_ = 5021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SHUTTING_DOWN_ = 5022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_STATE_ = 5023; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_PROPERTIES_STORED_ = 5024; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_QUORUM_CLASS_ = 5025; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CORE_RESOURCE_ = 5026; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUM_RESOURCE_ONLINE_FAILED_ = 5027; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUMLOG_OPEN_FAILED_ = 5028; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTERLOG_CORRUPT_ = 5029; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE_ = 5030; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE_ = 5031; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND_ = 5032; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE_ = 5033; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUM_OWNER_ALIVE_ = 5034; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NETWORK_NOT_AVAILABLE_ = 5035; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NODE_NOT_AVAILABLE_ = 5036; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ALL_NODES_NOT_AVAILABLE_ = 5037; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_FAILED_ = 5038; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_NODE_ = 5039; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_EXISTS_ = 5040; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_JOIN_IN_PROGRESS_ = 5041; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_NOT_FOUND_ = 5042; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND_ = 5043; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_EXISTS_ = 5044; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_NOT_FOUND_ = 5045; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETINTERFACE_EXISTS_ = 5046; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETINTERFACE_NOT_FOUND_ = 5047; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_REQUEST_ = 5048; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_NETWORK_PROVIDER_ = 5049; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_DOWN_ = 5050; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_UNREACHABLE_ = 5051; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_NOT_MEMBER_ = 5052; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS_ = 5053; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_NETWORK_ = 5054; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_UP_ = 5056; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_IPADDR_IN_USE_ = 5057; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_NOT_PAUSED_ = 5058; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NO_SECURITY_CONTEXT_ = 5059; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_NOT_INTERNAL_ = 5060; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_ALREADY_UP_ = 5061; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_ALREADY_DOWN_ = 5062; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_ALREADY_ONLINE_ = 5063; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE_ = 5064; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_ALREADY_MEMBER_ = 5065; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_LAST_INTERNAL_NETWORK_ = 5066; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS_ = 5067; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_OPERATION_ON_QUORUM_ = 5068; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENCY_NOT_ALLOWED_ = 5069; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_PAUSED_ = 5070; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NODE_CANT_HOST_RESOURCE_ = 5071; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_NOT_READY_ = 5072; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_SHUTTING_DOWN_ = 5073; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_JOIN_ABORTED_ = 5074; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INCOMPATIBLE_VERSIONS_ = 5075; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED_ = 5076; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED_ = 5077; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND_ = 5078; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED_ = 5079; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESNAME_NOT_FOUND_ = 5080; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED_ = 5081; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST_ = 5082; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_DATABASE_SEQMISMATCH_ = 5083; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESMON_INVALID_STATE_ = 5084; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_GUM_NOT_LOCKER_ = 5085; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUM_DISK_NOT_FOUND_ = 5086; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATABASE_BACKUP_CORRUPT_ = 5087; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT_ = 5088; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_PROPERTY_UNCHANGEABLE_ = 5089; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_ADMIN_ACCESS_POINT_ = 5090; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE_ = 5890; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_QUORUMLOG_NOT_FOUND_ = 5891; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_MEMBERSHIP_HALT_ = 5892; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INSTANCE_ID_MISMATCH_ = 5893; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP_ = 5894; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH_ = 5895; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP_ = 5896; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PARAMETER_MISMATCH_ = 5897; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NODE_CANNOT_BE_CLUSTERED_ = 5898; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_WRONG_OS_VERSION_ = 5899; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME_ = 5900; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSCFG_ALREADY_COMMITTED_ = 5901; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSCFG_ROLLBACK_FAILED_ = 5902; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT_ = 5903; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_OLD_VERSION_ = 5904; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME_ = 5905; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NO_NET_ADAPTERS_ = 5906; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_POISONED_ = 5907; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_GROUP_MOVING_ = 5908; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_TYPE_BUSY_ = 5909; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_CALL_TIMED_OUT_ = 5910; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_CLUSTER_IPV6_ADDRESS_ = 5911; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION_ = 5912; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS_ = 5913; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PARTIAL_SEND_ = 5914; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION_ = 5915; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_STRING_TERMINATION_ = 5916; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_STRING_FORMAT_ = 5917; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS_ = 5918; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS_ = 5919; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NULL_DATA_ = 5920; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PARTIAL_READ_ = 5921; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_PARTIAL_WRITE_ = 5922; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_CANT_DESERIALIZE_DATA_ = 5923; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT_ = 5924; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NO_QUORUM_ = 5925; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_IPV6_NETWORK_ = 5926; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK_ = 5927; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP_ = 5928; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPENDENCY_TREE_TOO_COMPLEX_ = 5929; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXCEPTION_IN_RESOURCE_CALL_ = 5930; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RHS_FAILED_INITIALIZATION_ = 5931; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NOT_INSTALLED_ = 5932; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE_ = 5933; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_MAX_NODES_IN_CLUSTER_ = 5934; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_TOO_MANY_NODES_ = 5935; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_OBJECT_ALREADY_USED_ = 5936; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NONCORE_GROUPS_FOUND_ = 5937; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_SHARE_RESOURCE_CONFLICT_ = 5938; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_EVICT_INVALID_REQUEST_ = 5939; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SINGLETON_RESOURCE_ = 5940; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE_ = 5941; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED_ = 5942; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR_ = 5943; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_GROUP_BUSY_ = 5944; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NOT_SHARED_VOLUME_ = 5945; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR_ = 5946; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SHARED_VOLUMES_IN_USE_ = 5947; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_USE_SHARED_VOLUMES_API_ = 5948; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_BACKUP_IN_PROGRESS_ = 5949; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NON_CSV_PATH_ = 5950; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CSV_VOLUME_NOT_LOCAL_ = 5951; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_WATCHDOG_TERMINATING_ = 5952; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES_ = 5953; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_INVALID_NODE_WEIGHT_ = 5954; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_VETOED_CALL_ = 5955; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESMON_SYSTEM_RESOURCES_LACKING_ = 5956; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION_ = 5957; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE_ = 5958; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_GROUP_QUEUED_ = 5959; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_LOCKED_STATUS_ = 5960; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED_ = 5961; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS_ = 5962; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_DISK_NOT_CONNECTED_ = 5963; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DISK_NOT_CSV_CAPABLE_ = 5964; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE_ = 5965; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED_ = 5966; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED_ = 5967; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES_ = 5968; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES_ = 5969; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE_ = 5970; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_AFFINITY_CONFLICT_ = 5971; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE_ = 5972; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENCRYPTION_FAILED_ = 6000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DECRYPTION_FAILED_ = 6001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_ENCRYPTED_ = 6002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_RECOVERY_POLICY_ = 6003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_EFS_ = 6004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_WRONG_EFS_ = 6005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_USER_KEYS_ = 6006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_NOT_ENCRYPTED_ = 6007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_EXPORT_FORMAT_ = 6008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_READ_ONLY_ = 6009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIR_EFS_DISALLOWED_ = 6010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EFS_SERVER_NOT_TRUSTED_ = 6011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_RECOVERY_POLICY_ = 6012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EFS_ALG_BLOB_TOO_BIG_ = 6013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLUME_NOT_SUPPORT_EFS_ = 6014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EFS_DISABLED_ = 6015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EFS_VERSION_NOT_SUPPORT_ = 6016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE_ = 6017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER_ = 6018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE_ = 6019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE_ = 6020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CS_ENCRYPTION_FILE_NOT_CSE_ = 6021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENCRYPTION_POLICY_DENIES_OPERATION_ = 6022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_BROWSER_SERVERS_FOUND_ = 6118; +BOOST_CONSTEXPR_OR_CONST DWORD_ SCHED_E_SERVICE_NOT_LOCALSYSTEM_ = 6200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_SECTOR_INVALID_ = 6600; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_SECTOR_PARITY_INVALID_ = 6601; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_SECTOR_REMAPPED_ = 6602; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_BLOCK_INCOMPLETE_ = 6603; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_INVALID_RANGE_ = 6604; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_BLOCKS_EXHAUSTED_ = 6605; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_READ_CONTEXT_INVALID_ = 6606; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_RESTART_INVALID_ = 6607; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_BLOCK_VERSION_ = 6608; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_BLOCK_INVALID_ = 6609; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_READ_MODE_INVALID_ = 6610; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_NO_RESTART_ = 6611; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_METADATA_CORRUPT_ = 6612; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_METADATA_INVALID_ = 6613; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_METADATA_INCONSISTENT_ = 6614; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_RESERVATION_INVALID_ = 6615; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CANT_DELETE_ = 6616; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CONTAINER_LIMIT_EXCEEDED_ = 6617; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_START_OF_LOG_ = 6618; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_POLICY_ALREADY_INSTALLED_ = 6619; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_POLICY_NOT_INSTALLED_ = 6620; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_POLICY_INVALID_ = 6621; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_POLICY_CONFLICT_ = 6622; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_PINNED_ARCHIVE_TAIL_ = 6623; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_RECORD_NONEXISTENT_ = 6624; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_RECORDS_RESERVED_INVALID_ = 6625; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_SPACE_RESERVED_INVALID_ = 6626; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_TAIL_INVALID_ = 6627; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_FULL_ = 6628; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COULD_NOT_RESIZE_LOG_ = 6629; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_MULTIPLEXED_ = 6630; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_DEDICATED_ = 6631; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS_ = 6632; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_ARCHIVE_IN_PROGRESS_ = 6633; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_EPHEMERAL_ = 6634; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_NOT_ENOUGH_CONTAINERS_ = 6635; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CLIENT_ALREADY_REGISTERED_ = 6636; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CLIENT_NOT_REGISTERED_ = 6637; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_FULL_HANDLER_IN_PROGRESS_ = 6638; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CONTAINER_READ_FAILED_ = 6639; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CONTAINER_WRITE_FAILED_ = 6640; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CONTAINER_OPEN_FAILED_ = 6641; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CONTAINER_STATE_INVALID_ = 6642; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_STATE_INVALID_ = 6643; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_PINNED_ = 6644; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_METADATA_FLUSH_FAILED_ = 6645; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_INCONSISTENT_SECURITY_ = 6646; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_APPENDED_FLUSH_FAILED_ = 6647; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_PINNED_RESERVATION_ = 6648; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_TRANSACTION_ = 6700; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_ACTIVE_ = 6701; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_REQUEST_NOT_VALID_ = 6702; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_REQUESTED_ = 6703; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_ALREADY_ABORTED_ = 6704; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_ALREADY_COMMITTED_ = 6705; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TM_INITIALIZATION_FAILED_ = 6706; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCEMANAGER_READ_ONLY_ = 6707; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_JOINED_ = 6708; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_SUPERIOR_EXISTS_ = 6709; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CRM_PROTOCOL_ALREADY_EXISTS_ = 6710; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_PROPAGATION_FAILED_ = 6711; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CRM_PROTOCOL_NOT_FOUND_ = 6712; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER_ = 6713; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CURRENT_TRANSACTION_NOT_VALID_ = 6714; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_FOUND_ = 6715; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCEMANAGER_NOT_FOUND_ = 6716; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENLISTMENT_NOT_FOUND_ = 6717; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONMANAGER_NOT_FOUND_ = 6718; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONMANAGER_NOT_ONLINE_ = 6719; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION_ = 6720; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_ROOT_ = 6721; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_OBJECT_EXPIRED_ = 6722; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED_ = 6723; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_RECORD_TOO_LONG_ = 6724; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED_ = 6725; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_INTEGRITY_VIOLATED_ = 6726; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH_ = 6727; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT_ = 6728; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_MUST_WRITETHROUGH_ = 6729; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NO_SUPERIOR_ = 6730; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HEURISTIC_DAMAGE_POSSIBLE_ = 6731; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONAL_CONFLICT_ = 6800; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RM_NOT_ACTIVE_ = 6801; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RM_METADATA_CORRUPT_ = 6802; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIRECTORY_NOT_RM_ = 6803; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE_ = 6805; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_RESIZE_INVALID_SIZE_ = 6806; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OBJECT_NO_LONGER_EXISTS_ = 6807; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STREAM_MINIVERSION_NOT_FOUND_ = 6808; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STREAM_MINIVERSION_NOT_VALID_ = 6809; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION_ = 6810; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT_ = 6811; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS_ = 6812; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOTE_FILE_VERSION_MISMATCH_ = 6814; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HANDLE_NO_LONGER_VALID_ = 6815; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_TXF_METADATA_ = 6816; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_CORRUPTION_DETECTED_ = 6817; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_RECOVER_WITH_HANDLE_OPEN_ = 6818; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RM_DISCONNECTED_ = 6819; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ENLISTMENT_NOT_SUPERIOR_ = 6820; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECOVERY_NOT_NEEDED_ = 6821; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RM_ALREADY_STARTED_ = 6822; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FILE_IDENTITY_NOT_PERSISTENT_ = 6823; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY_ = 6824; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANT_CROSS_RM_BOUNDARY_ = 6825; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TXF_DIR_NOT_EMPTY_ = 6826; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INDOUBT_TRANSACTIONS_EXIST_ = 6827; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TM_VOLATILE_ = 6828; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ROLLBACK_TIMER_EXPIRED_ = 6829; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TXF_ATTRIBUTE_CORRUPT_ = 6830; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION_ = 6831; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED_ = 6832; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_LOG_GROWTH_FAILED_ = 6833; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE_ = 6834; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TXF_METADATA_ALREADY_PRESENT_ = 6835; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET_ = 6836; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_REQUIRED_PROMOTION_ = 6837; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION_ = 6838; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTIONS_NOT_FROZEN_ = 6839; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_FREEZE_IN_PROGRESS_ = 6840; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SNAPSHOT_VOLUME_ = 6841; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SAVEPOINT_WITH_OPEN_FILES_ = 6842; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DATA_LOST_REPAIR_ = 6843; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION_ = 6844; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TM_IDENTITY_MISMATCH_ = 6845; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_FLOATED_SECTION_ = 6846; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_ACCEPT_TRANSACTED_WORK_ = 6847; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_ABORT_TRANSACTIONS_ = 6848; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_BAD_CLUSTERS_ = 6849; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION_ = 6850; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_VOLUME_DIRTY_ = 6851; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_LINK_TRACKING_IN_TRANSACTION_ = 6852; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION_ = 6853; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EXPIRED_HANDLE_ = 6854; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TRANSACTION_NOT_ENLISTED_ = 6855; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATION_NAME_INVALID_ = 7001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_INVALID_PD_ = 7002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_PD_NOT_FOUND_ = 7003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WD_NOT_FOUND_ = 7004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY_ = 7005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SERVICE_NAME_COLLISION_ = 7006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CLOSE_PENDING_ = 7007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_NO_OUTBUF_ = 7008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_INF_NOT_FOUND_ = 7009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_INVALID_MODEMNAME_ = 7010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_ERROR_ = 7011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_TIMEOUT_ = 7012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_NO_CARRIER_ = 7013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE_ = 7014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_BUSY_ = 7015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_MODEM_RESPONSE_VOICE_ = 7016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_TD_ERROR_ = 7017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATION_NOT_FOUND_ = 7022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATION_ALREADY_EXISTS_ = 7023; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATION_BUSY_ = 7024; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_BAD_VIDEO_MODE_ = 7025; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_GRAPHICS_INVALID_ = 7035; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_LOGON_DISABLED_ = 7037; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_NOT_CONSOLE_ = 7038; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CLIENT_QUERY_TIMEOUT_ = 7040; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CONSOLE_DISCONNECT_ = 7041; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CONSOLE_CONNECT_ = 7042; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SHADOW_DENIED_ = 7044; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATION_ACCESS_DENIED_ = 7045; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_INVALID_WD_ = 7049; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SHADOW_INVALID_ = 7050; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SHADOW_DISABLED_ = 7051; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CLIENT_LICENSE_IN_USE_ = 7052; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CLIENT_LICENSE_NOT_SET_ = 7053; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_LICENSE_NOT_AVAILABLE_ = 7054; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_LICENSE_CLIENT_INVALID_ = 7055; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_LICENSE_EXPIRED_ = 7056; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SHADOW_NOT_RUNNING_ = 7057; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE_ = 7058; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ACTIVATION_COUNT_EXCEEDED_ = 7059; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_WINSTATIONS_DISABLED_ = 7060; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED_ = 7061; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SESSION_IN_USE_ = 7062; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_NO_FORCE_LOGOFF_ = 7063; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_ACCOUNT_RESTRICTION_ = 7064; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RDP_PROTOCOL_ERROR_ = 7065; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CDM_CONNECT_ = 7066; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_CDM_DISCONNECT_ = 7067; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CTX_SECURITY_LAYER_ERROR_ = 7068; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TS_INCOMPATIBLE_SESSIONS_ = 7069; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_TS_VIDEO_SUBSYSTEM_ERROR_ = 7070; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_INVALID_API_SEQUENCE_ = 8001; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_STARTING_SERVICE_ = 8002; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_STOPPING_SERVICE_ = 8003; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_INTERNAL_API_ = 8004; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_INTERNAL_ = 8005; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_SERVICE_COMM_ = 8006; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_INSUFFICIENT_PRIV_ = 8007; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_AUTHENTICATION_ = 8008; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_PARENT_INSUFFICIENT_PRIV_ = 8009; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_PARENT_AUTHENTICATION_ = 8010; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_CHILD_TO_PARENT_COMM_ = 8011; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_PARENT_TO_CHILD_COMM_ = 8012; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_SYSVOL_POPULATE_ = 8013; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_SYSVOL_POPULATE_TIMEOUT_ = 8014; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_SYSVOL_IS_BUSY_ = 8015; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_SYSVOL_DEMOTE_ = 8016; +BOOST_CONSTEXPR_OR_CONST DWORD_ FRS_ERR_INVALID_SERVICE_PARAMETER_ = 8017; +BOOST_CONSTEXPR_OR_CONST DWORD_ DS_S_SUCCESS_ = NO_ERROR_; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_INSTALLED_ = 8200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY_ = 8201; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_ATTRIBUTE_OR_VALUE_ = 8202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_ATTRIBUTE_SYNTAX_ = 8203; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED_ = 8204; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS_ = 8205; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BUSY_ = 8206; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNAVAILABLE_ = 8207; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_RIDS_ALLOCATED_ = 8208; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_MORE_RIDS_ = 8209; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INCORRECT_ROLE_OWNER_ = 8210; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RIDMGR_INIT_ERROR_ = 8211; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_CLASS_VIOLATION_ = 8212; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ON_NON_LEAF_ = 8213; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ON_RDN_ = 8214; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOD_OBJ_CLASS_ = 8215; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CROSS_DOM_MOVE_ERROR_ = 8216; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GC_NOT_AVAILABLE_ = 8217; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SHARED_POLICY_ = 8218; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POLICY_OBJECT_NOT_FOUND_ = 8219; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_POLICY_ONLY_IN_DS_ = 8220; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PROMOTION_ACTIVE_ = 8221; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_PROMOTION_ACTIVE_ = 8222; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OPERATIONS_ERROR_ = 8224; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_PROTOCOL_ERROR_ = 8225; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_TIMELIMIT_EXCEEDED_ = 8226; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SIZELIMIT_EXCEEDED_ = 8227; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ADMIN_LIMIT_EXCEEDED_ = 8228; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COMPARE_FALSE_ = 8229; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COMPARE_TRUE_ = 8230; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AUTH_METHOD_NOT_SUPPORTED_ = 8231; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_STRONG_AUTH_REQUIRED_ = 8232; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INAPPROPRIATE_AUTH_ = 8233; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AUTH_UNKNOWN_ = 8234; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REFERRAL_ = 8235; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNAVAILABLE_CRIT_EXTENSION_ = 8236; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CONFIDENTIALITY_REQUIRED_ = 8237; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INAPPROPRIATE_MATCHING_ = 8238; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CONSTRAINT_VIOLATION_ = 8239; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_SUCH_OBJECT_ = 8240; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ALIAS_PROBLEM_ = 8241; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_DN_SYNTAX_ = 8242; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_IS_LEAF_ = 8243; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ALIAS_DEREF_PROBLEM_ = 8244; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNWILLING_TO_PERFORM_ = 8245; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOOP_DETECT_ = 8246; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAMING_VIOLATION_ = 8247; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJECT_RESULTS_TOO_LARGE_ = 8248; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AFFECTS_MULTIPLE_DSAS_ = 8249; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SERVER_DOWN_ = 8250; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOCAL_ERROR_ = 8251; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ENCODING_ERROR_ = 8252; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DECODING_ERROR_ = 8253; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_FILTER_UNKNOWN_ = 8254; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_PARAM_ERROR_ = 8255; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_SUPPORTED_ = 8256; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_RESULTS_RETURNED_ = 8257; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CONTROL_NOT_FOUND_ = 8258; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CLIENT_LOOP_ = 8259; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REFERRAL_LIMIT_EXCEEDED_ = 8260; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SORT_CONTROL_MISSING_ = 8261; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OFFSET_RANGE_ERROR_ = 8262; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RIDMGR_DISABLED_ = 8263; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ROOT_MUST_BE_NC_ = 8301; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ADD_REPLICA_INHIBITED_ = 8302; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_NOT_DEF_IN_SCHEMA_ = 8303; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MAX_OBJ_SIZE_EXCEEDED_ = 8304; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_STRING_NAME_EXISTS_ = 8305; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA_ = 8306; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RDN_DOESNT_MATCH_SCHEMA_ = 8307; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_REQUESTED_ATTS_FOUND_ = 8308; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_USER_BUFFER_TO_SMALL_ = 8309; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_IS_NOT_ON_OBJ_ = 8310; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ILLEGAL_MOD_OPERATION_ = 8311; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_TOO_LARGE_ = 8312; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BAD_INSTANCE_TYPE_ = 8313; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MASTERDSA_REQUIRED_ = 8314; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJECT_CLASS_REQUIRED_ = 8315; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MISSING_REQUIRED_ATT_ = 8316; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_NOT_DEF_FOR_CLASS_ = 8317; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_ALREADY_EXISTS_ = 8318; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ADD_ATT_VALUES_ = 8320; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SINGLE_VALUE_CONSTRAINT_ = 8321; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RANGE_CONSTRAINT_ = 8322; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_VAL_ALREADY_EXISTS_ = 8323; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_REM_MISSING_ATT_ = 8324; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_REM_MISSING_ATT_VAL_ = 8325; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ROOT_CANT_BE_SUBREF_ = 8326; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_CHAINING_ = 8327; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_CHAINED_EVAL_ = 8328; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_PARENT_OBJECT_ = 8329; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_PARENT_IS_AN_ALIAS_ = 8330; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MIX_MASTER_AND_REPS_ = 8331; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CHILDREN_EXIST_ = 8332; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_NOT_FOUND_ = 8333; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ALIASED_OBJ_MISSING_ = 8334; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BAD_NAME_SYNTAX_ = 8335; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ALIAS_POINTS_TO_ALIAS_ = 8336; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DEREF_ALIAS_ = 8337; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OUT_OF_SCOPE_ = 8338; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJECT_BEING_REMOVED_ = 8339; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DELETE_DSA_OBJ_ = 8340; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GENERIC_ERROR_ = 8341; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DSA_MUST_BE_INT_MASTER_ = 8342; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CLASS_NOT_DSA_ = 8343; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INSUFF_ACCESS_RIGHTS_ = 8344; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ILLEGAL_SUPERIOR_ = 8345; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATTRIBUTE_OWNED_BY_SAM_ = 8346; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_TOO_MANY_PARTS_ = 8347; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_TOO_LONG_ = 8348; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_VALUE_TOO_LONG_ = 8349; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_UNPARSEABLE_ = 8350; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_TYPE_UNKNOWN_ = 8351; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_AN_OBJECT_ = 8352; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SEC_DESC_TOO_SHORT_ = 8353; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SEC_DESC_INVALID_ = 8354; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_DELETED_NAME_ = 8355; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SUBREF_MUST_HAVE_PARENT_ = 8356; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NCNAME_MUST_BE_NC_ = 8357; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ADD_SYSTEM_ONLY_ = 8358; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CLASS_MUST_BE_CONCRETE_ = 8359; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_DMD_ = 8360; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_GUID_EXISTS_ = 8361; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_ON_BACKLINK_ = 8362; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_CROSSREF_FOR_NC_ = 8363; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SHUTTING_DOWN_ = 8364; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNKNOWN_OPERATION_ = 8365; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_ROLE_OWNER_ = 8366; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COULDNT_CONTACT_FSMO_ = 8367; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CROSS_NC_DN_RENAME_ = 8368; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOD_SYSTEM_ONLY_ = 8369; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REPLICATOR_ONLY_ = 8370; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_CLASS_NOT_DEFINED_ = 8371; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OBJ_CLASS_NOT_SUBCLASS_ = 8372; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_REFERENCE_INVALID_ = 8373; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CROSS_REF_EXISTS_ = 8374; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DEL_MASTER_CROSSREF_ = 8375; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD_ = 8376; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX_ = 8377; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_RDN_ = 8378; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_OID_ = 8379; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_MAPI_ID_ = 8380; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_SCHEMA_ID_GUID_ = 8381; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_LDAP_DISPLAY_NAME_ = 8382; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SEMANTIC_ATT_TEST_ = 8383; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SYNTAX_MISMATCH_ = 8384; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_MUST_HAVE_ = 8385; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_MAY_HAVE_ = 8386; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NONEXISTENT_MAY_HAVE_ = 8387; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NONEXISTENT_MUST_HAVE_ = 8388; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AUX_CLS_TEST_FAIL_ = 8389; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NONEXISTENT_POSS_SUP_ = 8390; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SUB_CLS_TEST_FAIL_ = 8391; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BAD_RDN_ATT_ID_SYNTAX_ = 8392; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_AUX_CLS_ = 8393; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_SUB_CLS_ = 8394; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_POSS_SUP_ = 8395; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RECALCSCHEMA_FAILED_ = 8396; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_TREE_DELETE_NOT_FINISHED_ = 8397; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DELETE_ = 8398; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_SCHEMA_REQ_ID_ = 8399; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BAD_ATT_SCHEMA_SYNTAX_ = 8400; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_CACHE_ATT_ = 8401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_CACHE_CLASS_ = 8402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_REMOVE_ATT_CACHE_ = 8403; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_REMOVE_CLASS_CACHE_ = 8404; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_RETRIEVE_DN_ = 8405; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MISSING_SUPREF_ = 8406; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_RETRIEVE_INSTANCE_ = 8407; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CODE_INCONSISTENCY_ = 8408; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DATABASE_ERROR_ = 8409; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GOVERNSID_MISSING_ = 8410; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MISSING_EXPECTED_ATT_ = 8411; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NCNAME_MISSING_CR_REF_ = 8412; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SECURITY_CHECKING_ERROR_ = 8413; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SCHEMA_NOT_LOADED_ = 8414; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SCHEMA_ALLOC_FAILED_ = 8415; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ATT_SCHEMA_REQ_SYNTAX_ = 8416; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GCVERIFY_ERROR_ = 8417; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SCHEMA_MISMATCH_ = 8418; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_FIND_DSA_OBJ_ = 8419; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_FIND_EXPECTED_NC_ = 8420; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_FIND_NC_IN_CACHE_ = 8421; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_RETRIEVE_CHILD_ = 8422; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SECURITY_ILLEGAL_MODIFY_ = 8423; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_REPLACE_HIDDEN_REC_ = 8424; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BAD_HIERARCHY_FILE_ = 8425; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED_ = 8426; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CONFIG_PARAM_MISSING_ = 8427; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COUNTING_AB_INDICES_FAILED_ = 8428; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED_ = 8429; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INTERNAL_FAILURE_ = 8430; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNKNOWN_ERROR_ = 8431; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ROOT_REQUIRES_CLASS_TOP_ = 8432; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REFUSING_FSMO_ROLES_ = 8433; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MISSING_FSMO_SETTINGS_ = 8434; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNABLE_TO_SURRENDER_ROLES_ = 8435; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_GENERIC_ = 8436; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_INVALID_PARAMETER_ = 8437; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_BUSY_ = 8438; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_BAD_DN_ = 8439; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_BAD_NC_ = 8440; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_DN_EXISTS_ = 8441; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_INTERNAL_ERROR_ = 8442; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_INCONSISTENT_DIT_ = 8443; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_CONNECTION_FAILED_ = 8444; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_BAD_INSTANCE_TYPE_ = 8445; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_OUT_OF_MEM_ = 8446; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_MAIL_PROBLEM_ = 8447; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_REF_ALREADY_EXISTS_ = 8448; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_REF_NOT_FOUND_ = 8449; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_OBJ_IS_REP_SOURCE_ = 8450; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_DB_ERROR_ = 8451; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_NO_REPLICA_ = 8452; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_ACCESS_DENIED_ = 8453; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_NOT_SUPPORTED_ = 8454; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_RPC_CANCELLED_ = 8455; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SOURCE_DISABLED_ = 8456; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SINK_DISABLED_ = 8457; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_NAME_COLLISION_ = 8458; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SOURCE_REINSTALLED_ = 8459; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_MISSING_PARENT_ = 8460; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_PREEMPTED_ = 8461; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_ABANDON_SYNC_ = 8462; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SHUTDOWN_ = 8463; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET_ = 8464; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA_ = 8465; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_EXTN_CONNECTION_FAILED_ = 8466; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INSTALL_SCHEMA_MISMATCH_ = 8467; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_LINK_ID_ = 8468; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_RESOLVING_ = 8469; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_NOT_FOUND_ = 8470; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_NOT_UNIQUE_ = 8471; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_NO_MAPPING_ = 8472; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_DOMAIN_ONLY_ = 8473; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING_ = 8474; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CONSTRUCTED_ATT_MOD_ = 8475; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_WRONG_OM_OBJ_CLASS_ = 8476; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_REPL_PENDING_ = 8477; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DS_REQUIRED_ = 8478; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_LDAP_DISPLAY_NAME_ = 8479; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NON_BASE_SEARCH_ = 8480; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_RETRIEVE_ATTS_ = 8481; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_BACKLINK_WITHOUT_LINK_ = 8482; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EPOCH_MISMATCH_ = 8483; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_NAME_MISMATCH_ = 8484; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_AND_DST_NC_IDENTICAL_ = 8485; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DST_NC_MISMATCH_ = 8486; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC_ = 8487; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_GUID_MISMATCH_ = 8488; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOVE_DELETED_OBJECT_ = 8489; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_PDC_OPERATION_IN_PROGRESS_ = 8490; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD_ = 8491; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION_ = 8492; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS_ = 8493; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NC_MUST_HAVE_NC_PARENT_ = 8494; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_ = 8495; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DST_DOMAIN_NOT_NATIVE_ = 8496; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER_ = 8497; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOVE_ACCOUNT_GROUP_ = 8498; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOVE_RESOURCE_GROUP_ = 8499; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_SEARCH_FLAG_ = 8500; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_TREE_DELETE_ABOVE_NC_ = 8501; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE_ = 8502; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE_ = 8503; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SAM_INIT_FAILURE_ = 8504; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SENSITIVE_GROUP_VIOLATION_ = 8505; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOD_PRIMARYGROUPID_ = 8506; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD_ = 8507; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NONSAFE_SCHEMA_CHANGE_ = 8508; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SCHEMA_UPDATE_DISALLOWED_ = 8509; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_CREATE_UNDER_SCHEMA_ = 8510; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INSTALL_NO_SRC_SCH_VERSION_ = 8511; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE_ = 8512; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_GROUP_TYPE_ = 8513; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN_ = 8514; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN_ = 8515; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER_ = 8516; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER_ = 8517; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER_ = 8518; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER_ = 8519; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER_ = 8520; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_HAVE_PRIMARY_MEMBERS_ = 8521; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_STRING_SD_CONVERSION_FAILED_ = 8522; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAMING_MASTER_GC_ = 8523; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DNS_LOOKUP_FAILURE_ = 8524; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_COULDNT_UPDATE_SPNS_ = 8525; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_RETRIEVE_SD_ = 8526; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_KEY_NOT_UNIQUE_ = 8527; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_WRONG_LINKED_ATT_SYNTAX_ = 8528; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD_ = 8529; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY_ = 8530; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_START_ = 8531; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INIT_FAILURE_ = 8532; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION_ = 8533; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SOURCE_DOMAIN_IN_FOREST_ = 8534; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST_ = 8535; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED_ = 8536; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN_ = 8537; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER_ = 8538; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_SID_EXISTS_IN_FOREST_ = 8539; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH_ = 8540; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SAM_INIT_FAILURE_ = 8541; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SCHEMA_INFO_SHIP_ = 8542; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SCHEMA_CONFLICT_ = 8543; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT_ = 8544; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_OBJ_NC_MISMATCH_ = 8545; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NC_STILL_HAS_DSAS_ = 8546; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GC_REQUIRED_ = 8547; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY_ = 8548; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS_ = 8549; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ADD_TO_GC_ = 8550; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_CHECKPOINT_WITH_PDC_ = 8551; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SOURCE_AUDITING_NOT_ENABLED_ = 8552; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC_ = 8553; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_NAME_FOR_SPN_ = 8554; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS_ = 8555; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNICODEPWD_NOT_IN_QUOTES_ = 8556; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED_ = 8557; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MUST_BE_RUN_ON_DST_DC_ = 8558; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER_ = 8559; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ_ = 8560; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INIT_FAILURE_CONSOLE_ = 8561; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SAM_INIT_FAILURE_CONSOLE_ = 8562; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_FOREST_VERSION_TOO_HIGH_ = 8563; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DOMAIN_VERSION_TOO_HIGH_ = 8564; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_FOREST_VERSION_TOO_LOW_ = 8565; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DOMAIN_VERSION_TOO_LOW_ = 8566; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INCOMPATIBLE_VERSION_ = 8567; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOW_DSA_VERSION_ = 8568; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN_ = 8569; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_SUPPORTED_SORT_ORDER_ = 8570; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_NOT_UNIQUE_ = 8571; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4_ = 8572; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OUT_OF_VERSION_STORE_ = 8573; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INCOMPATIBLE_CONTROLS_USED_ = 8574; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_REF_DOMAIN_ = 8575; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RESERVED_LINK_ID_ = 8576; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LINK_ID_NOT_AVAILABLE_ = 8577; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER_ = 8578; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE_ = 8579; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC_ = 8580; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG_ = 8581; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MODIFYDN_WRONG_GRANDPARENT_ = 8582; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NAME_ERROR_TRUST_REFERRAL_ = 8583; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER_ = 8584; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD_ = 8585; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2_ = 8586; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_THREAD_LIMIT_EXCEEDED_ = 8587; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NOT_CLOSEST_ = 8588; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF_ = 8589; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SINGLE_USER_MODE_FAILED_ = 8590; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NTDSCRIPT_SYNTAX_ERROR_ = 8591; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NTDSCRIPT_PROCESS_ERROR_ = 8592; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DIFFERENT_REPL_EPOCHS_ = 8593; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRS_EXTENSIONS_CHANGED_ = 8594; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR_ = 8595; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_MSDS_INTID_ = 8596; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUP_MSDS_INTID_ = 8597; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTS_IN_RDNATTID_ = 8598; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AUTHORIZATION_FAILED_ = 8599; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_SCRIPT_ = 8600; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REMOTE_CROSSREF_OP_FAILED_ = 8601; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CROSS_REF_BUSY_ = 8602; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN_ = 8603; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC_ = 8604; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DUPLICATE_ID_FOUND_ = 8605; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT_ = 8606; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_GROUP_CONVERSION_ERROR_ = 8607; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOVE_APP_BASIC_GROUP_ = 8608; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_CANT_MOVE_APP_QUERY_GROUP_ = 8609; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_ROLE_NOT_VERIFIED_ = 8610; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL_ = 8611; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DOMAIN_RENAME_IN_PROGRESS_ = 8612; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_EXISTING_AD_CHILD_NC_ = 8613; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_REPL_LIFETIME_EXCEEDED_ = 8614; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER_ = 8615; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LDAP_SEND_QUEUE_FULL_ = 8616; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_OUT_SCHEDULE_WINDOW_ = 8617; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_POLICY_NOT_KNOWN_ = 8618; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SITE_SETTINGS_OBJECT_ = 8619; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_SECRETS_ = 8620; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NO_WRITABLE_DC_FOUND_ = 8621; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_SERVER_OBJECT_ = 8622; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NO_NTDSA_OBJECT_ = 8623; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_NON_ASQ_SEARCH_ = 8624; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_AUDIT_FAILURE_ = 8625; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE_ = 8626; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_INVALID_SEARCH_FLAG_TUPLE_ = 8627; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_HIERARCHY_TABLE_TOO_DEEP_ = 8628; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_CORRUPT_UTD_VECTOR_ = 8629; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_SECRETS_DENIED_ = 8630; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_RESERVED_MAPI_ID_ = 8631; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_MAPI_ID_NOT_AVAILABLE_ = 8632; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_MISSING_KRBTGT_SECRET_ = 8633; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST_ = 8634; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST_ = 8635; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_USER_PRINCIPAL_NAME_ = 8636; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS_ = 8637; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_OID_NOT_FOUND_ = 8638; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DRA_RECYCLED_TARGET_ = 8639; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_DISALLOWED_NC_REDIRECT_ = 8640; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_HIGH_ADLDS_FFL_ = 8641; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_HIGH_DSA_VERSION_ = 8642; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_LOW_ADLDS_FFL_ = 8643; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION_ = 8644; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED_ = 8645; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INCORRECT_ACCOUNT_TYPE_ = 8646; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST_ = 8647; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST_ = 8648; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RESPONSE_CODES_BASE_ = 9000; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NO_ERROR_ = NO_ERROR_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_MASK_ = 0x00002328; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_FORMAT_ERROR_ = 9001; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_SERVER_FAILURE_ = 9002; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NAME_ERROR_ = 9003; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NOT_IMPLEMENTED_ = 9004; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_REFUSED_ = 9005; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_YXDOMAIN_ = 9006; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_YXRRSET_ = 9007; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NXRRSET_ = 9008; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NOTAUTH_ = 9009; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_NOTZONE_ = 9010; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_BADSIG_ = 9016; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_BADKEY_ = 9017; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_BADTIME_ = 9018; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_LAST_ = DNS_ERROR_RCODE_BADTIME_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DNSSEC_BASE_ = 9100; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_KEYMASTER_REQUIRED_ = 9101; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE_ = 9102; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1_ = 9103; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS_ = 9104; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNSUPPORTED_ALGORITHM_ = 9105; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_KEY_SIZE_ = 9106; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE_ = 9107; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION_ = 9108; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR_ = 9109; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNEXPECTED_CNG_ERROR_ = 9110; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION_ = 9111; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_KSP_NOT_ACCESSIBLE_ = 9112; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_TOO_MANY_SKDS_ = 9113; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_ROLLOVER_PERIOD_ = 9114; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET_ = 9115; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ROLLOVER_IN_PROGRESS_ = 9116; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_STANDBY_KEY_NOT_PRESENT_ = 9117; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_ZSK_ = 9118; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD_ = 9119; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ROLLOVER_ALREADY_QUEUED_ = 9120; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE_ = 9121; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_BAD_KEYMASTER_ = 9122; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD_ = 9123; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT_ = 9124; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DNSSEC_IS_DISABLED_ = 9125; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_XML_ = 9126; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_VALID_TRUST_ANCHORS_ = 9127; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ROLLOVER_NOT_POKEABLE_ = 9128; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NSEC3_NAME_COLLISION_ = 9129; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1_ = 9130; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_PACKET_FMT_BASE_ = 9500; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_INFO_NO_RECORDS_ = 9501; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_BAD_PACKET_ = 9502; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_PACKET_ = 9503; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RCODE_ = 9504; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNSECURE_PACKET_ = 9505; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_STATUS_PACKET_UNSECURE_ = DNS_ERROR_UNSECURE_PACKET_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_REQUEST_PENDING_ = 9506; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_MEMORY_ = ERROR_OUTOFMEMORY_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_NAME_ = ERROR_INVALID_NAME_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_DATA_ = ERROR_INVALID_DATA_; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_GENERAL_API_BASE_ = 9550; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_TYPE_ = 9551; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_IP_ADDRESS_ = 9552; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_PROPERTY_ = 9553; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_TRY_AGAIN_LATER_ = 9554; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_UNIQUE_ = 9555; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NON_RFC_NAME_ = 9556; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_STATUS_FQDN_ = 9557; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_STATUS_DOTTED_NAME_ = 9558; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_STATUS_SINGLE_PART_NAME_ = 9559; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_NAME_CHAR_ = 9560; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NUMERIC_NAME_ = 9561; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER_ = 9562; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION_ = 9563; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_CANNOT_FIND_ROOT_HINTS_ = 9564; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INCONSISTENT_ROOT_HINTS_ = 9565; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DWORD_VALUE_TOO_SMALL_ = 9566; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DWORD_VALUE_TOO_LARGE_ = 9567; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_BACKGROUND_LOADING_ = 9568; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_ON_RODC_ = 9569; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_UNDER_DNAME_ = 9570; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DELEGATION_REQUIRED_ = 9571; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_POLICY_TABLE_ = 9572; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_BASE_ = 9600; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_DOES_NOT_EXIST_ = 9601; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_ZONE_INFO_ = 9602; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_ZONE_OPERATION_ = 9603; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_CONFIGURATION_ERROR_ = 9604; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_HAS_NO_SOA_RECORD_ = 9605; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_HAS_NO_NS_RECORDS_ = 9606; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_LOCKED_ = 9607; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_CREATION_FAILED_ = 9608; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_ALREADY_EXISTS_ = 9609; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_AUTOZONE_ALREADY_EXISTS_ = 9610; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_ZONE_TYPE_ = 9611; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP_ = 9612; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_NOT_SECONDARY_ = 9613; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NEED_SECONDARY_ADDRESSES_ = 9614; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_WINS_INIT_FAILED_ = 9615; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NEED_WINS_SERVERS_ = 9616; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NBSTAT_INIT_FAILED_ = 9617; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SOA_DELETE_INVALID_ = 9618; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_FORWARDER_ALREADY_EXISTS_ = 9619; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_REQUIRES_MASTER_IP_ = 9620; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_IS_SHUTDOWN_ = 9621; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONE_LOCKED_FOR_SIGNING_ = 9622; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DATAFILE_BASE_ = 9650; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_PRIMARY_REQUIRES_DATAFILE_ = 9651; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_DATAFILE_NAME_ = 9652; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DATAFILE_OPEN_FAILURE_ = 9653; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_FILE_WRITEBACK_FAILED_ = 9654; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DATAFILE_PARSING_ = 9655; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DATABASE_BASE_ = 9700; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RECORD_DOES_NOT_EXIST_ = 9701; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RECORD_FORMAT_ = 9702; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NODE_CREATION_FAILED_ = 9703; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_UNKNOWN_RECORD_TYPE_ = 9704; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RECORD_TIMED_OUT_ = 9705; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NAME_NOT_IN_ZONE_ = 9706; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_CNAME_LOOP_ = 9707; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NODE_IS_CNAME_ = 9708; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_CNAME_COLLISION_ = 9709; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT_ = 9710; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_RECORD_ALREADY_EXISTS_ = 9711; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SECONDARY_DATA_ = 9712; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_CREATE_CACHE_DATA_ = 9713; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NAME_DOES_NOT_EXIST_ = 9714; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_WARNING_PTR_CREATE_FAILED_ = 9715; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_WARNING_DOMAIN_UNDELETED_ = 9716; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DS_UNAVAILABLE_ = 9717; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DS_ZONE_ALREADY_EXISTS_ = 9718; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE_ = 9719; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NODE_IS_DNAME_ = 9720; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DNAME_COLLISION_ = 9721; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ALIAS_LOOP_ = 9722; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_OPERATION_BASE_ = 9750; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_INFO_AXFR_COMPLETE_ = 9751; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_AXFR_ = 9752; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_INFO_ADDED_LOCAL_WINS_ = 9753; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SECURE_BASE_ = 9800; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_STATUS_CONTINUE_NEEDED_ = 9801; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SETUP_BASE_ = 9850; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_TCPIP_ = 9851; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NO_DNS_SERVERS_ = 9852; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_BASE_ = 9900; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_DOES_NOT_EXIST_ = 9901; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_ALREADY_EXISTS_ = 9902; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_NOT_ENLISTED_ = 9903; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_ALREADY_ENLISTED_ = 9904; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_NOT_AVAILABLE_ = 9905; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DP_FSMO_ERROR_ = 9906; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONESCOPE_ALREADY_EXISTS_ = 9951; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST_ = 9952; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DEFAULT_ZONESCOPE_ = 9953; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_ZONESCOPE_NAME_ = 9954; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES_ = 9955; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_LOAD_ZONESCOPE_FAILED_ = 9956; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED_ = 9957; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_SCOPE_NAME_ = 9958; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SCOPE_DOES_NOT_EXIST_ = 9959; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_DEFAULT_SCOPE_ = 9960; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_INVALID_SCOPE_OPERATION_ = 9961; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SCOPE_LOCKED_ = 9962; +BOOST_CONSTEXPR_OR_CONST DWORD_ DNS_ERROR_SCOPE_ALREADY_EXISTS_ = 9963; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSABASEERR_ = 10000; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEINTR_ = 10004; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEBADF_ = 10009; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEACCES_ = 10013; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEFAULT_ = 10014; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEINVAL_ = 10022; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEMFILE_ = 10024; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEWOULDBLOCK_ = 10035; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEINPROGRESS_ = 10036; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEALREADY_ = 10037; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOTSOCK_ = 10038; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEDESTADDRREQ_ = 10039; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEMSGSIZE_ = 10040; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEPROTOTYPE_ = 10041; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOPROTOOPT_ = 10042; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEPROTONOSUPPORT_ = 10043; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAESOCKTNOSUPPORT_ = 10044; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEOPNOTSUPP_ = 10045; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEPFNOSUPPORT_ = 10046; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEAFNOSUPPORT_ = 10047; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEADDRINUSE_ = 10048; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEADDRNOTAVAIL_ = 10049; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENETDOWN_ = 10050; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENETUNREACH_ = 10051; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENETRESET_ = 10052; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAECONNABORTED_ = 10053; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAECONNRESET_ = 10054; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOBUFS_ = 10055; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEISCONN_ = 10056; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOTCONN_ = 10057; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAESHUTDOWN_ = 10058; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAETOOMANYREFS_ = 10059; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAETIMEDOUT_ = 10060; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAECONNREFUSED_ = 10061; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAELOOP_ = 10062; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENAMETOOLONG_ = 10063; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEHOSTDOWN_ = 10064; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEHOSTUNREACH_ = 10065; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOTEMPTY_ = 10066; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEPROCLIM_ = 10067; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEUSERS_ = 10068; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEDQUOT_ = 10069; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAESTALE_ = 10070; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEREMOTE_ = 10071; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSASYSNOTREADY_ = 10091; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAVERNOTSUPPORTED_ = 10092; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSANOTINITIALISED_ = 10093; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEDISCON_ = 10101; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAENOMORE_ = 10102; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAECANCELLED_ = 10103; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEINVALIDPROCTABLE_ = 10104; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEINVALIDPROVIDER_ = 10105; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEPROVIDERFAILEDINIT_ = 10106; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSASYSCALLFAILURE_ = 10107; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSASERVICE_NOT_FOUND_ = 10108; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSATYPE_NOT_FOUND_ = 10109; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_E_NO_MORE_ = 10110; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_E_CANCELLED_ = 10111; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAEREFUSED_ = 10112; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSAHOST_NOT_FOUND_ = 11001; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSATRY_AGAIN_ = 11002; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSANO_RECOVERY_ = 11003; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSANO_DATA_ = 11004; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_RECEIVERS_ = 11005; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_SENDERS_ = 11006; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_NO_SENDERS_ = 11007; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_NO_RECEIVERS_ = 11008; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_REQUEST_CONFIRMED_ = 11009; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_ADMISSION_FAILURE_ = 11010; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_POLICY_FAILURE_ = 11011; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_BAD_STYLE_ = 11012; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_BAD_OBJECT_ = 11013; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_TRAFFIC_CTRL_ERROR_ = 11014; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_GENERIC_ERROR_ = 11015; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_ESERVICETYPE_ = 11016; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFLOWSPEC_ = 11017; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EPROVSPECBUF_ = 11018; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFILTERSTYLE_ = 11019; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFILTERTYPE_ = 11020; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFILTERCOUNT_ = 11021; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EOBJLENGTH_ = 11022; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFLOWCOUNT_ = 11023; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EUNKOWNPSOBJ_ = 11024; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EPOLICYOBJ_ = 11025; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EFLOWDESC_ = 11026; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EPSFLOWSPEC_ = 11027; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_EPSFILTERSPEC_ = 11028; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_ESDMODEOBJ_ = 11029; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_ESHAPERATEOBJ_ = 11030; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_QOS_RESERVED_PETYPE_ = 11031; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_SECURE_HOST_NOT_FOUND_ = 11032; +BOOST_CONSTEXPR_OR_CONST DWORD_ WSA_IPSEC_NAME_POLICY_ERROR_ = 11033; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_QM_POLICY_EXISTS_ = 13000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_QM_POLICY_NOT_FOUND_ = 13001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_QM_POLICY_IN_USE_ = 13002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_POLICY_EXISTS_ = 13003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_POLICY_NOT_FOUND_ = 13004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_POLICY_IN_USE_ = 13005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_FILTER_EXISTS_ = 13006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_FILTER_NOT_FOUND_ = 13007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TRANSPORT_FILTER_EXISTS_ = 13008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND_ = 13009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_AUTH_EXISTS_ = 13010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_AUTH_NOT_FOUND_ = 13011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_AUTH_IN_USE_ = 13012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND_ = 13013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND_ = 13014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND_ = 13015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TUNNEL_FILTER_EXISTS_ = 13016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND_ = 13017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_FILTER_PENDING_DELETION_ = 13018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION_ = 13019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION_ = 13020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_POLICY_PENDING_DELETION_ = 13021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_MM_AUTH_PENDING_DELETION_ = 13022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_QM_POLICY_PENDING_DELETION_ = 13023; +BOOST_CONSTEXPR_OR_CONST DWORD_ WARNING_IPSEC_MM_POLICY_PRUNED_ = 13024; +BOOST_CONSTEXPR_OR_CONST DWORD_ WARNING_IPSEC_QM_POLICY_PRUNED_ = 13025; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NEG_STATUS_BEGIN_ = 13800; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_AUTH_FAIL_ = 13801; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_ATTRIB_FAIL_ = 13802; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NEGOTIATION_PENDING_ = 13803; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR_ = 13804; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_TIMED_OUT_ = 13805; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_CERT_ = 13806; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SA_DELETED_ = 13807; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SA_REAPED_ = 13808; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_MM_ACQUIRE_DROP_ = 13809; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QM_ACQUIRE_DROP_ = 13810; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QUEUE_DROP_MM_ = 13811; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM_ = 13812; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_DROP_NO_RESPONSE_ = 13813; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_MM_DELAY_DROP_ = 13814; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QM_DELAY_DROP_ = 13815; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_ERROR_ = 13816; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_CRL_FAILED_ = 13817; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_KEY_USAGE_ = 13818; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_CERT_TYPE_ = 13819; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_PRIVATE_KEY_ = 13820; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY_ = 13821; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_DH_FAIL_ = 13822; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED_ = 13823; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_HEADER_ = 13824; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_POLICY_ = 13825; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_SIGNATURE_ = 13826; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_KERBEROS_ERROR_ = 13827; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_PUBLIC_KEY_ = 13828; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_ = 13829; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_SA_ = 13830; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_PROP_ = 13831; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_TRANS_ = 13832; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_KE_ = 13833; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_ID_ = 13834; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_CERT_ = 13835; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ_ = 13836; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_HASH_ = 13837; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_SIG_ = 13838; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_NONCE_ = 13839; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY_ = 13840; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_DELETE_ = 13841; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR_ = 13842; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_PAYLOAD_ = 13843; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_LOAD_SOFT_SA_ = 13844; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN_ = 13845; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_COOKIE_ = 13846; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_PEER_CERT_ = 13847; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PEER_CRL_FAILED_ = 13848; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_POLICY_CHANGE_ = 13849; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NO_MM_POLICY_ = 13850; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NOTCBPRIV_ = 13851; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SECLOADFAIL_ = 13852; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_FAILSSPINIT_ = 13853; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_FAILQUERYSSP_ = 13854; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SRVACQFAIL_ = 13855; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SRVQUERYCRED_ = 13856; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_GETSPIFAIL_ = 13857; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_FILTER_ = 13858; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_OUT_OF_MEMORY_ = 13859; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED_ = 13860; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_POLICY_ = 13861; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_UNKNOWN_DOI_ = 13862; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_SITUATION_ = 13863; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_DH_FAILURE_ = 13864; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_GROUP_ = 13865; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_ENCRYPT_ = 13866; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_DECRYPT_ = 13867; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_POLICY_MATCH_ = 13868; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_UNSUPPORTED_ID_ = 13869; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_HASH_ = 13870; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_HASH_ALG_ = 13871; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_HASH_SIZE_ = 13872; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG_ = 13873; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_AUTH_ALG_ = 13874; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_SIG_ = 13875; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_LOAD_FAILED_ = 13876; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_RPC_DELETE_ = 13877; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_BENIGN_REINIT_ = 13878; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY_ = 13879; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION_ = 13880; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN_ = 13881; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_MM_LIMIT_ = 13882; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NEGOTIATION_DISABLED_ = 13883; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QM_LIMIT_ = 13884; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_MM_EXPIRED_ = 13885; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID_ = 13886; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH_ = 13887; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID_ = 13888; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD_ = 13889; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_DOS_COOKIE_SENT_ = 13890; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_SHUTTING_DOWN_ = 13891; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_CGA_AUTH_FAILED_ = 13892; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PROCESS_ERR_NATOA_ = 13893; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INVALID_MM_FOR_QM_ = 13894; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_QM_EXPIRED_ = 13895; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_TOO_MANY_FILTERS_ = 13896; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NEG_STATUS_END_ = 13897; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL_ = 13898; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE_ = 13899; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING_ = 13900; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING_ = 13901; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS_ = 13902; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_RATELIMIT_DROP_ = 13903; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE_ = 13904; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_ = 13905; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE_ = 13906; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY_ = 13907; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE_ = 13908; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END_ = 13909; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_BAD_SPI_ = 13910; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_SA_LIFETIME_EXPIRED_ = 13911; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_WRONG_SA_ = 13912; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_REPLAY_CHECK_FAILED_ = 13913; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_INVALID_PACKET_ = 13914; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_INTEGRITY_CHECK_FAILED_ = 13915; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_CLEAR_TEXT_DROP_ = 13916; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_AUTH_FIREWALL_DROP_ = 13917; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_THROTTLE_DROP_ = 13918; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_BLOCK_ = 13925; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_RECEIVED_MULTICAST_ = 13926; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_INVALID_PACKET_ = 13927; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED_ = 13928; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_MAX_ENTRIES_ = 13929; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED_ = 13930; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_NOT_INSTALLED_ = 13931; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES_ = 13932; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_SECTION_NOT_FOUND_ = 14000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_CANT_GEN_ACTCTX_ = 14001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_ACTCTXDATA_FORMAT_ = 14002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ASSEMBLY_NOT_FOUND_ = 14003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_FORMAT_ERROR_ = 14004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_PARSE_ERROR_ = 14005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ACTIVATION_CONTEXT_DISABLED_ = 14006; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_KEY_NOT_FOUND_ = 14007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_VERSION_CONFLICT_ = 14008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_WRONG_SECTION_TYPE_ = 14009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_THREAD_QUERIES_DISABLED_ = 14010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET_ = 14011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_UNKNOWN_ENCODING_GROUP_ = 14012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_UNKNOWN_ENCODING_ = 14013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_XML_NAMESPACE_URI_ = 14014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED_ = 14015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED_ = 14016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_ = 14017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE_ = 14018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE_ = 14019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT_ = 14020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_DLL_NAME_ = 14021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME_ = 14022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_CLSID_ = 14023; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_IID_ = 14024; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_TLBID_ = 14025; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_PROGID_ = 14026; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_DUPLICATE_ASSEMBLY_NAME_ = 14027; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_FILE_HASH_MISMATCH_ = 14028; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_POLICY_PARSE_ERROR_ = 14029; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSINGQUOTE_ = 14030; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_COMMENTSYNTAX_ = 14031; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADSTARTNAMECHAR_ = 14032; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADNAMECHAR_ = 14033; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADCHARINSTRING_ = 14034; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_XMLDECLSYNTAX_ = 14035; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADCHARDATA_ = 14036; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSINGWHITESPACE_ = 14037; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_EXPECTINGTAGEND_ = 14038; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSINGSEMICOLON_ = 14039; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNBALANCEDPAREN_ = 14040; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INTERNALERROR_ = 14041; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE_ = 14042; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INCOMPLETE_ENCODING_ = 14043; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSING_PAREN_ = 14044; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE_ = 14045; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MULTIPLE_COLONS_ = 14046; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALID_DECIMAL_ = 14047; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALID_HEXIDECIMAL_ = 14048; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALID_UNICODE_ = 14049; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK_ = 14050; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNEXPECTEDENDTAG_ = 14051; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDTAG_ = 14052; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_DUPLICATEATTRIBUTE_ = 14053; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MULTIPLEROOTS_ = 14054; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALIDATROOTLEVEL_ = 14055; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADXMLDECL_ = 14056; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSINGROOT_ = 14057; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNEXPECTEDEOF_ = 14058; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADPEREFINSUBSET_ = 14059; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDSTARTTAG_ = 14060; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDENDTAG_ = 14061; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDSTRING_ = 14062; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDCOMMENT_ = 14063; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDDECL_ = 14064; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNCLOSEDCDATA_ = 14065; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_RESERVEDNAMESPACE_ = 14066; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALIDENCODING_ = 14067; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALIDSWITCH_ = 14068; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_BADXMLCASE_ = 14069; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALID_STANDALONE_ = 14070; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_UNEXPECTED_STANDALONE_ = 14071; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_INVALID_VERSION_ = 14072; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_XML_E_MISSINGEQUALS_ = 14073; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROTECTION_RECOVERY_FAILED_ = 14074; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT_ = 14075; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROTECTION_CATALOG_NOT_VALID_ = 14076; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_UNTRANSLATABLE_HRESULT_ = 14077; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING_ = 14078; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE_ = 14079; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME_ = 14080; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ASSEMBLY_MISSING_ = 14081; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_CORRUPT_ACTIVATION_STACK_ = 14082; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_CORRUPTION_ = 14083; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_EARLY_DEACTIVATION_ = 14084; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_DEACTIVATION_ = 14085; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MULTIPLE_DEACTIVATION_ = 14086; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_PROCESS_TERMINATION_REQUESTED_ = 14087; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_RELEASE_ACTIVATION_CONTEXT_ = 14088; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY_ = 14089; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE_ = 14090; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME_ = 14091; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE_ = 14092; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_IDENTITY_PARSE_ERROR_ = 14093; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MALFORMED_SUBSTITUTION_STRING_ = 14094; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN_ = 14095; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_UNMAPPED_SUBSTITUTION_STRING_ = 14096; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ASSEMBLY_NOT_LOCKED_ = 14097; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_COMPONENT_STORE_CORRUPT_ = 14098; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_ADVANCED_INSTALLER_FAILED_ = 14099; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_XML_ENCODING_MISMATCH_ = 14100; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT_ = 14101; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_IDENTITIES_DIFFERENT_ = 14102; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT_ = 14103; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY_ = 14104; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_MANIFEST_TOO_BIG_ = 14105; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_SETTING_NOT_REGISTERED_ = 14106; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE_ = 14107; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SMI_PRIMITIVE_INSTALLER_FAILED_ = 14108; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GENERIC_COMMAND_FAILED_ = 14109; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SXS_FILE_HASH_MISSING_ = 14110; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_CHANNEL_PATH_ = 15000; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_QUERY_ = 15001; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND_ = 15002; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND_ = 15003; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_PUBLISHER_NAME_ = 15004; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_EVENT_DATA_ = 15005; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_CHANNEL_NOT_FOUND_ = 15007; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_MALFORMED_XML_TEXT_ = 15008; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL_ = 15009; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_CONFIGURATION_ERROR_ = 15010; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_QUERY_RESULT_STALE_ = 15011; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_QUERY_RESULT_INVALID_POSITION_ = 15012; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_NON_VALIDATING_MSXML_ = 15013; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_ALREADYSCOPED_ = 15014; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_NOTELTSET_ = 15015; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_INVARG_ = 15016; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_INVTEST_ = 15017; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_INVTYPE_ = 15018; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_PARSEERR_ = 15019; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_UNSUPPORTEDOP_ = 15020; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_UNEXPECTEDTOKEN_ = 15021; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL_ = 15022; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE_ = 15023; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE_ = 15024; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_CHANNEL_CANNOT_ACTIVATE_ = 15025; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_TOO_COMPLEX_ = 15026; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_MESSAGE_NOT_FOUND_ = 15027; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_MESSAGE_ID_NOT_FOUND_ = 15028; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_UNRESOLVED_VALUE_INSERT_ = 15029; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_UNRESOLVED_PARAMETER_INSERT_ = 15030; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_MAX_INSERTS_REACHED_ = 15031; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_EVENT_DEFINITION_NOT_FOUND_ = 15032; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND_ = 15033; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_VERSION_TOO_OLD_ = 15034; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_VERSION_TOO_NEW_ = 15035; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY_ = 15036; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_PUBLISHER_DISABLED_ = 15037; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EVT_FILTER_OUT_OF_RANGE_ = 15038; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE_ = 15080; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_LOG_DISABLED_ = 15081; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_CIRCULAR_FORWARDING_ = 15082; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_CREDSTORE_FULL_ = 15083; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_CRED_NOT_FOUND_ = 15084; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_EC_NO_ACTIVE_CHANNEL_ = 15085; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_FILE_NOT_FOUND_ = 15100; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INVALID_FILE_ = 15101; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INVALID_RC_CONFIG_ = 15102; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INVALID_LOCALE_NAME_ = 15103; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME_ = 15104; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_FILE_NOT_LOADED_ = 15105; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESOURCE_ENUM_USER_STOP_ = 15106; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED_ = 15107; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME_ = 15108; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE_ = 15110; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_PRICONFIG_ = 15111; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_FILE_TYPE_ = 15112; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_UNKNOWN_QUALIFIER_ = 15113; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_QUALIFIER_VALUE_ = 15114; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_NO_CANDIDATE_ = 15115; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE_ = 15116; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_RESOURCE_TYPE_MISMATCH_ = 15117; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_DUPLICATE_MAP_NAME_ = 15118; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_DUPLICATE_ENTRY_ = 15119; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_RESOURCE_IDENTIFIER_ = 15120; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_FILEPATH_TOO_LONG_ = 15121; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE_ = 15122; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_PRI_FILE_ = 15126; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_NAMED_RESOURCE_NOT_FOUND_ = 15127; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_MAP_NOT_FOUND_ = 15135; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_UNSUPPORTED_PROFILE_TYPE_ = 15136; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INVALID_QUALIFIER_OPERATOR_ = 15137; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE_ = 15138; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_AUTOMERGE_ENABLED_ = 15139; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_TOO_MANY_RESOURCES_ = 15140; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE_ = 15141; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE_ = 15142; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD_ = 15143; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST_ = 15144; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT_ = 15145; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE_ = 15146; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MRM_GENERATION_COUNT_MISMATCH_ = 15147; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_INVALID_CAPABILITIES_STRING_ = 15200; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_INVALID_VCP_VERSION_ = 15201; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION_ = 15202; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_MCCS_VERSION_MISMATCH_ = 15203; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_UNSUPPORTED_MCCS_VERSION_ = 15204; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_INTERNAL_ERROR_ = 15205; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED_ = 15206; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE_ = 15207; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_AMBIGUOUS_SYSTEM_DEVICE_ = 15250; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_DEVICE_NOT_FOUND_ = 15299; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HASH_NOT_SUPPORTED_ = 15300; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_HASH_NOT_PRESENT_ = 15301; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED_ = 15321; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_CLIENT_INFORMATION_INVALID_ = 15322; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_VERSION_NOT_SUPPORTED_ = 15323; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_INVALID_REGISTRATION_PACKET_ = 15324; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_OPERATION_DENIED_ = 15325; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE_ = 15326; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED_ = 15327; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_CANNOT_SWITCH_RUNLEVEL_ = 15400; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_RUNLEVEL_SETTING_ = 15401; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RUNLEVEL_SWITCH_TIMEOUT_ = 15402; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT_ = 15403; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RUNLEVEL_SWITCH_IN_PROGRESS_ = 15404; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SERVICES_FAILED_AUTOSTART_ = 15405; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_COM_TASK_STOP_PENDING_ = 15501; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_OPEN_PACKAGE_FAILED_ = 15600; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_NOT_FOUND_ = 15601; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_INVALID_PACKAGE_ = 15602; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED_ = 15603; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_OUT_OF_DISK_SPACE_ = 15604; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_NETWORK_FAILURE_ = 15605; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_REGISTRATION_FAILURE_ = 15606; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_DEREGISTRATION_FAILURE_ = 15607; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_CANCEL_ = 15608; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_FAILED_ = 15609; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_REMOVE_FAILED_ = 15610; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PACKAGE_ALREADY_EXISTS_ = 15611; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_NEEDS_REMEDIATION_ = 15612; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PREREQUISITE_FAILED_ = 15613; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PACKAGE_REPOSITORY_CORRUPTED_ = 15614; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_POLICY_FAILURE_ = 15615; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PACKAGE_UPDATING_ = 15616; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DEPLOYMENT_BLOCKED_BY_POLICY_ = 15617; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_PACKAGES_IN_USE_ = 15618; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RECOVERY_FILE_CORRUPT_ = 15619; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INVALID_STAGED_SIGNATURE_ = 15620; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED_ = 15621; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_PACKAGE_DOWNGRADE_ = 15622; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_SYSTEM_NEEDS_REMEDIATION_ = 15623; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN_ = 15624; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_RESILIENCY_FILE_CORRUPT_ = 15625; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING_ = 15626; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_NO_PACKAGE_ = 15700; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT_ = 15701; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT_ = 15702; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_NO_APPLICATION_ = 15703; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED_ = 15704; +BOOST_CONSTEXPR_OR_CONST DWORD_ APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID_ = 15705; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_LOAD_STORE_FAILED_ = 15800; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_GET_VERSION_FAILED_ = 15801; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_SET_VERSION_FAILED_ = 15802; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_STRUCTURED_RESET_FAILED_ = 15803; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_OPEN_CONTAINER_FAILED_ = 15804; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_CREATE_CONTAINER_FAILED_ = 15805; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_DELETE_CONTAINER_FAILED_ = 15806; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_READ_SETTING_FAILED_ = 15807; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_WRITE_SETTING_FAILED_ = 15808; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_DELETE_SETTING_FAILED_ = 15809; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_QUERY_SETTING_FAILED_ = 15810; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_READ_COMPOSITE_SETTING_FAILED_ = 15811; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED_ = 15812; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_ENUMERATE_CONTAINER_FAILED_ = 15813; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_ENUMERATE_SETTINGS_FAILED_ = 15814; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED_ = 15815; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED_ = 15816; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED_ = 15817; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED_ = 15818; +BOOST_CONSTEXPR_OR_CONST DWORD_ ERROR_API_UNAVAILABLE_ = 15841; +BOOST_CONSTEXPR_OR_CONST DWORD_ STORE_ERROR_UNLICENSED_ = 15861; +BOOST_CONSTEXPR_OR_CONST DWORD_ STORE_ERROR_UNLICENSED_USER_ = 15862; +BOOST_CONSTEXPR_OR_CONST DWORD_ STORE_ERROR_PENDING_COM_TRANSACTION_ = 15863; +BOOST_CONSTEXPR_OR_CONST DWORD_ STORE_ERROR_LICENSE_REVOKED_ = 15864; + +} // namespace winapi +} // namespace detail +} // namespace boost + +#endif // BOOST_DETAIL_WINAPI_ERROR_CODES_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/error_handling.hpp b/lib/3rdParty/boost/boost/detail/winapi/error_handling.hpp index cdd759d..4847bc9 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/error_handling.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/error_handling.hpp @@ -2,6 +2,7 @@ // Copyright 2010 Vicente J. Botet Escriba // Copyright 2015 Andrey Semashev +// Copyright 2016 Jorge Lodos // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -12,7 +13,7 @@ #include #include -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -41,6 +42,9 @@ FormatMessageW( boost::detail::winapi::LPWSTR_ lpBuffer, boost::detail::winapi::DWORD_ nSize, va_list *Arguments); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::UINT_ WINAPI +SetErrorMode(boost::detail::winapi::UINT_ uMode); } #endif @@ -68,6 +72,11 @@ BOOST_FORCEINLINE WORD_ MAKELANGID_(WORD_ p, WORD_ s) return MAKELANGID(p,s); } +const DWORD_ SEM_FAILCRITICALERRORS_ = SEM_FAILCRITICALERRORS; +const DWORD_ SEM_NOGPFAULTERRORBOX_ = SEM_NOGPFAULTERRORBOX; +const DWORD_ SEM_NOALIGNMENTFAULTEXCEPT_ = SEM_NOALIGNMENTFAULTEXCEPT; +const DWORD_ SEM_NOOPENFILEERRORBOX_ = SEM_NOOPENFILEERRORBOX; + #else const DWORD_ FORMAT_MESSAGE_ALLOCATE_BUFFER_= 0x00000100; @@ -85,15 +94,21 @@ const WORD_ SUBLANG_DEFAULT_= 0x01; // user default BOOST_FORCEINLINE WORD_ MAKELANGID_(WORD_ p, WORD_ s) { - return ((((WORD_)(s)) << 10) | (WORD_)(p)); + return (WORD_)((((WORD_)(s)) << 10) | (WORD_)(p)); } +const DWORD_ SEM_FAILCRITICALERRORS_ = 0x0001; +const DWORD_ SEM_NOGPFAULTERRORBOX_ = 0x0002; +const DWORD_ SEM_NOALIGNMENTFAULTEXCEPT_ = 0x0004; +const DWORD_ SEM_NOOPENFILEERRORBOX_ = 0x8000; + #endif #if !defined( BOOST_NO_ANSI_APIS ) using ::FormatMessageA; #endif using ::FormatMessageW; +using ::SetErrorMode; #if !defined( BOOST_NO_ANSI_APIS ) BOOST_FORCEINLINE DWORD_ format_message( diff --git a/lib/3rdParty/boost/boost/detail/winapi/event.hpp b/lib/3rdParty/boost/boost/detail/winapi/event.hpp index ec2b096..64ee892 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/event.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/event.hpp @@ -92,14 +92,16 @@ using ::ResetEvent; #if defined( BOOST_USE_WINDOWS_H ) const DWORD_ EVENT_ALL_ACCESS_ = EVENT_ALL_ACCESS; +const DWORD_ EVENT_MODIFY_STATE_ = EVENT_MODIFY_STATE; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ CREATE_EVENT_INITIAL_SET_ = CREATE_EVENT_INITIAL_SET; const DWORD_ CREATE_EVENT_MANUAL_RESET_ = CREATE_EVENT_MANUAL_RESET; #endif #else // defined( BOOST_USE_WINDOWS_H ) - -const DWORD_ EVENT_ALL_ACCESS_ = 0x1F0003; + +const DWORD_ EVENT_ALL_ACCESS_ = 0x001F0003; +const DWORD_ EVENT_MODIFY_STATE_ = 0x00000002; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ CREATE_EVENT_INITIAL_SET_ = 0x00000002; const DWORD_ CREATE_EVENT_MANUAL_RESET_ = 0x00000001; @@ -107,7 +109,12 @@ const DWORD_ CREATE_EVENT_MANUAL_RESET_ = 0x00000001; #endif // defined( BOOST_USE_WINDOWS_H ) +// Undocumented and not present in Windows SDK. Enables NtQueryEvent. +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FEvent%2FNtQueryEvent.html +const DWORD_ EVENT_QUERY_STATE_ = 0x00000001; + const DWORD_ event_all_access = EVENT_ALL_ACCESS_; +const DWORD_ event_modify_state = EVENT_MODIFY_STATE_; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ create_event_initial_set = CREATE_EVENT_INITIAL_SET_; const DWORD_ create_event_manual_reset = CREATE_EVENT_MANUAL_RESET_; @@ -118,7 +125,7 @@ BOOST_FORCEINLINE HANDLE_ CreateEventA(SECURITY_ATTRIBUTES_* lpEventAttributes, { #if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ flags = (bManualReset ? create_event_manual_reset : 0u) | (bInitialState ? create_event_initial_set : 0u); - return ::CreateEventExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); + return ::CreateEventExA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); #else return ::CreateEventA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), bManualReset, bInitialState, lpName); #endif @@ -136,7 +143,7 @@ BOOST_FORCEINLINE HANDLE_ CreateEventW(SECURITY_ATTRIBUTES_* lpEventAttributes, { #if BOOST_PLAT_WINDOWS_RUNTIME && BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ flags = (bManualReset ? create_event_manual_reset : 0u) | (bInitialState ? create_event_initial_set : 0u); - return ::CreateEventExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); + return ::CreateEventExW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), lpName, flags, event_all_access); #else return ::CreateEventW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpEventAttributes), bManualReset, bInitialState, lpName); #endif diff --git a/lib/3rdParty/boost/boost/detail/winapi/file_management.hpp b/lib/3rdParty/boost/boost/detail/winapi/file_management.hpp index c923d84..80567bd 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/file_management.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/file_management.hpp @@ -2,6 +2,7 @@ // Copyright 2010 Vicente J. Botet Escriba // Copyright 2015 Andrey Semashev +// Copyright 2016 Jorge Lodos // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -11,7 +12,9 @@ #define BOOST_DETAIL_WINAPI_FILE_MANAGEMENT_HPP #include +#include #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -19,7 +22,6 @@ #if !defined( BOOST_USE_WINDOWS_H ) extern "C" { -struct _OVERLAPPED; #if !defined( BOOST_NO_ANSI_APIS ) BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI @@ -47,6 +49,12 @@ MoveFileExA( boost::detail::winapi::LPCSTR_ lpExistingFileName, boost::detail::winapi::LPCSTR_ lpNewFileName, boost::detail::winapi::DWORD_ dwFlags); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI +GetFileAttributesA(boost::detail::winapi::LPCSTR_ lpFileName); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +AreFileApisANSI(BOOST_DETAIL_WINAPI_VOID); #endif BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI @@ -75,6 +83,9 @@ MoveFileExW( boost::detail::winapi::LPCWSTR_ lpNewFileName, boost::detail::winapi::DWORD_ dwFlags); +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI +GetFileAttributesW(boost::detail::winapi::LPCWSTR_ lpFileName); + BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI FindClose(boost::detail::winapi::HANDLE_ hFindFile); @@ -124,6 +135,14 @@ UnlockFileEx( boost::detail::winapi::DWORD_ nNumberOfBytesToUnlockHigh, ::_OVERLAPPED* lpOverlapped); +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +ReadFile( + boost::detail::winapi::HANDLE_ hFile, + boost::detail::winapi::LPVOID_ lpBuffer, + boost::detail::winapi::DWORD_ nNumberOfBytesToRead, + boost::detail::winapi::LPDWORD_ lpNumberOfBytesRead, + ::_OVERLAPPED* lpOverlapped); + BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI WriteFile( boost::detail::winapi::HANDLE_ hFile, @@ -131,6 +150,19 @@ WriteFile( boost::detail::winapi::DWORD_ nNumberOfBytesToWrite, boost::detail::winapi::LPDWORD_ lpNumberOfBytesWritten, ::_OVERLAPPED* lpOverlapped); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI +SetFilePointer( + boost::detail::winapi::HANDLE_ hFile, + boost::detail::winapi::LONG_ lpDistanceToMove, + boost::detail::winapi::PLONG_ lpDistanceToMoveHigh, + boost::detail::winapi::DWORD_ dwMoveMethod); + +struct _BY_HANDLE_FILE_INFORMATION; +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +GetFileInformationByHandle( + boost::detail::winapi::HANDLE_ hFile, + ::_BY_HANDLE_FILE_INFORMATION* lpFileInformation); } #endif @@ -138,13 +170,99 @@ namespace boost { namespace detail { namespace winapi { +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ INVALID_FILE_SIZE_ = INVALID_FILE_SIZE; +const DWORD_ INVALID_SET_FILE_POINTER_ = INVALID_SET_FILE_POINTER; +const DWORD_ INVALID_FILE_ATTRIBUTES_ = INVALID_FILE_ATTRIBUTES; + +const DWORD_ FILE_ATTRIBUTE_READONLY_ = FILE_ATTRIBUTE_READONLY; +const DWORD_ FILE_ATTRIBUTE_HIDDEN_ = FILE_ATTRIBUTE_HIDDEN; +const DWORD_ FILE_ATTRIBUTE_SYSTEM_ = FILE_ATTRIBUTE_SYSTEM; +const DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = FILE_ATTRIBUTE_DIRECTORY; +const DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = FILE_ATTRIBUTE_ARCHIVE; +const DWORD_ FILE_ATTRIBUTE_DEVICE_ = FILE_ATTRIBUTE_DEVICE; +const DWORD_ FILE_ATTRIBUTE_NORMAL_ = FILE_ATTRIBUTE_NORMAL; +const DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = FILE_ATTRIBUTE_TEMPORARY; +const DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = FILE_ATTRIBUTE_SPARSE_FILE; +const DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = FILE_ATTRIBUTE_REPARSE_POINT; +const DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = FILE_ATTRIBUTE_COMPRESSED; +const DWORD_ FILE_ATTRIBUTE_OFFLINE_ = FILE_ATTRIBUTE_OFFLINE; +const DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED; +const DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = FILE_ATTRIBUTE_ENCRYPTED; + +const DWORD_ CREATE_NEW_ = CREATE_NEW; +const DWORD_ CREATE_ALWAYS_ = CREATE_ALWAYS; +const DWORD_ OPEN_EXISTING_ = OPEN_EXISTING; +const DWORD_ OPEN_ALWAYS_ = OPEN_ALWAYS; +const DWORD_ TRUNCATE_EXISTING_ = TRUNCATE_EXISTING; + +const DWORD_ FILE_SHARE_READ_ = FILE_SHARE_READ; +const DWORD_ FILE_SHARE_WRITE_ = FILE_SHARE_WRITE; +const DWORD_ FILE_SHARE_DELETE_ = FILE_SHARE_DELETE; + +const DWORD_ FILE_BEGIN_ = FILE_BEGIN; +const DWORD_ FILE_CURRENT_ = FILE_CURRENT; +const DWORD_ FILE_END_ = FILE_END; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ INVALID_FILE_SIZE_ = ((DWORD_)0xFFFFFFFF); +const DWORD_ INVALID_SET_FILE_POINTER_ = ((DWORD_)-1); +const DWORD_ INVALID_FILE_ATTRIBUTES_ = ((DWORD_)-1); + +const DWORD_ FILE_ATTRIBUTE_READONLY_ = 0x00000001; +const DWORD_ FILE_ATTRIBUTE_HIDDEN_ = 0x00000002; +const DWORD_ FILE_ATTRIBUTE_SYSTEM_ = 0x00000004; +const DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = 0x00000010; +const DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = 0x00000020; +const DWORD_ FILE_ATTRIBUTE_DEVICE_ = 0x00000040; +const DWORD_ FILE_ATTRIBUTE_NORMAL_ = 0x00000080; +const DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = 0x00000100; +const DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = 0x00000200; +const DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = 0x00000400; +const DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = 0x00000800; +const DWORD_ FILE_ATTRIBUTE_OFFLINE_ = 0x00001000; +const DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = 0x00002000; +const DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = 0x00004000; + +const DWORD_ CREATE_NEW_ = 1; +const DWORD_ CREATE_ALWAYS_ = 2; +const DWORD_ OPEN_EXISTING_ = 3; +const DWORD_ OPEN_ALWAYS_ = 4; +const DWORD_ TRUNCATE_EXISTING_ = 5; + +const DWORD_ FILE_SHARE_READ_ = 0x00000001; +const DWORD_ FILE_SHARE_WRITE_ = 0x00000002; +const DWORD_ FILE_SHARE_DELETE_ = 0x00000004; + +const DWORD_ FILE_BEGIN_ = 0; +const DWORD_ FILE_CURRENT_ = 1; +const DWORD_ FILE_END_ = 2; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +// This constant is not defined in Windows SDK up until 6.0A +const DWORD_ FILE_ATTRIBUTE_VIRTUAL_ = 0x00010000; + +// These constants are not defined in Windows SDK up until 8.0 and MinGW/MinGW-w64 (as of 2016-02-14). +// They are documented to be supported only since Windows 8/Windows Server 2012 +// but defined unconditionally. +const DWORD_ FILE_ATTRIBUTE_INTEGRITY_STREAM_ = 0x00008000; +const DWORD_ FILE_ATTRIBUTE_NO_SCRUB_DATA_ = 0x00020000; +// Undocumented +const DWORD_ FILE_ATTRIBUTE_EA_ = 0x00040000; + #if !defined( BOOST_NO_ANSI_APIS ) using ::DeleteFileA; using ::MoveFileExA; +using ::GetFileAttributesA; +using ::AreFileApisANSI; #endif using ::DeleteFileW; using ::MoveFileExW; +using ::GetFileAttributesW; using ::FindClose; @@ -157,19 +275,8 @@ using ::SetFileValidData; using ::SetEndOfFile; using ::LockFile; using ::UnlockFile; +using ::SetFilePointer; -typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _OVERLAPPED { - ULONG_PTR_ Internal; - ULONG_PTR_ InternalHigh; - union { - struct { - DWORD_ Offset; - DWORD_ OffsetHigh; - }; - PVOID_ Pointer; - }; - HANDLE_ hEvent; -} OVERLAPPED_, *LPOVERLAPPED_; #if !defined( BOOST_NO_ANSI_APIS ) BOOST_FORCEINLINE HANDLE_ CreateFileA( @@ -200,8 +307,8 @@ typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _WIN32_FIND_DATAA { DWORD_ nFileSizeLow; DWORD_ dwReserved0; DWORD_ dwReserved1; - CHAR_ cFileName[ 260 ]; // MAX_PATH - CHAR_ cAlternateFileName[ 14 ]; + CHAR_ cFileName[MAX_PATH_]; + CHAR_ cAlternateFileName[14]; #ifdef _MAC DWORD_ dwFileType; DWORD_ dwCreatorType; @@ -248,8 +355,8 @@ typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _WIN32_FIND_DATAW { DWORD_ nFileSizeLow; DWORD_ dwReserved0; DWORD_ dwReserved1; - WCHAR_ cFileName[ 260 ]; // MAX_PATH - WCHAR_ cAlternateFileName[ 14 ]; + WCHAR_ cFileName[MAX_PATH_]; + WCHAR_ cAlternateFileName[14]; #ifdef _MAC DWORD_ dwFileType; DWORD_ dwCreatorType; @@ -257,6 +364,19 @@ typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _WIN32_FIND_DATAW { #endif } WIN32_FIND_DATAW_, *PWIN32_FIND_DATAW_, *LPWIN32_FIND_DATAW_; +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _BY_HANDLE_FILE_INFORMATION { + DWORD_ dwFileAttributes; + FILETIME_ ftCreationTime; + FILETIME_ ftLastAccessTime; + FILETIME_ ftLastWriteTime; + DWORD_ dwVolumeSerialNumber; + DWORD_ nFileSizeHigh; + DWORD_ nFileSizeLow; + DWORD_ nNumberOfLinks; + DWORD_ nFileIndexHigh; + DWORD_ nFileIndexLow; +} BY_HANDLE_FILE_INFORMATION_, *PBY_HANDLE_FILE_INFORMATION_, *LPBY_HANDLE_FILE_INFORMATION_; + BOOST_FORCEINLINE HANDLE_ FindFirstFileW(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData) { return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData)); @@ -293,6 +413,16 @@ BOOST_FORCEINLINE BOOL_ UnlockFileEx( return ::UnlockFileEx(hFile, dwReserved, nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped)); } +BOOST_FORCEINLINE BOOL_ ReadFile( + HANDLE_ hFile, + LPVOID_ lpBuffer, + DWORD_ nNumberOfBytesToWrite, + LPDWORD_ lpNumberOfBytesWritten, + OVERLAPPED_* lpOverlapped) +{ + return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped)); +} + BOOST_FORCEINLINE BOOL_ WriteFile( HANDLE_ hFile, LPCVOID_ lpBuffer, @@ -301,8 +431,7 @@ BOOST_FORCEINLINE BOOL_ WriteFile( OVERLAPPED_* lpOverlapped) { return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped)); -}; - +} #if !defined( BOOST_NO_ANSI_APIS ) BOOST_FORCEINLINE HANDLE_ create_file( @@ -343,6 +472,11 @@ BOOST_FORCEINLINE BOOL_ move_file(LPCSTR_ lpExistingFileName, LPCSTR_ lpNewFileN { return ::MoveFileExA(lpExistingFileName, lpNewFileName, dwFlags); } + +BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCSTR_ lpFileName) +{ + return ::GetFileAttributesA(lpFileName); +} #endif BOOST_FORCEINLINE HANDLE_ create_file( @@ -384,6 +518,16 @@ BOOST_FORCEINLINE BOOL_ move_file(LPCWSTR_ lpExistingFileName, LPCWSTR_ lpNewFil return ::MoveFileExW(lpExistingFileName, lpNewFileName, dwFlags); } +BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCWSTR_ lpFileName) +{ + return ::GetFileAttributesW(lpFileName); +} + +BOOST_FORCEINLINE BOOL_ GetFileInformationByHandle(HANDLE_ h, BY_HANDLE_FILE_INFORMATION_* info) +{ + return ::GetFileInformationByHandle(h, reinterpret_cast< ::_BY_HANDLE_FILE_INFORMATION* >(info)); +} + } } } diff --git a/lib/3rdParty/boost/boost/detail/winapi/file_mapping.hpp b/lib/3rdParty/boost/boost/detail/winapi/file_mapping.hpp index f3cf794..38c23d5 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/file_mapping.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/file_mapping.hpp @@ -2,6 +2,7 @@ // Copyright 2010 Vicente J. Botet Escriba // Copyright 2015 Andrey Semashev +// Copyright 2016 Jorge Lodos // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -50,6 +51,14 @@ OpenFileMappingW( boost::detail::winapi::BOOL_ bInheritHandle, boost::detail::winapi::LPCWSTR_ lpName); +BOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI +MapViewOfFile( + boost::detail::winapi::HANDLE_ hFileMappingObject, + boost::detail::winapi::DWORD_ dwDesiredAccess, + boost::detail::winapi::DWORD_ dwFileOffsetHigh, + boost::detail::winapi::DWORD_ dwFileOffsetLow, + boost::detail::winapi::SIZE_T_ dwNumberOfBytesToMap); + BOOST_SYMBOL_IMPORT boost::detail::winapi::LPVOID_ WINAPI MapViewOfFileEx( boost::detail::winapi::HANDLE_ hFileMappingObject, @@ -73,10 +82,69 @@ namespace boost { namespace detail { namespace winapi { +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ SEC_FILE_ = SEC_FILE; +const DWORD_ SEC_IMAGE_ = SEC_IMAGE; +const DWORD_ SEC_RESERVE_ = SEC_RESERVE; +const DWORD_ SEC_COMMIT_ = SEC_COMMIT; +const DWORD_ SEC_NOCACHE_ = SEC_NOCACHE; + +// These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags. +// SECTION_QUERY enables NtQuerySection. +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html +const DWORD_ SECTION_QUERY_ = SECTION_QUERY; +const DWORD_ SECTION_MAP_WRITE_ = SECTION_MAP_WRITE; +const DWORD_ SECTION_MAP_READ_ = SECTION_MAP_READ; +const DWORD_ SECTION_MAP_EXECUTE_ = SECTION_MAP_EXECUTE; +const DWORD_ SECTION_EXTEND_SIZE_ = SECTION_EXTEND_SIZE; +const DWORD_ SECTION_ALL_ACCESS_ = SECTION_ALL_ACCESS; + +const DWORD_ FILE_MAP_COPY_ = FILE_MAP_COPY; +const DWORD_ FILE_MAP_WRITE_ = FILE_MAP_WRITE; +const DWORD_ FILE_MAP_READ_ = FILE_MAP_READ; +const DWORD_ FILE_MAP_ALL_ACCESS_ = FILE_MAP_ALL_ACCESS; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ SEC_FILE_ = 0x800000; +const DWORD_ SEC_IMAGE_ = 0x1000000; +const DWORD_ SEC_RESERVE_ = 0x4000000; +const DWORD_ SEC_COMMIT_ = 0x8000000; +const DWORD_ SEC_NOCACHE_ = 0x10000000; + +// These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags. +// SECTION_QUERY enables NtQuerySection. +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html +const DWORD_ SECTION_QUERY_ = 0x00000001; +const DWORD_ SECTION_MAP_WRITE_ = 0x00000002; +const DWORD_ SECTION_MAP_READ_ = 0x00000004; +const DWORD_ SECTION_MAP_EXECUTE_ = 0x00000008; +const DWORD_ SECTION_EXTEND_SIZE_ = 0x00000010; +const DWORD_ SECTION_ALL_ACCESS_ = 0x000F001F; // STANDARD_RIGHTS_REQUIRED | SECTION_* + +const DWORD_ FILE_MAP_COPY_ = SECTION_QUERY_; +const DWORD_ FILE_MAP_WRITE_ = SECTION_MAP_WRITE_; +const DWORD_ FILE_MAP_READ_ = SECTION_MAP_READ_; +const DWORD_ FILE_MAP_ALL_ACCESS_ = SECTION_ALL_ACCESS_; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +// These constants are not defined in Windows SDK up until the one shipped with MSVC 8 and MinGW (as of 2016-02-14) +const DWORD_ SECTION_MAP_EXECUTE_EXPLICIT_ = 0x00000020; // not included in SECTION_ALL_ACCESS +const DWORD_ FILE_MAP_EXECUTE_ = SECTION_MAP_EXECUTE_EXPLICIT_; // not included in FILE_MAP_ALL_ACCESS + +// These constants are not defined in Windows SDK up until 6.0A and MinGW (as of 2016-02-14) +const DWORD_ SEC_PROTECTED_IMAGE_ = 0x2000000; +const DWORD_ SEC_WRITECOMBINE_ = 0x40000000; +const DWORD_ SEC_LARGE_PAGES_ = 0x80000000; +const DWORD_ SEC_IMAGE_NO_EXECUTE_ = (SEC_IMAGE_ | SEC_NOCACHE_); + #if !defined( BOOST_NO_ANSI_APIS ) using ::OpenFileMappingA; #endif using ::OpenFileMappingW; +using ::MapViewOfFile; using ::MapViewOfFileEx; using ::FlushViewOfFile; using ::UnmapViewOfFile; @@ -102,7 +170,7 @@ BOOST_FORCEINLINE HANDLE_ CreateFileMappingA( BOOST_FORCEINLINE HANDLE_ CreateFileMappingW( HANDLE_ hFile, - ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes, + SECURITY_ATTRIBUTES_* lpFileMappingAttributes, DWORD_ flProtect, DWORD_ dwMaximumSizeHigh, DWORD_ dwMaximumSizeLow, @@ -143,7 +211,7 @@ BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInher BOOST_FORCEINLINE HANDLE_ create_file_mapping( HANDLE_ hFile, - ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes, + SECURITY_ATTRIBUTES_* lpFileMappingAttributes, DWORD_ flProtect, DWORD_ dwMaximumSizeHigh, DWORD_ dwMaximumSizeLow, diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_current_process.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_current_process.hpp new file mode 100644 index 0000000..e5f4f2a --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_current_process.hpp @@ -0,0 +1,34 @@ +// get_current_process.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2015 Andrey Semashev + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_HPP +#define BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +// Windows CE define GetCurrentProcess as an inline function in kfuncs.h +#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentProcess(BOOST_DETAIL_WINAPI_VOID); +} +#endif + +namespace boost { +namespace detail { +namespace winapi { +using ::GetCurrentProcess; +} +} +} + +#endif // BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_current_process_id.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_current_process_id.hpp new file mode 100644 index 0000000..aa21e6c --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_current_process_id.hpp @@ -0,0 +1,33 @@ +// get_current_process_id.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_ID_HPP +#define BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_ID_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +// Windows CE define GetCurrentProcessId as an inline function in kfuncs.h +#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentProcessId(BOOST_DETAIL_WINAPI_VOID); +} +#endif + +namespace boost { +namespace detail { +namespace winapi { +using ::GetCurrentProcessId; +} +} +} + +#endif // BOOST_DETAIL_WINAPI_GET_CURRENT_PROCESS_ID_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_current_thread.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_current_thread.hpp new file mode 100644 index 0000000..b52c3a8 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_current_thread.hpp @@ -0,0 +1,34 @@ +// get_current_thread.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2015 Andrey Semashev + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_HPP +#define BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +// Windows CE define GetCurrentThread as an inline function in kfuncs.h +#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI GetCurrentThread(BOOST_DETAIL_WINAPI_VOID); +} +#endif + +namespace boost { +namespace detail { +namespace winapi { +using ::GetCurrentThread; +} +} +} + +#endif // BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_current_thread_id.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_current_thread_id.hpp new file mode 100644 index 0000000..198af3b --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_current_thread_id.hpp @@ -0,0 +1,34 @@ +// get_current_thread_id.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2015 Andrey Semashev + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_ID_HPP +#define BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_ID_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +// Windows CE define GetCurrentThreadId as an inline function in kfuncs.h +#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentThreadId(BOOST_DETAIL_WINAPI_VOID); +} +#endif + +namespace boost { +namespace detail { +namespace winapi { +using ::GetCurrentThreadId; +} +} +} + +#endif // BOOST_DETAIL_WINAPI_GET_CURRENT_THREAD_ID_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_last_error.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_last_error.hpp new file mode 100644 index 0000000..543efaf --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_last_error.hpp @@ -0,0 +1,33 @@ +// get_last_error.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2015 Andrey Semashev + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_LAST_ERROR_HPP +#define BOOST_DETAIL_WINAPI_GET_LAST_ERROR_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetLastError(BOOST_DETAIL_WINAPI_VOID); +} +#endif + +namespace boost { +namespace detail { +namespace winapi { +using ::GetLastError; +} +} +} + +#endif // BOOST_DETAIL_WINAPI_GET_LAST_ERROR_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_process_times.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_process_times.hpp new file mode 100644 index 0000000..a79eeb0 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_process_times.hpp @@ -0,0 +1,60 @@ +// get_process_times.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_PROCESS_TIMES_HPP +#define BOOST_DETAIL_WINAPI_GET_PROCESS_TIMES_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +// Windows CE does not define GetProcessTimes +#if !defined( UNDER_CE ) + +#include +#include + +#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 + +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_GET_PROCESS_TIMES_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_system_directory.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_system_directory.hpp new file mode 100644 index 0000000..dd2d680 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_system_directory.hpp @@ -0,0 +1,63 @@ +// get_system_directory.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_GET_SYSTEM_DIRECTORY_HPP_ +#define BOOST_DETAIL_WINAPI_GET_SYSTEM_DIRECTORY_HPP_ + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::UINT_ WINAPI +GetSystemDirectoryA( + boost::detail::winapi::LPSTR_ lpBuffer, + boost::detail::winapi::UINT_ uSize); +#endif + +BOOST_SYMBOL_IMPORT boost::detail::winapi::UINT_ WINAPI +GetSystemDirectoryW( + boost::detail::winapi::LPWSTR_ lpBuffer, + boost::detail::winapi::UINT_ uSize); +} // extern "C" +#endif + +namespace boost { +namespace detail { +namespace winapi { + +#if !defined( BOOST_NO_ANSI_APIS ) +using ::GetSystemDirectoryA; +#endif +using ::GetSystemDirectoryW; + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE UINT_ get_system_directory(LPSTR_ lpBuffer, UINT_ uSize) +{ + return ::GetSystemDirectoryA(lpBuffer, uSize); +} +#endif + +BOOST_FORCEINLINE UINT_ get_system_directory(LPWSTR_ lpBuffer, UINT_ uSize) +{ + return ::GetSystemDirectoryW(lpBuffer, uSize); +} + +} +} +} + +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_WINAPI_GET_SYSTEM_DIRECTORY_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/get_thread_times.hpp b/lib/3rdParty/boost/boost/detail/winapi/get_thread_times.hpp new file mode 100644 index 0000000..13308d8 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/get_thread_times.hpp @@ -0,0 +1,55 @@ +// get_thread_times.hpp --------------------------------------------------------------// + +// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2015 Andrey Semashev + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_DETAIL_WINAPI_GET_THREAD_TIMES_HPP +#define BOOST_DETAIL_WINAPI_GET_THREAD_TIMES_HPP + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +GetThreadTimes( + boost::detail::winapi::HANDLE_ hThread, + ::_FILETIME* lpCreationTime, + ::_FILETIME* lpExitTime, + ::_FILETIME* lpKernelTime, + ::_FILETIME* lpUserTime); +} +#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_GET_THREAD_TIMES_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/handle_info.hpp b/lib/3rdParty/boost/boost/detail/winapi/handle_info.hpp new file mode 100644 index 0000000..0fdcb25 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/handle_info.hpp @@ -0,0 +1,62 @@ +// handle_info.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_HANDLE_INFO_HPP_ +#define BOOST_DETAIL_HANDLE_INFO_HPP_ + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +GetHandleInformation( + boost::detail::winapi::HANDLE_ hObject, + boost::detail::winapi::LPDWORD_ lpdwFlags); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +SetHandleInformation( + boost::detail::winapi::HANDLE_ hObject, + boost::detail::winapi::DWORD_ dwMask, + boost::detail::winapi::DWORD_ dwFlags); + +} // extern "C" +#endif + +namespace boost { +namespace detail { +namespace winapi { + +using ::GetHandleInformation; +using ::SetHandleInformation; + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ HANDLE_FLAG_INHERIT_ = HANDLE_FLAG_INHERIT; +const DWORD_ HANDLE_FLAG_PROTECT_FROM_CLOSE_ = HANDLE_FLAG_PROTECT_FROM_CLOSE; + +#else + +const DWORD_ HANDLE_FLAG_INHERIT_ = 0x1; +const DWORD_ HANDLE_FLAG_PROTECT_FROM_CLOSE_ = 0x2; + +#endif + +} +} +} + +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_HANDLE_INFO_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/handles.hpp b/lib/3rdParty/boost/boost/detail/winapi/handles.hpp index 54859f4..f8ed825 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/handles.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/handles.hpp @@ -31,6 +31,14 @@ DuplicateHandle( boost::detail::winapi::BOOL_ bInheritHandle, boost::detail::winapi::DWORD_ dwOptions); } + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN10 +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +CompareObjectHandles( + boost::detail::winapi::HANDLE_ hFirstObjectHandle, + boost::detail::winapi::HANDLE_ hSecondObjectHandle); +#endif + #endif namespace boost { @@ -40,6 +48,10 @@ namespace winapi { using ::CloseHandle; using ::DuplicateHandle; +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN10 +using ::CompareObjectHandles; +#endif + #if defined( BOOST_USE_WINDOWS_H ) const DWORD_ DUPLICATE_CLOSE_SOURCE_ = DUPLICATE_CLOSE_SOURCE; const DWORD_ DUPLICATE_SAME_ACCESS_ = DUPLICATE_SAME_ACCESS; diff --git a/lib/3rdParty/boost/boost/detail/winapi/jobs.hpp b/lib/3rdParty/boost/boost/detail/winapi/jobs.hpp new file mode 100644 index 0000000..233df17 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/jobs.hpp @@ -0,0 +1,115 @@ +// jobs.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_JOBS_HPP_ +#define BOOST_DETAIL_WINAPI_JOBS_HPP_ + +#include +#include + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateJobObjectA( + ::_SECURITY_ATTRIBUTES* lpJobAttributes, + boost::detail::winapi::LPCSTR_ lpName); +#endif + +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateJobObjectW( + ::_SECURITY_ATTRIBUTES* lpJobAttributes, + boost::detail::winapi::LPCWSTR_ lpName); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI AssignProcessToJobObject( + boost::detail::winapi::HANDLE_ hJob, + boost::detail::winapi::HANDLE_ hProcess); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI IsProcessInJob( + boost::detail::winapi::HANDLE_ ProcessHandle, + boost::detail::winapi::HANDLE_ JobHandle, + boost::detail::winapi::PBOOL_ Result); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI TerminateJobObject( + boost::detail::winapi::HANDLE_ hJob, + boost::detail::winapi::UINT_ uExitCode); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenJobObjectA( + boost::detail::winapi::DWORD_ dwDesiredAccess, + boost::detail::winapi::BOOL_ bInheritHandles, + boost::detail::winapi::LPCSTR_ lpName); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenJobObjectW( + boost::detail::winapi::DWORD_ dwDesiredAccess, + boost::detail::winapi::BOOL_ bInheritHandles, + boost::detail::winapi::LPCWSTR_ lpName); +} // extern "C" +#endif // !defined( BOOST_USE_WINDOWS_H ) + +namespace boost { namespace detail { namespace winapi { + +#if defined( BOOST_USE_WINDOWS_H ) +const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = JOB_OBJECT_ASSIGN_PROCESS; +const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = JOB_OBJECT_SET_ATTRIBUTES; +const DWORD_ JOB_OBJECT_QUERY_ = JOB_OBJECT_QUERY; +const DWORD_ JOB_OBJECT_TERMINATE_ = JOB_OBJECT_TERMINATE; +const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = JOB_OBJECT_SET_SECURITY_ATTRIBUTES; +const DWORD_ JOB_OBJECT_ALL_ACCESS_ = JOB_OBJECT_ALL_ACCESS; +#else +const DWORD_ JOB_OBJECT_ASSIGN_PROCESS_ = 0x0001; +const DWORD_ JOB_OBJECT_SET_ATTRIBUTES_ = 0x0002; +const DWORD_ JOB_OBJECT_QUERY_ = 0x0004; +const DWORD_ JOB_OBJECT_TERMINATE_ = 0x0008; +const DWORD_ JOB_OBJECT_SET_SECURITY_ATTRIBUTES_ = 0x0010; +const DWORD_ JOB_OBJECT_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0x1F); +#endif + +#if !defined( BOOST_NO_ANSI_APIS ) +using ::OpenJobObjectA; +#endif + +using ::OpenJobObjectW; + +using ::AssignProcessToJobObject; +using ::IsProcessInJob; +using ::TerminateJobObject; + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE HANDLE_ CreateJobObjectA(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) +{ + return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); +} + +BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCSTR_ lpName) +{ + return ::CreateJobObjectA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); +} + +BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCSTR_ lpName) +{ + return ::OpenJobObjectA(dwDesiredAccess, bInheritHandles, lpName); +} +#endif // !defined( BOOST_NO_ANSI_APIS ) + +BOOST_FORCEINLINE HANDLE_ CreateJobObjectW(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) +{ + return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); +} + +BOOST_FORCEINLINE HANDLE_ create_job_object(LPSECURITY_ATTRIBUTES_ lpJobAttributes, LPCWSTR_ lpName) +{ + return ::CreateJobObjectW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpJobAttributes), lpName); +} + +BOOST_FORCEINLINE HANDLE_ open_job_object(DWORD_ dwDesiredAccess, BOOL_ bInheritHandles, LPCWSTR_ lpName) +{ + return OpenJobObjectW(dwDesiredAccess, bInheritHandles, lpName); +} + +} // namespace winapi +} // namespace detail +} // namespace boost + +#endif // BOOST_DETAIL_WINAPI_JOBS_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/limits.hpp b/lib/3rdParty/boost/boost/detail/winapi/limits.hpp new file mode 100644 index 0000000..1a0faaa --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/limits.hpp @@ -0,0 +1,51 @@ +// limits.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_LIMITS_HPP_ +#define BOOST_DETAIL_WINAPI_LIMITS_HPP_ + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +namespace boost { +namespace detail { +namespace winapi { + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ MAX_PATH_ = MAX_PATH; + +#else + +const DWORD_ MAX_PATH_ = 260; + +#endif + +#if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) + +const DWORD_ UNICODE_STRING_MAX_BYTES_ = UNICODE_STRING_MAX_BYTES; +const DWORD_ UNICODE_STRING_MAX_CHARS_ = UNICODE_STRING_MAX_CHARS; + +#else + +const DWORD_ UNICODE_STRING_MAX_BYTES_ = 65534; +const DWORD_ UNICODE_STRING_MAX_CHARS_ = 32767; + +#endif + +const DWORD_ max_path = MAX_PATH_; +const DWORD_ unicode_string_max_bytes = UNICODE_STRING_MAX_BYTES_; +const DWORD_ unicode_string_max_chars = UNICODE_STRING_MAX_CHARS_; + +} +} +} + +#endif // BOOST_DETAIL_WINAPI_LIMITS_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/mutex.hpp b/lib/3rdParty/boost/boost/detail/winapi/mutex.hpp index 8f1975c..37b21a4 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/mutex.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/mutex.hpp @@ -85,13 +85,15 @@ using ::ReleaseMutex; #if defined( BOOST_USE_WINDOWS_H ) const DWORD_ MUTEX_ALL_ACCESS_ = MUTEX_ALL_ACCESS; +const DWORD_ MUTEX_MODIFY_STATE_ = MUTEX_MODIFY_STATE; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = CREATE_MUTEX_INITIAL_OWNER; #endif #else // defined( BOOST_USE_WINDOWS_H ) -const DWORD_ MUTEX_ALL_ACCESS_ = 0x1F0001; +const DWORD_ MUTEX_ALL_ACCESS_ = 0x001F0001; +const DWORD_ MUTEX_MODIFY_STATE_ = 0x00000001; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = 0x00000001; #endif @@ -99,6 +101,7 @@ const DWORD_ CREATE_MUTEX_INITIAL_OWNER_ = 0x00000001; #endif // defined( BOOST_USE_WINDOWS_H ) const DWORD_ mutex_all_access = MUTEX_ALL_ACCESS_; +const DWORD_ mutex_modify_state = MUTEX_MODIFY_STATE_; #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 const DWORD_ create_mutex_initial_owner = CREATE_MUTEX_INITIAL_OWNER_; #endif diff --git a/lib/3rdParty/boost/boost/detail/winapi/overlapped.hpp b/lib/3rdParty/boost/boost/detail/winapi/overlapped.hpp new file mode 100644 index 0000000..17dcb2e --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/overlapped.hpp @@ -0,0 +1,51 @@ +// overlapped.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_OVERLAPPED_HPP_ +#define BOOST_DETAIL_WINAPI_OVERLAPPED_HPP_ + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +struct _OVERLAPPED; +} +#endif + +namespace boost { +namespace detail { +namespace winapi { + +#ifdef BOOST_MSVC +#pragma warning(push) +#pragma warning(disable:4201) // nonstandard extension used : nameless struct/union +#endif + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _OVERLAPPED { + ULONG_PTR_ Internal; + ULONG_PTR_ InternalHigh; + union { + struct { + DWORD_ Offset; + DWORD_ OffsetHigh; + }; + PVOID_ Pointer; + }; + HANDLE_ hEvent; +} OVERLAPPED_, *LPOVERLAPPED_; + +#ifdef BOOST_MSVC +#pragma warning(pop) +#endif + +}}} + +#endif // BOOST_DETAIL_WINAPI_OVERLAPPED_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/page_protection_flags.hpp b/lib/3rdParty/boost/boost/detail/winapi/page_protection_flags.hpp new file mode 100644 index 0000000..0dbcb21 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/page_protection_flags.hpp @@ -0,0 +1,56 @@ +// page_protection_flags.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_PAGE_PROTECTION_FLAGS_HPP +#define BOOST_DETAIL_WINAPI_PAGE_PROTECTION_FLAGS_HPP + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +namespace boost { +namespace detail { +namespace winapi { + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ PAGE_NOACCESS_ = PAGE_NOACCESS; +const DWORD_ PAGE_READONLY_ = PAGE_READONLY; +const DWORD_ PAGE_READWRITE_ = PAGE_READWRITE; +const DWORD_ PAGE_WRITECOPY_ = PAGE_WRITECOPY; +const DWORD_ PAGE_EXECUTE_ = PAGE_EXECUTE; +const DWORD_ PAGE_EXECUTE_READ_ = PAGE_EXECUTE_READ; +const DWORD_ PAGE_EXECUTE_READWRITE_ = PAGE_EXECUTE_READWRITE; +const DWORD_ PAGE_EXECUTE_WRITECOPY_ = PAGE_EXECUTE_WRITECOPY; +const DWORD_ PAGE_GUARD_ = PAGE_GUARD; +const DWORD_ PAGE_NOCACHE_ = PAGE_NOCACHE; +const DWORD_ PAGE_WRITECOMBINE_ = PAGE_WRITECOMBINE; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ PAGE_NOACCESS_ = 0x01; +const DWORD_ PAGE_READONLY_ = 0x02; +const DWORD_ PAGE_READWRITE_ = 0x04; +const DWORD_ PAGE_WRITECOPY_ = 0x08; +const DWORD_ PAGE_EXECUTE_ = 0x10; +const DWORD_ PAGE_EXECUTE_READ_ = 0x20; +const DWORD_ PAGE_EXECUTE_READWRITE_ = 0x40; +const DWORD_ PAGE_EXECUTE_WRITECOPY_ = 0x80; +const DWORD_ PAGE_GUARD_ = 0x100; +const DWORD_ PAGE_NOCACHE_ = 0x200; +const DWORD_ PAGE_WRITECOMBINE_ = 0x400; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +} +} +} + +#endif // BOOST_DETAIL_WINAPI_PAGE_PROTECTION_FLAGS_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/pipes.hpp b/lib/3rdParty/boost/boost/detail/winapi/pipes.hpp new file mode 100644 index 0000000..1472950 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/pipes.hpp @@ -0,0 +1,317 @@ +// pipes.hpp --------------------------------------------------------------// + +// Copyright 2016 Klemens D. Morgenstern +// 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_PIPES_HPP_ +#define BOOST_DETAIL_WINAPI_PIPES_HPP_ + +#include +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI ImpersonateNamedPipeClient( + boost::detail::winapi::HANDLE_ hNamedPipe); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI CreatePipe( + boost::detail::winapi::PHANDLE_ hReadPipe, + boost::detail::winapi::PHANDLE_ hWritePipe, + _SECURITY_ATTRIBUTES* lpPipeAttributes, + boost::detail::winapi::DWORD_ nSize); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI ConnectNamedPipe( + boost::detail::winapi::HANDLE_ hNamedPipe, + _OVERLAPPED* lpOverlapped); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI DisconnectNamedPipe( + boost::detail::winapi::HANDLE_ hNamedPipe); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI SetNamedPipeHandleState( + boost::detail::winapi::HANDLE_ hNamedPipe, + boost::detail::winapi::LPDWORD_ lpMode, + boost::detail::winapi::LPDWORD_ lpMaxCollectionCount, + boost::detail::winapi::LPDWORD_ lpCollectDataTimeout); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI PeekNamedPipe( + boost::detail::winapi::HANDLE_ hNamedPipe, + boost::detail::winapi::LPVOID_ lpBuffer, + boost::detail::winapi::DWORD_ nBufferSize, + boost::detail::winapi::LPDWORD_ lpBytesRead, + boost::detail::winapi::LPDWORD_ lpTotalBytesAvail, + boost::detail::winapi::LPDWORD_ lpBytesLeftThisMessage); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI TransactNamedPipe( + boost::detail::winapi::HANDLE_ hNamedPipe, + boost::detail::winapi::LPVOID_ lpInBuffer, + boost::detail::winapi::DWORD_ nInBufferSize, + boost::detail::winapi::LPVOID_ lpOutBuffer, + boost::detail::winapi::DWORD_ nOutBufferSize, + boost::detail::winapi::LPDWORD_ lpBytesRead, + _OVERLAPPED* lpOverlapped); + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateNamedPipeA( + boost::detail::winapi::LPCSTR_ lpName, + boost::detail::winapi::DWORD_ dwOpenMode, + boost::detail::winapi::DWORD_ dwPipeMode, + boost::detail::winapi::DWORD_ nMaxInstances, + boost::detail::winapi::DWORD_ nOutBufferSize, + boost::detail::winapi::DWORD_ nInBufferSize, + boost::detail::winapi::DWORD_ nDefaultTimeOut, + _SECURITY_ATTRIBUTES *lpSecurityAttributes); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI WaitNamedPipeA( + boost::detail::winapi::LPCSTR_ lpNamedPipeName, + boost::detail::winapi::DWORD_ nTimeOut); +#endif // !defined( BOOST_NO_ANSI_APIS ) + +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI CreateNamedPipeW( + boost::detail::winapi::LPCWSTR_ lpName, + boost::detail::winapi::DWORD_ dwOpenMode, + boost::detail::winapi::DWORD_ dwPipeMode, + boost::detail::winapi::DWORD_ nMaxInstances, + boost::detail::winapi::DWORD_ nOutBufferSize, + boost::detail::winapi::DWORD_ nInBufferSize, + boost::detail::winapi::DWORD_ nDefaultTimeOut, + _SECURITY_ATTRIBUTES* lpSecurityAttributes); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI WaitNamedPipeW( + boost::detail::winapi::LPCWSTR_ lpNamedPipeName, + boost::detail::winapi::DWORD_ nTimeOut); + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI GetNamedPipeClientComputerNameA( + boost::detail::winapi::HANDLE_ Pipe, + boost::detail::winapi::LPSTR_ ClientComputerName, + boost::detail::winapi::ULONG_ ClientComputerNameLength); +#endif // !defined( BOOST_NO_ANSI_APIS ) + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI GetNamedPipeClientComputerNameW( + boost::detail::winapi::HANDLE_ Pipe, + boost::detail::winapi::LPWSTR_ ClientComputerName, + boost::detail::winapi::ULONG_ ClientComputerNameLength); +#endif + +} // extern "C" +#endif // !defined( BOOST_USE_WINDOWS_H ) + +namespace boost { +namespace detail { +namespace winapi { + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ PIPE_ACCESS_DUPLEX_ = PIPE_ACCESS_DUPLEX; +const DWORD_ PIPE_ACCESS_INBOUND_ = PIPE_ACCESS_INBOUND; +const DWORD_ PIPE_ACCESS_OUTBOUND_ = PIPE_ACCESS_OUTBOUND; + +const DWORD_ PIPE_TYPE_BYTE_ = PIPE_TYPE_BYTE; +const DWORD_ PIPE_TYPE_MESSAGE_ = PIPE_TYPE_MESSAGE; + +const DWORD_ PIPE_READMODE_BYTE_ = PIPE_READMODE_BYTE; +const DWORD_ PIPE_READMODE_MESSAGE_ = PIPE_READMODE_MESSAGE; + +const DWORD_ PIPE_WAIT_ = PIPE_WAIT; +const DWORD_ PIPE_NOWAIT_ = PIPE_NOWAIT; + +const DWORD_ PIPE_UNLIMITED_INSTANCES_ = PIPE_UNLIMITED_INSTANCES; + +const DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = NMPWAIT_USE_DEFAULT_WAIT; +const DWORD_ NMPWAIT_NOWAIT_ = NMPWAIT_NOWAIT; +const DWORD_ NMPWAIT_WAIT_FOREVER_ = NMPWAIT_WAIT_FOREVER; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ PIPE_ACCESS_DUPLEX_ = 0x00000003; +const DWORD_ PIPE_ACCESS_INBOUND_ = 0x00000001; +const DWORD_ PIPE_ACCESS_OUTBOUND_ = 0x00000002; + +const DWORD_ PIPE_TYPE_BYTE_ = 0x00000000; +const DWORD_ PIPE_TYPE_MESSAGE_ = 0x00000004; + +const DWORD_ PIPE_READMODE_BYTE_ = 0x00000000; +const DWORD_ PIPE_READMODE_MESSAGE_ = 0x00000002; + +const DWORD_ PIPE_WAIT_ = 0x00000000; +const DWORD_ PIPE_NOWAIT_ = 0x00000001; + +const DWORD_ PIPE_UNLIMITED_INSTANCES_ = 255u; + +const DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = 0x00000000; +const DWORD_ NMPWAIT_NOWAIT_ = 0x00000001; +const DWORD_ NMPWAIT_WAIT_FOREVER_ = 0xFFFFFFFF; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +// These constants are not defined in Windows SDK prior to 7.0A +const DWORD_ PIPE_ACCEPT_REMOTE_CLIENTS_ = 0x00000000; +const DWORD_ PIPE_REJECT_REMOTE_CLIENTS_ = 0x00000008; + +using ::ImpersonateNamedPipeClient; +using ::DisconnectNamedPipe; +using ::SetNamedPipeHandleState; +using ::PeekNamedPipe; + +#if !defined( BOOST_NO_ANSI_APIS ) +using ::WaitNamedPipeA; +#endif +using ::WaitNamedPipeW; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +#if !defined( BOOST_NO_ANSI_APIS ) +using ::GetNamedPipeClientComputerNameA; +#endif // !defined( BOOST_NO_ANSI_APIS ) +using ::GetNamedPipeClientComputerNameW; +#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 + +BOOST_FORCEINLINE BOOL_ CreatePipe(PHANDLE_ hReadPipe, PHANDLE_ hWritePipe, LPSECURITY_ATTRIBUTES_ lpPipeAttributes, DWORD_ nSize) +{ + return ::CreatePipe(hReadPipe, hWritePipe, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpPipeAttributes), nSize); +} + +BOOST_FORCEINLINE BOOL_ ConnectNamedPipe(HANDLE_ hNamedPipe, LPOVERLAPPED_ lpOverlapped) +{ + return ::ConnectNamedPipe(hNamedPipe, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped)); +} + +BOOST_FORCEINLINE BOOL_ TransactNamedPipe(HANDLE_ hNamedPipe, LPVOID_ lpInBuffer, DWORD_ nInBufferSize, LPVOID_ lpOutBuffer, DWORD_ nOutBufferSize, LPDWORD_ lpBytesRead, LPOVERLAPPED_ lpOverlapped) +{ + return ::TransactNamedPipe(hNamedPipe, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesRead, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped)); +} + + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE HANDLE_ CreateNamedPipeA( + LPCSTR_ lpName, + DWORD_ dwOpenMode, + DWORD_ dwPipeMode, + DWORD_ nMaxInstances, + DWORD_ nOutBufferSize, + DWORD_ nInBufferSize, + DWORD_ nDefaultTimeOut, + LPSECURITY_ATTRIBUTES_ lpSecurityAttributes) +{ + return ::CreateNamedPipeA( + lpName, + dwOpenMode, + dwPipeMode, + nMaxInstances, + nOutBufferSize, + nInBufferSize, + nDefaultTimeOut, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes)); +} + +BOOST_FORCEINLINE HANDLE_ create_named_pipe( + LPCSTR_ lpName, + DWORD_ dwOpenMode, + DWORD_ dwPipeMode, + DWORD_ nMaxInstances, + DWORD_ nOutBufferSize, + DWORD_ nInBufferSize, + DWORD_ nDefaultTimeOut, + LPSECURITY_ATTRIBUTES_ lpSecurityAttributes) +{ + return ::CreateNamedPipeA( + lpName, + dwOpenMode, + dwPipeMode, + nMaxInstances, + nOutBufferSize, + nInBufferSize, + nDefaultTimeOut, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes)); +} +#endif // !defined( BOOST_NO_ANSI_APIS ) + +BOOST_FORCEINLINE HANDLE_ CreateNamedPipeW( + LPCWSTR_ lpName, + DWORD_ dwOpenMode, + DWORD_ dwPipeMode, + DWORD_ nMaxInstances, + DWORD_ nOutBufferSize, + DWORD_ nInBufferSize, + DWORD_ nDefaultTimeOut, + LPSECURITY_ATTRIBUTES_ lpSecurityAttributes) +{ + return ::CreateNamedPipeW( + lpName, + dwOpenMode, + dwPipeMode, + nMaxInstances, + nOutBufferSize, + nInBufferSize, + nDefaultTimeOut, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes)); +} + +BOOST_FORCEINLINE HANDLE_ create_named_pipe( + LPCWSTR_ lpName, + DWORD_ dwOpenMode, + DWORD_ dwPipeMode, + DWORD_ nMaxInstances, + DWORD_ nOutBufferSize, + DWORD_ nInBufferSize, + DWORD_ nDefaultTimeOut, + LPSECURITY_ATTRIBUTES_ lpSecurityAttributes) +{ + return ::CreateNamedPipeW( + lpName, + dwOpenMode, + dwPipeMode, + nMaxInstances, + nOutBufferSize, + nInBufferSize, + nDefaultTimeOut, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes)); +} + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCSTR_ lpNamedPipeName, DWORD_ nTimeOut) +{ + return ::WaitNamedPipeA(lpNamedPipeName, nTimeOut); +} +#endif //BOOST_NO_ANSI_APIS + +BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCWSTR_ lpNamedPipeName, DWORD_ nTimeOut) +{ + return ::WaitNamedPipeW(lpNamedPipeName, nTimeOut); +} + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPSTR_ ClientComputerName, ULONG_ ClientComputerNameLength) +{ + return ::GetNamedPipeClientComputerNameA(Pipe, ClientComputerName, ClientComputerNameLength); +} +#endif // !defined( BOOST_NO_ANSI_APIS ) + +BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPWSTR_ ClientComputerName, ULONG_ ClientComputerNameLength) +{ + return ::GetNamedPipeClientComputerNameW(Pipe, ClientComputerName, ClientComputerNameLength); +} + +#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 + +} +} +} + +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_WINAPI_PIPES_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/priority_class.hpp b/lib/3rdParty/boost/boost/detail/winapi/priority_class.hpp new file mode 100644 index 0000000..bfcb425 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/priority_class.hpp @@ -0,0 +1,78 @@ +// priority_class.hpp --------------------------------------------------------------// + +// Copyright 2016 Klemens D. Morgenstern +// 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_PRIORITY_CLASS_HPP_ +#define BOOST_DETAIL_WINAPI_PRIORITY_CLASS_HPP_ + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { + +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI +GetPriorityClass(boost::detail::winapi::HANDLE_ hProcess); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI +SetPriorityClass( + boost::detail::winapi::HANDLE_ hProcess, + boost::detail::winapi::DWORD_ dwPriorityClass); + +} // extern "C" +#endif //defined BOOST_WINDOWS_H + +namespace boost { +namespace detail { +namespace winapi { + +#if defined(BOOST_USE_WINDOWS_H) + +const DWORD_ NORMAL_PRIORITY_CLASS_ = NORMAL_PRIORITY_CLASS; +const DWORD_ IDLE_PRIORITY_CLASS_ = IDLE_PRIORITY_CLASS; +const DWORD_ HIGH_PRIORITY_CLASS_ = HIGH_PRIORITY_CLASS; +const DWORD_ REALTIME_PRIORITY_CLASS_ = REALTIME_PRIORITY_CLASS; +const DWORD_ BELOW_NORMAL_PRIORITY_CLASS_ = BELOW_NORMAL_PRIORITY_CLASS; +const DWORD_ ABOVE_NORMAL_PRIORITY_CLASS_ = ABOVE_NORMAL_PRIORITY_CLASS; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +const DWORD_ PROCESS_MODE_BACKGROUND_BEGIN_ = PROCESS_MODE_BACKGROUND_BEGIN; +const DWORD_ PROCESS_MODE_BACKGROUND_END_ = PROCESS_MODE_BACKGROUND_END; +#endif + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ NORMAL_PRIORITY_CLASS_ = 0x20; +const DWORD_ IDLE_PRIORITY_CLASS_ = 0x40; +const DWORD_ HIGH_PRIORITY_CLASS_ = 0x80; +const DWORD_ REALTIME_PRIORITY_CLASS_ = 0x100; +const DWORD_ BELOW_NORMAL_PRIORITY_CLASS_ = 0x4000; +const DWORD_ ABOVE_NORMAL_PRIORITY_CLASS_ = 0x8000; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +const DWORD_ PROCESS_MODE_BACKGROUND_BEGIN_ = 0x100000; +const DWORD_ PROCESS_MODE_BACKGROUND_END_ = 0x200000; +#endif + +#endif // defined( BOOST_USE_WINDOWS_H ) + +using ::GetPriorityClass; +using ::SetPriorityClass; + +} +} +} + +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_WINAPI_PRIORITY_CLASS_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/process.hpp b/lib/3rdParty/boost/boost/detail/winapi/process.hpp index 3c3de56..dc8a533 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/process.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/process.hpp @@ -1,34 +1,421 @@ // process.hpp --------------------------------------------------------------// -// Copyright 2010 Vicente J. Botet Escriba +// Copyright 2016 Klemens D. Morgenstern +// 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_PROCESS_HPP_ +#define BOOST_DETAIL_WINAPI_PROCESS_HPP_ -#ifndef BOOST_DETAIL_WINAPI_PROCESS_HPP -#define BOOST_DETAIL_WINAPI_PROCESS_HPP - +#include #include -#include +#include +#include +#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -// Windows CE define GetCurrentProcessId as an inline function in kfuncs.h -#if !defined( BOOST_USE_WINDOWS_H ) && !defined( UNDER_CE ) +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) extern "C" { -BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentProcessId(BOOST_DETAIL_WINAPI_VOID); -} + +struct _PROCESS_INFORMATION; +#if !defined( BOOST_NO_ANSI_APIS ) +struct _STARTUPINFOA; #endif +struct _STARTUPINFOW; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +struct _PROC_THREAD_ATTRIBUTE_LIST; +#if !defined( BOOST_NO_ANSI_APIS ) +struct _STARTUPINFOEXA; +#endif +struct _STARTUPINFOEXW; +#endif + +BOOST_SYMBOL_IMPORT BOOST_NORETURN boost::detail::winapi::VOID_ WINAPI +ExitProcess(boost::detail::winapi::UINT_ uExitCode); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI TerminateProcess( + boost::detail::winapi::HANDLE_ hProcess, + boost::detail::winapi::UINT_ uExitCode); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI GetExitCodeProcess( + boost::detail::winapi::HANDLE_ hProcess, + boost::detail::winapi::LPDWORD_ lpExitCode); + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI CreateProcessA( + boost::detail::winapi::LPCSTR_ lpApplicationName, + boost::detail::winapi::LPSTR_ lpCommandLine, + ::_SECURITY_ATTRIBUTES* lpProcessAttributes, + ::_SECURITY_ATTRIBUTES* lpThreadAttributes, + boost::detail::winapi::INT_ bInheritHandles, + boost::detail::winapi::DWORD_ dwCreationFlags, + boost::detail::winapi::LPVOID_ lpEnvironment, + boost::detail::winapi::LPCSTR_ lpCurrentDirectory, + ::_STARTUPINFOA* lpStartupInfo, + ::_PROCESS_INFORMATION* lpProcessInformation); +#endif + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI CreateProcessW( + boost::detail::winapi::LPCWSTR_ lpApplicationName, + boost::detail::winapi::LPWSTR_ lpCommandLine, + ::_SECURITY_ATTRIBUTES* lpProcessAttributes, + ::_SECURITY_ATTRIBUTES* lpThreadAttributes, + boost::detail::winapi::INT_ bInheritHandles, + boost::detail::winapi::DWORD_ dwCreationFlags, + boost::detail::winapi::LPVOID_ lpEnvironment, + boost::detail::winapi::LPCWSTR_ lpCurrentDirectory, + ::_STARTUPINFOW* lpStartupInfo, + ::_PROCESS_INFORMATION* lpProcessInformation); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::HANDLE_ WINAPI OpenProcess( + boost::detail::winapi::DWORD_ dwDesiredAccess, + boost::detail::winapi::BOOL_ bInheritHandle, + boost::detail::winapi::DWORD_ dwProcessId); + +} // extern "C" +#endif //defined BOOST_WINDOWS_H namespace boost { namespace detail { namespace winapi { -using ::GetCurrentProcessId; + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ DEBUG_PROCESS_ = DEBUG_PROCESS; +const DWORD_ DEBUG_ONLY_THIS_PROCESS_ = DEBUG_ONLY_THIS_PROCESS; +const DWORD_ CREATE_SUSPENDED_ = CREATE_SUSPENDED; +const DWORD_ DETACHED_PROCESS_ = DETACHED_PROCESS; +const DWORD_ CREATE_NEW_CONSOLE_ = CREATE_NEW_CONSOLE; +const DWORD_ CREATE_NEW_PROCESS_GROUP_ = CREATE_NEW_PROCESS_GROUP; +const DWORD_ CREATE_UNICODE_ENVIRONMENT_ = CREATE_UNICODE_ENVIRONMENT; +const DWORD_ CREATE_SEPARATE_WOW_VDM_ = CREATE_SEPARATE_WOW_VDM; +const DWORD_ CREATE_SHARED_WOW_VDM_ = CREATE_SHARED_WOW_VDM; +const DWORD_ CREATE_FORCEDOS_ = CREATE_FORCEDOS; +const DWORD_ CREATE_BREAKAWAY_FROM_JOB_ = CREATE_BREAKAWAY_FROM_JOB; +const DWORD_ CREATE_DEFAULT_ERROR_MODE_ = CREATE_DEFAULT_ERROR_MODE; +const DWORD_ CREATE_NO_WINDOW_ = CREATE_NO_WINDOW; + +// Undocumented +const DWORD_ PROFILE_USER_ = PROFILE_USER; +const DWORD_ PROFILE_KERNEL_ = PROFILE_KERNEL; +const DWORD_ PROFILE_SERVER_ = PROFILE_SERVER; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +const DWORD_ CREATE_PROTECTED_PROCESS_ = CREATE_PROTECTED_PROCESS; +const DWORD_ EXTENDED_STARTUPINFO_PRESENT_ = EXTENDED_STARTUPINFO_PRESENT; +#endif + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7 +const DWORD_ INHERIT_PARENT_AFFINITY_ = INHERIT_PARENT_AFFINITY; +#endif + +// Only documented for Windows CE +#if defined(UNDER_CE) +const DWORD_ INHERIT_CALLER_PRIORITY_ = INHERIT_CALLER_PRIORITY; +#endif + +const DWORD_ STARTF_USESHOWWINDOW_ = STARTF_USESHOWWINDOW; +const DWORD_ STARTF_USESIZE_ = STARTF_USESIZE; +const DWORD_ STARTF_USEPOSITION_ = STARTF_USEPOSITION; +const DWORD_ STARTF_USECOUNTCHARS_ = STARTF_USECOUNTCHARS; +const DWORD_ STARTF_USEFILLATTRIBUTE_ = STARTF_USEFILLATTRIBUTE; +const DWORD_ STARTF_RUNFULLSCREEN_ = STARTF_RUNFULLSCREEN; +const DWORD_ STARTF_FORCEONFEEDBACK_ = STARTF_FORCEONFEEDBACK; +const DWORD_ STARTF_FORCEOFFFEEDBACK_ = STARTF_FORCEOFFFEEDBACK; +const DWORD_ STARTF_USESTDHANDLES_ = STARTF_USESTDHANDLES; +const DWORD_ STARTF_USEHOTKEY_ = STARTF_USEHOTKEY; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7 +const DWORD_ STARTF_TITLEISLINKNAME_ = STARTF_TITLEISLINKNAME; +const DWORD_ STARTF_TITLEISAPPID_ = STARTF_TITLEISAPPID; +const DWORD_ STARTF_PREVENTPINNING_ = STARTF_PREVENTPINNING; +#endif + +const DWORD_ PROCESS_TERMINATE_ = PROCESS_TERMINATE; +const DWORD_ PROCESS_CREATE_THREAD_ = PROCESS_CREATE_THREAD; +const DWORD_ PROCESS_SET_SESSIONID_ = PROCESS_SET_SESSIONID; +const DWORD_ PROCESS_VM_OPERATION_ = PROCESS_VM_OPERATION; +const DWORD_ PROCESS_VM_READ_ = PROCESS_VM_READ; +const DWORD_ PROCESS_VM_WRITE_ = PROCESS_VM_WRITE; +const DWORD_ PROCESS_DUP_HANDLE_ = PROCESS_DUP_HANDLE; +const DWORD_ PROCESS_CREATE_PROCESS_ = PROCESS_CREATE_PROCESS; +const DWORD_ PROCESS_SET_QUOTA_ = PROCESS_SET_QUOTA; +const DWORD_ PROCESS_SET_INFORMATION_ = PROCESS_SET_INFORMATION; +const DWORD_ PROCESS_QUERY_INFORMATION_ = PROCESS_QUERY_INFORMATION; +const DWORD_ PROCESS_SUSPEND_RESUME_ = PROCESS_SUSPEND_RESUME; +const DWORD_ PROCESS_ALL_ACCESS_ = PROCESS_ALL_ACCESS; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ DEBUG_PROCESS_ = 0x1; +const DWORD_ DEBUG_ONLY_THIS_PROCESS_ = 0x2; +const DWORD_ CREATE_SUSPENDED_ = 0x4; +const DWORD_ DETACHED_PROCESS_ = 0x8; +const DWORD_ CREATE_NEW_CONSOLE_ = 0x10; +const DWORD_ CREATE_NEW_PROCESS_GROUP_ = 0x200; +const DWORD_ CREATE_UNICODE_ENVIRONMENT_ = 0x400; +const DWORD_ CREATE_SEPARATE_WOW_VDM_ = 0x800; +const DWORD_ CREATE_SHARED_WOW_VDM_ = 0x1000; +const DWORD_ CREATE_FORCEDOS_ = 0x2000; +const DWORD_ CREATE_BREAKAWAY_FROM_JOB_ = 0x1000000; +const DWORD_ CREATE_DEFAULT_ERROR_MODE_ = 0x4000000; +const DWORD_ CREATE_NO_WINDOW_ = 0x8000000; + +// Undocumented +const DWORD_ PROFILE_USER_ = 0x10000000; +const DWORD_ PROFILE_KERNEL_ = 0x20000000; +const DWORD_ PROFILE_SERVER_ = 0x40000000; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 +const DWORD_ CREATE_PROTECTED_PROCESS_ = 0x40000; +const DWORD_ EXTENDED_STARTUPINFO_PRESENT_ = 0x80000; +#endif + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7 +const DWORD_ INHERIT_PARENT_AFFINITY_ = 0x10000; +#endif + +// Only documented for Windows CE +#if defined(UNDER_CE) +const DWORD_ INHERIT_CALLER_PRIORITY_ = 0x20000; +#endif + +const DWORD_ STARTF_USESHOWWINDOW_ = 0x00000001; +const DWORD_ STARTF_USESIZE_ = 0x00000002; +const DWORD_ STARTF_USEPOSITION_ = 0x00000004; +const DWORD_ STARTF_USECOUNTCHARS_ = 0x00000008; +const DWORD_ STARTF_USEFILLATTRIBUTE_ = 0x00000010; +const DWORD_ STARTF_RUNFULLSCREEN_ = 0x00000020; +const DWORD_ STARTF_FORCEONFEEDBACK_ = 0x00000040; +const DWORD_ STARTF_FORCEOFFFEEDBACK_ = 0x00000080; +const DWORD_ STARTF_USESTDHANDLES_ = 0x00000100; +const DWORD_ STARTF_USEHOTKEY_ = 0x00000200; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN7 +const DWORD_ STARTF_TITLEISLINKNAME_ = 0x00000800; +const DWORD_ STARTF_TITLEISAPPID_ = 0x00001000; +const DWORD_ STARTF_PREVENTPINNING_ = 0x00002000; +#endif + +const DWORD_ PROCESS_TERMINATE_ = 0x0001; +const DWORD_ PROCESS_CREATE_THREAD_ = 0x0002; +const DWORD_ PROCESS_SET_SESSIONID_ = 0x0004; +const DWORD_ PROCESS_VM_OPERATION_ = 0x0008; +const DWORD_ PROCESS_VM_READ_ = 0x0010; +const DWORD_ PROCESS_VM_WRITE_ = 0x0020; +const DWORD_ PROCESS_DUP_HANDLE_ = 0x0040; +const DWORD_ PROCESS_CREATE_PROCESS_ = 0x0080; +const DWORD_ PROCESS_SET_QUOTA_ = 0x0100; +const DWORD_ PROCESS_SET_INFORMATION_ = 0x0200; +const DWORD_ PROCESS_QUERY_INFORMATION_ = 0x0400; +const DWORD_ PROCESS_SUSPEND_RESUME_ = 0x0800; +const DWORD_ PROCESS_ALL_ACCESS_ = (STANDARD_RIGHTS_REQUIRED_ | SYNCHRONIZE_ | 0xFFF); + +#endif // defined( BOOST_USE_WINDOWS_H ) + +#if defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) + +const DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = CREATE_PRESERVE_CODE_AUTHZ_LEVEL; + +// Undocumented +const DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_ = CREATE_IGNORE_SYSTEM_DEFAULT; + +#else // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) + +const DWORD_ CREATE_PRESERVE_CODE_AUTHZ_LEVEL_ = 0x2000000; + +// Undocumented +const DWORD_ CREATE_IGNORE_SYSTEM_DEFAULT_ = 0x80000000; + +#endif // defined( BOOST_USE_WINDOWS_H ) && !defined( BOOST_WINAPI_IS_MINGW ) + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _PROCESS_INFORMATION { + HANDLE_ hProcess; + HANDLE_ hThread; + DWORD_ dwProcessId; + DWORD_ dwThreadId; +} PROCESS_INFORMATION_, *PPROCESS_INFORMATION_, *LPPROCESS_INFORMATION_; + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOA { + DWORD_ cb; + LPSTR_ lpReserved; + LPSTR_ lpDesktop; + LPSTR_ lpTitle; + DWORD_ dwX; + DWORD_ dwY; + DWORD_ dwXSize; + DWORD_ dwYSize; + DWORD_ dwXCountChars; + DWORD_ dwYCountChars; + DWORD_ dwFillAttribute; + DWORD_ dwFlags; + WORD_ wShowWindow; + WORD_ cbReserved2; + LPBYTE_ lpReserved2; + HANDLE_ hStdInput; + HANDLE_ hStdOutput; + HANDLE_ hStdError; +} STARTUPINFOA_, *LPSTARTUPINFOA_; + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOW { + DWORD_ cb; + LPWSTR_ lpReserved; + LPWSTR_ lpDesktop; + LPWSTR_ lpTitle; + DWORD_ dwX; + DWORD_ dwY; + DWORD_ dwXSize; + DWORD_ dwYSize; + DWORD_ dwXCountChars; + DWORD_ dwYCountChars; + DWORD_ dwFillAttribute; + DWORD_ dwFlags; + WORD_ wShowWindow; + WORD_ cbReserved2; + LPBYTE_ lpReserved2; + HANDLE_ hStdInput; + HANDLE_ hStdOutput; + HANDLE_ hStdError; +} STARTUPINFOW_, *LPSTARTUPINFOW_; + +#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 + +typedef struct _PROC_THREAD_ATTRIBUTE_LIST PROC_THREAD_ATTRIBUTE_LIST_, *PPROC_THREAD_ATTRIBUTE_LIST_; + +#if !defined(BOOST_NO_ANSI_APIS) +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOEXA { + STARTUPINFOA_ StartupInfo; + PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList; +} STARTUPINFOEXA_, *LPSTARTUPINFOEXA_; +#endif //BOOST_NO_ANSI_APIS + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _STARTUPINFOEXW { + STARTUPINFOW_ StartupInfo; + PPROC_THREAD_ATTRIBUTE_LIST_ lpAttributeList; +} STARTUPINFOEXW_, *LPSTARTUPINFOEXW_; + +#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 + +using ::GetExitCodeProcess; +using ::ExitProcess; +using ::TerminateProcess; +using ::OpenProcess; + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_FORCEINLINE BOOL_ CreateProcessA( + LPCSTR_ lpApplicationName, + LPSTR_ lpCommandLine, + LPSECURITY_ATTRIBUTES_ lpProcessAttributes, + LPSECURITY_ATTRIBUTES_ lpThreadAttributes, + INT_ bInheritHandles, + DWORD_ dwCreationFlags, + LPVOID_ lpEnvironment, + LPCSTR_ lpCurrentDirectory, + LPSTARTUPINFOA_ lpStartupInfo, + LPPROCESS_INFORMATION_ lpProcessInformation) +{ + return ::CreateProcessA( + lpApplicationName, + lpCommandLine, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes), + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes), + bInheritHandles, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo), + reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation)); +} + +BOOST_FORCEINLINE BOOL_ create_process( + LPCSTR_ lpApplicationName, + LPSTR_ lpCommandLine, + LPSECURITY_ATTRIBUTES_ lpProcessAttributes, + LPSECURITY_ATTRIBUTES_ lpThreadAttributes, + INT_ bInheritHandles, + DWORD_ dwCreationFlags, + LPVOID_ lpEnvironment, + LPCSTR_ lpCurrentDirectory, + LPSTARTUPINFOA_ lpStartupInfo, + LPPROCESS_INFORMATION_ lpProcessInformation) +{ + return ::CreateProcessA( + lpApplicationName, + lpCommandLine, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes), + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes), + bInheritHandles, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + reinterpret_cast< ::_STARTUPINFOA* >(lpStartupInfo), + reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation)); +} +#endif + +BOOST_FORCEINLINE BOOL_ CreateProcessW( + LPCWSTR_ lpApplicationName, + LPWSTR_ lpCommandLine, + LPSECURITY_ATTRIBUTES_ lpProcessAttributes, + LPSECURITY_ATTRIBUTES_ lpThreadAttributes, + INT_ bInheritHandles, + DWORD_ dwCreationFlags, + LPVOID_ lpEnvironment, + LPCWSTR_ lpCurrentDirectory, + LPSTARTUPINFOW_ lpStartupInfo, + LPPROCESS_INFORMATION_ lpProcessInformation) +{ + return ::CreateProcessW( + lpApplicationName, + lpCommandLine, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes), + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes), + bInheritHandles, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo), + reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation)); +} + +BOOST_FORCEINLINE BOOL_ create_process( + LPCWSTR_ lpApplicationName, + LPWSTR_ lpCommandLine, + LPSECURITY_ATTRIBUTES_ lpProcessAttributes, + LPSECURITY_ATTRIBUTES_ lpThreadAttributes, + INT_ bInheritHandles, + DWORD_ dwCreationFlags, + LPVOID_ lpEnvironment, + LPCWSTR_ lpCurrentDirectory, + LPSTARTUPINFOW_ lpStartupInfo, + LPPROCESS_INFORMATION_ lpProcessInformation) +{ + return ::CreateProcessW( + lpApplicationName, + lpCommandLine, + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpProcessAttributes), + reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpThreadAttributes), + bInheritHandles, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + reinterpret_cast< ::_STARTUPINFOW* >(lpStartupInfo), + reinterpret_cast< ::_PROCESS_INFORMATION* >(lpProcessInformation)); +} + } } } -#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_WINAPI_PROCESS_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/semaphore.hpp b/lib/3rdParty/boost/boost/detail/winapi/semaphore.hpp index ba71aae..8415e08 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/semaphore.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/semaphore.hpp @@ -92,14 +92,21 @@ using ::ReleaseSemaphore; #if defined( BOOST_USE_WINDOWS_H ) const DWORD_ SEMAPHORE_ALL_ACCESS_ = SEMAPHORE_ALL_ACCESS; +const DWORD_ SEMAPHORE_MODIFY_STATE_ = SEMAPHORE_MODIFY_STATE; #else // defined( BOOST_USE_WINDOWS_H ) -const DWORD_ SEMAPHORE_ALL_ACCESS_ = 0x1F0003; +const DWORD_ SEMAPHORE_ALL_ACCESS_ = 0x001F0003; +const DWORD_ SEMAPHORE_MODIFY_STATE_ = 0x00000002; #endif // defined( BOOST_USE_WINDOWS_H ) +// Undocumented and not present in Windows SDK. Enables NtQuerySemaphore. +// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FEvent%2FNtQueryEvent.html +const DWORD_ SEMAPHORE_QUERY_STATE_ = 0x00000001; + const DWORD_ semaphore_all_access = SEMAPHORE_ALL_ACCESS_; +const DWORD_ semaphore_modify_state = SEMAPHORE_MODIFY_STATE_; #if !defined( BOOST_NO_ANSI_APIS ) diff --git a/lib/3rdParty/boost/boost/detail/winapi/shell.hpp b/lib/3rdParty/boost/boost/detail/winapi/shell.hpp new file mode 100644 index 0000000..fbb9ad6 --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/shell.hpp @@ -0,0 +1,145 @@ +// shell.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_SHELL_HPP_ +#define BOOST_DETAIL_WINAPI_SHELL_HPP_ + +#include +#include +#if defined( BOOST_USE_WINDOWS_H ) +#include +#endif + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { + +BOOST_DETAIL_WINAPI_DECLARE_HANDLE(HICON); + +#if !defined( BOOST_NO_ANSI_APIS ) +struct _SHFILEINFOA; +#endif +struct _SHFILEINFOW; + +#if !defined( BOOST_NO_ANSI_APIS ) +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_PTR_ WINAPI SHGetFileInfoA( + boost::detail::winapi::LPCSTR_ pszPath, + boost::detail::winapi::DWORD_ dwFileAttributes, + ::_SHFILEINFOA *psfinsigned, + boost::detail::winapi::UINT_ cbFileInfons, + boost::detail::winapi::UINT_ uFlags); +#endif + +BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_PTR_ WINAPI SHGetFileInfoW( + boost::detail::winapi::LPCWSTR_ pszPath, + boost::detail::winapi::DWORD_ dwFileAttributes, + ::_SHFILEINFOW *psfinsigned, + boost::detail::winapi::UINT_ cbFileInfons, + boost::detail::winapi::UINT_ uFlags); + +} // extern "C" +#endif // !defined( BOOST_USE_WINDOWS_H ) + +namespace boost { +namespace detail { +namespace winapi { + +typedef ::HICON HICON_; + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ SHGFI_ICON_ = SHGFI_ICON; +const DWORD_ SHGFI_DISPLAYNAME_ = SHGFI_DISPLAYNAME; +const DWORD_ SHGFI_TYPENAME_ = SHGFI_TYPENAME; +const DWORD_ SHGFI_ATTRIBUTES_ = SHGFI_ATTRIBUTES; +const DWORD_ SHGFI_ICONLOCATION_ = SHGFI_ICONLOCATION; +const DWORD_ SHGFI_EXETYPE_ = SHGFI_EXETYPE; +const DWORD_ SHGFI_SYSICONINDEX_ = SHGFI_SYSICONINDEX; +const DWORD_ SHGFI_LINKOVERLAY_ = SHGFI_LINKOVERLAY; +const DWORD_ SHGFI_SELECTED_ = SHGFI_SELECTED; +const DWORD_ SHGFI_ATTR_SPECIFIED_ = SHGFI_ATTR_SPECIFIED; +const DWORD_ SHGFI_LARGEICON_ = SHGFI_LARGEICON; +const DWORD_ SHGFI_SMALLICON_ = SHGFI_SMALLICON; +const DWORD_ SHGFI_OPENICON_ = SHGFI_OPENICON; +const DWORD_ SHGFI_SHELLICONSIZE_ = SHGFI_SHELLICONSIZE; +const DWORD_ SHGFI_PIDL_ = SHGFI_PIDL; +const DWORD_ SHGFI_USEFILEATTRIBUTES_ = SHGFI_USEFILEATTRIBUTES; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ SHGFI_ICON_ = 0x000000100; +const DWORD_ SHGFI_DISPLAYNAME_ = 0x000000200; +const DWORD_ SHGFI_TYPENAME_ = 0x000000400; +const DWORD_ SHGFI_ATTRIBUTES_ = 0x000000800; +const DWORD_ SHGFI_ICONLOCATION_ = 0x000001000; +const DWORD_ SHGFI_EXETYPE_ = 0x000002000; +const DWORD_ SHGFI_SYSICONINDEX_ = 0x000004000; +const DWORD_ SHGFI_LINKOVERLAY_ = 0x000008000; +const DWORD_ SHGFI_SELECTED_ = 0x000010000; +const DWORD_ SHGFI_ATTR_SPECIFIED_ = 0x000020000; +const DWORD_ SHGFI_LARGEICON_ = 0x000000000; +const DWORD_ SHGFI_SMALLICON_ = 0x000000001; +const DWORD_ SHGFI_OPENICON_ = 0x000000002; +const DWORD_ SHGFI_SHELLICONSIZE_ = 0x000000004; +const DWORD_ SHGFI_PIDL_ = 0x000000008; +const DWORD_ SHGFI_USEFILEATTRIBUTES_ = 0x000000010; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +// These constants are only declared for _WIN32_IE >= 0x0500. We don't set IE version +// and 5.0 is the default version since NT4 SP6, so just define the constants unconditionally. +const DWORD_ SHGFI_ADDOVERLAYS_ = 0x000000020; +const DWORD_ SHGFI_OVERLAYINDEX_ = 0x000000040; + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SHFILEINFOA { + HICON_ hIcon; + int iIcon; + DWORD_ dwAttributes; + CHAR_ szDisplayName[MAX_PATH_]; + CHAR_ szTypeName[80]; +} SHFILEINFOA_; + +typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SHFILEINFOW { + HICON_ hIcon; + int iIcon; + DWORD_ dwAttributes; + WCHAR_ szDisplayName[MAX_PATH_]; + WCHAR_ szTypeName[80]; +} SHFILEINFOW_; + +#if !defined( BOOST_NO_ANSI_APIS ) + +BOOST_FORCEINLINE DWORD_PTR_ SHGetFileInfoA(LPCSTR_ pszPath, DWORD_ dwFileAttributes, SHFILEINFOA_* psfinsigned, UINT_ cbFileInfons, UINT_ uFlags) +{ + return ::SHGetFileInfoA(pszPath, dwFileAttributes, reinterpret_cast< ::_SHFILEINFOA* >(psfinsigned), cbFileInfons, uFlags); +} + +BOOST_FORCEINLINE DWORD_PTR_ sh_get_file_info(LPCSTR_ pszPath, DWORD_ dwFileAttributes, SHFILEINFOA_* psfinsigned, UINT_ cbFileInfons, UINT_ uFlags) +{ + return ::SHGetFileInfoA(pszPath, dwFileAttributes, reinterpret_cast< ::_SHFILEINFOA* >(psfinsigned), cbFileInfons, uFlags); +} + +#endif // BOOST_NO_ANSI_APIS + +BOOST_FORCEINLINE DWORD_PTR_ SHGetFileInfoW(LPCWSTR_ pszPath, DWORD_ dwFileAttributes, SHFILEINFOW_* psfinsigned, UINT_ cbFileInfons, UINT_ uFlags) +{ + return ::SHGetFileInfoW(pszPath, dwFileAttributes, reinterpret_cast< ::_SHFILEINFOW* >(psfinsigned), cbFileInfons, uFlags); +} + +BOOST_FORCEINLINE DWORD_PTR_ sh_get_file_info(LPCWSTR_ pszPath, DWORD_ dwFileAttributes, SHFILEINFOW_* psfinsigned, UINT_ cbFileInfons, UINT_ uFlags) +{ + return ::SHGetFileInfoW(pszPath, dwFileAttributes, reinterpret_cast< ::_SHFILEINFOW* >(psfinsigned), cbFileInfons, uFlags); +} + +} +} +} + +#endif // BOOST_DETAIL_WINAPI_SHELL_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/show_window.hpp b/lib/3rdParty/boost/boost/detail/winapi/show_window.hpp new file mode 100644 index 0000000..a8839ae --- /dev/null +++ b/lib/3rdParty/boost/boost/detail/winapi/show_window.hpp @@ -0,0 +1,105 @@ +// show_window.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_SHOW_WINDOW_HPP_ +#define BOOST_DETAIL_WINAPI_SHOW_WINDOW_HPP_ + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_PLAT_WINDOWS_DESKTOP + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { +BOOST_DETAIL_WINAPI_DECLARE_HANDLE(HWND); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI ShowWindow( + HWND hWnd, + int nCmdShow); + +BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI ShowWindowAsync( + HWND hWnd, + int nCmdShow); +} +#endif // BOOST_USE_WINDOWS_H + +namespace boost { +namespace detail { +namespace winapi { + +typedef ::HWND HWND_; +using ::ShowWindow; +using ::ShowWindowAsync; + +#if defined( BOOST_USE_WINDOWS_H ) && !defined( NOSHOWWINDOW ) + +const DWORD_ SW_HIDE_ = SW_HIDE; +const DWORD_ SW_SHOWNORMAL_ = SW_SHOWNORMAL; +const DWORD_ SW_NORMAL_ = SW_NORMAL; +const DWORD_ SW_SHOWMINIMIZED_ = SW_SHOWMINIMIZED; +const DWORD_ SW_SHOWMAXIMIZED_ = SW_SHOWMAXIMIZED; +const DWORD_ SW_MAXIMIZE_ = SW_MAXIMIZE; +const DWORD_ SW_SHOWNOACTIVATE_ = SW_SHOWNOACTIVATE; +const DWORD_ SW_SHOW_ = SW_SHOW; +const DWORD_ SW_MINIMIZE_ = SW_MINIMIZE; +const DWORD_ SW_SHOWMINNOACTIVE_ = SW_SHOWMINNOACTIVE; +const DWORD_ SW_SHOWNA_ = SW_SHOWNA; +const DWORD_ SW_RESTORE_ = SW_RESTORE; +const DWORD_ SW_SHOWDEFAULT_ = SW_SHOWDEFAULT; +const DWORD_ SW_FORCEMINIMIZE_ = SW_FORCEMINIMIZE; +const DWORD_ SW_MAX_ = SW_MAX; +const DWORD_ HIDE_WINDOW_ = HIDE_WINDOW; +const DWORD_ SHOW_OPENWINDOW_ = SHOW_OPENWINDOW; +const DWORD_ SHOW_ICONWINDOW_ = SHOW_ICONWINDOW; +const DWORD_ SHOW_FULLSCREEN_ = SHOW_FULLSCREEN; +const DWORD_ SHOW_OPENNOACTIVATE_ = SHOW_OPENNOACTIVATE; +const DWORD_ SW_PARENTCLOSING_ = SW_PARENTCLOSING; +const DWORD_ SW_OTHERZOOM_ = SW_OTHERZOOM; +const DWORD_ SW_PARENTOPENING_ = SW_PARENTOPENING; +const DWORD_ SW_OTHERUNZOOM_ = SW_OTHERUNZOOM; + +#else + +const DWORD_ SW_HIDE_ = 0; +const DWORD_ SW_SHOWNORMAL_ = 1; +const DWORD_ SW_NORMAL_ = 1; +const DWORD_ SW_SHOWMINIMIZED_ = 2; +const DWORD_ SW_SHOWMAXIMIZED_ = 3; +const DWORD_ SW_MAXIMIZE_ = 3; +const DWORD_ SW_SHOWNOACTIVATE_ = 4; +const DWORD_ SW_SHOW_ = 5; +const DWORD_ SW_MINIMIZE_ = 6; +const DWORD_ SW_SHOWMINNOACTIVE_ = 7; +const DWORD_ SW_SHOWNA_ = 8; +const DWORD_ SW_RESTORE_ = 9; +const DWORD_ SW_SHOWDEFAULT_ = 10; +const DWORD_ SW_FORCEMINIMIZE_ = 11; +const DWORD_ SW_MAX_ = 11; +const DWORD_ HIDE_WINDOW_ = 0; +const DWORD_ SHOW_OPENWINDOW_ = 1; +const DWORD_ SHOW_ICONWINDOW_ = 2; +const DWORD_ SHOW_FULLSCREEN_ = 3; +const DWORD_ SHOW_OPENNOACTIVATE_ = 4; +const DWORD_ SW_PARENTCLOSING_ = 1; +const DWORD_ SW_OTHERZOOM_ = 2; +const DWORD_ SW_PARENTOPENING_ = 3; +const DWORD_ SW_OTHERUNZOOM_ = 4; + +#endif + +} + +} +} + +#endif // BOOST_PLAT_WINDOWS_DESKTOP + +#endif // BOOST_DETAIL_WINAPI_SHOW_WINDOW_HPP_ diff --git a/lib/3rdParty/boost/boost/detail/winapi/srw_lock.hpp b/lib/3rdParty/boost/boost/detail/winapi/srw_lock.hpp index c5318f5..0dad858 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/srw_lock.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/srw_lock.hpp @@ -16,6 +16,13 @@ #pragma once #endif +#if BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_WIN6 \ + || (defined(_MSC_VER) && _MSC_VER < 1600) +// Windows SDK 6.0A, which is used by MSVC 9, does not have TryAcquireSRWLock* neither in headers nor in .lib files, +// although the functions are present in later SDKs since Windows API version 6. +#define BOOST_WINAPI_NO_TRY_ACQUIRE_SRWLOCK +#endif + #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6 #include @@ -39,11 +46,13 @@ AcquireSRWLockExclusive(::_RTL_SRWLOCK* SRWLock); BOOST_SYMBOL_IMPORT boost::detail::winapi::VOID_ WINAPI AcquireSRWLockShared(::_RTL_SRWLOCK* SRWLock); +#if !defined( BOOST_WINAPI_NO_TRY_ACQUIRE_SRWLOCK ) BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOLEAN_ WINAPI TryAcquireSRWLockExclusive(::_RTL_SRWLOCK* SRWLock); BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOLEAN_ WINAPI TryAcquireSRWLockShared(::_RTL_SRWLOCK* SRWLock); +#endif } #endif @@ -86,6 +95,7 @@ BOOST_FORCEINLINE VOID_ AcquireSRWLockShared(PSRWLOCK_ SRWLock) ::AcquireSRWLockShared(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock)); } +#if !defined( BOOST_WINAPI_NO_TRY_ACQUIRE_SRWLOCK ) BOOST_FORCEINLINE BOOLEAN_ TryAcquireSRWLockExclusive(PSRWLOCK_ SRWLock) { return ::TryAcquireSRWLockExclusive(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock)); @@ -95,6 +105,7 @@ BOOST_FORCEINLINE BOOLEAN_ TryAcquireSRWLockShared(PSRWLOCK_ SRWLock) { return ::TryAcquireSRWLockShared(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock)); } +#endif } } diff --git a/lib/3rdParty/boost/boost/detail/winapi/system.hpp b/lib/3rdParty/boost/boost/detail/winapi/system.hpp index 93a5eeb..bdfff66 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/system.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/system.hpp @@ -17,6 +17,12 @@ #pragma once #endif +#if defined(BOOST_MSVC) +#pragma warning(push) +// nonstandard extension used : nameless struct/union +#pragma warning(disable: 4201) +#endif + #if !defined( BOOST_USE_WINDOWS_H ) extern "C" { struct _SYSTEM_INFO; @@ -70,4 +76,8 @@ BOOST_FORCEINLINE VOID_ GetNativeSystemInfo(LPSYSTEM_INFO_ lpSystemInfo) } } +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #endif // BOOST_DETAIL_WINAPI_SYSTEM_HPP diff --git a/lib/3rdParty/boost/boost/detail/winapi/thread.hpp b/lib/3rdParty/boost/boost/detail/winapi/thread.hpp index 9367d46..6162708 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/thread.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/thread.hpp @@ -11,7 +11,8 @@ #define BOOST_DETAIL_WINAPI_THREAD_HPP #include -#include +#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -19,10 +20,6 @@ #if !defined( BOOST_USE_WINDOWS_H ) extern "C" { -// Windows CE define GetCurrentThreadId as an inline function in kfuncs.h -#if !defined( UNDER_CE ) -BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI GetCurrentThreadId(BOOST_DETAIL_WINAPI_VOID); -#endif BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI SleepEx( boost::detail::winapi::DWORD_ dwMilliseconds, @@ -35,7 +32,6 @@ BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI SwitchToThread(BOOST_DET namespace boost { namespace detail { namespace winapi { -using ::GetCurrentThreadId; using ::SleepEx; using ::Sleep; using ::SwitchToThread; diff --git a/lib/3rdParty/boost/boost/detail/winapi/waitable_timer.hpp b/lib/3rdParty/boost/boost/detail/winapi/waitable_timer.hpp index 842cb04..c2bf6d5 100644 --- a/lib/3rdParty/boost/boost/detail/winapi/waitable_timer.hpp +++ b/lib/3rdParty/boost/boost/detail/winapi/waitable_timer.hpp @@ -75,6 +75,25 @@ using ::OpenWaitableTimerA; using ::OpenWaitableTimerW; using ::CancelWaitableTimer; +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ TIMER_ALL_ACCESS_ = TIMER_ALL_ACCESS; +const DWORD_ TIMER_MODIFY_STATE_ = TIMER_MODIFY_STATE; +const DWORD_ TIMER_QUERY_STATE_ = TIMER_QUERY_STATE; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ TIMER_ALL_ACCESS_ = 0x001F0003; +const DWORD_ TIMER_MODIFY_STATE_ = 0x00000002; +const DWORD_ TIMER_QUERY_STATE_ = 0x00000001; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ timer_all_access = TIMER_ALL_ACCESS_; +const DWORD_ timer_modify_state = TIMER_MODIFY_STATE_; +const DWORD_ timer_query_state = TIMER_QUERY_STATE_; + + #if !defined( BOOST_NO_ANSI_APIS ) BOOST_FORCEINLINE HANDLE_ CreateWaitableTimerA(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCSTR_ lpTimerName) { diff --git a/lib/3rdParty/boost/boost/exception/detail/error_info_impl.hpp b/lib/3rdParty/boost/boost/exception/detail/error_info_impl.hpp index 12e601b..ecd086d 100644 --- a/lib/3rdParty/boost/boost/exception/detail/error_info_impl.hpp +++ b/lib/3rdParty/boost/boost/exception/detail/error_info_impl.hpp @@ -12,6 +12,8 @@ #pragma warning(push,1) #endif +#include +#include #include namespace @@ -46,6 +48,11 @@ boost typedef T value_type; error_info( value_type const & value ); +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + error_info( error_info const & ); + error_info( value_type && value ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(value)))); + error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.value_)))); +#endif ~error_info() throw(); value_type const & @@ -61,6 +68,10 @@ boost } private: + error_info & operator=( error_info const & ); +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + error_info & operator=( error_info && x ); +#endif std::string name_value_string() const; diff --git a/lib/3rdParty/boost/boost/exception/detail/shared_ptr.hpp b/lib/3rdParty/boost/boost/exception/detail/shared_ptr.hpp new file mode 100644 index 0000000..51febe8 --- /dev/null +++ b/lib/3rdParty/boost/boost/exception/detail/shared_ptr.hpp @@ -0,0 +1,17 @@ +//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc. + +//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) + +#ifndef UUID_837060E885AF11E68DA91D15E31AC075 +#define UUID_837060E885AF11E68DA91D15E31AC075 + +#ifdef BOOST_EXCEPTION_MINI_BOOST +#include +namespace boost { namespace exception_detail { using std::shared_ptr; } } +#else +#include +namespace boost { namespace exception_detail { using boost::shared_ptr; } } +#endif + +#endif diff --git a/lib/3rdParty/boost/boost/exception/errinfo_api_function.hpp b/lib/3rdParty/boost/boost/exception/errinfo_api_function.hpp index 481c613..0cbbdb9 100644 --- a/lib/3rdParty/boost/boost/exception/errinfo_api_function.hpp +++ b/lib/3rdParty/boost/boost/exception/errinfo_api_function.hpp @@ -6,7 +6,7 @@ #ifndef UUID_DDFBB4546C1211DEA4659E9055D89593 #define UUID_DDFBB4546C1211DEA4659E9055D89593 -#include "boost/exception/error_info.hpp" +#include namespace boost diff --git a/lib/3rdParty/boost/boost/exception/errinfo_errno.hpp b/lib/3rdParty/boost/boost/exception/errinfo_errno.hpp index 2cf7cab..de44e17 100644 --- a/lib/3rdParty/boost/boost/exception/errinfo_errno.hpp +++ b/lib/3rdParty/boost/boost/exception/errinfo_errno.hpp @@ -10,9 +10,10 @@ #endif #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) #pragma warning(push,1) +#pragma warning(disable:4996) #endif -#include "boost/exception/info.hpp" +#include #include #include @@ -33,7 +34,7 @@ boost { std::ostringstream tmp; int v=e.value(); - tmp << v << ", \"" << strerror(v) << "\""; + tmp << '[' << error_info_name(e) << "] = " << v << ", \"" << strerror(v) << "\"\n"; return tmp.str(); } } diff --git a/lib/3rdParty/boost/boost/exception/exception.hpp b/lib/3rdParty/boost/boost/exception/exception.hpp index 1f2bd9c..c0fdaf9 100644 --- a/lib/3rdParty/boost/boost/exception/exception.hpp +++ b/lib/3rdParty/boost/boost/exception/exception.hpp @@ -12,6 +12,14 @@ #pragma warning(push,1) #endif +#ifdef BOOST_EXCEPTION_MINI_BOOST +#include +namespace boost { namespace exception_detail { using std::shared_ptr; } } +#else +namespace boost { template class shared_ptr; }; +namespace boost { namespace exception_detail { using boost::shared_ptr; } } +#endif + namespace boost { @@ -144,9 +152,6 @@ boost # endif #endif - template - class shared_ptr; - namespace exception_detail { @@ -182,6 +187,18 @@ boost template <> struct get_info; + template + struct set_info_rv; + + template <> + struct set_info_rv; + + template <> + struct set_info_rv; + + template <> + struct set_info_rv; + char const * get_diagnostic_information( exception const &, char const * ); void copy_boost_exception( exception *, exception const * ); @@ -264,6 +281,11 @@ boost friend struct exception_detail::get_info; friend struct exception_detail::get_info; friend struct exception_detail::get_info; + template + friend struct exception_detail::set_info_rv; + friend struct exception_detail::set_info_rv; + friend struct exception_detail::set_info_rv; + friend struct exception_detail::set_info_rv; friend void exception_detail::copy_boost_exception( exception *, exception const * ); #endif mutable exception_detail::refcount_ptr data_; diff --git a/lib/3rdParty/boost/boost/exception/get_error_info.hpp b/lib/3rdParty/boost/boost/exception/get_error_info.hpp index 96be763..51a21ba 100644 --- a/lib/3rdParty/boost/boost/exception/get_error_info.hpp +++ b/lib/3rdParty/boost/boost/exception/get_error_info.hpp @@ -15,7 +15,8 @@ #include #include #include -#include +#include +#include namespace boost diff --git a/lib/3rdParty/boost/boost/exception/info.hpp b/lib/3rdParty/boost/boost/exception/info.hpp index 762a950..f06df42 100644 --- a/lib/3rdParty/boost/boost/exception/info.hpp +++ b/lib/3rdParty/boost/boost/exception/info.hpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include @@ -46,6 +46,30 @@ boost { } +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + template + inline + error_info:: + error_info( error_info const & x ): + value_(x.value_) + { + } + template + inline + error_info:: + error_info( value_type && value ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(value)))): + value_(std::move(value)) + { + } + template + inline + error_info:: + error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.value_)))): + value_(std::move(x.value_)) + { + } +#endif + template inline error_info:: @@ -175,6 +199,85 @@ boost return x; } +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + template + E const & set_info( E const &, error_info && ); + template + struct set_info_rv; + template + struct + set_info_rv > + { + template + friend E const & set_info( E const &, error_info && ); + template + static + E const & + set( E const & x, error_info && v ) + { + typedef error_info error_info_tag_t; + shared_ptr p( new error_info_tag_t(std::move(v)) ); + exception_detail::error_info_container * c=x.data_.get(); + if( !c ) + x.data_.adopt(c=new exception_detail::error_info_container_impl); + c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t)); + return x; + } + }; + template <> + struct + set_info_rv + { + template + friend E const & set_info( E const &, error_info && ); + template + static + E const & + set( E const & x, throw_function && y ) + { + x.throw_function_=y.v_; + return x; + } + }; + template <> + struct + set_info_rv + { + template + friend E const & set_info( E const &, error_info && ); + template + static + E const & + set( E const & x, throw_file && y ) + { + x.throw_file_=y.v_; + return x; + } + }; + template <> + struct + set_info_rv + { + template + friend E const & set_info( E const &, error_info && ); + template + static + E const & + set( E const & x, throw_line && y ) + { + x.throw_line_=y.v_; + return x; + } + }; + template + inline + E const & + set_info( E const & x, error_info && v ) + { + return set_info_rv >::template set(x,std::move(v)); + } +#endif + template struct derives_boost_exception @@ -190,6 +293,16 @@ boost { return exception_detail::set_info(x,v); } + +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + template + inline + typename enable_if,E const &>::type + operator<<( E const & x, error_info && v ) + { + return exception_detail::set_info(x,std::move(v)); + } +#endif } #if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) diff --git a/lib/3rdParty/boost/boost/filesystem/operations.hpp b/lib/3rdParty/boost/boost/filesystem/operations.hpp index 47bc074..b0ea42a 100644 --- a/lib/3rdParty/boost/boost/filesystem/operations.hpp +++ b/lib/3rdParty/boost/boost/filesystem/operations.hpp @@ -921,8 +921,8 @@ namespace detail friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it, system::error_code* ec); - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. + // shared_ptr provides the shallow-copy semantics required for single pass iterators + // (i.e. InputIterators). The end iterator is indicated by !m_imp || !m_imp->handle boost::shared_ptr< detail::dir_itr_imp > m_imp; friend class boost::iterator_core_access; @@ -939,7 +939,11 @@ namespace detail void increment() { detail::directory_iterator_increment(*this, 0); } bool equal(const directory_iterator& rhs) const - { return m_imp == rhs.m_imp; } + { + return m_imp == rhs.m_imp + || (!m_imp && rhs.m_imp && !rhs.m_imp->handle) + || (!rhs.m_imp && m_imp && !m_imp->handle); + } }; // directory_iterator @@ -1029,41 +1033,43 @@ namespace filesystem // taking symlinks and options into account. if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push) - m_options &= ~symlink_option::_detail_no_push; - - else { - // Logic for following predicate was contributed by Daniel Aarno to handle cyclic - // symlinks correctly and efficiently, fixing ticket #5652. - // if (((m_options & symlink_option::recurse) == symlink_option::recurse - // || !is_symlink(m_stack.top()->symlink_status())) - // && is_directory(m_stack.top()->status())) ... - // The predicate code has since been rewritten to pass error_code arguments, - // per ticket #5653. + m_options &= ~symlink_option::_detail_no_push; + return false; + } - file_status symlink_stat; + file_status symlink_stat; - if ((m_options & symlink_option::recurse) != symlink_option::recurse) + // if we are not recursing into symlinks, we are going to have to know if the + // stack top is a symlink, so get symlink_status and verify no error occurred + if ((m_options & symlink_option::recurse) != symlink_option::recurse) + { + symlink_stat = m_stack.top()->symlink_status(ec); + if (ec) + return false; + } + + // Logic for following predicate was contributed by Daniel Aarno to handle cyclic + // symlinks correctly and efficiently, fixing ticket #5652. + // if (((m_options & symlink_option::recurse) == symlink_option::recurse + // || !is_symlink(m_stack.top()->symlink_status())) + // && is_directory(m_stack.top()->status())) ... + // The predicate code has since been rewritten to pass error_code arguments, + // per ticket #5653. + + if ((m_options & symlink_option::recurse) == symlink_option::recurse + || !is_symlink(symlink_stat)) + { + file_status stat = m_stack.top()->status(ec); + if (ec || !is_directory(stat)) + return false; + + directory_iterator next(m_stack.top()->path(), ec); + if (!ec && next != directory_iterator()) { - symlink_stat = m_stack.top()->symlink_status(ec); - if (ec) - return false; - } - - if ((m_options & symlink_option::recurse) == symlink_option::recurse - || !is_symlink(symlink_stat)) - { - file_status stat = m_stack.top()->status(ec); - if (ec || !is_directory(stat)) - return false; - - directory_iterator next(m_stack.top()->path(), ec); - if (!ec && next != directory_iterator()) - { - m_stack.push(next); - ++m_level; - return true; - } + m_stack.push(next); + ++m_level; + return true; } } return false; @@ -1254,8 +1260,9 @@ namespace filesystem private: - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. + // shared_ptr provides the shallow-copy semantics required for single pass iterators + // (i.e. InputIterators). + // The end iterator is indicated by !m_imp || m_imp->m_stack.empty() boost::shared_ptr< detail::recur_dir_itr_imp > m_imp; friend class boost::iterator_core_access; @@ -1281,7 +1288,11 @@ namespace filesystem } bool equal(const recursive_directory_iterator& rhs) const - { return m_imp == rhs.m_imp; } + { + return m_imp == rhs.m_imp + || (!m_imp && rhs.m_imp && rhs.m_imp->m_stack.empty()) + || (!rhs.m_imp && m_imp && m_imp->m_stack.empty()) ; + } }; // recursive directory iterator diff --git a/lib/3rdParty/boost/boost/filesystem/path.hpp b/lib/3rdParty/boost/boost/filesystem/path.hpp index af5bfcc..65e27b1 100644 --- a/lib/3rdParty/boost/boost/filesystem/path.hpp +++ b/lib/3rdParty/boost/boost/filesystem/path.hpp @@ -62,10 +62,14 @@ namespace filesystem # ifdef BOOST_WINDOWS_API typedef wchar_t value_type; + BOOST_STATIC_CONSTEXPR value_type separator = L'/'; BOOST_STATIC_CONSTEXPR value_type preferred_separator = L'\\'; + BOOST_STATIC_CONSTEXPR value_type dot = L'.'; # else typedef char value_type; + BOOST_STATIC_CONSTEXPR value_type separator = '/'; BOOST_STATIC_CONSTEXPR value_type preferred_separator = '/'; + BOOST_STATIC_CONSTEXPR value_type dot = '.'; # endif typedef std::basic_string string_type; typedef std::codecvt= 2 && m_pathname[size()-1] == dot && m_pathname[size()-2] == dot + && (m_pathname.size() == 2 || detail::is_element_separator(m_pathname[size()-3])); + // use detail::is_element_separator() rather than detail::is_directory_separator + // to deal with "c:.." edge case on Windows when ':' acts as a separator + } //--------------------------------------------------------------------------------------// // class path member template implementation // diff --git a/lib/3rdParty/boost/boost/function/function_base.hpp b/lib/3rdParty/boost/boost/function/function_base.hpp index 35c1995..21a0c0d 100644 --- a/lib/3rdParty/boost/boost/function/function_base.hpp +++ b/lib/3rdParty/boost/boost/function/function_base.hpp @@ -16,9 +16,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -41,28 +41,6 @@ # pragma warning( push ) # pragma warning( disable : 4793 ) // complaint about native code generation # pragma warning( disable : 4127 ) // "conditional expression is constant" -#endif - -// Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info. -#ifdef BOOST_NO_STD_TYPEINFO -// Embedded VC++ does not have type_info in namespace std -# define BOOST_FUNCTION_STD_NS -#else -# define BOOST_FUNCTION_STD_NS std -#endif - -// Borrowed from Boost.Python library: determines the cases where we -// need to use std::type_info::name to compare instead of operator==. -#if defined( BOOST_NO_TYPEID ) -# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y)) -#elif defined(__GNUC__) \ - || defined(_AIX) \ - || ( defined(__sgi) && defined(__host_mips)) -# include -# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) \ - (std::strcmp((X).name(),(Y).name()) == 0) -# else -# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y)) #endif #if defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG) @@ -87,15 +65,16 @@ namespace boost { * object pointers, and a structure that resembles a bound * member function pointer. */ - union function_buffer + union function_buffer_members { // For pointers to function objects - mutable void* obj_ptr; + typedef void* obj_ptr_t; + mutable obj_ptr_t obj_ptr; // For pointers to std::type_info objects struct type_t { // (get_functor_type_tag, check_functor_type_tag). - const detail::sp_typeinfo* type; + const boost::typeindex::type_info* type; // Whether the type is const-qualified. bool const_qualified; @@ -104,7 +83,8 @@ namespace boost { } type; // For function pointers of all kinds - mutable void (*func_ptr)(); + typedef void (*func_ptr_t)(); + mutable func_ptr_t func_ptr; // For bound member pointers struct bound_memfunc_ptr_t { @@ -119,9 +99,15 @@ namespace boost { bool is_const_qualified; bool is_volatile_qualified; } obj_ref; + }; + + union function_buffer + { + // Type-specific union members + mutable function_buffer_members members; // To relax aliasing constraints - mutable char data; + mutable char data[sizeof(function_buffer_members)]; }; /** @@ -188,45 +174,42 @@ namespace boost { struct reference_manager { static inline void - manage(const function_buffer& in_buffer, function_buffer& out_buffer, + manage(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op) { switch (op) { - case clone_functor_tag: - out_buffer.obj_ref = in_buffer.obj_ref; + case clone_functor_tag: + out_buffer.members.obj_ref = in_buffer.members.obj_ref; return; case move_functor_tag: - out_buffer.obj_ref = in_buffer.obj_ref; - in_buffer.obj_ref.obj_ptr = 0; + out_buffer.members.obj_ref = in_buffer.members.obj_ref; + in_buffer.members.obj_ref.obj_ptr = 0; return; case destroy_functor_tag: - out_buffer.obj_ref.obj_ptr = 0; + out_buffer.members.obj_ref.obj_ptr = 0; return; case check_functor_type_tag: { - const detail::sp_typeinfo& check_type - = *out_buffer.type.type; - // Check whether we have the same type. We can add // cv-qualifiers, but we can't take them away. - if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(F)) - && (!in_buffer.obj_ref.is_const_qualified - || out_buffer.type.const_qualified) - && (!in_buffer.obj_ref.is_volatile_qualified - || out_buffer.type.volatile_qualified)) - out_buffer.obj_ptr = in_buffer.obj_ref.obj_ptr; + if (*out_buffer.members.type.type == boost::typeindex::type_id() + && (!in_buffer.members.obj_ref.is_const_qualified + || out_buffer.members.type.const_qualified) + && (!in_buffer.members.obj_ref.is_volatile_qualified + || out_buffer.members.type.volatile_qualified)) + out_buffer.members.obj_ptr = in_buffer.members.obj_ref.obj_ptr; else - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } return; case get_functor_type_tag: - out_buffer.type.type = &BOOST_SP_TYPEID(F); - out_buffer.type.const_qualified = in_buffer.obj_ref.is_const_qualified; - out_buffer.type.volatile_qualified = in_buffer.obj_ref.is_volatile_qualified; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = in_buffer.members.obj_ref.is_const_qualified; + out_buffer.members.type.volatile_qualified = in_buffer.members.obj_ref.is_volatile_qualified; return; } } @@ -240,9 +223,9 @@ namespace boost { struct function_allows_small_object_optimization { BOOST_STATIC_CONSTANT - (bool, + (bool, value = ((sizeof(F) <= sizeof(function_buffer) && - (alignment_of::value + (alignment_of::value % alignment_of::value == 0)))); }; @@ -254,7 +237,7 @@ namespace boost { A(a) { } - + functor_wrapper(const functor_wrapper& f) : F(static_cast(f)), A(static_cast(f)) @@ -273,61 +256,57 @@ namespace boost { // Function pointers static inline void - manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer, + manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op) { if (op == clone_functor_tag) - out_buffer.func_ptr = in_buffer.func_ptr; + out_buffer.members.func_ptr = in_buffer.members.func_ptr; else if (op == move_functor_tag) { - out_buffer.func_ptr = in_buffer.func_ptr; - in_buffer.func_ptr = 0; + out_buffer.members.func_ptr = in_buffer.members.func_ptr; + in_buffer.members.func_ptr = 0; } else if (op == destroy_functor_tag) - out_buffer.func_ptr = 0; + out_buffer.members.func_ptr = 0; else if (op == check_functor_type_tag) { - const boost::detail::sp_typeinfo& check_type - = *out_buffer.type.type; - if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) - out_buffer.obj_ptr = &in_buffer.func_ptr; + if (*out_buffer.members.type.type == boost::typeindex::type_id()) + out_buffer.members.obj_ptr = &in_buffer.members.func_ptr; else - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else /* op == get_functor_type_tag */ { - out_buffer.type.type = &BOOST_SP_TYPEID(Functor); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; } } // Function objects that fit in the small-object buffer. static inline void - manage_small(const function_buffer& in_buffer, function_buffer& out_buffer, + manage_small(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op) { if (op == clone_functor_tag || op == move_functor_tag) { - const functor_type* in_functor = - reinterpret_cast(&in_buffer.data); - new (reinterpret_cast(&out_buffer.data)) functor_type(*in_functor); + const functor_type* in_functor = + reinterpret_cast(in_buffer.data); + new (reinterpret_cast(out_buffer.data)) functor_type(*in_functor); if (op == move_functor_tag) { - functor_type* f = reinterpret_cast(&in_buffer.data); + functor_type* f = reinterpret_cast(in_buffer.data); (void)f; // suppress warning about the value of f not being used (MSVC) f->~Functor(); } } else if (op == destroy_functor_tag) { // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type. - functor_type* f = reinterpret_cast(&out_buffer.data); + functor_type* f = reinterpret_cast(out_buffer.data); (void)f; // suppress warning about the value of f not being used (MSVC) f->~Functor(); } else if (op == check_functor_type_tag) { - const detail::sp_typeinfo& check_type - = *out_buffer.type.type; - if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) - out_buffer.obj_ptr = &in_buffer.data; + if (*out_buffer.members.type.type == boost::typeindex::type_id()) + out_buffer.members.obj_ptr = in_buffer.data; else - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else /* op == get_functor_type_tag */ { - out_buffer.type.type = &BOOST_SP_TYPEID(Functor); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; } } }; @@ -340,7 +319,7 @@ namespace boost { // Function pointers static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, function_ptr_tag) { functor_manager_common::manage_ptr(in_buffer,out_buffer,op); @@ -348,15 +327,15 @@ namespace boost { // Function objects that fit in the small-object buffer. static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, mpl::true_) { functor_manager_common::manage_small(in_buffer,out_buffer,op); } - + // Function objects that require heap allocation static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, mpl::false_) { if (op == clone_functor_tag) { @@ -366,29 +345,27 @@ namespace boost { // jewillco: Changing this to static_cast because GCC 2.95.3 is // obsolete. const functor_type* f = - static_cast(in_buffer.obj_ptr); + static_cast(in_buffer.members.obj_ptr); functor_type* new_f = new functor_type(*f); - out_buffer.obj_ptr = new_f; + out_buffer.members.obj_ptr = new_f; } else if (op == move_functor_tag) { - out_buffer.obj_ptr = in_buffer.obj_ptr; - in_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = in_buffer.members.obj_ptr; + in_buffer.members.obj_ptr = 0; } else if (op == destroy_functor_tag) { /* Cast from the void pointer to the functor pointer type */ functor_type* f = - static_cast(out_buffer.obj_ptr); + static_cast(out_buffer.members.obj_ptr); delete f; - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else if (op == check_functor_type_tag) { - const detail::sp_typeinfo& check_type - = *out_buffer.type.type; - if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) - out_buffer.obj_ptr = in_buffer.obj_ptr; + if (*out_buffer.members.type.type == boost::typeindex::type_id()) + out_buffer.members.obj_ptr = in_buffer.members.obj_ptr; else - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else /* op == get_functor_type_tag */ { - out_buffer.type.type = &BOOST_SP_TYPEID(Functor); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; } } @@ -396,7 +373,7 @@ namespace boost { // object can use the small-object optimization buffer or // whether we need to allocate it on the heap. static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, function_obj_tag) { manager(in_buffer, out_buffer, op, @@ -405,7 +382,7 @@ namespace boost { // For member pointers, we use the small-object optimization buffer. static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, member_ptr_tag) { manager(in_buffer, out_buffer, op, mpl::true_()); @@ -415,15 +392,15 @@ namespace boost { /* Dispatch to an appropriate manager based on whether we have a function pointer or a function object pointer. */ static inline void - manage(const function_buffer& in_buffer, function_buffer& out_buffer, + manage(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op) { typedef typename get_function_tag::type tag_type; switch (op) { case get_functor_type_tag: - out_buffer.type.type = &BOOST_SP_TYPEID(functor_type); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; return; default: @@ -441,7 +418,7 @@ namespace boost { // Function pointers static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, function_ptr_tag) { functor_manager_common::manage_ptr(in_buffer,out_buffer,op); @@ -449,15 +426,15 @@ namespace boost { // Function objects that fit in the small-object buffer. static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, mpl::true_) { functor_manager_common::manage_small(in_buffer,out_buffer,op); } - + // Function objects that require heap allocation static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, mpl::false_) { typedef functor_wrapper functor_wrapper_type; @@ -470,36 +447,34 @@ namespace boost { // GCC 2.95.3 gets the CV qualifiers wrong here, so we // can't do the static_cast that we should do. const functor_wrapper_type* f = - static_cast(in_buffer.obj_ptr); + static_cast(in_buffer.members.obj_ptr); wrapper_allocator_type wrapper_allocator(static_cast(*f)); wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1); wrapper_allocator.construct(copy, *f); // Get back to the original pointer type functor_wrapper_type* new_f = static_cast(copy); - out_buffer.obj_ptr = new_f; + out_buffer.members.obj_ptr = new_f; } else if (op == move_functor_tag) { - out_buffer.obj_ptr = in_buffer.obj_ptr; - in_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = in_buffer.members.obj_ptr; + in_buffer.members.obj_ptr = 0; } else if (op == destroy_functor_tag) { /* Cast from the void pointer to the functor_wrapper_type */ functor_wrapper_type* victim = - static_cast(in_buffer.obj_ptr); + static_cast(in_buffer.members.obj_ptr); wrapper_allocator_type wrapper_allocator(static_cast(*victim)); wrapper_allocator.destroy(victim); wrapper_allocator.deallocate(victim,1); - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else if (op == check_functor_type_tag) { - const detail::sp_typeinfo& check_type - = *out_buffer.type.type; - if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor))) - out_buffer.obj_ptr = in_buffer.obj_ptr; + if (*out_buffer.members.type.type == boost::typeindex::type_id()) + out_buffer.members.obj_ptr = in_buffer.members.obj_ptr; else - out_buffer.obj_ptr = 0; + out_buffer.members.obj_ptr = 0; } else /* op == get_functor_type_tag */ { - out_buffer.type.type = &BOOST_SP_TYPEID(Functor); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; } } @@ -507,7 +482,7 @@ namespace boost { // object can use the small-object optimization buffer or // whether we need to allocate it on the heap. static inline void - manager(const function_buffer& in_buffer, function_buffer& out_buffer, + manager(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op, function_obj_tag) { manager(in_buffer, out_buffer, op, @@ -518,15 +493,15 @@ namespace boost { /* Dispatch to an appropriate manager based on whether we have a function pointer or a function object pointer. */ static inline void - manage(const function_buffer& in_buffer, function_buffer& out_buffer, + manage(const function_buffer& in_buffer, function_buffer& out_buffer, functor_manager_operation_type op) { typedef typename get_function_tag::type tag_type; switch (op) { case get_functor_type_tag: - out_buffer.type.type = &BOOST_SP_TYPEID(functor_type); - out_buffer.type.const_qualified = false; - out_buffer.type.volatile_qualified = false; + out_buffer.members.type.type = &boost::typeindex::type_id().type_info(); + out_buffer.members.type.const_qualified = false; + out_buffer.members.type.volatile_qualified = false; return; default: @@ -604,8 +579,8 @@ namespace boost { */ struct vtable_base { - void (*manager)(const function_buffer& in_buffer, - function_buffer& out_buffer, + void (*manager)(const function_buffer& in_buffer, + function_buffer& out_buffer, functor_manager_operation_type op); }; } // end namespace function @@ -625,15 +600,15 @@ public: /** Determine if the function is empty (i.e., has no target). */ bool empty() const { return !vtable; } - /** Retrieve the type of the stored function object, or BOOST_SP_TYPEID(void) + /** Retrieve the type of the stored function object, or type_id() if this is empty. */ - const detail::sp_typeinfo& target_type() const + const boost::typeindex::type_info& target_type() const { - if (!vtable) return BOOST_SP_TYPEID(void); + if (!vtable) return boost::typeindex::type_id().type_info(); detail::function::function_buffer type; get_vtable()->manager(functor, type, detail::function::get_functor_type_tag); - return *type.type.type; + return *type.members.type.type; } template @@ -642,12 +617,12 @@ public: if (!vtable) return 0; detail::function::function_buffer type_result; - type_result.type.type = &BOOST_SP_TYPEID(Functor); - type_result.type.const_qualified = is_const::value; - type_result.type.volatile_qualified = is_volatile::value; - get_vtable()->manager(functor, type_result, + type_result.members.type.type = &boost::typeindex::type_id().type_info(); + type_result.members.type.const_qualified = is_const::value; + type_result.members.type.volatile_qualified = is_volatile::value; + get_vtable()->manager(functor, type_result, detail::function::check_functor_type_tag); - return static_cast(type_result.obj_ptr); + return static_cast(type_result.members.obj_ptr); } template @@ -656,14 +631,14 @@ public: if (!vtable) return 0; detail::function::function_buffer type_result; - type_result.type.type = &BOOST_SP_TYPEID(Functor); - type_result.type.const_qualified = true; - type_result.type.volatile_qualified = is_volatile::value; - get_vtable()->manager(functor, type_result, + type_result.members.type.type = &boost::typeindex::type_id().type_info(); + type_result.members.type.const_qualified = true; + type_result.members.type.volatile_qualified = is_volatile::value; + get_vtable()->manager(functor, type_result, detail::function::check_functor_type_tag); // GCC 2.95.3 gets the CV qualifiers wrong here, so we // can't do the static_cast that we should do. - return static_cast(type_result.obj_ptr); + return static_cast(type_result.members.obj_ptr); } template @@ -883,10 +858,9 @@ namespace detail { } // end namespace boost #undef BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL -#undef BOOST_FUNCTION_COMPARE_TYPE_ID #if defined(BOOST_MSVC) # pragma warning( pop ) -#endif +#endif #endif // BOOST_FUNCTION_BASE_HEADER diff --git a/lib/3rdParty/boost/boost/function/function_template.hpp b/lib/3rdParty/boost/boost/function/function_template.hpp index 211b81d..82c81d7 100644 --- a/lib/3rdParty/boost/boost/function/function_template.hpp +++ b/lib/3rdParty/boost/boost/function/function_template.hpp @@ -16,7 +16,7 @@ #if defined(BOOST_MSVC) # pragma warning( push ) # pragma warning( disable : 4127 ) // "conditional expression is constant" -#endif +#endif #define BOOST_FUNCTION_TEMPLATE_PARMS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, typename T) @@ -97,7 +97,7 @@ namespace boost { static R invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA BOOST_FUNCTION_PARMS) { - FunctionPtr f = reinterpret_cast(function_ptr.func_ptr); + FunctionPtr f = reinterpret_cast(function_ptr.members.func_ptr); return f(BOOST_FUNCTION_ARGS); } }; @@ -114,7 +114,7 @@ namespace boost { BOOST_FUNCTION_PARMS) { - FunctionPtr f = reinterpret_cast(function_ptr.func_ptr); + FunctionPtr f = reinterpret_cast(function_ptr.members.func_ptr); BOOST_FUNCTION_RETURN(f(BOOST_FUNCTION_ARGS)); } }; @@ -132,9 +132,9 @@ namespace boost { { FunctionObj* f; if (function_allows_small_object_optimization::value) - f = reinterpret_cast(&function_obj_ptr.data); + f = reinterpret_cast(function_obj_ptr.data); else - f = reinterpret_cast(function_obj_ptr.obj_ptr); + f = reinterpret_cast(function_obj_ptr.members.obj_ptr); return (*f)(BOOST_FUNCTION_ARGS); } }; @@ -153,9 +153,9 @@ namespace boost { { FunctionObj* f; if (function_allows_small_object_optimization::value) - f = reinterpret_cast(&function_obj_ptr.data); + f = reinterpret_cast(function_obj_ptr.data); else - f = reinterpret_cast(function_obj_ptr.obj_ptr); + f = reinterpret_cast(function_obj_ptr.members.obj_ptr); BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS)); } }; @@ -171,8 +171,8 @@ namespace boost { BOOST_FUNCTION_PARMS) { - FunctionObj* f = - reinterpret_cast(function_obj_ptr.obj_ptr); + FunctionObj* f = + reinterpret_cast(function_obj_ptr.members.obj_ptr); return (*f)(BOOST_FUNCTION_ARGS); } }; @@ -189,8 +189,8 @@ namespace boost { BOOST_FUNCTION_PARMS) { - FunctionObj* f = - reinterpret_cast(function_obj_ptr.obj_ptr); + FunctionObj* f = + reinterpret_cast(function_obj_ptr.members.obj_ptr); BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS)); } }; @@ -208,8 +208,8 @@ namespace boost { BOOST_FUNCTION_PARMS) { - MemberPtr* f = - reinterpret_cast(&function_obj_ptr.data); + MemberPtr* f = + reinterpret_cast(function_obj_ptr.data); return boost::mem_fn(*f)(BOOST_FUNCTION_ARGS); } }; @@ -226,8 +226,8 @@ namespace boost { BOOST_FUNCTION_PARMS) { - MemberPtr* f = - reinterpret_cast(&function_obj_ptr.data); + MemberPtr* f = + reinterpret_cast(function_obj_ptr.data); BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS)); } }; @@ -322,7 +322,7 @@ namespace boost { /* Given the tag returned by get_function_tag, retrieve the actual invoker that will be used for the given function - object. + object. Each specialization contains an "apply" nested class template that accepts the function object, return type, function @@ -513,21 +513,21 @@ namespace boost { private: // Function pointers template - bool + bool assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag) const { this->clear(functor); if (f) { // should be a reinterpret cast, but some compilers insist // on giving cv-qualifiers to free functions - functor.func_ptr = reinterpret_cast(f); + functor.members.func_ptr = reinterpret_cast(f); return true; } else { return false; } } template - bool + bool assign_to_a(FunctionPtr f, function_buffer& functor, Allocator, function_ptr_tag) const { return assign_to(f,functor,function_ptr_tag()); @@ -566,13 +566,13 @@ namespace boost { // Function objects // Assign to a function object using the small object optimization template - void + void assign_functor(FunctionObj f, function_buffer& functor, mpl::true_) const { - new (reinterpret_cast(&functor.data)) FunctionObj(f); + new (reinterpret_cast(functor.data)) FunctionObj(f); } template - void + void assign_functor_a(FunctionObj f, function_buffer& functor, Allocator, mpl::true_) const { assign_functor(f,functor,mpl::true_()); @@ -580,13 +580,13 @@ namespace boost { // Assign to a function object allocated on the heap. template - void + void assign_functor(FunctionObj f, function_buffer& functor, mpl::false_) const { - functor.obj_ptr = new FunctionObj(f); + functor.members.obj_ptr = new FunctionObj(f); } template - void + void assign_functor_a(FunctionObj f, function_buffer& functor, Allocator a, mpl::false_) const { typedef functor_wrapper functor_wrapper_type; @@ -597,15 +597,15 @@ namespace boost { wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1); wrapper_allocator.construct(copy, functor_wrapper_type(f,a)); functor_wrapper_type* new_f = static_cast(copy); - functor.obj_ptr = new_f; + functor.members.obj_ptr = new_f; } template - bool + bool assign_to(FunctionObj f, function_buffer& functor, function_obj_tag) const { if (!boost::detail::function::has_empty_target(boost::addressof(f))) { - assign_functor(f, functor, + assign_functor(f, functor, mpl::bool_<(function_allows_small_object_optimization::value)>()); return true; } else { @@ -613,7 +613,7 @@ namespace boost { } } template - bool + bool assign_to_a(FunctionObj f, function_buffer& functor, Allocator a, function_obj_tag) const { if (!boost::detail::function::has_empty_target(boost::addressof(f))) { @@ -627,18 +627,18 @@ namespace boost { // Reference to a function object template - bool - assign_to(const reference_wrapper& f, + bool + assign_to(const reference_wrapper& f, function_buffer& functor, function_obj_ref_tag) const { - functor.obj_ref.obj_ptr = (void *)(f.get_pointer()); - functor.obj_ref.is_const_qualified = is_const::value; - functor.obj_ref.is_volatile_qualified = is_volatile::value; + functor.members.obj_ref.obj_ptr = (void *)(f.get_pointer()); + functor.members.obj_ref.is_const_qualified = is_const::value; + functor.members.obj_ref.is_volatile_qualified = is_volatile::value; return true; } template - bool - assign_to_a(const reference_wrapper& f, + bool + assign_to_a(const reference_wrapper& f, function_buffer& functor, Allocator, function_obj_ref_tag) const { return assign_to(f,functor,function_obj_ref_tag()); @@ -752,14 +752,14 @@ namespace boost { { this->assign_to_own(f); } - + #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_FUNCTION_FUNCTION(BOOST_FUNCTION_FUNCTION&& f) : function_base() { this->move_assign(f); } #endif - + ~BOOST_FUNCTION_FUNCTION() { clear(); } result_type operator()(BOOST_FUNCTION_PARMS) const @@ -840,12 +840,11 @@ namespace boost { BOOST_CATCH_END return *this; } - + #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES // Move assignment from another BOOST_FUNCTION_FUNCTION BOOST_FUNCTION_FUNCTION& operator=(BOOST_FUNCTION_FUNCTION&& f) { - if (&f == this) return *this; @@ -922,10 +921,10 @@ namespace boost { typedef typename boost::detail::function::get_function_tag::type tag; typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER get_invoker; typedef typename get_invoker:: - template apply handler_type; - + typedef typename handler_type::invoker_type invoker_type; typedef typename handler_type::manager_type manager_type; @@ -933,7 +932,7 @@ namespace boost { // static initialization. Otherwise, we will have a race // condition here in multi-threaded code. See // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/. - static const vtable_type stored_vtable = + static const vtable_type stored_vtable = { { &manager_type::manage }, &invoker_type::invoke }; if (stored_vtable.assign_to(f, functor)) { @@ -944,7 +943,7 @@ namespace boost { boost::detail::function::function_allows_small_object_optimization::value) value |= static_cast(0x01); vtable = reinterpret_cast(value); - } else + } else vtable = 0; } @@ -956,11 +955,11 @@ namespace boost { typedef typename boost::detail::function::get_function_tag::type tag; typedef boost::detail::function::BOOST_FUNCTION_GET_INVOKER get_invoker; typedef typename get_invoker:: - template apply_a handler_type; - + typedef typename handler_type::invoker_type invoker_type; typedef typename handler_type::manager_type manager_type; @@ -971,7 +970,7 @@ namespace boost { static const vtable_type stored_vtable = { { &manager_type::manage }, &invoker_type::invoke }; - if (stored_vtable.assign_to_a(f, functor, a)) { + if (stored_vtable.assign_to_a(f, functor, a)) { std::size_t value = reinterpret_cast(&stored_vtable.base); // coverity[pointless_expression]: suppress coverity warnings on apparant if(const). if (boost::has_trivial_copy_constructor::value && @@ -979,15 +978,15 @@ namespace boost { boost::detail::function::function_allows_small_object_optimization::value) value |= static_cast(0x01); vtable = reinterpret_cast(value); - } else + } else vtable = 0; } - // Moves the value from the specified argument to *this. If the argument - // has its function object allocated on the heap, move_assign will pass - // its buffer to *this, and set the argument's buffer pointer to NULL. - void move_assign(BOOST_FUNCTION_FUNCTION& f) - { + // Moves the value from the specified argument to *this. If the argument + // has its function object allocated on the heap, move_assign will pass + // its buffer to *this, and set the argument's buffer pointer to NULL. + void move_assign(BOOST_FUNCTION_FUNCTION& f) + { if (&f == this) return; @@ -1098,7 +1097,7 @@ public: function(self_type&& f): base_type(static_cast(f)){} function(base_type&& f): base_type(static_cast(f)){} #endif - + self_type& operator=(const self_type& f) { self_type(f).swap(*this); @@ -1111,7 +1110,7 @@ public: self_type(static_cast(f)).swap(*this); return *this; } -#endif +#endif template #ifndef BOOST_NO_SFINAE @@ -1140,14 +1139,14 @@ public: self_type(f).swap(*this); return *this; } - + #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES self_type& operator=(base_type&& f) { self_type(static_cast(f)).swap(*this); return *this; } -#endif +#endif }; #undef BOOST_FUNCTION_PARTIAL_SPEC @@ -1187,4 +1186,4 @@ public: #if defined(BOOST_MSVC) # pragma warning( pop ) -#endif +#endif diff --git a/lib/3rdParty/boost/boost/functional/forward_adapter.hpp b/lib/3rdParty/boost/boost/functional/forward_adapter.hpp index 796abd2..6023fc2 100644 --- a/lib/3rdParty/boost/boost/functional/forward_adapter.hpp +++ b/lib/3rdParty/boost/boost/functional/forward_adapter.hpp @@ -144,8 +144,30 @@ namespace boost : boost::result_of< BOOST_DEDUCED_TYPENAME c::t() > { }; - template< class MD, class F, class FC > - struct forward_adapter_impl + // WHen operator()() doesn't have any parameters, it can't + // be templatized and can't use SFINAE, so intead use class + // template parameter SFINAE to decide whether to instantiate it. + + template + struct forward_adapter_sfinae + { + typedef T type; + }; + + // This is the fallback for when there isn't an operator()(), + // need to create an operator() that will never instantiate + // so that using parent::operator() will work okay. + template< class MD, class F, class FC, class Enable = void> + struct forward_adapter_impl_zero + { + template struct never_instantiate {}; + template + typename never_instantiate::type operator()(T) const {} + }; + + template< class MD, class F, class FC> + struct forward_adapter_impl_zero::type>::type> { inline typename boost::result_of< FC() >::type operator()() const @@ -158,6 +180,13 @@ namespace boost { return static_cast(this)->target_function()(); } + }; + + template< class MD, class F, class FC > + struct forward_adapter_impl + : forward_adapter_impl_zero + { + using forward_adapter_impl_zero::operator(); // closing brace gets generated by preprocessing code, below diff --git a/lib/3rdParty/boost/boost/functional/hash/detail/hash_float.hpp b/lib/3rdParty/boost/boost/functional/hash/detail/hash_float.hpp index eb9264f..9fb8168 100644 --- a/lib/3rdParty/boost/boost/functional/hash/detail/hash_float.hpp +++ b/lib/3rdParty/boost/boost/functional/hash/detail/hash_float.hpp @@ -179,7 +179,7 @@ namespace boost hash_float_combine(seed, part); } - hash_float_combine(seed, exp); + hash_float_combine(seed, static_cast(exp)); return seed; } diff --git a/lib/3rdParty/boost/boost/functional/hash/hash.hpp b/lib/3rdParty/boost/boost/functional/hash/hash.hpp index 2fb9f21..5bba408 100644 --- a/lib/3rdParty/boost/boost/functional/hash/hash.hpp +++ b/lib/3rdParty/boost/boost/functional/hash/hash.hpp @@ -168,10 +168,10 @@ namespace boost template inline std::size_t hash_value_signed(T val) { - const int size_t_bits = std::numeric_limits::digits; + const unsigned int size_t_bits = std::numeric_limits::digits; // ceiling(std::numeric_limits::digits / size_t_bits) - 1 const int length = (std::numeric_limits::digits - 1) - / size_t_bits; + / static_cast(size_t_bits); std::size_t seed = 0; T positive = val < 0 ? -1 - val : val; @@ -189,10 +189,10 @@ namespace boost template inline std::size_t hash_value_unsigned(T val) { - const int size_t_bits = std::numeric_limits::digits; + const unsigned int size_t_bits = std::numeric_limits::digits; // ceiling(std::numeric_limits::digits / size_t_bits) - 1 const int length = (std::numeric_limits::digits - 1) - / size_t_bits; + / static_cast(size_t_bits); std::size_t seed = 0; @@ -212,7 +212,6 @@ namespace boost seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2); } - template inline void hash_combine_impl(boost::uint32_t& h1, boost::uint32_t k1) { @@ -229,16 +228,15 @@ namespace boost } -// Don't define 64-bit hash combine on platforms with 64 bit integers, +// Don't define 64-bit hash combine on platforms without 64 bit integers, // and also not for 32-bit gcc as it warns about the 64-bit constant. #if !defined(BOOST_NO_INT64_T) && \ !(defined(__GNUC__) && ULONG_MAX == 0xffffffff) - template inline void hash_combine_impl(boost::uint64_t& h, boost::uint64_t k) { - const uint64_t m = UINT64_C(0xc6a4a7935bd1e995); + const boost::uint64_t m = UINT64_C(0xc6a4a7935bd1e995); const int r = 47; k *= m; @@ -247,6 +245,10 @@ namespace boost h ^= k; h *= m; + + // Completely arbitrary number, to prevent 0's + // from hashing to 0. + h += 0xe6546b64; } #endif // BOOST_NO_INT64_T @@ -454,7 +456,7 @@ namespace boost BOOST_HASH_SPECIALIZE(long double) BOOST_HASH_SPECIALIZE_REF(std::string) -#if !defined(BOOST_NO_STD_WSTRING) +#if !defined(BOOST_NO_STD_WSTRING) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) BOOST_HASH_SPECIALIZE_REF(std::wstring) #endif diff --git a/lib/3rdParty/boost/boost/functional/lightweight_forward_adapter.hpp b/lib/3rdParty/boost/boost/functional/lightweight_forward_adapter.hpp index 637aa9e..2706d29 100644 --- a/lib/3rdParty/boost/boost/functional/lightweight_forward_adapter.hpp +++ b/lib/3rdParty/boost/boost/functional/lightweight_forward_adapter.hpp @@ -149,8 +149,31 @@ namespace boost : boost::result_of< BOOST_DEDUCED_TYPENAME c::t() > { }; - template< class MD, class F, class FC > - struct lightweight_forward_adapter_impl + // When operator() doesn't have any parameters, it can't + // be templatized and can't use SFINAE, so intead use class + // template parameter SFINAE to decide whether to instantiate it. + + template + struct lightweight_forward_adapter_sfinae + { + typedef T type; + }; + + // This is the fallback for when there isn't an operator()(), + // need to create an operator() that will never instantiate + // so that using parent::operator() will work okay. + template< class MD, class F, class FC, class Enable = void> + struct lightweight_forward_adapter_impl_zero + : lightweight_forward_adapter_result + { + template struct never_instantiate {}; + template + typename never_instantiate::type operator()(T) const {} + }; + + template< class MD, class F, class FC> + struct lightweight_forward_adapter_impl_zero::type>::type> : lightweight_forward_adapter_result { inline typename boost::result_of< FC() >::type @@ -166,6 +189,12 @@ namespace boost } }; + template< class MD, class F, class FC > + struct lightweight_forward_adapter_impl + : lightweight_forward_adapter_impl_zero + { + }; + # define BOOST_PP_FILENAME_1 \ # define BOOST_PP_ITERATION_LIMITS \ diff --git a/lib/3rdParty/boost/boost/move/adl_move_swap.hpp b/lib/3rdParty/boost/boost/move/adl_move_swap.hpp index 2a010cd..d6906a4 100644 --- a/lib/3rdParty/boost/boost/move/adl_move_swap.hpp +++ b/lib/3rdParty/boost/boost/move/adl_move_swap.hpp @@ -22,9 +22,8 @@ //Based on Boost.Core's swap. //Many thanks to Steven Watanabe, Joseph Gauterin and Niels Dekker. - -#include #include //for std::size_t +#include //forceinline //Try to avoid including , as it's quite big #if defined(_MSC_VER) && defined(BOOST_DINKUMWARE_STDLIB) @@ -156,7 +155,7 @@ struct and_op_not {}; template -void swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c::value>::type* = 0) +BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c::value>::type* = 0) { //use std::swap if argument dependent lookup fails //Use using directive ("using namespace xxx;") instead as some older compilers @@ -166,14 +165,14 @@ void swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c -void swap_proxy(T& x, T& y +BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y , typename boost::move_detail::enable_if< and_op_not_impl , boost_move_member_swap::has_member_swap > >::type* = 0) { T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t); } template -void swap_proxy(T& x, T& y +BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y , typename boost::move_detail::enable_if< and_op_impl< boost::move_detail::has_move_emulation_enabled_impl , boost_move_member_swap::has_member_swap > >::type* = 0) @@ -186,7 +185,7 @@ void swap_proxy(T& x, T& y namespace boost_move_adl_swap{ template -void swap_proxy(T& x, T& y) +BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y) { using std::swap; swap(x, y); @@ -223,11 +222,45 @@ namespace boost{ //! - Otherwise a move-based swap is called, equivalent to: //! T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t);. template -void adl_move_swap(T& x, T& y) +BOOST_MOVE_FORCEINLINE void adl_move_swap(T& x, T& y) { ::boost_move_adl_swap::swap_proxy(x, y); } +//! Exchanges elements between range [first1, last1) and another range starting at first2 +//! using boost::adl_move_swap. +//! +//! Parameters: +//! first1, last1 - the first range of elements to swap +//! first2 - beginning of the second range of elements to swap +//! +//! Type requirements: +//! - ForwardIt1, ForwardIt2 must meet the requirements of ForwardIterator. +//! - The types of dereferenced ForwardIt1 and ForwardIt2 must meet the +//! requirements of Swappable +//! +//! Return value: Iterator to the element past the last element exchanged in the range +//! beginning with first2. +template +ForwardIt2 adl_move_swap_ranges(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2) +{ + while (first1 != last1) { + ::boost::adl_move_swap(*first1, *first2); + ++first1; + ++first2; + } + return first2; +} + +template +BidirIt2 adl_move_swap_ranges_backward(BidirIt1 first1, BidirIt1 last1, BidirIt2 last2) +{ + while (first1 != last1) { + ::boost::adl_move_swap(*(--last1), *(--last2)); + } + return last2; +} + } //namespace boost{ #endif //#ifndef BOOST_MOVE_ADL_MOVE_SWAP_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/adaptive_merge.hpp b/lib/3rdParty/boost/boost/move/algo/adaptive_merge.hpp new file mode 100644 index 0000000..0233b23 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/adaptive_merge.hpp @@ -0,0 +1,67 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_MOVE_ADAPTIVE_MERGE_HPP +#define BOOST_MOVE_ADAPTIVE_MERGE_HPP + +#include +#include + +namespace boost { +namespace movelib { + +//! Effects: Merges two consecutive sorted ranges [first, middle) and [middle, last) +//! into one sorted range [first, last) according to the given comparison function comp. +//! The algorithm is stable (if there are equivalent elements in the original two ranges, +//! the elements from the first range (preserving their original order) precede the elements +//! from the second range (preserving their original order). +//! +//! Requires: +//! - RandIt must meet the requirements of ValueSwappable and RandomAccessIterator. +//! - The type of dereferenced RandIt must meet the requirements of MoveAssignable and MoveConstructible. +//! +//! Parameters: +//! - first: the beginning of the first sorted range. +//! - middle: the end of the first sorted range and the beginning of the second +//! - last: the end of the second sorted range +//! - comp: comparison function object which returns true if the first argument is is ordered before the second. +//! - uninitialized, uninitialized_len: raw storage starting on "uninitialized", able to hold "uninitialized_len" +//! elements of type iterator_traits::value_type. Maximum performance is achieved when uninitialized_len +//! is min(std::distance(first, middle), std::distance(middle, last)). +//! +//! Throws: If comp throws or the move constructor, move assignment or swap of the type +//! of dereferenced RandIt throws. +//! +//! Complexity: Always K x O(N) comparisons and move assignments/constructors/swaps. +//! Constant factor for comparisons and data movement is minimized when uninitialized_len +//! is min(std::distance(first, middle), std::distance(middle, last)). +//! Pretty good enough performance is achieved when uninitialized_len is +//! ceil(sqrt(std::distance(first, last)))*2. +//! +//! Caution: Experimental implementation, not production-ready. +template +void adaptive_merge( RandIt first, RandIt middle, RandIt last, Compare comp + , typename iterator_traits::value_type* uninitialized = 0 + , std::size_t uninitialized_len = 0) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + + ::boost::movelib::detail_adaptive::adaptive_xbuf xbuf(uninitialized, uninitialized_len); + ::boost::movelib::detail_adaptive::adaptive_merge_impl(first, size_type(middle - first), size_type(last - middle), comp, xbuf); +} + +} //namespace movelib { +} //namespace boost { + +#include + +#endif //#define BOOST_MOVE_ADAPTIVE_MERGE_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/adaptive_sort.hpp b/lib/3rdParty/boost/boost/move/algo/adaptive_sort.hpp new file mode 100644 index 0000000..6b5586e --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/adaptive_sort.hpp @@ -0,0 +1,63 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_MOVE_ADAPTIVE_SORT_HPP +#define BOOST_MOVE_ADAPTIVE_SORT_HPP + +#include +#include + +namespace boost { +namespace movelib { + +//! Effects: Sorts the elements in the range [first, last) in ascending order according +//! to comparison functor "comp". The sort is stable (order of equal elements +//! is guaranteed to be preserved). Performance is improved if additional raw storage is +//! provided. +//! +//! Requires: +//! - RandIt must meet the requirements of ValueSwappable and RandomAccessIterator. +//! - The type of dereferenced RandIt must meet the requirements of MoveAssignable and MoveConstructible. +//! +//! Parameters: +//! - first, last: the range of elements to sort +//! - comp: comparison function object which returns true if the first argument is is ordered before the second. +//! - uninitialized, uninitialized_len: raw storage starting on "uninitialized", able to hold "uninitialized_len" +//! elements of type iterator_traits::value_type. Maximum performance is achieved when uninitialized_len +//! is ceil(std::distance(first, last)/2). +//! +//! Throws: If comp throws or the move constructor, move assignment or swap of the type +//! of dereferenced RandIt throws. +//! +//! Complexity: Always K x O(Nxlog(N)) comparisons and move assignments/constructors/swaps. +//! Comparisons are close to minimum even with no additional memory. Constant factor for data movement is minimized +//! when uninitialized_len is ceil(std::distance(first, last)/2). Pretty good enough performance is achieved when +//! ceil(sqrt(std::distance(first, last)))*2. +//! +//! Caution: Experimental implementation, not production-ready. +template +void adaptive_sort( RandIt first, RandIt last, Compare comp + , typename iterator_traits::value_type* uninitialized = 0 + , std::size_t uninitialized_len = 0) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + + ::boost::movelib::detail_adaptive::adaptive_xbuf xbuf(uninitialized, uninitialized_len); + ::boost::movelib::detail_adaptive::adaptive_sort_impl(first, size_type(last - first), comp, xbuf); +} + +} //namespace movelib { +} //namespace boost { + +#include + +#endif //#define BOOST_MOVE_ADAPTIVE_SORT_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/detail/adaptive_sort_merge.hpp b/lib/3rdParty/boost/boost/move/algo/detail/adaptive_sort_merge.hpp new file mode 100644 index 0000000..63b3f45 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/detail/adaptive_sort_merge.hpp @@ -0,0 +1,2437 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// +// Stable sorting that works in O(N*log(N)) worst time +// and uses O(1) extra memory +// +////////////////////////////////////////////////////////////////////////////// +// +// The main idea of the adaptive_sort algorithm was developed by Andrey Astrelin +// and explained in the article from the russian collaborative blog +// Habrahabr (http://habrahabr.ru/post/205290/). The algorithm is based on +// ideas from B-C. Huang and M. A. Langston explained in their article +// "Fast Stable Merging and Sorting in Constant Extra Space (1989-1992)" +// (http://comjnl.oxfordjournals.org/content/35/6/643.full.pdf). +// +// This implementation by Ion Gaztanaga uses previous ideas with additional changes: +// +// - Use of GCD-based rotation. +// - Non power of two buffer-sizes. +// - Tries to find sqrt(len)*2 unique keys, so that the merge sort +// phase can form up to sqrt(len)*4 segments if enough keys are found. +// - The merge-sort phase can take advantage of external memory to +// save some additional combination steps. +// - Combination phase: Blocks are selection sorted and merged in parallel. +// - The combination phase is performed alternating merge to left and merge +// to right phases minimizing swaps due to internal buffer repositioning. +// - When merging blocks special optimizations are made to avoid moving some +// elements twice. +// +// The adaptive_merge algorithm was developed by Ion Gaztanaga reusing some parts +// from the sorting algorithm and implementing an additional block merge algorithm +// without moving elements to left or right. +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_MOVE_ADAPTIVE_SORT_MERGE_HPP +#define BOOST_MOVE_ADAPTIVE_SORT_MERGE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_MOVE_ADAPTIVE_SORT_STATS + #define BOOST_MOVE_ADAPTIVE_SORT_PRINT(STR, L) \ + print_stats(STR, L)\ + // +#else + #define BOOST_MOVE_ADAPTIVE_SORT_PRINT(STR, L) +#endif + +#ifdef BOOST_MOVE_ADAPTIVE_SORT_INVARIANTS + #define BOOST_MOVE_ADAPTIVE_SORT_INVARIANT BOOST_ASSERT +#else + #define BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(L) +#endif + + + +namespace boost { +namespace movelib { + +namespace detail_adaptive { + +static const std::size_t AdaptiveSortInsertionSortThreshold = 16; +//static const std::size_t AdaptiveSortInsertionSortThreshold = 4; +BOOST_STATIC_ASSERT((AdaptiveSortInsertionSortThreshold&(AdaptiveSortInsertionSortThreshold-1)) == 0); + +#if defined BOOST_HAS_INTPTR_T + typedef ::boost::uintptr_t uintptr_t; +#else + typedef std::size_t uintptr_t; +#endif + +template +const T &min_value(const T &a, const T &b) +{ + return a < b ? a : b; +} + +template +const T &max_value(const T &a, const T &b) +{ + return a > b ? a : b; +} + +template +bool is_sorted(ForwardIt const first, ForwardIt last, Pred pred) +{ + if (first != last) { + ForwardIt next = first, cur(first); + while (++next != last) { + if (pred(*next, *cur)) + return false; + cur = next; + } + } + return true; +} + +#if defined(BOOST_MOVE_ADAPTIVE_SORT_INVARIANTS) + +bool is_sorted(::order_perf_type *first, ::order_perf_type *last, ::order_type_less) +{ + if (first != last) { + const order_perf_type *next = first, *cur(first); + while (++next != last) { + if (!(cur->key < next->key || (cur->key == next->key && cur->val < next->val))) + return false; + cur = next; + } + } + return true; +} + +#endif //BOOST_MOVE_ADAPTIVE_SORT_INVARIANTS + +template +bool is_sorted_and_unique(ForwardIt first, ForwardIt last, Pred pred) +{ + if (first != last) { + ForwardIt next = first; + while (++next != last) { + if (!pred(*first, *next)) + return false; + first = next; + } + } + return true; +} + +template +typename iterator_traits::size_type + count_if_with(ForwardIt first, ForwardIt last, Pred pred, const V &v) +{ + typedef typename iterator_traits::size_type size_type; + size_type count = 0; + while(first != last) { + count += static_cast(0 != pred(*first, v)); + ++first; + } + return count; +} + +template +class adaptive_xbuf +{ + adaptive_xbuf(const adaptive_xbuf &); + adaptive_xbuf & operator=(const adaptive_xbuf &); + + public: + typedef T* iterator; + + adaptive_xbuf() + : m_ptr(0), m_size(0), m_capacity(0) + {} + + adaptive_xbuf(T *raw_memory, std::size_t capacity) + : m_ptr(raw_memory), m_size(0), m_capacity(capacity) + {} + + template + void move_assign(RandIt first, std::size_t n) + { + if(n <= m_size){ + boost::move(first, first+n, m_ptr); + std::size_t size = m_size; + while(size-- != n){ + m_ptr[size].~T(); + } + m_size = n; + } + else{ + T *result = boost::move(first, first+m_size, m_ptr); + boost::uninitialized_move(first+m_size, first+n, result); + m_size = n; + } + } + + template + void push_back(RandIt first, std::size_t n) + { + BOOST_ASSERT(m_capacity - m_size >= n); + boost::uninitialized_move(first, first+n, m_ptr+m_size); + m_size += n; + } + + template + iterator add(RandIt it) + { + BOOST_ASSERT(m_size < m_capacity); + T * p_ret = m_ptr + m_size; + ::new(p_ret) T(::boost::move(*it)); + ++m_size; + return p_ret; + } + + template + void insert(iterator pos, RandIt it) + { + if(pos == (m_ptr + m_size)){ + this->add(it); + } + else{ + this->add(m_ptr+m_size-1); + //m_size updated + boost::move_backward(pos, m_ptr+m_size-2, m_ptr+m_size-1); + *pos = boost::move(*it); + } + } + + void set_size(std::size_t size) + { + m_size = size; + } + + void shrink_to_fit(std::size_t const size) + { + if(m_size > size){ + for(std::size_t szt_i = size; szt_i != m_size; ++szt_i){ + m_ptr[szt_i].~T(); + } + m_size = size; + } + } + + void initialize_until(std::size_t const size, T &t) + { + BOOST_ASSERT(m_size < m_capacity); + if(m_size < size){ + ::new((void*)&m_ptr[m_size]) T(::boost::move(t)); + ++m_size; + for(; m_size != size; ++m_size){ + ::new((void*)&m_ptr[m_size]) T(::boost::move(m_ptr[m_size-1])); + } + t = ::boost::move(m_ptr[m_size-1]); + } + } + + template + bool supports_aligned_trailing(std::size_t size, std::size_t trail_count) const + { + if(this->data()){ + uintptr_t u_addr_sz = uintptr_t(this->data()+size); + uintptr_t u_addr_cp = uintptr_t(this->data()+this->capacity()); + u_addr_sz = ((u_addr_sz + sizeof(U)-1)/sizeof(U))*sizeof(U); + + return (u_addr_cp >= u_addr_sz) && ((u_addr_cp - u_addr_sz)/sizeof(U) >= trail_count); + } + return false; + } + + template + U *aligned_trailing() const + { + return this->aligned_trailing(this->size()); + } + + template + U *aligned_trailing(std::size_t pos) const + { + uintptr_t u_addr = uintptr_t(this->data()+pos); + u_addr = ((u_addr + sizeof(U)-1)/sizeof(U))*sizeof(U); + return (U*)u_addr; + } + + ~adaptive_xbuf() + { + this->clear(); + } + + std::size_t capacity() const + { return m_capacity; } + + iterator data() const + { return m_ptr; } + + iterator end() const + { return m_ptr+m_size; } + + std::size_t size() const + { return m_size; } + + bool empty() const + { return !m_size; } + + void clear() + { + this->shrink_to_fit(0u); + } + + private: + T *m_ptr; + std::size_t m_size; + std::size_t m_capacity; +}; + +template +class range_xbuf +{ + range_xbuf(const range_xbuf &); + range_xbuf & operator=(const range_xbuf &); + + public: + typedef typename iterator_traits::size_type size_type; + typedef Iterator iterator; + + range_xbuf(Iterator first, Iterator last) + : m_first(first), m_last(first), m_cap(last) + {} + + template + void move_assign(RandIt first, std::size_t n) + { + BOOST_ASSERT(size_type(n) <= size_type(m_cap-m_first)); + m_last = Op()(forward_t(), first, first+n, m_first); + } + + ~range_xbuf() + {} + + std::size_t capacity() const + { return m_cap-m_first; } + + Iterator data() const + { return m_first; } + + Iterator end() const + { return m_last; } + + std::size_t size() const + { return m_last-m_first; } + + bool empty() const + { return m_first == m_last; } + + void clear() + { + m_last = m_first; + } + + template + iterator add(RandIt it) + { + Iterator pos(m_last); + *pos = boost::move(*it); + ++m_last; + return pos; + } + + void set_size(std::size_t size) + { + m_last = m_first; + m_last += size; + } + + private: + Iterator const m_first; + Iterator m_last; + Iterator const m_cap; +}; + + +template +RandIt skip_until_merge + ( RandIt first1, RandIt const last1 + , const typename iterator_traits::value_type &next_key, Compare comp) +{ + while(first1 != last1 && !comp(next_key, *first1)){ + ++first1; + } + return first1; +} + + +template +RandItB op_buffered_partial_merge_to_range1_and_buffer + ( RandIt1 first1, RandIt1 const last1 + , RandIt2 &rfirst2, RandIt2 const last2 + , RandItB &rfirstb, Compare comp, Op op ) +{ + RandItB firstb = rfirstb; + RandItB lastb = firstb; + RandIt2 first2 = rfirst2; + + //Move to buffer while merging + //Three way moves need less moves when op is swap_op so use it + //when merging elements from range2 to the destination occupied by range1 + if(first1 != last1 && first2 != last2){ + op(three_way_t(), first2++, first1++, lastb++); + + while(true){ + if(first1 == last1){ + break; + } + if(first2 == last2){ + lastb = op(forward_t(), first1, last1, firstb); + break; + } + op(three_way_t(), comp(*first2, *firstb) ? first2++ : firstb++, first1++, lastb++); + } + rfirst2 = first2; + rfirstb = firstb; + } + + return lastb; +} + +template +void swap_and_update_key + ( bool is_next_far_away + , RandItKeys const key_next + , RandItKeys const key_range2 + , RandItKeys &key_mid + , RandIt const begin + , RandIt const end + , RandIt const with) +{ + if(is_next_far_away){ + ::boost::adl_move_swap_ranges(begin, end, with); + ::boost::adl_move_swap(*key_next, *key_range2); + if(key_next == key_mid){ + key_mid = key_range2; + } + else if(key_mid == key_range2){ + key_mid = key_next; + } + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// MERGE BUFFERLESS +// +/////////////////////////////////////////////////////////////////////////////// + +// [first1, last1) merge [last1,last2) -> [first1,last2) +template +RandIt partial_merge_bufferless_impl + (RandIt first1, RandIt last1, RandIt const last2, bool *const pis_range1_A, Compare comp) +{ + if(last1 == last2){ + return first1; + } + bool const is_range1_A = *pis_range1_A; + if(first1 != last1 && comp(*last1, last1[-1])){ + do{ + RandIt const old_last1 = last1; + last1 = lower_bound(last1, last2, *first1, comp); + first1 = rotate_gcd(first1, old_last1, last1);//old_last1 == last1 supported + if(last1 == last2){ + return first1; + } + do{ + ++first1; + } while(last1 != first1 && !comp(*last1, *first1) ); + } while(first1 != last1); + } + *pis_range1_A = !is_range1_A; + return last1; +} + +// [first1, last1) merge [last1,last2) -> [first1,last2) +template +RandIt partial_merge_bufferless + (RandIt first1, RandIt last1, RandIt const last2, bool *const pis_range1_A, Compare comp) +{ + return *pis_range1_A ? partial_merge_bufferless_impl(first1, last1, last2, pis_range1_A, comp) + : partial_merge_bufferless_impl(first1, last1, last2, pis_range1_A, antistable(comp)); +} + +template +static SizeType needed_keys_count(SizeType n_block_a, SizeType n_block_b) +{ + return n_block_a + n_block_b; +} + +template +typename iterator_traits::size_type + find_next_block + ( RandItKeys key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const ix_first_block + , typename iterator_traits::size_type const ix_last_block + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + typedef typename iterator_traits::value_type key_type; + BOOST_ASSERT(ix_first_block <= ix_last_block); + size_type ix_min_block = 0u; + for (size_type szt_i = ix_first_block; szt_i < ix_last_block; ++szt_i) { + const value_type &min_val = first[ix_min_block*l_block]; + const value_type &cur_val = first[szt_i*l_block]; + const key_type &min_key = key_first[ix_min_block]; + const key_type &cur_key = key_first[szt_i]; + + bool const less_than_minimum = comp(cur_val, min_val) || + (!comp(min_val, cur_val) && key_comp(cur_key, min_key)); + + if (less_than_minimum) { + ix_min_block = szt_i; + } + } + return ix_min_block; +} + +template +void merge_blocks_bufferless + ( RandItKeys key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const l_irreg1 + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + size_type const key_count = needed_keys_count(n_block_a, n_block_b); (void)key_count; + //BOOST_ASSERT(n_block_a || n_block_b); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted_and_unique(key_first, key_first + key_count, key_comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_b || n_block_a == count_if_with(key_first, key_first + key_count, key_comp, key_first[n_block_a])); + + size_type n_bef_irreg2 = 0; + bool l_irreg_pos_count = true; + RandItKeys key_mid(key_first + n_block_a); + RandIt const first_irr2 = first + l_irreg1 + (n_block_a+n_block_b)*l_block; + RandIt const last_irr2 = first_irr2 + l_irreg2; + + { //Selection sort blocks + size_type n_block_left = n_block_b + n_block_a; + RandItKeys key_range2(key_first); + + size_type min_check = n_block_a == n_block_left ? 0u : n_block_a; + size_type max_check = min_value(min_check+1, n_block_left); + for (RandIt f = first+l_irreg1; n_block_left; --n_block_left, ++key_range2, f += l_block, min_check -= min_check != 0, max_check -= max_check != 0) { + size_type const next_key_idx = find_next_block(key_range2, key_comp, f, l_block, min_check, max_check, comp); + RandItKeys const key_next(key_range2 + next_key_idx); + max_check = min_value(max_value(max_check, next_key_idx+2), n_block_left); + + RandIt const first_min = f + next_key_idx*l_block; + + //Check if irregular b block should go here. + //If so, break to the special code handling the irregular block + if (l_irreg_pos_count && l_irreg2 && comp(*first_irr2, *first_min)){ + l_irreg_pos_count = false; + } + n_bef_irreg2 += l_irreg_pos_count; + + swap_and_update_key(next_key_idx != 0, key_next, key_range2, key_mid, f, f + l_block, first_min); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(f, f+l_block, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first_min, first_min + l_block, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT((f == (first+l_irreg1)) || !comp(*f, *(f-l_block))); + } + } + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first+l_irreg1+n_bef_irreg2*l_block, first_irr2, comp)); + + RandIt first1 = first; + RandIt last1 = first+l_irreg1; + RandItKeys const key_end (key_first+n_bef_irreg2); + bool is_range1_A = true; + + for( ; key_first != key_end; ++key_first){ + bool is_range2_A = key_mid == (key_first+key_count) || key_comp(*key_first, *key_mid); + first1 = is_range1_A == is_range2_A + ? last1 : partial_merge_bufferless(first1, last1, last1 + l_block, &is_range1_A, comp); + last1 += l_block; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, first1, comp)); + } + + merge_bufferless(is_range1_A ? first1 : last1, first_irr2, last_irr2, comp); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, last_irr2, comp)); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// BUFFERED MERGE +// +/////////////////////////////////////////////////////////////////////////////// +template +void op_buffered_merge + ( RandIt first, RandIt const middle, RandIt last + , Compare comp, Op op + , Buf &xbuf) +{ + if(first != middle && middle != last && comp(*middle, middle[-1])){ + typedef typename iterator_traits::size_type size_type; + size_type const len1 = size_type(middle-first); + size_type const len2 = size_type(last-middle); + if(len1 <= len2){ + first = upper_bound(first, middle, *middle, comp); + xbuf.move_assign(first, size_type(middle-first)); + op_merge_with_right_placed + (xbuf.data(), xbuf.end(), first, middle, last, comp, op); + } + else{ + last = lower_bound(middle, last, middle[-1], comp); + xbuf.move_assign(middle, size_type(last-middle)); + op_merge_with_left_placed + (first, middle, last, xbuf.data(), xbuf.end(), comp, op); + } + } +} + +template +void buffered_merge + ( RandIt first, RandIt const middle, RandIt last + , Compare comp + , adaptive_xbuf::value_type> &xbuf) +{ + op_buffered_merge(first, middle, last, comp, move_op(), xbuf); +} + +// Complexity: 2*distance(first, last)+max_collected^2/2 +// +// Tries to collect at most n_keys unique elements from [first, last), +// in the begining of the range, and ordered according to comp +// +// Returns the number of collected keys +template +typename iterator_traits::size_type + collect_unique + ( RandIt const first, RandIt const last + , typename iterator_traits::size_type const max_collected, Compare comp + , adaptive_xbuf::value_type> & xbuf) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + size_type h = 0; + if(max_collected){ + ++h; // first key is always here + RandIt h0 = first; + RandIt u = first; ++u; + RandIt search_end = u; + + if(xbuf.capacity() >= max_collected){ + value_type *const ph0 = xbuf.add(first); + while(u != last && h < max_collected){ + value_type * const r = lower_bound(ph0, xbuf.end(), *u, comp); + //If key not found add it to [h, h+h0) + if(r == xbuf.end() || comp(*u, *r) ){ + RandIt const new_h0 = boost::move(search_end, u, h0); + search_end = u; + ++search_end; + ++h; + xbuf.insert(r, u); + h0 = new_h0; + } + ++u; + } + boost::move_backward(first, h0, h0+h); + boost::move(xbuf.data(), xbuf.end(), first); + } + else{ + while(u != last && h < max_collected){ + RandIt const r = lower_bound(h0, search_end, *u, comp); + //If key not found add it to [h, h+h0) + if(r == search_end || comp(*u, *r) ){ + RandIt const new_h0 = rotate_gcd(h0, search_end, u); + search_end = u; + ++search_end; + ++h; + rotate_gcd(r+(new_h0-h0), u, search_end); + h0 = new_h0; + } + ++u; + } + rotate_gcd(first, h0, h0+h); + } + } + return h; +} + +template +Unsigned floor_sqrt(Unsigned const n) +{ + Unsigned x = n; + Unsigned y = x/2 + (x&1); + while (y < x){ + x = y; + y = (x + n / x)/2; + } + return x; +} + +template +Unsigned ceil_sqrt(Unsigned const n) +{ + Unsigned r = floor_sqrt(n); + return r + Unsigned((n%r) != 0); +} + +template +Unsigned floor_merge_multiple(Unsigned const n, Unsigned &base, Unsigned &pow) +{ + Unsigned s = n; + Unsigned p = 0; + while(s > AdaptiveSortInsertionSortThreshold){ + s /= 2; + ++p; + } + base = s; + pow = p; + return s << p; +} + +template +Unsigned ceil_merge_multiple(Unsigned const n, Unsigned &base, Unsigned &pow) +{ + Unsigned fm = floor_merge_multiple(n, base, pow); + + if(fm != n){ + if(base < AdaptiveSortInsertionSortThreshold){ + ++base; + } + else{ + base = AdaptiveSortInsertionSortThreshold/2 + 1; + ++pow; + } + } + return base << pow; +} + +template +Unsigned ceil_sqrt_multiple(Unsigned const n, Unsigned *pbase = 0) +{ + Unsigned const r = ceil_sqrt(n); + Unsigned pow = 0; + Unsigned base = 0; + Unsigned const res = ceil_merge_multiple(r, base, pow); + if(pbase) *pbase = base; + return res; +} + +struct less +{ + template + bool operator()(const T &l, const T &r) + { return l < r; } +}; + +/////////////////////////////////////////////////////////////////////////////// +// +// MERGE BLOCKS +// +/////////////////////////////////////////////////////////////////////////////// + +//#define ADAPTIVE_SORT_MERGE_SLOW_STABLE_SORT_IS_NLOGN + +#if defined ADAPTIVE_SORT_MERGE_SLOW_STABLE_SORT_IS_NLOGN +template +void slow_stable_sort + ( RandIt const first, RandIt const last, Compare comp) +{ + boost::movelib::inplace_stable_sort(first, last, comp); +} + +#else //ADAPTIVE_SORT_MERGE_SLOW_STABLE_SORT_IS_NLOGN + +template +void slow_stable_sort + ( RandIt const first, RandIt const last, Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + size_type L = size_type(last - first); + { //Use insertion sort to merge first elements + size_type m = 0; + while((L - m) > size_type(AdaptiveSortInsertionSortThreshold)){ + insertion_sort(first+m, first+m+size_type(AdaptiveSortInsertionSortThreshold), comp); + m += AdaptiveSortInsertionSortThreshold; + } + insertion_sort(first+m, last, comp); + } + + size_type h = AdaptiveSortInsertionSortThreshold; + for(bool do_merge = L > h; do_merge; h*=2){ + do_merge = (L - h) > h; + size_type p0 = 0; + if(do_merge){ + size_type const h_2 = 2*h; + while((L-p0) > h_2){ + merge_bufferless(first+p0, first+p0+h, first+p0+h_2, comp); + p0 += h_2; + } + } + if((L-p0) > h){ + merge_bufferless(first+p0, first+p0+h, last, comp); + } + } +} + +#endif //ADAPTIVE_SORT_MERGE_SLOW_STABLE_SORT_IS_NLOGN + +//Returns new l_block and updates use_buf +template +Unsigned lblock_for_combine + (Unsigned const l_block, Unsigned const n_keys, Unsigned const l_data, bool &use_buf) +{ + BOOST_ASSERT(l_data > 1); + + //We need to guarantee lblock >= l_merged/(n_keys/2) keys for the combination. + //We have at least 4 keys guaranteed (which are the minimum to merge 2 ranges) + //If l_block != 0, then n_keys is already enough to merge all blocks in all + //phases as we've found all needed keys for that buffer and length before. + //If l_block == 0 then see if half keys can be used as buffer and the rest + //as keys guaranteeing that n_keys >= (2*l_merged)/lblock = + if(!l_block){ + //If l_block == 0 then n_keys is power of two + //(guaranteed by build_params(...)) + BOOST_ASSERT(n_keys >= 4); + //BOOST_ASSERT(0 == (n_keys &(n_keys-1))); + + //See if half keys are at least 4 and if half keys fulfill + Unsigned const new_buf = n_keys/2; + Unsigned const new_keys = n_keys-new_buf; + use_buf = new_keys >= 4 && new_keys >= l_data/new_buf; + if(use_buf){ + return new_buf; + } + else{ + return l_data/n_keys; + } + } + else{ + use_buf = true; + return l_block; + } +} + +template +void stable_sort( RandIt first, RandIt last, Compare comp, XBuf & xbuf) +{ + typedef typename iterator_traits::size_type size_type; + size_type const len = size_type(last - first); + size_type const half_len = len/2 + (len&1); + if(std::size_t(xbuf.capacity() - xbuf.size()) >= half_len) { + merge_sort(first, last, comp, xbuf.data()+xbuf.size()); + } + else{ + slow_stable_sort(first, last, comp); + } +} + +template +void initialize_keys( RandIt first, RandIt last + , Comp comp + , XBuf & xbuf) +{ + stable_sort(first, last, comp, xbuf); +} + +template +void initialize_keys( RandIt first, RandIt last + , less + , U &) +{ + typedef typename iterator_traits::value_type value_type; + std::size_t count = std::size_t(last - first); + for(std::size_t i = 0; i != count; ++i){ + *first = value_type(i); + ++first; + } +} + +template +void move_data_backward( RandIt cur_pos + , typename iterator_traits::size_type const l_data + , RandIt new_pos + , bool const xbuf_used) +{ + //Move buffer to the total combination right + if(xbuf_used){ + boost::move_backward(cur_pos, cur_pos+l_data, new_pos+l_data); + } + else{ + boost::adl_move_swap_ranges_backward(cur_pos, cur_pos+l_data, new_pos+l_data); + //Rotate does less moves but it seems slower due to cache issues + //rotate_gcd(first-l_block, first+len-l_block, first+len); + } +} + +template +void move_data_forward( RandIt cur_pos + , typename iterator_traits::size_type const l_data + , RandIt new_pos + , bool const xbuf_used) +{ + //Move buffer to the total combination right + if(xbuf_used){ + boost::move(cur_pos, cur_pos+l_data, new_pos); + } + else{ + boost::adl_move_swap_ranges(cur_pos, cur_pos+l_data, new_pos); + //Rotate does less moves but it seems slower due to cache issues + //rotate_gcd(first-l_block, first+len-l_block, first+len); + } +} + +template +Unsigned calculate_total_combined(Unsigned const len, Unsigned const l_prev_merged, Unsigned *pl_irreg_combined = 0) +{ + typedef Unsigned size_type; + + size_type const l_combined = 2*l_prev_merged; + size_type l_irreg_combined = len%l_combined; + size_type l_total_combined = len; + if(l_irreg_combined <= l_prev_merged){ + l_total_combined -= l_irreg_combined; + l_irreg_combined = 0; + } + if(pl_irreg_combined) + *pl_irreg_combined = l_irreg_combined; + return l_total_combined; +} + +template +void combine_params + ( RandItKeys const keys + , KeyCompare key_comp + , SizeType l_combined + , SizeType const l_prev_merged + , SizeType const l_block + , XBuf & xbuf + //Output + , SizeType &n_block_a + , SizeType &n_block_b + , SizeType &l_irreg1 + , SizeType &l_irreg2 + //Options + , bool do_initialize_keys = true) +{ + typedef SizeType size_type; + + //Initial parameters for selection sort blocks + l_irreg1 = l_prev_merged%l_block; + l_irreg2 = (l_combined-l_irreg1)%l_block; + BOOST_ASSERT(((l_combined-l_irreg1-l_irreg2)%l_block) == 0); + size_type const n_reg_block = (l_combined-l_irreg1-l_irreg2)/l_block; + n_block_a = l_prev_merged/l_block; + n_block_b = n_reg_block - n_block_a; + BOOST_ASSERT(n_reg_block>=n_block_a); + + //Key initialization + if (do_initialize_keys) { + initialize_keys(keys, keys + needed_keys_count(n_block_a, n_block_b), key_comp, xbuf); + } +} + +template +RandItB op_buffered_partial_merge_and_swap_to_range1_and_buffer + ( RandIt1 first1, RandIt1 const last1 + , RandIt2 &rfirst2, RandIt2 const last2, RandIt2 &rfirst_min + , RandItB &rfirstb, Compare comp, Op op ) +{ + RandItB firstb = rfirstb; + RandItB lastb = firstb; + RandIt2 first2 = rfirst2; + + //Move to buffer while merging + //Three way moves need less moves when op is swap_op so use it + //when merging elements from range2 to the destination occupied by range1 + if(first1 != last1 && first2 != last2){ + RandIt2 first_min = rfirst_min; + op(four_way_t(), first2++, first_min++, first1++, lastb++); + + while(first1 != last1){ + if(first2 == last2){ + lastb = op(forward_t(), first1, last1, firstb); + break; + } + bool const min_less = comp(*first_min, *firstb); + + if(min_less){ + op( four_way_t(), first2++, first_min++, first1++, lastb++); + } + else{ + op(three_way_t(), firstb++, first1++, lastb++); + } + } + rfirst2 = first2; + rfirstb = firstb; + rfirst_min = first_min; + } + + return lastb; +} + +////////////////////////////////// +// +// partial_merge +// +////////////////////////////////// +template +OutputIt op_partial_merge_impl + (InputIt1 &r_first1, InputIt1 const last1, InputIt2 &r_first2, InputIt2 const last2, OutputIt d_first, Compare comp, Op op) +{ + InputIt1 first1(r_first1); + InputIt2 first2(r_first2); + if(first2 != last2 && last1 != first1) + while(1){ + if(comp(*first2, *first1)) { + op(first2++, d_first++); + if(first2 == last2){ + break; + } + } + else{ + op(first1++, d_first++); + if(first1 == last1){ + break; + } + } + } + r_first1 = first1; + r_first2 = first2; + return d_first; +} + +template +OutputIt op_partial_merge + (InputIt1 &r_first1, InputIt1 const last1, InputIt2 &r_first2, InputIt2 const last2, OutputIt d_first, Compare comp, Op op, bool is_stable) +{ + return is_stable ? op_partial_merge_impl(r_first1, last1, r_first2, last2, d_first, comp, op) + : op_partial_merge_impl(r_first1, last1, r_first2, last2, d_first, antistable(comp), op); +} + +////////////////////////////////// +// +// partial_merge_and_swap +// +////////////////////////////////// +template +OutputIt op_partial_merge_and_swap_impl + (InputIt1 &r_first1, InputIt1 const last1, InputIt2 &r_first2, InputIt2 const last2, InputIt2 &r_first_min, OutputIt d_first, Compare comp, Op op) +{ + InputIt1 first1(r_first1); + InputIt2 first2(r_first2); + + if(first2 != last2 && last1 != first1) { + InputIt2 first_min(r_first_min); + bool non_empty_ranges = true; + do{ + if(comp(*first_min, *first1)) { + op(three_way_t(), first2++, first_min++, d_first++); + non_empty_ranges = first2 != last2; + } + else{ + op(first1++, d_first++); + non_empty_ranges = first1 != last1; + } + } while(non_empty_ranges); + r_first_min = first_min; + r_first1 = first1; + r_first2 = first2; + } + return d_first; +} + +template +RandIt op_partial_merge_and_swap + (RandIt &r_first1, RandIt const last1, RandIt &r_first2, RandIt const last2, InputIt2 &r_first_min, OutputIt d_first, Compare comp, Op op, bool is_stable) +{ + return is_stable ? op_partial_merge_and_swap_impl(r_first1, last1, r_first2, last2, r_first_min, d_first, comp, op) + : op_partial_merge_and_swap_impl(r_first1, last1, r_first2, last2, r_first_min, d_first, antistable(comp), op); +} + +template +RandIt op_partial_merge_and_save_impl + ( RandIt first1, RandIt const last1, RandIt &rfirst2, RandIt last2, RandIt first_min + , RandItBuf &buf_first1_in_out, RandItBuf &buf_last1_in_out + , Compare comp, Op op + ) +{ + RandItBuf buf_first1 = buf_first1_in_out; + RandItBuf buf_last1 = buf_last1_in_out; + RandIt first2(rfirst2); + + bool const do_swap = first2 != first_min; + if(buf_first1 == buf_last1){ + //Skip any element that does not need to be moved + RandIt new_first1 = skip_until_merge(first1, last1, *first_min, comp); + buf_first1 += (new_first1-first1); + first1 = new_first1; + buf_last1 = do_swap ? op_buffered_partial_merge_and_swap_to_range1_and_buffer(first1, last1, first2, last2, first_min, buf_first1, comp, op) + : op_buffered_partial_merge_to_range1_and_buffer (first1, last1, first2, last2, buf_first1, comp, op); + first1 = last1; + } + else{ + BOOST_ASSERT((last1-first1) == (buf_last1 - buf_first1)); + } + + //Now merge from buffer + first1 = do_swap ? op_partial_merge_and_swap_impl(buf_first1, buf_last1, first2, last2, first_min, first1, comp, op) + : op_partial_merge_impl (buf_first1, buf_last1, first2, last2, first1, comp, op); + buf_first1_in_out = buf_first1; + buf_last1_in_out = buf_last1; + rfirst2 = first2; + return first1; +} + +template +RandIt op_partial_merge_and_save + ( RandIt first1, RandIt const last1, RandIt &rfirst2, RandIt last2, RandIt first_min + , RandItBuf &buf_first1_in_out + , RandItBuf &buf_last1_in_out + , Compare comp + , Op op + , bool is_stable) +{ + return is_stable + ? op_partial_merge_and_save_impl + (first1, last1, rfirst2, last2, first_min, buf_first1_in_out, buf_last1_in_out, comp, op) + : op_partial_merge_and_save_impl + (first1, last1, rfirst2, last2, first_min, buf_first1_in_out, buf_last1_in_out, antistable(comp), op) + ; +} + + + +template +OutputIt op_merge_blocks_with_irreg + ( RandItKeys key_first + , RandItKeys key_mid + , KeyCompare key_comp + , RandIt first_reg + , RandIt2 &first_irr + , RandIt2 const last_irr + , OutputIt dest + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type n_block_left + , typename iterator_traits::size_type min_check + , typename iterator_traits::size_type max_check + , Compare comp, bool const is_stable, Op op) +{ + typedef typename iterator_traits::size_type size_type; + + for(; n_block_left; --n_block_left, ++key_first, min_check -= min_check != 0, max_check -= max_check != 0){ + size_type next_key_idx = find_next_block(key_first, key_comp, first_reg, l_block, min_check, max_check, comp); + max_check = min_value(max_value(max_check, next_key_idx+2), n_block_left); + RandIt const last_reg = first_reg + l_block; + RandIt first_min = first_reg + next_key_idx*l_block; + RandIt const last_min = first_min + l_block; (void)last_min; + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first_reg, last_reg, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!next_key_idx || is_sorted(first_min, last_min, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT((!next_key_idx || !comp(*first_reg, *first_min ))); + + OutputIt orig_dest = dest; (void)orig_dest; + dest = next_key_idx ? op_partial_merge_and_swap(first_irr, last_irr, first_reg, last_reg, first_min, dest, comp, op, is_stable) + : op_partial_merge (first_irr, last_irr, first_reg, last_reg, dest, comp, op, is_stable); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(orig_dest, dest, comp)); + + if(first_reg == dest){ + dest = next_key_idx ? ::boost::adl_move_swap_ranges(first_min, last_min, first_reg) + : last_reg; + } + else{ + dest = next_key_idx ? op(three_way_forward_t(), first_reg, last_reg, first_min, dest) + : op(forward_t(), first_reg, last_reg, dest); + } + + RandItKeys const key_next(key_first + next_key_idx); + swap_and_update_key(next_key_idx != 0, key_next, key_first, key_mid, last_reg, last_reg, first_min); + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(orig_dest, dest, comp)); + first_reg = last_reg; + } + return dest; +} + +template +void op_merge_blocks_left + ( RandItKeys const key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const l_irreg1 + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp, Op op) +{ + typedef typename iterator_traits::size_type size_type; + size_type const key_count = needed_keys_count(n_block_a, n_block_b); (void)key_count; +// BOOST_ASSERT(n_block_a || n_block_b); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted_and_unique(key_first, key_first + key_count, key_comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_b || n_block_a == count_if_with(key_first, key_first + key_count, key_comp, key_first[n_block_a])); + + size_type n_block_b_left = n_block_b; + size_type n_block_a_left = n_block_a; + size_type n_block_left = n_block_b + n_block_a; + RandItKeys key_mid(key_first + n_block_a); + + RandIt buffer = first - l_block; + RandIt first1 = first; + RandIt last1 = first1 + l_irreg1; + RandIt first2 = last1; + RandIt const irreg2 = first2 + n_block_left*l_block; + bool is_range1_A = true; + + RandItKeys key_range2(key_first); + + //////////////////////////////////////////////////////////////////////////// + //Process all regular blocks before the irregular B block + //////////////////////////////////////////////////////////////////////////// + size_type min_check = n_block_a == n_block_left ? 0u : n_block_a; + size_type max_check = min_value(min_check+1, n_block_left); + for (; n_block_left; --n_block_left, ++key_range2, min_check -= min_check != 0, max_check -= max_check != 0) { + size_type const next_key_idx = find_next_block(key_range2, key_comp, first2, l_block, min_check, max_check, comp); + max_check = min_value(max_value(max_check, next_key_idx+2), n_block_left); + RandIt const first_min = first2 + next_key_idx*l_block; + RandIt const last_min = first_min + l_block; (void)last_min; + RandIt const last2 = first2 + l_block; + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first1, last1, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first2, last2, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_left || is_sorted(first_min, last_min, comp)); + + //Check if irregular b block should go here. + //If so, break to the special code handling the irregular block + if (!n_block_b_left && + ( (l_irreg2 && comp(*irreg2, *first_min)) || (!l_irreg2 && is_range1_A)) ){ + break; + } + + RandItKeys const key_next(key_range2 + next_key_idx); + bool const is_range2_A = key_mid == (key_first+key_count) || key_comp(*key_next, *key_mid); + + bool const is_buffer_middle = last1 == buffer; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT( ( is_buffer_middle && size_type(first2-buffer) == l_block && buffer == last1) || + (!is_buffer_middle && size_type(first1-buffer) == l_block && first2 == last1)); + + if(is_range1_A == is_range2_A){ + BOOST_ASSERT((first1 == last1) || !comp(*first_min, last1[-1])); + if(!is_buffer_middle){ + buffer = op(forward_t(), first1, last1, buffer); + } + swap_and_update_key(next_key_idx != 0, key_next, key_range2, key_mid, first2, last2, first_min); + first1 = first2; + last1 = last2; + } + else { + RandIt unmerged; + RandIt buf_beg; + RandIt buf_end; + if(is_buffer_middle){ + buf_end = buf_beg = first2 - (last1-first1); + unmerged = op_partial_merge_and_save( first1, last1, first2, last2, first_min + , buf_beg, buf_end, comp, op, is_range1_A); + } + else{ + buf_beg = first1; + buf_end = last1; + unmerged = op_partial_merge_and_save + (buffer, buffer+(last1-first1), first2, last2, first_min, buf_beg, buf_end, comp, op, is_range1_A); + } + (void)unmerged; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first-l_block, unmerged, comp)); + + swap_and_update_key( next_key_idx != 0, key_next, key_range2, key_mid, first2, last2 + , last_min - size_type(last2 - first2)); + + if(buf_beg != buf_end){ //range2 exhausted: is_buffer_middle for the next iteration + first1 = buf_beg; + last1 = buf_end; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(buf_end == (last2-l_block)); + buffer = last1; + } + else{ //range1 exhausted: !is_buffer_middle for the next iteration + first1 = first2; + last1 = last2; + buffer = first2 - l_block; + is_range1_A = is_range2_A; + } + } + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT( (is_range2_A && n_block_a_left) || (!is_range2_A && n_block_b_left)); + is_range2_A ? --n_block_a_left : --n_block_b_left; + first2 = last2; + } + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_b || n_block_a == count_if_with(key_first, key_range2 + n_block_left, key_comp, *key_mid)); + BOOST_ASSERT(!n_block_b_left); + + //////////////////////////////////////////////////////////////////////////// + //Process remaining range 1 left before the irregular B block + //////////////////////////////////////////////////////////////////////////// + bool const is_buffer_middle = last1 == buffer; + RandIt first_irr2 = irreg2; + RandIt const last_irr2 = first_irr2 + l_irreg2; + if(l_irreg2 && is_range1_A){ + if(is_buffer_middle){ + first1 = skip_until_merge(first1, last1, *first_irr2, comp); + //Even if we copy backward, no overlapping occurs so use forward copy + //that can be faster specially with trivial types + RandIt const new_first1 = first2 - (last1 - first1); + op(forward_t(), first1, last1, new_first1); + first1 = new_first1; + last1 = first2; + buffer = first1 - l_block; + } + buffer = op_partial_merge_impl(first1, last1, first_irr2, last_irr2, buffer, comp, op); + buffer = op(forward_t(), first1, last1, buffer); + } + else if(!is_buffer_middle){ + buffer = op(forward_t(), first1, last1, buffer); + } + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first-l_block, buffer, comp)); + + //////////////////////////////////////////////////////////////////////////// + //Process irregular B block and remaining A blocks + //////////////////////////////////////////////////////////////////////////// + buffer = op_merge_blocks_with_irreg + ( key_range2, key_mid, key_comp, first2, first_irr2, last_irr2 + , buffer, l_block, n_block_left, min_check, max_check, comp, false, op); + buffer = op(forward_t(), first_irr2, last_irr2, buffer);(void)buffer; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first-l_block, buffer, comp)); +} + +// first - first element to merge. +// first[-l_block, 0) - buffer (if use_buf == true) +// l_block - length of regular blocks. First nblocks are stable sorted by 1st elements and key-coded +// keys - sequence of keys, in same order as blocks. key +void merge_blocks_left + ( RandItKeys const key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const l_irreg1 + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp + , bool const xbuf_used) +{ + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_b || n_block_a == count_if_with(key_first, key_first + needed_keys_count(n_block_a, n_block_b), key_comp, key_first[n_block_a])); + if(xbuf_used){ + op_merge_blocks_left + (key_first, key_comp, first, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, move_op()); + } + else{ + op_merge_blocks_left + (key_first, key_comp, first, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, swap_op()); + } +} + + +// first - first element to merge. +// [first+l_block*(n_bef_irreg2+n_aft_irreg2)+l_irreg2, first+l_block*(n_bef_irreg2+n_aft_irreg2+1)+l_irreg2) - buffer +// l_block - length of regular blocks. First nblocks are stable sorted by 1st elements and key-coded +// keys - sequence of keys, in same order as blocks. key +void merge_blocks_right + ( RandItKeys const key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp + , bool const xbuf_used) +{ + merge_blocks_left + ( make_reverse_iterator(key_first + needed_keys_count(n_block_a, n_block_b)) + , inverse(key_comp) + , make_reverse_iterator(first + ((n_block_a+n_block_b)*l_block+l_irreg2)) + , l_block + , l_irreg2 + , n_block_b + , n_block_a + , 0 + , inverse(comp), xbuf_used); +} + +template +void op_merge_blocks_with_buf + ( RandItKeys key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const l_irreg1 + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp + , Op op + , RandItBuf const buf_first) +{ + typedef typename iterator_traits::size_type size_type; + size_type const key_count = needed_keys_count(n_block_a, n_block_b); (void)key_count; + //BOOST_ASSERT(n_block_a || n_block_b); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted_and_unique(key_first, key_first + key_count, key_comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_b || n_block_a == count_if_with(key_first, key_first + key_count, key_comp, key_first[n_block_a])); + + size_type n_block_b_left = n_block_b; + size_type n_block_a_left = n_block_a; + size_type n_block_left = n_block_b + n_block_a; + RandItKeys key_mid(key_first + n_block_a); + + RandItBuf buffer = buf_first; + RandItBuf buffer_end = buffer; + RandIt first1 = first; + RandIt last1 = first1 + l_irreg1; + RandIt first2 = last1; + RandIt const first_irr2 = first2 + n_block_left*l_block; + bool is_range1_A = true; + + RandItKeys key_range2(key_first); + + //////////////////////////////////////////////////////////////////////////// + //Process all regular blocks before the irregular B block + //////////////////////////////////////////////////////////////////////////// + size_type min_check = n_block_a == n_block_left ? 0u : n_block_a; + size_type max_check = min_value(min_check+1, n_block_left); + for (; n_block_left; --n_block_left, ++key_range2, min_check -= min_check != 0, max_check -= max_check != 0) { + size_type const next_key_idx = find_next_block(key_range2, key_comp, first2, l_block, min_check, max_check, comp); + max_check = min_value(max_value(max_check, next_key_idx+2), n_block_left); + RandIt first_min = first2 + next_key_idx*l_block; + RandIt const last_min = first_min + l_block; (void)last_min; + RandIt const last2 = first2 + l_block; + + bool const buffer_empty = buffer == buffer_end; (void)buffer_empty; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(buffer_empty ? is_sorted(first1, last1, comp) : is_sorted(buffer, buffer_end, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first2, last2, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!n_block_left || is_sorted(first_min, last_min, comp)); + + //Check if irregular b block should go here. + //If so, break to the special code handling the irregular block + if (!n_block_b_left && + ( (l_irreg2 && comp(*first_irr2, *first_min)) || (!l_irreg2 && is_range1_A)) ){ + break; + } + + RandItKeys const key_next(key_range2 + next_key_idx); + bool const is_range2_A = key_mid == (key_first+key_count) || key_comp(*key_next, *key_mid); + + if(is_range1_A == is_range2_A){ + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT((first1 == last1) || (buffer_empty ? !comp(*first_min, last1[-1]) : !comp(*first_min, buffer_end[-1]))); + //If buffered, put those elements in place + RandIt res = op(forward_t(), buffer, buffer_end, first1); + buffer = buffer_end = buf_first; + BOOST_ASSERT(buffer_empty || res == last1); (void)res; + swap_and_update_key(next_key_idx != 0, key_next, key_range2, key_mid, first2, last2, first_min); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first2, last2, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first_min, last_min, comp)); + first1 = first2; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, first1, comp)); + } + else { + RandIt const unmerged = op_partial_merge_and_save(first1, last1, first2, last2, first_min, buffer, buffer_end, comp, op, is_range1_A); + bool const is_range_1_empty = buffer == buffer_end; + BOOST_ASSERT(is_range_1_empty || (buffer_end-buffer) == (last1+l_block-unmerged)); + if(is_range_1_empty){ + buffer = buffer_end = buf_first; + first_min = last_min - (last2 - first2); + } + else{ + first_min = last_min; + } + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(!is_range_1_empty || (last_min-first_min) == (last2-unmerged)); + swap_and_update_key(next_key_idx != 0, key_next, key_range2, key_mid, first2, last2, first_min); + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first_min, last_min, comp)); + is_range1_A ^= is_range_1_empty; + first1 = unmerged; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, unmerged, comp)); + } + BOOST_ASSERT( (is_range2_A && n_block_a_left) || (!is_range2_A && n_block_b_left)); + is_range2_A ? --n_block_a_left : --n_block_b_left; + last1 += l_block; + first2 = last2; + } + + RandIt res = op(forward_t(), buffer, buffer_end, first1); (void)res; + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, res, comp)); + + //////////////////////////////////////////////////////////////////////////// + //Process irregular B block and remaining A blocks + //////////////////////////////////////////////////////////////////////////// + RandIt const last_irr2 = first_irr2 + l_irreg2; + op(forward_t(), first_irr2, first_irr2+l_irreg2, buf_first); + buffer = buf_first; + buffer_end = buffer+l_irreg2; + + reverse_iterator rbuf_beg(buffer_end); + RandIt dest = op_merge_blocks_with_irreg + ( make_reverse_iterator(key_first + n_block_b + n_block_a), make_reverse_iterator(key_mid), inverse(key_comp) + , make_reverse_iterator(first_irr2), rbuf_beg + , make_reverse_iterator(buffer), make_reverse_iterator(last_irr2) + , l_block, n_block_left, 0, n_block_left + , inverse(comp), true, op).base(); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(dest, last_irr2, comp)); + + buffer_end = rbuf_beg.base(); + BOOST_ASSERT((dest-last1) == (buffer_end-buffer)); + op_merge_with_left_placed(is_range1_A ? first1 : last1, last1, dest, buffer, buffer_end, comp, op); + + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(first, last_irr2, comp)); +} + +template +void merge_blocks_with_buf + ( RandItKeys key_first + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const l_block + , typename iterator_traits::size_type const l_irreg1 + , typename iterator_traits::size_type const n_block_a + , typename iterator_traits::size_type const n_block_b + , typename iterator_traits::size_type const l_irreg2 + , Compare comp + , RandItBuf const buf_first + , bool const xbuf_used) +{ + if(xbuf_used){ + op_merge_blocks_with_buf + (key_first, key_comp, first, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, move_op(), buf_first); + } + else{ + op_merge_blocks_with_buf + (key_first, key_comp, first, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, swap_op(), buf_first); + } +} + +template +typename iterator_traits::size_type + op_insertion_sort_step_left + ( RandIt const first + , typename iterator_traits::size_type const length + , typename iterator_traits::size_type const step + , Compare comp, Op op) +{ + typedef typename iterator_traits::size_type size_type; + size_type const s = min_value(step, AdaptiveSortInsertionSortThreshold); + size_type m = 0; + + while((length - m) > s){ + insertion_sort_op(first+m, first+m+s, first+m-s, comp, op); + m += s; + } + insertion_sort_op(first+m, first+length, first+m-s, comp, op); + return s; +} + +template +typename iterator_traits::size_type + insertion_sort_step + ( RandIt const first + , typename iterator_traits::size_type const length + , typename iterator_traits::size_type const step + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + size_type const s = min_value(step, AdaptiveSortInsertionSortThreshold); + size_type m = 0; + + while((length - m) > s){ + insertion_sort(first+m, first+m+s, comp); + m += s; + } + insertion_sort(first+m, first+length, comp); + return s; +} + +template +typename iterator_traits::size_type + op_merge_left_step_multiple + ( RandIt first_block + , typename iterator_traits::size_type const elements_in_blocks + , typename iterator_traits::size_type l_merged + , typename iterator_traits::size_type const l_build_buf + , typename iterator_traits::size_type l_left_space + , Compare comp + , Op op) +{ + typedef typename iterator_traits::size_type size_type; + for(; l_merged < l_build_buf && l_left_space >= l_merged; l_merged*=2){ + size_type p0=0; + RandIt pos = first_block; + while((elements_in_blocks - p0) > 2*l_merged) { + op_merge_left(pos-l_merged, pos, pos+l_merged, pos+2*l_merged, comp, op); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(pos-l_merged, pos+l_merged, comp)); + p0 += 2*l_merged; + pos = first_block+p0; + } + if((elements_in_blocks-p0) > l_merged) { + op_merge_left(pos-l_merged, pos, pos+l_merged, first_block+elements_in_blocks, comp, op); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(pos-l_merged, pos-l_merged+(first_block+elements_in_blocks-pos), comp)); + } + else { + op(forward_t(), pos, first_block+elements_in_blocks, pos-l_merged); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(pos-l_merged, first_block+elements_in_blocks-l_merged, comp)); + } + first_block -= l_merged; + l_left_space -= l_merged; + } + return l_merged; +} + +template +void op_merge_right_step_once + ( RandIt first_block + , typename iterator_traits::size_type const elements_in_blocks + , typename iterator_traits::size_type const l_build_buf + , Compare comp + , Op op) +{ + typedef typename iterator_traits::size_type size_type; + size_type restk = elements_in_blocks%(2*l_build_buf); + size_type p = elements_in_blocks - restk; + BOOST_ASSERT(0 == (p%(2*l_build_buf))); + + if(restk <= l_build_buf){ + op(backward_t(),first_block+p, first_block+p+restk, first_block+p+restk+l_build_buf); + } + else{ + op_merge_right(first_block+p, first_block+p+l_build_buf, first_block+p+restk, first_block+p+restk+l_build_buf, comp, op); + } + while(p>0){ + p -= 2*l_build_buf; + op_merge_right(first_block+p, first_block+p+l_build_buf, first_block+p+2*l_build_buf, first_block+p+3*l_build_buf, comp, op); + } +} + + +// build blocks of length 2*l_build_buf. l_build_buf is power of two +// input: [0, l_build_buf) elements are buffer, rest unsorted elements +// output: [0, l_build_buf) elements are buffer, blocks 2*l_build_buf and last subblock sorted +// +// First elements are merged from right to left until elements start +// at first. All old elements [first, first + l_build_buf) are placed at the end +// [first+len-l_build_buf, first+len). To achieve this: +// - If we have external memory to merge, we save elements from the buffer +// so that a non-swapping merge is used. Buffer elements are restored +// at the end of the buffer from the external memory. +// +// - When the external memory is not available or it is insufficient +// for a merge operation, left swap merging is used. +// +// Once elements are merged left to right in blocks of l_build_buf, then a single left +// to right merge step is performed to achieve merged blocks of size 2K. +// If external memory is available, usual merge is used, swap merging otherwise. +// +// As a last step, if auxiliary memory is available in-place merge is performed. +// until all is merged or auxiliary memory is not large enough. +template +typename iterator_traits::size_type + adaptive_sort_build_blocks + ( RandIt const first + , typename iterator_traits::size_type const len + , typename iterator_traits::size_type const l_base + , typename iterator_traits::size_type const l_build_buf + , adaptive_xbuf::value_type> & xbuf + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + BOOST_ASSERT(l_build_buf <= len); + BOOST_ASSERT(0 == ((l_build_buf / l_base)&(l_build_buf/l_base-1))); + + //Place the start pointer after the buffer + RandIt first_block = first + l_build_buf; + size_type const elements_in_blocks = len - l_build_buf; + + ////////////////////////////////// + // Start of merge to left step + ////////////////////////////////// + size_type l_merged = 0u; + + BOOST_ASSERT(l_build_buf); + //If there is no enough buffer for the insertion sort step, just avoid the external buffer + size_type kbuf = min_value(l_build_buf, size_type(xbuf.capacity())); + kbuf = kbuf < l_base ? 0 : kbuf; + + if(kbuf){ + //Backup internal buffer values in external buffer so they can be overwritten + xbuf.move_assign(first+l_build_buf-kbuf, kbuf); + l_merged = op_insertion_sort_step_left(first_block, elements_in_blocks, l_base, comp, move_op()); + + //Now combine them using the buffer. Elements from buffer can be + //overwritten since they've been saved to xbuf + l_merged = op_merge_left_step_multiple + ( first_block - l_merged, elements_in_blocks, l_merged, l_build_buf, kbuf - l_merged, comp, move_op()); + + //Restore internal buffer from external buffer unless kbuf was l_build_buf, + //in that case restoration will happen later + if(kbuf != l_build_buf){ + boost::move(xbuf.data()+kbuf-l_merged, xbuf.data() + kbuf, first_block-l_merged+elements_in_blocks); + } + } + else{ + l_merged = insertion_sort_step(first_block, elements_in_blocks, l_base, comp); + rotate_gcd(first_block - l_merged, first_block, first_block+elements_in_blocks); + } + + //Now combine elements using the buffer. Elements from buffer can't be + //overwritten since xbuf was not big enough, so merge swapping elements. + l_merged = op_merge_left_step_multiple + (first_block - l_merged, elements_in_blocks, l_merged, l_build_buf, l_build_buf - l_merged, comp, swap_op()); + + BOOST_ASSERT(l_merged == l_build_buf); + + ////////////////////////////////// + // Start of merge to right step + ////////////////////////////////// + + //If kbuf is l_build_buf then we can merge right without swapping + //Saved data is still in xbuf + if(kbuf && kbuf == l_build_buf){ + op_merge_right_step_once(first, elements_in_blocks, l_build_buf, comp, move_op()); + //Restore internal buffer from external buffer if kbuf was l_build_buf. + //as this operation was previously delayed. + boost::move(xbuf.data(), xbuf.data() + kbuf, first); + } + else{ + op_merge_right_step_once(first, elements_in_blocks, l_build_buf, comp, swap_op()); + } + xbuf.clear(); + //2*l_build_buf or total already merged + return min_value(elements_in_blocks, 2*l_build_buf); +} + +template +void adaptive_sort_combine_blocks + ( RandItKeys const keys + , KeyCompare key_comp + , RandIt const first + , typename iterator_traits::size_type const len + , typename iterator_traits::size_type const l_prev_merged + , typename iterator_traits::size_type const l_block + , bool const use_buf + , bool const xbuf_used + , XBuf & xbuf + , Compare comp + , bool merge_left) +{ + (void)xbuf; + typedef typename iterator_traits::size_type size_type; + + size_type const l_reg_combined = 2*l_prev_merged; + size_type l_irreg_combined = 0; + size_type const l_total_combined = calculate_total_combined(len, l_prev_merged, &l_irreg_combined); + size_type const n_reg_combined = len/l_reg_combined; + RandIt combined_first = first; + + (void)l_total_combined; + BOOST_ASSERT(l_total_combined <= len); + + size_type const max_i = n_reg_combined + (l_irreg_combined != 0); + + if(merge_left || !use_buf) { + for( size_type combined_i = 0; combined_i != max_i; ++combined_i, combined_first += l_reg_combined) { + //Now merge blocks + bool const is_last = combined_i==n_reg_combined; + size_type const l_cur_combined = is_last ? l_irreg_combined : l_reg_combined; + + range_xbuf rbuf( (use_buf && xbuf_used) ? (combined_first-l_block) : combined_first, combined_first); + size_type n_block_a, n_block_b, l_irreg1, l_irreg2; + combine_params( keys, key_comp, l_cur_combined + , l_prev_merged, l_block, rbuf + , n_block_a, n_block_b, l_irreg1, l_irreg2); //Outputs + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A combpar: ", len + l_block); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(combined_first, combined_first + n_block_a*l_block+l_irreg1, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(combined_first + n_block_a*l_block+l_irreg1, combined_first + n_block_a*l_block+l_irreg1+n_block_b*l_block+l_irreg2, comp)); + if(!use_buf){ + merge_blocks_bufferless + (keys, key_comp, combined_first, l_block, 0u, n_block_a, n_block_b, l_irreg2, comp); + } + else{ + merge_blocks_left + (keys, key_comp, combined_first, l_block, 0u, n_block_a, n_block_b, l_irreg2, comp, xbuf_used); + } + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After merge_blocks_l: ", len + l_block); + } + } + else{ + combined_first += l_reg_combined*(max_i-1); + for( size_type combined_i = max_i; combined_i--; combined_first -= l_reg_combined) { + bool const is_last = combined_i==n_reg_combined; + size_type const l_cur_combined = is_last ? l_irreg_combined : l_reg_combined; + + RandIt const combined_last(combined_first+l_cur_combined); + range_xbuf rbuf(combined_last, xbuf_used ? (combined_last+l_block) : combined_last); + size_type n_block_a, n_block_b, l_irreg1, l_irreg2; + combine_params( keys, key_comp, l_cur_combined + , l_prev_merged, l_block, rbuf + , n_block_a, n_block_b, l_irreg1, l_irreg2); //Outputs + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A combpar: ", len + l_block); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(combined_first, combined_first + n_block_a*l_block+l_irreg1, comp)); + BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(is_sorted(combined_first + n_block_a*l_block+l_irreg1, combined_first + n_block_a*l_block+l_irreg1+n_block_b*l_block+l_irreg2, comp)); + merge_blocks_right + (keys, key_comp, combined_first, l_block, n_block_a, n_block_b, l_irreg2, comp, xbuf_used); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After merge_blocks_r: ", len + l_block); + } + } +} + +//Returns true if buffer is placed in +//[buffer+len-l_intbuf, buffer+len). Otherwise, buffer is +//[buffer,buffer+l_intbuf) +template +bool adaptive_sort_combine_all_blocks + ( RandIt keys + , typename iterator_traits::size_type &n_keys + , RandIt const buffer + , typename iterator_traits::size_type const l_buf_plus_data + , typename iterator_traits::size_type l_merged + , typename iterator_traits::size_type &l_intbuf + , adaptive_xbuf::value_type> & xbuf + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + RandIt const first = buffer + l_intbuf; + size_type const l_data = l_buf_plus_data - l_intbuf; + size_type const l_unique = l_intbuf+n_keys; + //Backup data to external buffer once if possible + bool const common_xbuf = l_data > l_merged && l_intbuf && l_intbuf <= xbuf.capacity(); + if(common_xbuf){ + xbuf.move_assign(buffer, l_intbuf); + } + + bool prev_merge_left = true; + size_type l_prev_total_combined = l_merged, l_prev_block = 0; + bool prev_use_internal_buf = true; + + for( size_type n = 0; l_data > l_merged + ; l_merged*=2 + , ++n){ + //If l_intbuf is non-zero, use that internal buffer. + // Implies l_block == l_intbuf && use_internal_buf == true + //If l_intbuf is zero, see if half keys can be reused as a reduced emergency buffer, + // Implies l_block == n_keys/2 && use_internal_buf == true + //Otherwise, just give up and and use all keys to merge using rotations (use_internal_buf = false) + bool use_internal_buf = false; + size_type const l_block = lblock_for_combine(l_intbuf, n_keys, 2*l_merged, use_internal_buf); + BOOST_ASSERT(!l_intbuf || (l_block == l_intbuf)); + BOOST_ASSERT(n == 0 || (!use_internal_buf || prev_use_internal_buf) ); + BOOST_ASSERT(n == 0 || (!use_internal_buf || l_prev_block == l_block) ); + + bool const is_merge_left = (n&1) == 0; + size_type const l_total_combined = calculate_total_combined(l_data, l_merged); + if(n && prev_use_internal_buf && prev_merge_left){ + if(is_merge_left || !use_internal_buf){ + move_data_backward(first-l_prev_block, l_prev_total_combined, first, common_xbuf); + } + else{ + //Put the buffer just after l_total_combined + RandIt const buf_end = first+l_prev_total_combined; + RandIt const buf_beg = buf_end-l_block; + if(l_prev_total_combined > l_total_combined){ + size_type const l_diff = l_prev_total_combined - l_total_combined; + move_data_backward(buf_beg-l_diff, l_diff, buf_end-l_diff, common_xbuf); + } + else if(l_prev_total_combined < l_total_combined){ + size_type const l_diff = l_total_combined - l_prev_total_combined; + move_data_forward(buf_end, l_diff, buf_beg, common_xbuf); + } + } + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After move_data : ", l_data + l_intbuf); + } + + //Combine to form l_merged*2 segments + if(n_keys){ + adaptive_sort_combine_blocks + ( keys, comp, !use_internal_buf || is_merge_left ? first : first-l_block + , l_data, l_merged, l_block, use_internal_buf, common_xbuf, xbuf, comp, is_merge_left); + } + else{ + size_type *const uint_keys = xbuf.template aligned_trailing(); + adaptive_sort_combine_blocks + ( uint_keys, less(), !use_internal_buf || is_merge_left ? first : first-l_block + , l_data, l_merged, l_block, use_internal_buf, common_xbuf, xbuf, comp, is_merge_left); + } + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After combine_blocks: ", l_data + l_intbuf); + prev_merge_left = is_merge_left; + l_prev_total_combined = l_total_combined; + l_prev_block = l_block; + prev_use_internal_buf = use_internal_buf; + } + BOOST_ASSERT(l_prev_total_combined == l_data); + bool const buffer_right = prev_use_internal_buf && prev_merge_left; + + l_intbuf = prev_use_internal_buf ? l_prev_block : 0u; + n_keys = l_unique - l_intbuf; + //Restore data from to external common buffer if used + if(common_xbuf){ + if(buffer_right){ + boost::move(xbuf.data(), xbuf.data() + l_intbuf, buffer+l_data); + } + else{ + boost::move(xbuf.data(), xbuf.data() + l_intbuf, buffer); + } + } + return buffer_right; +} + +template +void stable_merge + ( RandIt first, RandIt const middle, RandIt last + , Compare comp + , adaptive_xbuf::value_type> &xbuf) +{ + BOOST_ASSERT(xbuf.empty()); + typedef typename iterator_traits::size_type size_type; + size_type const len1 = size_type(middle-first); + size_type const len2 = size_type(last-middle); + size_type const l_min = min_value(len1, len2); + if(xbuf.capacity() >= l_min){ + buffered_merge(first, middle, last, comp, xbuf); + xbuf.clear(); + } + else{ + merge_bufferless(first, middle, last, comp); + } +} + + +template +void adaptive_sort_final_merge( bool buffer_right + , RandIt const first + , typename iterator_traits::size_type const l_intbuf + , typename iterator_traits::size_type const n_keys + , typename iterator_traits::size_type const len + , adaptive_xbuf::value_type> & xbuf + , Compare comp) +{ + //BOOST_ASSERT(n_keys || xbuf.size() == l_intbuf); + xbuf.clear(); + + typedef typename iterator_traits::size_type size_type; + size_type const n_key_plus_buf = l_intbuf+n_keys; + if(buffer_right){ + stable_sort(first+len-l_intbuf, first+len, comp, xbuf); + stable_merge(first+n_keys, first+len-l_intbuf, first+len, antistable(comp), xbuf); + stable_sort(first, first+n_keys, comp, xbuf); + stable_merge(first, first+n_keys, first+len, comp, xbuf); + } + else{ + stable_sort(first, first+n_key_plus_buf, comp, xbuf); + if(xbuf.capacity() >= n_key_plus_buf){ + buffered_merge(first, first+n_key_plus_buf, first+len, comp, xbuf); + } + else if(xbuf.capacity() >= min_value(l_intbuf, n_keys)){ + stable_merge(first+n_keys, first+n_key_plus_buf, first+len, comp, xbuf); + stable_merge(first, first+n_keys, first+len, comp, xbuf); + } + else{ + merge_bufferless(first, first+n_key_plus_buf, first+len, comp); + } + } + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After final_merge : ", len); +} + +template +bool adaptive_sort_build_params + (RandIt first, Unsigned const len, Compare comp + , Unsigned &n_keys, Unsigned &l_intbuf, Unsigned &l_base, Unsigned &l_build_buf + , adaptive_xbuf & xbuf + ) +{ + typedef Unsigned size_type; + + //Calculate ideal parameters and try to collect needed unique keys + l_base = 0u; + + //Try to find a value near sqrt(len) that is 2^N*l_base where + //l_base <= AdaptiveSortInsertionSortThreshold. This property is important + //as build_blocks merges to the left iteratively duplicating the + //merged size and all the buffer must be used just before the final + //merge to right step. This guarantees "build_blocks" produces + //segments of size l_build_buf*2, maximizing the classic merge phase. + l_intbuf = size_type(ceil_sqrt_multiple(len, &l_base)); + + //The internal buffer can be expanded if there is enough external memory + while(xbuf.capacity() >= l_intbuf*2){ + l_intbuf *= 2; + } + + //This is the minimum number of keys to implement the ideal algorithm + // + //l_intbuf is used as buffer plus the key count + size_type n_min_ideal_keys = l_intbuf-1; + while(n_min_ideal_keys >= (len-l_intbuf-n_min_ideal_keys)/l_intbuf){ + --n_min_ideal_keys; + } + n_min_ideal_keys += 1; + BOOST_ASSERT(n_min_ideal_keys <= l_intbuf); + + if(xbuf.template supports_aligned_trailing(l_intbuf, (len-l_intbuf-1)/l_intbuf+1)){ + n_keys = 0u; + l_build_buf = l_intbuf; + } + else{ + //Try to achieve a l_build_buf of length l_intbuf*2, so that we can merge with that + //l_intbuf*2 buffer in "build_blocks" and use half of them as buffer and the other half + //as keys in combine_all_blocks. In that case n_keys >= n_min_ideal_keys but by a small margin. + // + //If available memory is 2*sqrt(l), then only sqrt(l) unique keys are needed, + //(to be used for keys in combine_all_blocks) as the whole l_build_buf + //will be backuped in the buffer during build_blocks. + bool const non_unique_buf = xbuf.capacity() >= l_intbuf; + size_type const to_collect = non_unique_buf ? n_min_ideal_keys : l_intbuf*2; + size_type collected = collect_unique(first, first+len, to_collect, comp, xbuf); + + //If available memory is 2*sqrt(l), then for "build_params" + //the situation is the same as if 2*l_intbuf were collected. + if(non_unique_buf && collected == n_min_ideal_keys){ + l_build_buf = l_intbuf; + n_keys = n_min_ideal_keys; + } + else if(collected == 2*l_intbuf){ + //l_intbuf*2 elements found. Use all of them in the build phase + l_build_buf = l_intbuf*2; + n_keys = l_intbuf; + } + else if(collected == (n_min_ideal_keys+l_intbuf)){ + l_build_buf = l_intbuf; + n_keys = n_min_ideal_keys; + } + //If collected keys are not enough, try to fix n_keys and l_intbuf. If no fix + //is possible (due to very low unique keys), then go to a slow sort based on rotations. + else{ + BOOST_ASSERT(collected < (n_min_ideal_keys+l_intbuf)); + if(collected < 4){ //No combination possible with less that 4 keys + return false; + } + n_keys = l_intbuf; + while(n_keys&(n_keys-1)){ + n_keys &= n_keys-1; // make it power or 2 + } + while(n_keys > collected){ + n_keys/=2; + } + //AdaptiveSortInsertionSortThreshold is always power of two so the minimum is power of two + l_base = min_value(n_keys, AdaptiveSortInsertionSortThreshold); + l_intbuf = 0; + l_build_buf = n_keys; + } + BOOST_ASSERT((n_keys+l_intbuf) >= l_build_buf); + } + + return true; +} + +template +inline void adaptive_merge_combine_blocks( RandIt first + , typename iterator_traits::size_type len1 + , typename iterator_traits::size_type len2 + , typename iterator_traits::size_type collected + , typename iterator_traits::size_type n_keys + , typename iterator_traits::size_type l_block + , bool use_internal_buf + , bool xbuf_used + , Compare comp + , adaptive_xbuf::value_type> & xbuf + ) +{ + typedef typename iterator_traits::size_type size_type; + size_type const len = len1+len2; + size_type const l_combine = len-collected; + size_type const l_combine1 = len1-collected; + + if(n_keys){ + RandIt const first_data = first+collected; + RandIt const keys = first; + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A combine: ", len); + if(xbuf_used){ + if(xbuf.size() < l_block){ + xbuf.initialize_until(l_block, *first); + } + BOOST_ASSERT(xbuf.size() >= l_block); + size_type n_block_a, n_block_b, l_irreg1, l_irreg2; + combine_params( keys, comp, l_combine + , l_combine1, l_block, xbuf + , n_block_a, n_block_b, l_irreg1, l_irreg2); //Outputs + merge_blocks_with_buf + (keys, comp, first_data, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, xbuf.data(), xbuf_used); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A mrg xbf: ", len); + } + else{ + size_type n_block_a, n_block_b, l_irreg1, l_irreg2; + combine_params( keys, comp, l_combine + , l_combine1, l_block, xbuf + , n_block_a, n_block_b, l_irreg1, l_irreg2); //Outputs + if(use_internal_buf){ + merge_blocks_with_buf + (keys, comp, first_data, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, first_data-l_block, xbuf_used); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A mrg buf: ", len); + } + else{ + merge_blocks_bufferless + (keys, comp, first_data, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A mrg nbf: ", len); + } + } + } + else{ + xbuf.shrink_to_fit(l_block); + if(xbuf.size() < l_block){ + xbuf.initialize_until(l_block, *first); + } + size_type *const uint_keys = xbuf.template aligned_trailing(l_block); + size_type n_block_a, n_block_b, l_irreg1, l_irreg2; + combine_params( uint_keys, less(), l_combine + , l_combine1, l_block, xbuf + , n_block_a, n_block_b, l_irreg1, l_irreg2, true); //Outputs + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A combine: ", len); + BOOST_ASSERT(xbuf.size() >= l_block); + merge_blocks_with_buf + (uint_keys, less(), first, l_block, l_irreg1, n_block_a, n_block_b, l_irreg2, comp, xbuf.data(), true); + xbuf.clear(); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A mrg buf: ", len); + } +} + +template +inline void adaptive_merge_final_merge( RandIt first + , typename iterator_traits::size_type len1 + , typename iterator_traits::size_type len2 + , typename iterator_traits::size_type collected + , typename iterator_traits::size_type l_intbuf + , typename iterator_traits::size_type l_block + , bool use_internal_buf + , bool xbuf_used + , Compare comp + , adaptive_xbuf::value_type> & xbuf + ) +{ + typedef typename iterator_traits::size_type size_type; + (void)l_block; + size_type n_keys = collected-l_intbuf; + size_type len = len1+len2; + if(use_internal_buf){ + if(xbuf_used){ + xbuf.clear(); + //Nothing to do + if(n_keys){ + stable_sort(first, first+n_keys, comp, xbuf); + stable_merge(first, first+n_keys, first+len, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A key mrg: ", len); + } + } + else{ + xbuf.clear(); + stable_sort(first, first+collected, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A k/b srt: ", len); + stable_merge(first, first+collected, first+len, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A k/b mrg: ", len); + } + } + else{ + xbuf.clear(); + stable_sort(first, first+collected, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A k/b srt: ", len); + stable_merge(first, first+collected, first+len1+len2, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" A k/b mrg: ", len); + } +} + +template +inline SizeType adaptive_merge_n_keys_intbuf(SizeType &rl_block, SizeType len1, SizeType len2, Xbuf & xbuf, SizeType &l_intbuf_inout) +{ + typedef SizeType size_type; + size_type l_block = rl_block; + size_type l_intbuf = xbuf.capacity() >= l_block ? 0u : l_block; + + while(xbuf.capacity() >= l_block*2){ + l_block *= 2; + } + + //This is the minimum number of keys to implement the ideal algorithm + size_type n_keys = len1/l_block+len2/l_block; + while(n_keys >= ((len1-l_intbuf-n_keys)/l_block + len2/l_block)){ + --n_keys; + } + ++n_keys; + BOOST_ASSERT(n_keys >= ((len1-l_intbuf-n_keys)/l_block + len2/l_block)); + + if(xbuf.template supports_aligned_trailing(l_block, n_keys)){ + n_keys = 0u; + } + l_intbuf_inout = l_intbuf; + rl_block = l_block; + return n_keys; +} + +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// + +// Main explanation of the sort algorithm. +// +// csqrtlen = ceil(sqrt(len)); +// +// * First, 2*csqrtlen unique elements elements are extracted from elements to be +// sorted and placed in the beginning of the range. +// +// * Step "build_blocks": In this nearly-classic merge step, 2*csqrtlen unique elements +// will be used as auxiliary memory, so trailing len-2*csqrtlen elements are +// are grouped in blocks of sorted 4*csqrtlen elements. At the end of the step +// 2*csqrtlen unique elements are again the leading elements of the whole range. +// +// * Step "combine_blocks": pairs of previously formed blocks are merged with a different +// ("smart") algorithm to form blocks of 8*csqrtlen elements. This step is slower than the +// "build_blocks" step and repeated iteratively (forming blocks of 16*csqrtlen, 32*csqrtlen +// elements, etc) of until all trailing (len-2*csqrtlen) elements are merged. +// +// In "combine_blocks" len/csqrtlen elements used are as "keys" (markers) to +// know if elements belong to the first or second block to be merged and another +// leading csqrtlen elements are used as buffer. Explanation of the "combine_blocks" step: +// +// Iteratively until all trailing (len-2*csqrtlen) elements are merged: +// Iteratively for each pair of previously merged block: +// * Blocks are divided groups of csqrtlen elements and +// 2*merged_block/csqrtlen keys are sorted to be used as markers +// * Groups are selection-sorted by first or last element (depending wheter they +// merged to left or right) and keys are reordered accordingly as an imitation-buffer. +// * Elements of each block pair are merged using the csqrtlen buffer taking into account +// if they belong to the first half or second half (marked by the key). +// +// * In the final merge step leading elements (2*csqrtlen) are sorted and merged with +// rotations with the rest of sorted elements in the "combine_blocks" step. +// +// Corner cases: +// +// * If no 2*csqrtlen elements can be extracted: +// +// * If csqrtlen+len/csqrtlen are extracted, then only csqrtlen elements are used +// as buffer in the "build_blocks" step forming blocks of 2*csqrtlen elements. This +// means that an additional "combine_blocks" step will be needed to merge all elements. +// +// * If no csqrtlen+len/csqrtlen elements can be extracted, but still more than a minimum, +// then reduces the number of elements used as buffer and keys in the "build_blocks" +// and "combine_blocks" steps. If "combine_blocks" has no enough keys due to this reduction +// then uses a rotation based smart merge. +// +// * If the minimum number of keys can't be extracted, a rotation-based sorting is performed. +// +// * If auxiliary memory is more or equal than ceil(len/2), half-copying mergesort is used. +// +// * If auxiliary memory is more than csqrtlen+n_keys*sizeof(std::size_t), +// then only csqrtlen elements need to be extracted and "combine_blocks" will use integral +// keys to combine blocks. +// +// * If auxiliary memory is available, the "build_blocks" will be extended to build bigger blocks +// using classic merge. +template +void adaptive_sort_impl + ( RandIt first + , typename iterator_traits::size_type const len + , Compare comp + , adaptive_xbuf::value_type> & xbuf + ) +{ + typedef typename iterator_traits::size_type size_type; + + //Small sorts go directly to insertion sort + if(len <= size_type(AdaptiveSortInsertionSortThreshold)){ + insertion_sort(first, first + len, comp); + return; + } + + if((len-len/2) <= xbuf.capacity()){ + merge_sort(first, first+len, comp, xbuf.data()); + return; + } + + //Make sure it is at least four + BOOST_STATIC_ASSERT(AdaptiveSortInsertionSortThreshold >= 4); + + size_type l_base = 0; + size_type l_intbuf = 0; + size_type n_keys = 0; + size_type l_build_buf = 0; + + //Calculate and extract needed unique elements. If a minimum is not achieved + //fallback to rotation-based merge + if(!adaptive_sort_build_params(first, len, comp, n_keys, l_intbuf, l_base, l_build_buf, xbuf)){ + stable_sort(first, first+len, comp, xbuf); + return; + } + BOOST_ASSERT(l_build_buf); + //Otherwise, continue the adaptive_sort + BOOST_MOVE_ADAPTIVE_SORT_PRINT("\n After collect_unique: ", len); + size_type const n_key_plus_buf = l_intbuf+n_keys; + //l_build_buf is always power of two if l_intbuf is zero + BOOST_ASSERT(l_intbuf || (0 == (l_build_buf & (l_build_buf-1)))); + + //Classic merge sort until internal buffer and xbuf are exhausted + size_type const l_merged = adaptive_sort_build_blocks + (first+n_key_plus_buf-l_build_buf, len-n_key_plus_buf+l_build_buf, l_base, l_build_buf, xbuf, comp); + BOOST_MOVE_ADAPTIVE_SORT_PRINT(" After build_blocks: ", len); + + //Non-trivial merge + bool const buffer_right = adaptive_sort_combine_all_blocks + (first, n_keys, first+n_keys, len-n_keys, l_merged, l_intbuf, xbuf, comp); + + //Sort keys and buffer and merge the whole sequence + adaptive_sort_final_merge(buffer_right, first, l_intbuf, n_keys, len, xbuf, comp); +} + +// Main explanation of the merge algorithm. +// +// csqrtlen = ceil(sqrt(len)); +// +// * First, csqrtlen [to be used as buffer] + (len/csqrtlen - 1) [to be used as keys] => to_collect +// unique elements are extracted from elements to be sorted and placed in the beginning of the range. +// +// * Step "combine_blocks": the leading (len1-to_collect) elements plus trailing len2 elements +// are merged with a non-trivial ("smart") algorithm to form an ordered range trailing "len-to_collect" elements. +// +// Explanation of the "combine_blocks" step: +// +// * Trailing [first+to_collect, first+len1) elements are divided in groups of cqrtlen elements. +// Remaining elements that can't form a group are grouped in front of those elements. +// * Trailing [first+len1, first+len1+len2) elements are divided in groups of cqrtlen elements. +// Remaining elements that can't form a group are grouped in the back of those elements. +// * In parallel the following two steps are performed: +// * Groups are selection-sorted by first or last element (depending wheter they +// merged to left or right) and keys are reordered accordingly as an imitation-buffer. +// * Elements of each block pair are merged using the csqrtlen buffer taking into account +// if they belong to the first half or second half (marked by the key). +// +// * In the final merge step leading "to_collect" elements are merged with rotations +// with the rest of merged elements in the "combine_blocks" step. +// +// Corner cases: +// +// * If no "to_collect" elements can be extracted: +// +// * If more than a minimum number of elements is extracted +// then reduces the number of elements used as buffer and keys in the +// and "combine_blocks" steps. If "combine_blocks" has no enough keys due to this reduction +// then uses a rotation based smart merge. +// +// * If the minimum number of keys can't be extracted, a rotation-based merge is performed. +// +// * If auxiliary memory is more or equal than min(len1, len2), a buffered merge is performed. +// +// * If the len1 or len2 are less than 2*csqrtlen then a rotation-based merge is performed. +// +// * If auxiliary memory is more than csqrtlen+n_keys*sizeof(std::size_t), +// then no csqrtlen need to be extracted and "combine_blocks" will use integral +// keys to combine blocks. +template +void adaptive_merge_impl + ( RandIt first + , typename iterator_traits::size_type const len1 + , typename iterator_traits::size_type const len2 + , Compare comp + , adaptive_xbuf::value_type> & xbuf + ) +{ + typedef typename iterator_traits::size_type size_type; + + if(xbuf.capacity() >= min_value(len1, len2)){ + buffered_merge(first, first+len1, first+(len1+len2), comp, xbuf); + } + else{ + const size_type len = len1+len2; + //Calculate ideal parameters and try to collect needed unique keys + size_type l_block = size_type(ceil_sqrt(len)); + + //One range is not big enough to extract keys and the internal buffer so a + //rotation-based based merge will do just fine + if(len1 <= l_block*2 || len2 <= l_block*2){ + merge_bufferless(first, first+len1, first+len1+len2, comp); + return; + } + + //Detail the number of keys and internal buffer. If xbuf has enough memory, no + //internal buffer is needed so l_intbuf will remain 0. + size_type l_intbuf = 0; + size_type n_keys = adaptive_merge_n_keys_intbuf(l_block, len1, len2, xbuf, l_intbuf); + size_type const to_collect = l_intbuf+n_keys; + //Try to extract needed unique values from the first range + size_type const collected = collect_unique(first, first+len1, to_collect, comp, xbuf); + BOOST_MOVE_ADAPTIVE_SORT_PRINT("\n A collect: ", len); + + //Not the minimum number of keys is not available on the first range, so fallback to rotations + if(collected != to_collect && collected < 4){ + merge_bufferless(first, first+len1, first+len1+len2, comp); + return; + } + + //If not enough keys but more than minimum, adjust the internal buffer and key count + bool use_internal_buf = collected == to_collect; + if (!use_internal_buf){ + l_intbuf = 0u; + n_keys = collected; + l_block = lblock_for_combine(l_intbuf, n_keys, len, use_internal_buf); + //If use_internal_buf is false, then then internal buffer will be zero and rotation-based combination will be used + l_intbuf = use_internal_buf ? l_block : 0u; + } + + bool const xbuf_used = collected == to_collect && xbuf.capacity() >= l_block; + //Merge trailing elements using smart merges + adaptive_merge_combine_blocks(first, len1, len2, collected, n_keys, l_block, use_internal_buf, xbuf_used, comp, xbuf); + //Merge buffer and keys with the rest of the values + adaptive_merge_final_merge (first, len1, len2, collected, l_intbuf, l_block, use_internal_buf, xbuf_used, comp, xbuf); + } +} + + +} //namespace detail_adaptive { +} //namespace movelib { +} //namespace boost { + +#include + +#endif //#define BOOST_MOVE_ADAPTIVE_SORT_MERGE_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/detail/basic_op.hpp b/lib/3rdParty/boost/boost/move/algo/detail/basic_op.hpp new file mode 100644 index 0000000..a9369e0 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/detail/basic_op.hpp @@ -0,0 +1,121 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_MOVE_ALGO_BASIC_OP +#define BOOST_MOVE_ALGO_BASIC_OP + +#ifndef BOOST_CONFIG_HPP +# include +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include +#include +#include + +namespace boost { +namespace movelib { + +struct forward_t{}; +struct backward_t{}; +struct three_way_t{}; +struct three_way_forward_t{}; +struct four_way_t{}; + +struct move_op +{ + template + void operator()(SourceIt source, DestinationIt dest) + { *dest = ::boost::move(*source); } + + template + DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + { return ::boost::move(first, last, dest_begin); } + + template + DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_last) + { return ::boost::move_backward(first, last, dest_last); } + + template + void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) + { + *dest2it = boost::move(*dest1it); + *dest1it = boost::move(*srcit); + } + + template + DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it) + { + //Destination2 range can overlap SourceIt range so avoid boost::move + while(srcit != srcitend){ + this->operator()(three_way_t(), srcit++, dest1it++, dest2it++); + } + return dest2it; + } + + template + void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) + { + *dest3it = boost::move(*dest2it); + *dest2it = boost::move(*dest1it); + *dest1it = boost::move(*srcit); + } +}; + +struct swap_op +{ + template + void operator()(SourceIt source, DestinationIt dest) + { boost::adl_move_swap(*dest, *source); } + + template + DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + { return boost::adl_move_swap_ranges(first, last, dest_begin); } + + template + DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + { return boost::adl_move_swap_ranges_backward(first, last, dest_begin); } + + template + void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) + { + typename ::boost::movelib::iterator_traits::value_type tmp(boost::move(*dest2it)); + *dest2it = boost::move(*dest1it); + *dest1it = boost::move(*srcit); + *srcit = boost::move(tmp); + } + + template + DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it) + { + while(srcit != srcitend){ + this->operator()(three_way_t(), srcit++, dest1it++, dest2it++); + } + return dest2it; + } + + template + void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) + { + typename ::boost::movelib::iterator_traits::value_type tmp(boost::move(*dest3it)); + *dest3it = boost::move(*dest2it); + *dest2it = boost::move(*dest1it); + *dest1it = boost::move(*srcit); + *srcit = boost::move(tmp); + } +}; + + +}} //namespace boost::movelib + +#endif //BOOST_MOVE_ALGO_BASIC_OP diff --git a/lib/3rdParty/boost/boost/move/algo/detail/insertion_sort.hpp b/lib/3rdParty/boost/boost/move/algo/detail/insertion_sort.hpp new file mode 100644 index 0000000..15df35d --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/detail/insertion_sort.hpp @@ -0,0 +1,127 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2014-2014. +// 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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +//! \file + +#ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP +#define BOOST_MOVE_DETAIL_INSERT_SORT_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace movelib{ + +// @cond + +template +void insertion_sort_op(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp, Op op) +{ + if (first1 != last1){ + BirdirectionalIterator last2 = first2; + op(first1, last2); + for (++last2; ++first1 != last1; ++last2){ + BirdirectionalIterator j2 = last2; + BirdirectionalIterator i2 = j2; + if (comp(*first1, *--i2)){ + op(i2, j2); + for (--j2; i2 != first2 && comp(*first1, *--i2); --j2) { + op(i2, j2); + } + } + op(first1, j2); + } + } +} + +template +void insertion_sort_swap(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp) +{ + insertion_sort_op(first1, last1, first2, comp, swap_op()); +} + + +template +void insertion_sort_copy(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp) +{ + insertion_sort_op(first1, last1, first2, comp, move_op()); +} + +// @endcond + +template +void insertion_sort(BirdirectionalIterator first, BirdirectionalIterator last, Compare comp) +{ + typedef typename boost::movelib::iterator_traits::value_type value_type; + if (first != last){ + BirdirectionalIterator i = first; + for (++i; i != last; ++i){ + BirdirectionalIterator j = i; + if (comp(*i, *--j)) { + value_type tmp(::boost::move(*i)); + *i = ::boost::move(*j); + for (BirdirectionalIterator k = j; k != first && comp(tmp, *--k); --j) { + *j = ::boost::move(*k); + } + *j = ::boost::move(tmp); + } + } + } +} + +template +void insertion_sort_uninitialized_copy + (BirdirectionalIterator first1, BirdirectionalIterator const last1 + , typename iterator_traits::value_type* const first2 + , Compare comp) +{ + typedef typename iterator_traits::value_type value_type; + if (first1 != last1){ + value_type* last2 = first2; + ::new(last2, boost_move_new_t()) value_type(move(*first1)); + destruct_n d(first2); + d.incr(); + for (++last2; ++first1 != last1; ++last2){ + value_type* j2 = last2; + value_type* k2 = j2; + if (comp(*first1, *--k2)){ + ::new(j2, boost_move_new_t()) value_type(move(*k2)); + d.incr(); + for (--j2; k2 != first2 && comp(*first1, *--k2); --j2) + *j2 = move(*k2); + *j2 = move(*first1); + } + else{ + ::new(j2, boost_move_new_t()) value_type(move(*first1)); + d.incr(); + } + } + d.release(); + } +} + +}} //namespace boost { namespace movelib{ + +#endif //#ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/detail/merge.hpp b/lib/3rdParty/boost/boost/move/algo/detail/merge.hpp new file mode 100644 index 0000000..988ffd3 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/detail/merge.hpp @@ -0,0 +1,637 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_MOVE_MERGE_HPP +#define BOOST_MOVE_MERGE_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace movelib { + +// @cond + +/* +template +inline Unsigned gcd(Unsigned x, Unsigned y) +{ + if(0 == ((x &(x-1)) | (y & (y-1)))){ + return x < y ? x : y; + } + else{ + do + { + Unsigned t = x % y; + x = y; + y = t; + } while (y); + return x; + } +} +*/ + +//Modified version from "An Optimal In-Place Array Rotation Algorithm", Ching-Kuang Shene +template +Unsigned gcd(Unsigned x, Unsigned y) +{ + if(0 == ((x &(x-1)) | (y & (y-1)))){ + return x < y ? x : y; + } + else{ + Unsigned z = 1; + while((!(x&1)) & (!(y&1))){ + z <<=1, x>>=1, y>>=1; + } + while(x && y){ + if(!(x&1)) + x >>=1; + else if(!(y&1)) + y >>=1; + else if(x >=y) + x = (x-y) >> 1; + else + y = (y-x) >> 1; + } + return z*(x+y); + } +} + +template +RandIt rotate_gcd(RandIt first, RandIt middle, RandIt last) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + + if(first == middle) + return last; + if(middle == last) + return first; + const size_type middle_pos = size_type(middle - first); + RandIt ret = last - middle_pos; + if (middle == ret){ + boost::adl_move_swap_ranges(first, middle, middle); + } + else{ + const size_type length = size_type(last - first); + for( RandIt it_i(first), it_gcd(it_i + gcd(length, middle_pos)) + ; it_i != it_gcd + ; ++it_i){ + value_type temp(boost::move(*it_i)); + RandIt it_j = it_i; + RandIt it_k = it_j+middle_pos; + do{ + *it_j = boost::move(*it_k); + it_j = it_k; + size_type const left = size_type(last - it_j); + it_k = left > middle_pos ? it_j + middle_pos : first + (middle_pos - left); + } while(it_k != it_i); + *it_j = boost::move(temp); + } + } + return ret; +} + +template +RandIt lower_bound + (RandIt first, const RandIt last, const T& key, Compare comp) +{ + typedef typename iterator_traits + ::size_type size_type; + size_type len = size_type(last - first); + RandIt middle; + + while (len) { + size_type step = len >> 1; + middle = first; + middle += step; + + if (comp(*middle, key)) { + first = ++middle; + len -= step + 1; + } + else{ + len = step; + } + } + return first; +} + +template +RandIt upper_bound + (RandIt first, const RandIt last, const T& key, Compare comp) +{ + typedef typename iterator_traits + ::size_type size_type; + size_type len = size_type(last - first); + RandIt middle; + + while (len) { + size_type step = len >> 1; + middle = first; + middle += step; + + if (!comp(key, *middle)) { + first = ++middle; + len -= step + 1; + } + else{ + len = step; + } + } + return first; +} + + +template +void op_merge_left( RandIt buf_first + , RandIt first1 + , RandIt const last1 + , RandIt const last2 + , Compare comp + , Op op) +{ + for(RandIt first2=last1; first2 != last2; ++buf_first){ + if(first1 == last1){ + op(forward_t(), first2, last2, buf_first); + return; + } + else if(comp(*first2, *first1)){ + op(first2, buf_first); + ++first2; + } + else{ + op(first1, buf_first); + ++first1; + } + } + if(buf_first != first1){//In case all remaining elements are in the same place + //(e.g. buffer is exactly the size of the second half + //and all elements from the second half are less) + op(forward_t(), first1, last1, buf_first); + } + else{ + buf_first = buf_first; + } +} + +// [buf_first, first1) -> buffer +// [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1)) +// Elements from buffer are moved to [last2 - (first1-buf_first), last2) +// Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs +template +void merge_left + (RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp) +{ + op_merge_left(buf_first, first1, last1, last2, comp, move_op()); +} + +// [buf_first, first1) -> buffer +// [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1)) +// Elements from buffer are swapped to [last2 - (first1-buf_first), last2) +// Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs +template +void swap_merge_left + (RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp) +{ + op_merge_left(buf_first, first1, last1, last2, comp, swap_op()); +} + +template +void op_merge_right + (RandIt const first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp, Op op) +{ + RandIt const first2 = last1; + while(first1 != last1){ + if(last2 == first2){ + op(backward_t(), first1, last1, buf_last); + return; + } + --last2; + --last1; + --buf_last; + if(comp(*last2, *last1)){ + op(last1, buf_last); + ++last2; + } + else{ + op(last2, buf_last); + ++last1; + } + } + if(last2 != buf_last){ //In case all remaining elements are in the same place + //(e.g. buffer is exactly the size of the first half + //and all elements from the second half are less) + op(backward_t(), first2, last2, buf_last); + } +} + +// [last2, buf_last) - buffer +// [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last) +// Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs +template +void merge_right + (RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp) +{ + op_merge_right(first1, last1, last2, buf_last, comp, move_op()); +} + +// [last2, buf_last) - buffer +// [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last) +// Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs +template +void swap_merge_right + (RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp) +{ + op_merge_right(first1, last1, last2, buf_last, comp, swap_op()); +} + +template +void merge_bufferless_ONlogN_recursive + (BidirIt first, BidirIt middle, BidirIt last, Distance len1, Distance len2, Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + while(1) { + //#define MERGE_BUFFERLESS_RECURSIVE_OPT + #ifndef MERGE_BUFFERLESS_RECURSIVE_OPT + if (len2 == 0) { + return; + } + + if (!len1) { + return; + } + + if ((len1 | len2) == 1) { + if (comp(*middle, *first)) + adl_move_swap(*first, *middle); + return; + } + #else + if (len2 == 0) { + return; + } + + if (!len1) { + return; + } + BidirIt middle_prev = middle; --middle_prev; + if(!comp(*middle, *middle_prev)) + return; + + while(true) { + if (comp(*middle, *first)) + break; + ++first; + if(--len1 == 1) + break; + } + + if (len1 == 1 && len2 == 1) { + //comp(*middle, *first) == true already tested in the loop + adl_move_swap(*first, *middle); + return; + } + #endif + + BidirIt first_cut = first; + BidirIt second_cut = middle; + Distance len11 = 0; + Distance len22 = 0; + if (len1 > len2) { + len11 = len1 / 2; + first_cut += len11; + second_cut = lower_bound(middle, last, *first_cut, comp); + len22 = size_type(second_cut - middle); + } + else { + len22 = len2 / 2; + second_cut += len22; + first_cut = upper_bound(first, middle, *second_cut, comp); + len11 = size_type(first_cut - first); + } + BidirIt new_middle = rotate_gcd(first_cut, middle, second_cut); + + //Avoid one recursive call doing a manual tail call elimination on the biggest range + const Distance len_internal = len11+len22; + if( len_internal < (len1 + len2 - len_internal) ) { + merge_bufferless_ONlogN_recursive(first, first_cut, new_middle, len11, len22, comp); + //merge_bufferless_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp); + first = new_middle; + middle = second_cut; + len1 -= len11; + len2 -= len22; + } + else { + //merge_bufferless_recursive(first, first_cut, new_middle, len11, len22, comp); + merge_bufferless_ONlogN_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp); + middle = first_cut; + last = new_middle; + len1 = len11; + len2 = len22; + } + } +} + +//Complexity: NlogN +template +void merge_bufferless_ONlogN(BidirIt first, BidirIt middle, BidirIt last, Compare comp) +{ + merge_bufferless_ONlogN_recursive + (first, middle, last, middle - first, last - middle, comp); +} + +//Complexity: min(len1,len2)^2 + max(len1,len2) +template +void merge_bufferless_ON2(RandIt first, RandIt middle, RandIt last, Compare comp) +{ + if((middle - first) < (last - middle)){ + while(first != middle){ + RandIt const old_last1 = middle; + middle = lower_bound(middle, last, *first, comp); + first = rotate_gcd(first, old_last1, middle); + if(middle == last){ + break; + } + do{ + ++first; + } while(first != middle && !comp(*middle, *first)); + } + } + else{ + while(middle != last){ + RandIt p = upper_bound(first, middle, last[-1], comp); + last = rotate_gcd(p, middle, last); + middle = p; + if(middle == first){ + break; + } + --p; + do{ + --last; + } while(middle != last && !comp(last[-1], *p)); + } + } +} + +template +void merge_bufferless(RandIt first, RandIt middle, RandIt last, Compare comp) +{ + //#define BOOST_ADAPTIVE_MERGE_NLOGN_MERGE + #ifdef BOOST_ADAPTIVE_MERGE_NLOGN_MERGE + merge_bufferless_ONlogN(first, middle, last, comp); + #else + merge_bufferless_ON2(first, middle, last, comp); + #endif //BOOST_ADAPTIVE_MERGE_NLOGN_MERGE +} + +template +struct antistable +{ + explicit antistable(Comp &comp) + : m_comp(comp) + {} + + template + bool operator()(const U &u, const V & v) + { return !m_comp(v, u); } + + private: + antistable & operator=(const antistable &); + Comp &m_comp; +}; + +template +class negate +{ + public: + negate() + {} + + explicit negate(Comp comp) + : m_comp(comp) + {} + + template + bool operator()(const T1& l, const T2& r) + { + return !m_comp(l, r); + } + + private: + Comp m_comp; +}; + + +template +class inverse +{ + public: + inverse() + {} + + explicit inverse(Comp comp) + : m_comp(comp) + {} + + template + bool operator()(const T1& l, const T2& r) + { + return m_comp(r, l); + } + + private: + Comp m_comp; +}; + +// [r_first, r_last) are already in the right part of the destination range. +template +void op_merge_with_right_placed + ( InputIterator first, InputIterator last + , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last + , Compare comp, Op op) +{ + BOOST_ASSERT((last - first) == (r_first - dest_first)); + while ( first != last ) { + if (r_first == r_last) { + InputOutIterator end = op(forward_t(), first, last, dest_first); + BOOST_ASSERT(end == r_last); + (void)end; + return; + } + else if (comp(*r_first, *first)) { + op(r_first, dest_first); + ++r_first; + } + else { + op(first, dest_first); + ++first; + } + ++dest_first; + } + // Remaining [r_first, r_last) already in the correct place +} + +template +void swap_merge_with_right_placed + ( InputIterator first, InputIterator last + , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last + , Compare comp) +{ + op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, swap_op()); +} + +// [first, last) are already in the right part of the destination range. +template +void op_merge_with_left_placed + ( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last + , BidirIterator const r_first, BidirIterator r_last + , Compare comp, Op op) +{ + BOOST_ASSERT((dest_last - last) == (r_last - r_first)); + while( r_first != r_last ) { + if(first == last) { + BidirOutIterator res = op(backward_t(), r_first, r_last, dest_last); + BOOST_ASSERT(last == res); + (void)res; + return; + } + --r_last; + --last; + if(comp(*r_last, *last)){ + ++r_last; + --dest_last; + op(last, dest_last); + } + else{ + ++last; + --dest_last; + op(r_last, dest_last); + } + } + // Remaining [first, last) already in the correct place +} + +// @endcond + +// [irst, last) are already in the right part of the destination range. +template +void merge_with_left_placed + ( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last + , BidirIterator const r_first, BidirIterator r_last + , Compare comp) +{ + op_merge_with_left_placed(first, last, dest_last, r_first, r_last, comp, move_op()); +} + +// [r_first, r_last) are already in the right part of the destination range. +template +void merge_with_right_placed + ( InputIterator first, InputIterator last + , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last + , Compare comp) +{ + op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, move_op()); +} + +// [r_first, r_last) are already in the right part of the destination range. +// [dest_first, r_first) is uninitialized memory +template +void uninitialized_merge_with_right_placed + ( InputIterator first, InputIterator last + , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last + , Compare comp) +{ + BOOST_ASSERT((last - first) == (r_first - dest_first)); + typedef typename iterator_traits::value_type value_type; + InputOutIterator const original_r_first = r_first; + + destruct_n d(&*dest_first); + + while ( first != last && dest_first != original_r_first ) { + if (r_first == r_last) { + for(; dest_first != original_r_first; ++dest_first, ++first){ + ::new(&*dest_first) value_type(::boost::move(*first)); + d.incr(); + } + d.release(); + InputOutIterator end = ::boost::move(first, last, original_r_first); + BOOST_ASSERT(end == r_last); + (void)end; + return; + } + else if (comp(*r_first, *first)) { + ::new(&*dest_first) value_type(::boost::move(*r_first)); + d.incr(); + ++r_first; + } + else { + ::new(&*dest_first) value_type(::boost::move(*first)); + d.incr(); + ++first; + } + ++dest_first; + } + d.release(); + merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp); +} + +/* +// [r_first, r_last) are already in the right part of the destination range. +// [dest_first, r_first) is uninitialized memory +template +void uninitialized_merge_with_left_placed + ( BidirOutIterator dest_first, BidirOutIterator r_first, BidirOutIterator r_last + , BidirIterator first, BidirIterator last + , Compare comp) +{ + BOOST_ASSERT((last - first) == (r_last - r_first)); + typedef typename iterator_traits::value_type value_type; + BidirOutIterator const original_r_last = r_last; + + destruct_n d(&*dest_last); + + while ( first != last && dest_first != original_r_first ) { + if (r_first == r_last) { + for(; dest_first != original_r_first; ++dest_first, ++first){ + ::new(&*dest_first) value_type(::boost::move(*first)); + d.incr(); + } + d.release(); + BidirOutIterator end = ::boost::move(first, last, original_r_first); + BOOST_ASSERT(end == r_last); + (void)end; + return; + } + else if (comp(*r_first, *first)) { + ::new(&*dest_first) value_type(::boost::move(*r_first)); + d.incr(); + ++r_first; + } + else { + ::new(&*dest_first) value_type(::boost::move(*first)); + d.incr(); + ++first; + } + ++dest_first; + } + d.release(); + merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp); +} +*/ + +} //namespace movelib { +} //namespace boost { + +#endif //#define BOOST_MOVE_MERGE_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/detail/merge_sort.hpp b/lib/3rdParty/boost/boost/move/algo/detail/merge_sort.hpp new file mode 100644 index 0000000..892639b --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/detail/merge_sort.hpp @@ -0,0 +1,139 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +//! \file + +#ifndef BOOST_MOVE_DETAIL_MERGE_SORT_HPP +#define BOOST_MOVE_DETAIL_MERGE_SORT_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace movelib { + +// @cond + +static const unsigned MergeSortInsertionSortThreshold = 16; + +template +void inplace_stable_sort(RandIt first, RandIt last, Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + if (size_type(last - first) <= size_type(MergeSortInsertionSortThreshold)) { + insertion_sort(first, last, comp); + return; + } + RandIt middle = first + (last - first) / 2; + inplace_stable_sort(first, middle, comp); + inplace_stable_sort(middle, last, comp); + merge_bufferless_ONlogN_recursive + (first, middle, last, size_type(middle - first), size_type(last - middle), comp); +} + +// @endcond + +template +void merge_sort_copy( RandIt first, RandIt last + , RandIt2 dest, Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + + size_type const count = size_type(last - first); + if(count <= MergeSortInsertionSortThreshold){ + insertion_sort_copy(first, last, dest, comp); + } + else{ + size_type const half = count/2; + merge_sort_copy(first + half, last , dest+half , comp); + merge_sort_copy(first , first + half, first + half, comp); + merge_with_right_placed + ( first + half, first + half + half + , dest, dest+half, dest + count + , comp); + } +} + +template +void merge_sort_uninitialized_copy( RandIt first, RandIt last + , typename iterator_traits::value_type* uninitialized + , Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + + size_type const count = size_type(last - first); + if(count <= MergeSortInsertionSortThreshold){ + insertion_sort_uninitialized_copy(first, last, uninitialized, comp); + } + else{ + size_type const half = count/2; + merge_sort_uninitialized_copy(first + half, last, uninitialized + half, comp); + destruct_n d(uninitialized+half); + d.incr(count-half); + merge_sort_copy(first, first + half, first + half, comp); + uninitialized_merge_with_right_placed + ( first + half, first + half + half + , uninitialized, uninitialized+half, uninitialized+count + , comp); + d.release(); + } +} + +template +void merge_sort( RandIt first, RandIt last, Compare comp + , typename iterator_traits::value_type* uninitialized) +{ + typedef typename iterator_traits::size_type size_type; + typedef typename iterator_traits::value_type value_type; + + size_type const count = size_type(last - first); + if(count <= MergeSortInsertionSortThreshold){ + insertion_sort(first, last, comp); + } + else{ + size_type const half = count/2; + size_type const rest = count - half; + RandIt const half_it = first + half; + RandIt const rest_it = first + rest; + + merge_sort_uninitialized_copy(half_it, last, uninitialized, comp); + destruct_n d(uninitialized); + d.incr(rest); + merge_sort_copy(first, half_it, rest_it, comp); + merge_with_right_placed + ( uninitialized, uninitialized + rest + , first, rest_it, last, antistable(comp)); + } +} + +}} //namespace boost { namespace movelib{ + +#include + +#endif //#ifndef BOOST_MOVE_DETAIL_MERGE_SORT_HPP diff --git a/lib/3rdParty/boost/boost/move/algo/move.hpp b/lib/3rdParty/boost/boost/move/algo/move.hpp new file mode 100644 index 0000000..d35f04a --- /dev/null +++ b/lib/3rdParty/boost/boost/move/algo/move.hpp @@ -0,0 +1,155 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2012-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +//! \file + +#ifndef BOOST_MOVE_ALGO_MOVE_HPP +#define BOOST_MOVE_ALGO_MOVE_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include + +#include +#include +#include + +namespace boost { + +////////////////////////////////////////////////////////////////////////////// +// +// move +// +////////////////////////////////////////////////////////////////////////////// + +#if !defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + + //! Effects: Moves elements in the range [first,last) into the range [result,result + (last - + //! first)) starting from first and proceeding to last. For each non-negative integer n < (last-first), + //! performs *(result + n) = ::boost::move (*(first + n)). + //! + //! Effects: result + (last - first). + //! + //! Requires: result shall not be in the range [first,last). + //! + //! Complexity: Exactly last - first move assignments. + template // O models OutputIterator + O move(I f, I l, O result) + { + while (f != l) { + *result = ::boost::move(*f); + ++f; ++result; + } + return result; + } + + ////////////////////////////////////////////////////////////////////////////// + // + // move_backward + // + ////////////////////////////////////////////////////////////////////////////// + + //! Effects: Moves elements in the range [first,last) into the range + //! [result - (last-first),result) starting from last - 1 and proceeding to + //! first. For each positive integer n <= (last - first), + //! performs *(result - n) = ::boost::move(*(last - n)). + //! + //! Requires: result shall not be in the range [first,last). + //! + //! Returns: result - (last - first). + //! + //! Complexity: Exactly last - first assignments. + template // O models BidirectionalIterator + O move_backward(I f, I l, O result) + { + while (f != l) { + --l; --result; + *result = ::boost::move(*l); + } + return result; + } + +#else + + using ::std::move_backward; + +#endif //!defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_move +// +////////////////////////////////////////////////////////////////////////////// + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! new (static_cast(&*result)) +//! typename iterator_traits::value_type(boost::move(*first)); +//! \endcode +//! +//! Returns: result +template + // F models ForwardIterator +F uninitialized_move(I f, I l, F r + /// @cond +// ,typename ::boost::move_detail::enable_if::value_type> >::type* = 0 + /// @endcond + ) +{ + typedef typename boost::movelib::iterator_traits::value_type input_value_type; + + F back = r; + BOOST_TRY{ + while (f != l) { + void * const addr = static_cast(::boost::move_detail::addressof(*r)); + ::new(addr) input_value_type(::boost::move(*f)); + ++f; ++r; + } + } + BOOST_CATCH(...){ + for (; back != r; ++back){ + back->~input_value_type(); + } + BOOST_RETHROW; + } + BOOST_CATCH_END + return r; +} + +/// @cond +/* +template + // F models ForwardIterator +F uninitialized_move(I f, I l, F r, + typename ::boost::move_detail::disable_if::value_type> >::type* = 0) +{ + return std::uninitialized_copy(f, l, r); +} +*/ + +/// @endcond + +} //namespace boost { + +#include + +#endif //#ifndef BOOST_MOVE_ALGO_MOVE_HPP diff --git a/lib/3rdParty/boost/boost/move/algorithm.hpp b/lib/3rdParty/boost/boost/move/algorithm.hpp index fbda0f4..825d771 100644 --- a/lib/3rdParty/boost/boost/move/algorithm.hpp +++ b/lib/3rdParty/boost/boost/move/algorithm.hpp @@ -26,6 +26,7 @@ #include #include +#include #include #include //copy, copy_backward @@ -33,122 +34,6 @@ namespace boost { -////////////////////////////////////////////////////////////////////////////// -// -// move -// -////////////////////////////////////////////////////////////////////////////// - -#if !defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) - - //! Effects: Moves elements in the range [first,last) into the range [result,result + (last - - //! first)) starting from first and proceeding to last. For each non-negative integer n < (last-first), - //! performs *(result + n) = ::boost::move (*(first + n)). - //! - //! Effects: result + (last - first). - //! - //! Requires: result shall not be in the range [first,last). - //! - //! Complexity: Exactly last - first move assignments. - template // O models OutputIterator - O move(I f, I l, O result) - { - while (f != l) { - *result = ::boost::move(*f); - ++f; ++result; - } - return result; - } - - ////////////////////////////////////////////////////////////////////////////// - // - // move_backward - // - ////////////////////////////////////////////////////////////////////////////// - - //! Effects: Moves elements in the range [first,last) into the range - //! [result - (last-first),result) starting from last - 1 and proceeding to - //! first. For each positive integer n <= (last - first), - //! performs *(result - n) = ::boost::move(*(last - n)). - //! - //! Requires: result shall not be in the range [first,last). - //! - //! Returns: result - (last - first). - //! - //! Complexity: Exactly last - first assignments. - template // O models BidirectionalIterator - O move_backward(I f, I l, O result) - { - while (f != l) { - --l; --result; - *result = ::boost::move(*l); - } - return result; - } - -#else - - using ::std::move_backward; - -#endif //!defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE) - -////////////////////////////////////////////////////////////////////////////// -// -// uninitialized_move -// -////////////////////////////////////////////////////////////////////////////// - -//! Effects: -//! \code -//! for (; first != last; ++result, ++first) -//! new (static_cast(&*result)) -//! typename iterator_traits::value_type(boost::move(*first)); -//! \endcode -//! -//! Returns: result -template - // F models ForwardIterator -F uninitialized_move(I f, I l, F r - /// @cond -// ,typename ::boost::move_detail::enable_if::value_type> >::type* = 0 - /// @endcond - ) -{ - typedef typename std::iterator_traits::value_type input_value_type; - - F back = r; - BOOST_TRY{ - while (f != l) { - void * const addr = static_cast(::boost::move_detail::addressof(*r)); - ::new(addr) input_value_type(::boost::move(*f)); - ++f; ++r; - } - } - BOOST_CATCH(...){ - for (; back != r; ++back){ - back->~input_value_type(); - } - BOOST_RETHROW; - } - BOOST_CATCH_END - return r; -} - -/// @cond -/* -template - // F models ForwardIterator -F uninitialized_move(I f, I l, F r, - typename ::boost::move_detail::disable_if::value_type> >::type* = 0) -{ - return std::uninitialized_copy(f, l, r); -} -*/ - ////////////////////////////////////////////////////////////////////////////// // // uninitialized_copy_or_move diff --git a/lib/3rdParty/boost/boost/move/core.hpp b/lib/3rdParty/boost/boost/move/core.hpp index 54aece0..1dd8a8c 100644 --- a/lib/3rdParty/boost/boost/move/core.hpp +++ b/lib/3rdParty/boost/boost/move/core.hpp @@ -197,7 +197,7 @@ namespace move_detail { template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < ::boost::move_detail::is_lvalue_reference::value || !::boost::has_move_emulation_enabled::value , T&>::type @@ -207,7 +207,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < !::boost::move_detail::is_lvalue_reference::value && ::boost::has_move_emulation_enabled::value , ::boost::rv&>::type @@ -217,7 +217,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < !::boost::move_detail::is_lvalue_reference::value && ::boost::has_move_emulation_enabled::value , ::boost::rv&>::type @@ -245,9 +245,9 @@ #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\ BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\ public:\ - operator ::boost::rv&() \ + BOOST_MOVE_FORCEINLINE operator ::boost::rv&() \ { return *BOOST_MOVE_TO_RV_CAST(::boost::rv*, this); }\ - operator const ::boost::rv&() const \ + BOOST_MOVE_FORCEINLINE operator const ::boost::rv&() const \ { return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv*, this); }\ private:\ // @@ -260,21 +260,21 @@ #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ public:\ - TYPE& operator=(TYPE &t)\ - { this->operator=(const_cast(t)); return *this;}\ + BOOST_MOVE_FORCEINLINE TYPE& operator=(TYPE &t)\ + { this->operator=(const_cast(t)); return *this;}\ public:\ - operator ::boost::rv&() \ + BOOST_MOVE_FORCEINLINE operator ::boost::rv&() \ { return *BOOST_MOVE_TO_RV_CAST(::boost::rv*, this); }\ - operator const ::boost::rv&() const \ + BOOST_MOVE_FORCEINLINE operator const ::boost::rv&() const \ { return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv*, this); }\ private:\ // #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\ public:\ - operator ::boost::rv&() \ + BOOST_MOVE_FORCEINLINE operator ::boost::rv&() \ { return *BOOST_MOVE_TO_RV_CAST(::boost::rv*, this); }\ - operator const ::boost::rv&() const \ + BOOST_MOVE_FORCEINLINE operator const ::boost::rv&() const \ { return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv*, this); }\ private:\ // @@ -301,6 +301,7 @@ BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\ public:\ typedef int boost_move_emulation_t;\ + private:\ // //! This macro marks a type as copyable and movable. @@ -450,7 +451,7 @@ namespace move_detail { template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < ::boost::move_detail::is_lvalue_reference::value , T&>::type move_return(T& x) BOOST_NOEXCEPT @@ -459,7 +460,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < !::boost::move_detail::is_lvalue_reference::value , Ret && >::type move_return(T&& t) BOOST_NOEXCEPT diff --git a/lib/3rdParty/boost/boost/move/detail/config_begin.hpp b/lib/3rdParty/boost/boost/move/detail/config_begin.hpp index 342390b..637eb15 100644 --- a/lib/3rdParty/boost/boost/move/detail/config_begin.hpp +++ b/lib/3rdParty/boost/boost/move/detail/config_begin.hpp @@ -16,4 +16,6 @@ # pragma warning (disable : 4324) // structure was padded due to __declspec(align()) # pragma warning (disable : 4675) // "function": resolved overload was found by argument-dependent lookup # pragma warning (disable : 4996) // "function": was declared deprecated (_CRT_SECURE_NO_DEPRECATE/_SCL_SECURE_NO_WARNINGS) +# pragma warning (disable : 4714) // "function": marked as __forceinline not inlined +# pragma warning (disable : 4127) // conditional expression is constant #endif diff --git a/lib/3rdParty/boost/boost/move/detail/destruct_n.hpp b/lib/3rdParty/boost/boost/move/detail/destruct_n.hpp new file mode 100644 index 0000000..06f1f58 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/detail/destruct_n.hpp @@ -0,0 +1,67 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2015-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/libs/move for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +//! \file + +#ifndef BOOST_MOVE_DETAIL_DESTRUCT_N_HPP +#define BOOST_MOVE_DETAIL_DESTRUCT_N_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include + +namespace boost { +namespace movelib{ + +template +class destruct_n +{ + public: + explicit destruct_n(T *raw) + : m_ptr(raw), m_size() + {} + + void incr() + { + ++m_size; + } + + void incr(std::size_t n) + { + m_size += n; + } + + void release() + { + m_size = 0u; + m_ptr = 0; + } + + ~destruct_n() + { + while(m_size--){ + m_ptr[m_size].~T(); + } + } + private: + T *m_ptr; + std::size_t m_size; +}; + +}} //namespace boost { namespace movelib{ + +#endif //#ifndef BOOST_MOVE_DETAIL_DESTRUCT_N_HPP diff --git a/lib/3rdParty/boost/boost/move/detail/fwd_macros.hpp b/lib/3rdParty/boost/boost/move/detail/fwd_macros.hpp index e091890..7132436 100644 --- a/lib/3rdParty/boost/boost/move/detail/fwd_macros.hpp +++ b/lib/3rdParty/boost/boost/move/detail/fwd_macros.hpp @@ -64,16 +64,22 @@ namespace move_detail { #endif //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES) //BOOST_MOVE_REPEATN(MACRO) +#define BOOST_MOVE_REPEAT(x, MACRO) BOOST_MOVE_REPEAT_I(x,MACRO) +#define BOOST_MOVE_REPEAT_I(x, MACRO) BOOST_MOVE_REPEAT##x(MACRO) #define BOOST_MOVE_REPEAT0(MACRO) -#define BOOST_MOVE_REPEAT1(MACRO) MACRO -#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO -#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO -#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO -#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO -#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO -#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO -#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO -#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO +#define BOOST_MOVE_REPEAT1(MACRO) MACRO +#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO +#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO +#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO +#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO +#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO +#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO +#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO +#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO +#define BOOST_MOVE_REPEAT10(MACRO) BOOST_MOVE_REPEAT9(MACRO), MACRO +#define BOOST_MOVE_REPEAT11(MACRO) BOOST_MOVE_REPEAT10(MACRO), MACRO +#define BOOST_MOVE_REPEAT12(MACRO) BOOST_MOVE_REPEAT11(MACRO), MACRO +#define BOOST_MOVE_REPEAT13(MACRO) BOOST_MOVE_REPEAT12(MACRO), MACRO //BOOST_MOVE_FWDN #define BOOST_MOVE_FWD0 @@ -99,6 +105,54 @@ namespace move_detail { #define BOOST_MOVE_FWDQ8 BOOST_MOVE_FWDQ7, ::boost::forward(q7) #define BOOST_MOVE_FWDQ9 BOOST_MOVE_FWDQ8, ::boost::forward(q8) +//BOOST_MOVE_TMPL_GETN +#define BOOST_MOVE_TMPL_GET0 +#define BOOST_MOVE_TMPL_GET1 p.template get<0>() +#define BOOST_MOVE_TMPL_GET2 BOOST_MOVE_TMPL_GET1, p.template get<1>() +#define BOOST_MOVE_TMPL_GET3 BOOST_MOVE_TMPL_GET2, p.template get<2>() +#define BOOST_MOVE_TMPL_GET4 BOOST_MOVE_TMPL_GET3, p.template get<3>() +#define BOOST_MOVE_TMPL_GET5 BOOST_MOVE_TMPL_GET4, p.template get<4>() +#define BOOST_MOVE_TMPL_GET6 BOOST_MOVE_TMPL_GET5, p.template get<5>() +#define BOOST_MOVE_TMPL_GET7 BOOST_MOVE_TMPL_GET6, p.template get<6>() +#define BOOST_MOVE_TMPL_GET8 BOOST_MOVE_TMPL_GET7, p.template get<7>() +#define BOOST_MOVE_TMPL_GET9 BOOST_MOVE_TMPL_GET8, p.template get<8>() + +//BOOST_MOVE_TMPL_GETQN +#define BOOST_MOVE_TMPL_GETQ0 +#define BOOST_MOVE_TMPL_GETQ1 q.template get<0>() +#define BOOST_MOVE_TMPL_GETQ2 BOOST_MOVE_TMPL_GETQ1, q.template get<1>() +#define BOOST_MOVE_TMPL_GETQ3 BOOST_MOVE_TMPL_GETQ2, q.template get<2>() +#define BOOST_MOVE_TMPL_GETQ4 BOOST_MOVE_TMPL_GETQ3, q.template get<3>() +#define BOOST_MOVE_TMPL_GETQ5 BOOST_MOVE_TMPL_GETQ4, q.template get<4>() +#define BOOST_MOVE_TMPL_GETQ6 BOOST_MOVE_TMPL_GETQ5, q.template get<5>() +#define BOOST_MOVE_TMPL_GETQ7 BOOST_MOVE_TMPL_GETQ6, q.template get<6>() +#define BOOST_MOVE_TMPL_GETQ8 BOOST_MOVE_TMPL_GETQ7, q.template get<7>() +#define BOOST_MOVE_TMPL_GETQ9 BOOST_MOVE_TMPL_GETQ8, q.template get<8>() + +//BOOST_MOVE_GET_IDXN +#define BOOST_MOVE_GET_IDX0 +#define BOOST_MOVE_GET_IDX1 get<0>(p) +#define BOOST_MOVE_GET_IDX2 BOOST_MOVE_GET_IDX1, get<1>(p) +#define BOOST_MOVE_GET_IDX3 BOOST_MOVE_GET_IDX2, get<2>(p) +#define BOOST_MOVE_GET_IDX4 BOOST_MOVE_GET_IDX3, get<3>(p) +#define BOOST_MOVE_GET_IDX5 BOOST_MOVE_GET_IDX4, get<4>(p) +#define BOOST_MOVE_GET_IDX6 BOOST_MOVE_GET_IDX5, get<5>(p) +#define BOOST_MOVE_GET_IDX7 BOOST_MOVE_GET_IDX6, get<6>(p) +#define BOOST_MOVE_GET_IDX8 BOOST_MOVE_GET_IDX7, get<7>(p) +#define BOOST_MOVE_GET_IDX9 BOOST_MOVE_GET_IDX8, get<8>(p) + +//BOOST_MOVE_GET_IDXQN +#define BOOST_MOVE_GET_IDXQ0 +#define BOOST_MOVE_GET_IDXQ1 get<0>(q) +#define BOOST_MOVE_GET_IDXQ2 BOOST_MOVE_GET_IDXQ1, get<1>(q) +#define BOOST_MOVE_GET_IDXQ3 BOOST_MOVE_GET_IDXQ2, get<2>(q) +#define BOOST_MOVE_GET_IDXQ4 BOOST_MOVE_GET_IDXQ3, get<3>(q) +#define BOOST_MOVE_GET_IDXQ5 BOOST_MOVE_GET_IDXQ4, get<4>(q) +#define BOOST_MOVE_GET_IDXQ6 BOOST_MOVE_GET_IDXQ5, get<5>(q) +#define BOOST_MOVE_GET_IDXQ7 BOOST_MOVE_GET_IDXQ6, get<6>(q) +#define BOOST_MOVE_GET_IDXQ8 BOOST_MOVE_GET_IDXQ7, get<7>(q) +#define BOOST_MOVE_GET_IDXQ9 BOOST_MOVE_GET_IDXQ8, get<8>(q) + //BOOST_MOVE_ARGN #define BOOST_MOVE_ARG0 #define BOOST_MOVE_ARG1 p0 @@ -572,6 +626,45 @@ namespace move_detail { #define BOOST_MOVE_I8 BOOST_MOVE_I1 #define BOOST_MOVE_I9 BOOST_MOVE_I1 +//BOOST_MOVE_BOOL +# define BOOST_MOVE_BOOL(x) BOOST_MOVE_BOOL_I(x) +# define BOOST_MOVE_BOOL_I(x) BOOST_MOVE_BOOL##x +# define BOOST_MOVE_BOOL0 0 +# define BOOST_MOVE_BOOL1 1 +# define BOOST_MOVE_BOOL2 1 +# define BOOST_MOVE_BOOL3 1 +# define BOOST_MOVE_BOOL4 1 +# define BOOST_MOVE_BOOL5 1 +# define BOOST_MOVE_BOOL6 1 +# define BOOST_MOVE_BOOL7 1 +# define BOOST_MOVE_BOOL8 1 +# define BOOST_MOVE_BOOL9 1 + +//BOOST_MOVE_I_IF +#define BOOST_MOVE_I_IF(x) BOOST_MOVE_I_IF_I (BOOST_MOVE_BOOL(x)) +#define BOOST_MOVE_I_IF_I(x) BOOST_MOVE_I_IF_I2(x) +#define BOOST_MOVE_I_IF_I2(x) BOOST_MOVE_IF_I_##x +#define BOOST_MOVE_IF_I_0 +#define BOOST_MOVE_IF_I_1 , + +//BOOST_MOVE_IF +#define BOOST_MOVE_IF(cond, t, f) BOOST_MOVE_IF_I(cond, t, f) +#define BOOST_MOVE_IF_I(cond, t, f) BOOST_MOVE_IIF(BOOST_MOVE_BOOL(cond), t, f) + +#define BOOST_MOVE_IIF(bit, t, f) BOOST_MOVE_IIF_I(bit, t, f) +#define BOOST_MOVE_IIF_I(bit, t, f) BOOST_MOVE_IIF_##bit(t, f) +#define BOOST_MOVE_IIF_0(t, f) f +#define BOOST_MOVE_IIF_1(t, f) t + +/* +#define BOOST_MOVE_IIF(bit, t, f) BOOST_MOVE_IIF_OO((bit, t, f)) +#define BOOST_MOVE_IIF_OO(par) BOOST_MOVE_IIF_I ## par +#define BOOST_MOVE_IIF_I(bit, t, f) BOOST_MOVE_IIF_II(BOOST_MOVE_IIF_ ## bit(t, f)) +#define BOOST_MOVE_IIF_II(id) id +#define BOOST_MOVE_IIF_0(t, f) f +#define BOOST_MOVE_IIF_1(t, f) t +*/ + //BOOST_MOVE_COLON #define BOOST_MOVE_COLON0 #define BOOST_MOVE_COLON1 : @@ -584,6 +677,103 @@ namespace move_detail { #define BOOST_MOVE_COLON8 BOOST_MOVE_COLON1 #define BOOST_MOVE_COLON9 BOOST_MOVE_COLON1 +//BOOST_MOVE_BITOR +#define BOOST_MOVE_BITOR(x,y) BOOST_MOVE_BITOR_I(x,y) +#define BOOST_MOVE_BITOR_I(x,y) BOOST_MOVE_BITOR##x##y +#define BOOST_MOVE_BITOR00 0 +#define BOOST_MOVE_BITOR01 1 +#define BOOST_MOVE_BITOR10 1 +#define BOOST_MOVE_BITOR11 1 + +//BOOST_MOVE_OR +#define BOOST_MOVE_OR(x, y) BOOST_MOVE_OR_I(x, y) +#define BOOST_MOVE_OR_I(x, y) BOOST_MOVE_BITOR(BOOST_MOVE_BOOL(x), BOOST_MOVE_BOOL(y)) + +//BOOST_MOVE_BITAND +#define BOOST_MOVE_BITAND(x,y) BOOST_MOVE_BITAND_I(x,y) +#define BOOST_MOVE_BITAND_I(x,y) BOOST_MOVE_BITAND##x##y +#define BOOST_MOVE_BITAND00 0 +#define BOOST_MOVE_BITAND01 0 +#define BOOST_MOVE_BITAND10 0 +#define BOOST_MOVE_BITAND11 1 + +//BOOST_MOVE_AND +#define BOOST_MOVE_AND(x, y) BOOST_MOVE_AND_I(x, y) +#define BOOST_MOVE_AND_I(x, y) BOOST_MOVE_BITAND(BOOST_MOVE_BOOL(x), BOOST_MOVE_BOOL(y)) + +//BOOST_MOVE_DEC +#define BOOST_MOVE_DEC(x) BOOST_MOVE_DEC_I(x) +#define BOOST_MOVE_DEC_I(x) BOOST_MOVE_DEC##x +#define BOOST_MOVE_DEC1 0 +#define BOOST_MOVE_DEC2 1 +#define BOOST_MOVE_DEC3 2 +#define BOOST_MOVE_DEC4 3 +#define BOOST_MOVE_DEC5 4 +#define BOOST_MOVE_DEC6 5 +#define BOOST_MOVE_DEC7 6 +#define BOOST_MOVE_DEC8 7 +#define BOOST_MOVE_DEC9 8 +#define BOOST_MOVE_DEC10 9 +#define BOOST_MOVE_DEC11 10 +#define BOOST_MOVE_DEC12 11 +#define BOOST_MOVE_DEC13 12 +#define BOOST_MOVE_DEC14 13 + +//BOOST_MOVE_SUB +#define BOOST_MOVE_SUB(x, y) BOOST_MOVE_SUB_I(x,y) +#define BOOST_MOVE_SUB_I(x, y) BOOST_MOVE_SUB##y(x) +#define BOOST_MOVE_SUB0(x) x +#define BOOST_MOVE_SUB1(x) BOOST_MOVE_DEC(x) +#define BOOST_MOVE_SUB2(x) BOOST_MOVE_SUB1(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB3(x) BOOST_MOVE_SUB2(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB4(x) BOOST_MOVE_SUB3(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB5(x) BOOST_MOVE_SUB4(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB6(x) BOOST_MOVE_SUB5(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB7(x) BOOST_MOVE_SUB6(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB8(x) BOOST_MOVE_SUB7(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB9(x) BOOST_MOVE_SUB8(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB10(x) BOOST_MOVE_SUB9(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB11(x) BOOST_MOVE_SUB10(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB12(x) BOOST_MOVE_SUB11(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB13(x) BOOST_MOVE_SUB12(BOOST_MOVE_DEC(x)) +#define BOOST_MOVE_SUB14(x) BOOST_MOVE_SUB13(BOOST_MOVE_DEC(x)) + +//BOOST_MOVE_INC +#define BOOST_MOVE_INC(x) BOOST_MOVE_INC_I(x) +#define BOOST_MOVE_INC_I(x) BOOST_MOVE_INC##x +#define BOOST_MOVE_INC0 1 +#define BOOST_MOVE_INC1 2 +#define BOOST_MOVE_INC2 3 +#define BOOST_MOVE_INC3 4 +#define BOOST_MOVE_INC4 5 +#define BOOST_MOVE_INC5 6 +#define BOOST_MOVE_INC6 7 +#define BOOST_MOVE_INC7 8 +#define BOOST_MOVE_INC8 9 +#define BOOST_MOVE_INC9 10 +#define BOOST_MOVE_INC10 11 +#define BOOST_MOVE_INC11 12 +#define BOOST_MOVE_INC12 13 +#define BOOST_MOVE_INC13 14 + +//BOOST_MOVE_ADD +#define BOOST_MOVE_ADD(x, y) BOOST_MOVE_ADD_I(x,y) +#define BOOST_MOVE_ADD_I(x, y) BOOST_MOVE_ADD##y(x) +#define BOOST_MOVE_ADD0(x) x +#define BOOST_MOVE_ADD1(x) BOOST_MOVE_INC(x) +#define BOOST_MOVE_ADD2(x) BOOST_MOVE_ADD1(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD3(x) BOOST_MOVE_ADD2(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD4(x) BOOST_MOVE_ADD3(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD5(x) BOOST_MOVE_ADD4(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD6(x) BOOST_MOVE_ADD5(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD7(x) BOOST_MOVE_ADD6(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD8(x) BOOST_MOVE_ADD7(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD9(x) BOOST_MOVE_ADD8(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD10(x) BOOST_MOVE_ADD9(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD11(x) BOOST_MOVE_ADD10(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD12(x) BOOST_MOVE_ADD11(BOOST_MOVE_INC(x)) +#define BOOST_MOVE_ADD13(x) BOOST_MOVE_ADD12(BOOST_MOVE_INC(x)) + //BOOST_MOVE_ITERATE_2TON #define BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_2TO3(MACROFUNC) BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(3) @@ -618,7 +808,6 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_0TO9(MACROFUNC) BOOST_MOVE_ITERATE_0TO8(MACROFUNC) MACROFUNC(9) //BOOST_MOVE_ITERATE_NTON -#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC) MACROFUNC(0) #define BOOST_MOVE_ITERATE_1TO1(MACROFUNC) MACROFUNC(1) #define BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_3TO3(MACROFUNC) MACROFUNC(3) @@ -629,28 +818,34 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_8TO8(MACROFUNC) MACROFUNC(8) #define BOOST_MOVE_ITERATE_9TO9(MACROFUNC) MACROFUNC(9) -//BOOST_MOVE_ITER2D_0TO9 -#define BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 0) -#define BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 1) -#define BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) MACROFUNC2D(M, 2) -#define BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) MACROFUNC2D(M, 3) -#define BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) MACROFUNC2D(M, 4) -#define BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) MACROFUNC2D(M, 5) -#define BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) MACROFUNC2D(M, 6) -#define BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) MACROFUNC2D(M, 7) -#define BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) MACROFUNC2D(M, 8) -#define BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) MACROFUNC2D(M, 9) -// -#define BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 0) -#define BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 1) -#define BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 2) -#define BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 3) -#define BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 4) -#define BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 5) -#define BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 6) -#define BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 7) -#define BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 8) -#define BOOST_MOVE_ITER2D_0TO9(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 9) +//BOOST_MOVE_ITER2D_0TOMAX +#define BOOST_MOVE_ITER2DLOW_0TOMAX0(MACROFUNC2D, M) MACROFUNC2D(M, 0) +#define BOOST_MOVE_ITER2DLOW_0TOMAX1(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX0(MACROFUNC2D, M) MACROFUNC2D(M, 1) +#define BOOST_MOVE_ITER2DLOW_0TOMAX2(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX1(MACROFUNC2D, M) MACROFUNC2D(M, 2) +#define BOOST_MOVE_ITER2DLOW_0TOMAX3(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX2(MACROFUNC2D, M) MACROFUNC2D(M, 3) +#define BOOST_MOVE_ITER2DLOW_0TOMAX4(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX3(MACROFUNC2D, M) MACROFUNC2D(M, 4) +#define BOOST_MOVE_ITER2DLOW_0TOMAX5(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX4(MACROFUNC2D, M) MACROFUNC2D(M, 5) +#define BOOST_MOVE_ITER2DLOW_0TOMAX6(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX5(MACROFUNC2D, M) MACROFUNC2D(M, 6) +#define BOOST_MOVE_ITER2DLOW_0TOMAX7(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX6(MACROFUNC2D, M) MACROFUNC2D(M, 7) +#define BOOST_MOVE_ITER2DLOW_0TOMAX8(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX7(MACROFUNC2D, M) MACROFUNC2D(M, 8) +#define BOOST_MOVE_ITER2DLOW_0TOMAX9(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TOMAX8(MACROFUNC2D, M) MACROFUNC2D(M, 9) + +#define BOOST_MOVE_ITER2D_0TOMAX0(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 0) +#define BOOST_MOVE_ITER2D_0TOMAX1(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX0(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 1) +#define BOOST_MOVE_ITER2D_0TOMAX2(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX1(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 2) +#define BOOST_MOVE_ITER2D_0TOMAX3(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX2(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 3) +#define BOOST_MOVE_ITER2D_0TOMAX4(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX3(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 4) +#define BOOST_MOVE_ITER2D_0TOMAX5(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX4(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 5) +#define BOOST_MOVE_ITER2D_0TOMAX6(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX5(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 6) +#define BOOST_MOVE_ITER2D_0TOMAX7(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX6(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 7) +#define BOOST_MOVE_ITER2D_0TOMAX8(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX7(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 8) +#define BOOST_MOVE_ITER2D_0TOMAX9(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX8(MAX, MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TOMAX##MAX(MACROFUNC2D, 9) + +#define BOOST_MOVE_ITER2D_0TOMAX(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX_I (MAX, MACROFUNC2D) +#define BOOST_MOVE_ITER2D_0TOMAX_I(MAX, MACROFUNC2D) BOOST_MOVE_ITER2D_0TOMAX##MAX(MAX, MACROFUNC2D) + + + //BOOST_MOVE_CAT #define BOOST_MOVE_CAT(a, b) BOOST_MOVE_CAT_I(a, b) diff --git a/lib/3rdParty/boost/boost/move/detail/iterator_traits.hpp b/lib/3rdParty/boost/boost/move/detail/iterator_traits.hpp index a75ee03..5ffcb2c 100644 --- a/lib/3rdParty/boost/boost/move/detail/iterator_traits.hpp +++ b/lib/3rdParty/boost/boost/move/detail/iterator_traits.hpp @@ -23,6 +23,7 @@ #endif #include +#include #include BOOST_MOVE_STD_NS_BEG @@ -46,6 +47,7 @@ struct iterator_traits typedef typename Iterator::pointer pointer; typedef typename Iterator::reference reference; typedef typename Iterator::iterator_category iterator_category; + typedef typename boost::move_detail::make_unsigned::type size_type; }; template @@ -56,6 +58,7 @@ struct iterator_traits typedef T* pointer; typedef T& reference; typedef std::random_access_iterator_tag iterator_category; + typedef typename boost::move_detail::make_unsigned::type size_type; }; template @@ -66,6 +69,7 @@ struct iterator_traits typedef const T* pointer; typedef const T& reference; typedef std::random_access_iterator_tag iterator_category; + typedef typename boost::move_detail::make_unsigned::type size_type; }; }} //namespace boost { namespace movelib{ diff --git a/lib/3rdParty/boost/boost/move/detail/meta_utils.hpp b/lib/3rdParty/boost/boost/move/detail/meta_utils.hpp index 323c13a..e45394c 100644 --- a/lib/3rdParty/boost/boost/move/detail/meta_utils.hpp +++ b/lib/3rdParty/boost/boost/move/detail/meta_utils.hpp @@ -14,13 +14,11 @@ #ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP #define BOOST_MOVE_DETAIL_META_UTILS_HPP -#ifndef BOOST_CONFIG_HPP -# include -#endif -# #if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif +#include +#include //forceinline #include #include //for std::size_t @@ -245,8 +243,8 @@ template struct addr_impl_ref { T & v_; - inline addr_impl_ref( T & v ): v_( v ) {} - inline operator T& () const { return v_; } + BOOST_MOVE_FORCEINLINE addr_impl_ref( T & v ): v_( v ) {} + BOOST_MOVE_FORCEINLINE operator T& () const { return v_; } private: addr_impl_ref & operator=(const addr_impl_ref &); @@ -255,18 +253,18 @@ struct addr_impl_ref template struct addressof_impl { - static inline T * f( T & v, long ) + BOOST_MOVE_FORCEINLINE static T * f( T & v, long ) { return reinterpret_cast( &const_cast(reinterpret_cast(v))); } - static inline T * f( T * v, int ) + BOOST_MOVE_FORCEINLINE static T * f( T * v, int ) { return v; } }; template -inline T * addressof( T & v ) +BOOST_MOVE_FORCEINLINE T * addressof( T & v ) { return ::boost::move_detail::addressof_impl::f ( ::boost::move_detail::addr_impl_ref( v ), 0 ); @@ -314,6 +312,17 @@ class is_convertible #endif +template ::value> +struct is_same_or_convertible + : is_convertible +{}; + +template +struct is_same_or_convertible +{ + static const bool value = true; +}; + template< bool C , typename F1 @@ -347,6 +356,16 @@ struct disable_if_convertible : disable_if< is_convertible, R> {}; +template +struct enable_if_same_or_convertible + : enable_if< is_same_or_convertible, R> +{}; + +template +struct disable_if_same_or_convertible + : disable_if< is_same_or_convertible, R> +{}; + ////////////////////////////////////////////////////////////////////////////// // // and_ @@ -561,4 +580,6 @@ template< class T > struct remove_rvalue_reference { typedef T type; }; } //namespace move_detail { } //namespace boost { +#include + #endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP diff --git a/lib/3rdParty/boost/boost/move/detail/meta_utils_core.hpp b/lib/3rdParty/boost/boost/move/detail/meta_utils_core.hpp index 4d715a0..40dbb6e 100644 --- a/lib/3rdParty/boost/boost/move/detail/meta_utils_core.hpp +++ b/lib/3rdParty/boost/boost/move/detail/meta_utils_core.hpp @@ -114,6 +114,18 @@ struct is_same static const bool value = true; }; +////////////////////////////////////// +// enable_if_same +////////////////////////////////////// +template +struct enable_if_same : enable_if, R> {}; + +////////////////////////////////////// +// disable_if_same +////////////////////////////////////// +template +struct disable_if_same : disable_if, R> {}; + } //namespace move_detail { } //namespace boost { diff --git a/lib/3rdParty/boost/boost/move/detail/move_helpers.hpp b/lib/3rdParty/boost/boost/move/detail/move_helpers.hpp index 7b62e26..1713844 100644 --- a/lib/3rdParty/boost/boost/move/detail/move_helpers.hpp +++ b/lib/3rdParty/boost/boost/move/detail/move_helpers.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2010-2012. +// (C) Copyright Ion Gaztanaga 2010-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) @@ -20,8 +20,9 @@ # pragma once #endif +#include #include -#include +#include #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) @@ -43,14 +44,38 @@ //////////////////////////////////////// #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES + + template + struct boost_move_conversion_aware_catch_1 + : public ::boost::move_detail::enable_if_and + < RETURN_VALUE + , ::boost::move_detail::is_same + , ::boost::move_detail::is_class + , ::boost::has_move_emulation_disabled + > + {}; + + template + struct boost_move_conversion_aware_catch_2 + : public ::boost::move_detail::disable_if_or + < RETURN_VALUE + , ::boost::move_detail::is_same + , ::boost::move_detail::is_rv_impl + , ::boost::move_detail::and_ + < ::boost::move_detail::is_rv_impl + , ::boost::move_detail::is_class + > + > + {}; + #define BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(static_cast(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(TYPE &x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(TYPE &x)\ { return FWD_FUNCTION(const_cast(x)); }\ // #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN) @@ -58,27 +83,15 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ \ template\ - RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ - typename ::boost::move_detail::enable_if_and\ - < ::boost::move_detail::nat \ - , ::boost::move_detail::is_same\ - , ::boost::move_detail::is_class\ - , ::boost::has_move_emulation_disabled\ - >::type* = 0)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ + typename boost_move_conversion_aware_catch_1< ::boost::move_detail::nat, BOOST_MOVE_TEMPL_PARAM, TYPE>::type* = 0)\ { return FWD_FUNCTION(u); }\ \ template\ - RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ - typename ::boost::move_detail::disable_if_or\ - < ::boost::move_detail::nat \ - , ::boost::move_detail::is_same \ - , ::boost::move_detail::and_ \ - < ::boost::move_detail::is_rv \ - , ::boost::move_detail::is_class \ - > \ - >::type* = 0)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ + typename boost_move_conversion_aware_catch_2< ::boost::move_detail::nat, BOOST_MOVE_TEMPL_PARAM, TYPE>::type* = 0)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(::boost::move(t));\ }\ // @@ -87,27 +100,15 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ \ template\ - typename ::boost::move_detail::enable_if_and\ - < RETURN_VALUE \ - , ::boost::move_detail::is_same\ - , ::boost::move_detail::is_class\ - , ::boost::has_move_emulation_disabled\ - >::type\ + BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ { return FWD_FUNCTION(u); }\ \ template\ - typename ::boost::move_detail::disable_if_or\ - < RETURN_VALUE \ - , ::boost::move_detail::is_same \ - , ::boost::move_detail::and_ \ - < ::boost::move_detail::is_rv \ - , ::boost::move_detail::is_class \ - > \ - >::type\ + BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_2::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(::boost::move(t));\ }\ // @@ -115,19 +116,19 @@ #elif (defined(_MSC_VER) && (_MSC_VER == 1600)) #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(static_cast(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ \ template\ - typename ::boost::move_detail::enable_if_c\ + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c\ < !::boost::move_detail::is_same::value\ , RETURN_VALUE >::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(::boost::move(t));\ }\ // @@ -135,10 +136,10 @@ #else //BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ - { return FWD_FUNCTION(static_cast(x)); }\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + { return FWD_FUNCTION(x); }\ \ - RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ // @@ -151,14 +152,35 @@ //////////////////////////////////////// #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES + + template + struct boost_move_conversion_aware_catch_1arg_1 + : public ::boost::move_detail::enable_if_and + < RETURN_VALUE + , ::boost::move_detail::not_< ::boost::move_detail::is_same_or_convertible > + , ::boost::move_detail::is_same + , ::boost::has_move_emulation_disabled + > + {}; + + template + struct boost_move_conversion_aware_catch_1arg_2 + : public ::boost::move_detail::disable_if_or + < RETURN_VALUE + , ::boost::move_detail::is_same_or_convertible< BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO> + , ::boost::move_detail::is_rv_impl + , ::boost::move_detail::is_same + > + {}; + #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\ { return FWD_FUNCTION(arg1, const_cast(x)); }\ // #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN) @@ -166,24 +188,15 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ \ template\ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ - typename ::boost::move_detail::enable_if_and\ - < ::boost::move_detail::nat \ - , ::boost::move_detail::is_same\ - , ::boost::has_move_emulation_disabled\ - >::type* = 0)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ + typename boost_move_conversion_aware_catch_1arg_1::type* = 0)\ { return FWD_FUNCTION(arg1, u); }\ \ template\ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ - typename ::boost::move_detail::disable_if_or\ - < void \ - , ::boost::move_detail::is_rv\ - , ::boost::move_detail::is_same\ - , ::boost::move_detail::is_convertible\ - >::type* = 0)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ + typename boost_move_conversion_aware_catch_1arg_2::type* = 0)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(arg1, ::boost::move(t));\ }\ // @@ -192,24 +205,15 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ \ template\ - typename ::boost::move_detail::enable_if_and\ - < RETURN_VALUE \ - , ::boost::move_detail::is_same\ - , ::boost::has_move_emulation_disabled\ - >::type\ + BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1arg_1::type\ PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\ { return FWD_FUNCTION(arg1, u); }\ \ template\ - typename ::boost::move_detail::disable_if_or\ - < RETURN_VALUE \ - , ::boost::move_detail::is_rv\ - , ::boost::move_detail::is_same\ - , ::boost::move_detail::is_convertible\ - >::type\ + BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1arg_2::type\ PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(arg1, ::boost::move(t));\ }\ // @@ -218,21 +222,21 @@ #elif (defined(_MSC_VER) && (_MSC_VER == 1600)) #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ \ template\ - typename ::boost::move_detail::disable_if_or\ + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::disable_if_or\ < RETURN_VALUE \ , ::boost::move_detail::is_same \ - , ::boost::move_detail::is_convertible \ + , ::boost::move_detail::is_same_or_convertible \ >::type\ PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\ {\ - TYPE t(u);\ + TYPE t((u));\ return FWD_FUNCTION(arg1, ::boost::move(t));\ }\ // @@ -240,10 +244,10 @@ #else #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast(x)); }\ \ - RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ // diff --git a/lib/3rdParty/boost/boost/move/detail/placement_new.hpp b/lib/3rdParty/boost/boost/move/detail/placement_new.hpp new file mode 100644 index 0000000..69d3332 --- /dev/null +++ b/lib/3rdParty/boost/boost/move/detail/placement_new.hpp @@ -0,0 +1,30 @@ +#ifndef BOOST_MOVE_DETAIL_PLACEMENT_NEW_HPP +#define BOOST_MOVE_DETAIL_PLACEMENT_NEW_HPP +/////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2014-2015. 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/libs/container for documentation. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +struct boost_move_new_t{}; + +//avoid including +inline void *operator new(std::size_t, void *p, boost_move_new_t) +{ return p; } + +inline void operator delete(void *, void *, boost_move_new_t) +{} + +#endif //BOOST_MOVE_DETAIL_PLACEMENT_NEW_HPP diff --git a/lib/3rdParty/boost/boost/move/detail/reverse_iterator.hpp b/lib/3rdParty/boost/boost/move/detail/reverse_iterator.hpp new file mode 100644 index 0000000..73f59ce --- /dev/null +++ b/lib/3rdParty/boost/boost/move/detail/reverse_iterator.hpp @@ -0,0 +1,171 @@ +///////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2014-2014 +// +// 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/libs/move for documentation. +// +///////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_MOVE_DETAIL_REVERSE_ITERATOR_HPP +#define BOOST_MOVE_DETAIL_REVERSE_ITERATOR_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include +#include +#include + +namespace boost { +namespace movelib { + +template +class reverse_iterator +{ + public: + typedef typename boost::movelib::iterator_traits::pointer pointer; + typedef typename boost::movelib::iterator_traits::reference reference; + typedef typename boost::movelib::iterator_traits::difference_type difference_type; + typedef typename boost::movelib::iterator_traits::iterator_category iterator_category; + typedef typename boost::movelib::iterator_traits::value_type value_type; + + + typedef It iterator_type; + + reverse_iterator() + : m_current() //Value initialization to achieve "null iterators" (N3644) + {} + + explicit reverse_iterator(It r) + : m_current(r) + {} + + reverse_iterator(const reverse_iterator& r) + : m_current(r.base()) + {} + + template + reverse_iterator( const reverse_iterator& r + , typename boost::move_detail::enable_if_convertible::type* =0 + ) + : m_current(r.base()) + {} + + reverse_iterator & operator=( const reverse_iterator& r) + { m_current = r.base(); return *this; } + + template + typename boost::move_detail::enable_if_convertible::type + operator=( const reverse_iterator& r) + { m_current = r.base(); return *this; } + + It base() const + { return m_current; } + + reference operator*() const + { + It temp(m_current); + --temp; + reference r = *temp; + return r; + } + + pointer operator->() const + { + It temp(m_current); + --temp; + return iterator_arrow_result(temp); + } + + reference operator[](difference_type off) const + { + return this->m_current[-off - 1]; + } + + reverse_iterator& operator++() + { + --m_current; + return *this; + } + + reverse_iterator operator++(int) + { + reverse_iterator temp((*this)); + --m_current; + return temp; + } + + reverse_iterator& operator--() + { + ++m_current; + return *this; + } + + reverse_iterator operator--(int) + { + reverse_iterator temp((*this)); + ++m_current; + return temp; + } + + friend bool operator==(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current == r.m_current; } + + friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current != r.m_current; } + + friend bool operator<(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current > r.m_current; } + + friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current >= r.m_current; } + + friend bool operator>(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current < r.m_current; } + + friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r) + { return l.m_current <= r.m_current; } + + reverse_iterator& operator+=(difference_type off) + { m_current -= off; return *this; } + + reverse_iterator& operator-=(difference_type off) + { m_current += off; return *this; } + + friend reverse_iterator operator+(reverse_iterator l, difference_type off) + { return (l += off); } + + friend reverse_iterator operator+(difference_type off, reverse_iterator r) + { return (r += off); } + + friend reverse_iterator operator-(reverse_iterator l, difference_type off) + { return (l-= off); } + + friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r) + { return r.m_current - l.m_current; } + + private: + It m_current; // the wrapped iterator +}; + +template< class Iterator > +reverse_iterator make_reverse_iterator( Iterator i ) +{ + return reverse_iterator(i); +} + +} //namespace movelib { +} //namespace boost { + +#include + +#endif //BOOST_MOVE_DETAIL_REVERSE_ITERATOR_HPP diff --git a/lib/3rdParty/boost/boost/move/detail/type_traits.hpp b/lib/3rdParty/boost/boost/move/detail/type_traits.hpp index 816fdca..1b5d838 100644 --- a/lib/3rdParty/boost/boost/move/detail/type_traits.hpp +++ b/lib/3rdParty/boost/boost/move/detail/type_traits.hpp @@ -55,8 +55,10 @@ // BOOST_MOVE_IS_POD(T) should evaluate to true if T is a POD type // BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if "T x;" has no effect // BOOST_MOVE_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy +// (Note: this trait does not guarantee T is copy constructible, the copy constructor could be deleted but still be trivial) // BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) should evaluate to true if T(boost::move(t)) <==> memcpy // BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy +// (Note: this trait does not guarantee T is assignable , the copy assignmen could be deleted but still be trivial) // BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T) should evaluate to true if t = boost::move(u) <==> memcpy // BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect // BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if "T x;" can not throw @@ -117,9 +119,7 @@ # define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) # endif # if __has_feature(has_trivial_copy) -# //There are problems with deleted copy constructors detected as trivially copyable. -# //http://stackoverflow.com/questions/12754886/has-trivial-copy-behaves-differently-in-clang-and-gcc-whos-right -# define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && ::boost::move_detail::is_copy_constructible::value) +# define BOOST_MOVE_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T) # endif # if __has_feature(has_trivial_assign) # define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) ) @@ -235,7 +235,9 @@ #endif #ifdef BOOST_MOVE_HAS_TRIVIAL_COPY - #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_TRIVIAL_COPY(T) + #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) ::boost::move_detail::is_pod::value ||\ + (::boost::move_detail::is_copy_constructible::value &&\ + BOOST_MOVE_HAS_TRIVIAL_COPY(T)) #else #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) ::boost::move_detail::is_pod::value #endif @@ -246,12 +248,6 @@ #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T) ::boost::move_detail::is_pod::value #endif -#ifdef BOOST_MOVE_HAS_TRIVIAL_COPY - #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_TRIVIAL_COPY(T) -#else - #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) ::boost::move_detail::is_pod::value -#endif - #ifdef BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR #define BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) #else @@ -259,7 +255,9 @@ #endif #ifdef BOOST_MOVE_HAS_TRIVIAL_ASSIGN - #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) + #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) ::boost::move_detail::is_pod::value ||\ + ( ::boost::move_detail::is_copy_assignable::value &&\ + BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)) #else #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) ::boost::move_detail::is_pod::value #endif @@ -821,9 +819,7 @@ struct is_trivially_copy_constructible { //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with //deleted copy constructors so make sure the type is copy constructible. - static const bool value = ::boost::move_detail::is_pod::value || - ( ::boost::move_detail::is_copy_constructible::value && - BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) ); + static const bool value = BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T); }; ////////////////////////////////////// @@ -831,7 +827,7 @@ struct is_trivially_copy_constructible ////////////////////////////////////// template struct is_trivially_move_constructible -{ static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T); }; +{ static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T); }; ////////////////////////////////////// // is_trivially_copy_assignable @@ -841,9 +837,7 @@ struct is_trivially_copy_assignable { //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with //deleted copy constructors so make sure the type is copy constructible. - static const bool value = ::boost::move_detail::is_pod::value || - ( ::boost::move_detail::is_copy_assignable::value && - BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) ); + static const bool value = BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T); }; ////////////////////////////////////// @@ -1005,7 +999,7 @@ BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1000) template union aligned_union -{ +{ T aligner; char dummy[Len]; }; @@ -1023,7 +1017,7 @@ struct aligned_next //End of search defaults to max_align_t template struct aligned_next -{ typedef aligned_union type; }; +{ typedef aligned_union type; }; //Now define a search list through types #define BOOST_MOVE_ALIGNED_NEXT_STEP(TYPE, NEXT_TYPE)\ diff --git a/lib/3rdParty/boost/boost/move/detail/workaround.hpp b/lib/3rdParty/boost/boost/move/detail/workaround.hpp index b3f81b1..1d16f24 100644 --- a/lib/3rdParty/boost/boost/move/detail/workaround.hpp +++ b/lib/3rdParty/boost/boost/move/detail/workaround.hpp @@ -52,4 +52,18 @@ #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG #endif +#if defined(BOOST_MOVE_DISABLE_FORCEINLINE) + #define BOOST_MOVE_FORCEINLINE inline +#elif defined(BOOST_MOVE_FORCEINLINE_IS_BOOST_FORCELINE) + #define BOOST_MOVE_FORCEINLINE BOOST_FORCEINLINE +#elif defined(BOOST_MSVC) && defined(_DEBUG) + //"__forceinline" and MSVC seems to have some bugs in debug mode + #define BOOST_MOVE_FORCEINLINE inline +#elif defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ < 5))) + //Older GCCs have problems with forceinline + #define BOOST_MOVE_FORCEINLINE inline +#else + #define BOOST_MOVE_FORCEINLINE BOOST_FORCEINLINE +#endif + #endif //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP diff --git a/lib/3rdParty/boost/boost/move/iterator.hpp b/lib/3rdParty/boost/boost/move/iterator.hpp index 1b39e26..f36df23 100644 --- a/lib/3rdParty/boost/boost/move/iterator.hpp +++ b/lib/3rdParty/boost/boost/move/iterator.hpp @@ -23,6 +23,7 @@ #endif #include +#include //forceinline #include #include @@ -57,22 +58,20 @@ class move_iterator typedef typename boost::movelib::iterator_traits::difference_type difference_type; typedef typename boost::movelib::iterator_traits::iterator_category iterator_category; - move_iterator() + BOOST_MOVE_FORCEINLINE move_iterator() + : m_it() {} - explicit move_iterator(It i) + BOOST_MOVE_FORCEINLINE explicit move_iterator(const It &i) : m_it(i) {} template - move_iterator(const move_iterator& u) - : m_it(u.base()) + BOOST_MOVE_FORCEINLINE move_iterator(const move_iterator& u) + : m_it(u.m_it) {} - iterator_type base() const - { return m_it; } - - reference operator*() const + BOOST_MOVE_FORCEINLINE reference operator*() const { #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) return *m_it; @@ -81,34 +80,34 @@ class move_iterator #endif } - pointer operator->() const + BOOST_MOVE_FORCEINLINE pointer operator->() const { return m_it; } - move_iterator& operator++() + BOOST_MOVE_FORCEINLINE move_iterator& operator++() { ++m_it; return *this; } - move_iterator operator++(int) + BOOST_MOVE_FORCEINLINE move_iterator operator++(int) { move_iterator tmp(*this); ++(*this); return tmp; } - move_iterator& operator--() + BOOST_MOVE_FORCEINLINE move_iterator& operator--() { --m_it; return *this; } - move_iterator operator--(int) + BOOST_MOVE_FORCEINLINE move_iterator operator--(int) { move_iterator tmp(*this); --(*this); return tmp; } move_iterator operator+ (difference_type n) const { return move_iterator(m_it + n); } - move_iterator& operator+=(difference_type n) + BOOST_MOVE_FORCEINLINE move_iterator& operator+=(difference_type n) { m_it += n; return *this; } - move_iterator operator- (difference_type n) const + BOOST_MOVE_FORCEINLINE move_iterator operator- (difference_type n) const { return move_iterator(m_it - n); } - move_iterator& operator-=(difference_type n) + BOOST_MOVE_FORCEINLINE move_iterator& operator-=(difference_type n) { m_it -= n; return *this; } - reference operator[](difference_type n) const + BOOST_MOVE_FORCEINLINE reference operator[](difference_type n) const { #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) return m_it[n]; @@ -117,29 +116,29 @@ class move_iterator #endif } - friend bool operator==(const move_iterator& x, const move_iterator& y) - { return x.base() == y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator==(const move_iterator& x, const move_iterator& y) + { return x.m_it == y.m_it; } - friend bool operator!=(const move_iterator& x, const move_iterator& y) - { return x.base() != y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator!=(const move_iterator& x, const move_iterator& y) + { return x.m_it != y.m_it; } - friend bool operator< (const move_iterator& x, const move_iterator& y) - { return x.base() < y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator< (const move_iterator& x, const move_iterator& y) + { return x.m_it < y.m_it; } - friend bool operator<=(const move_iterator& x, const move_iterator& y) - { return x.base() <= y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator<=(const move_iterator& x, const move_iterator& y) + { return x.m_it <= y.m_it; } - friend bool operator> (const move_iterator& x, const move_iterator& y) - { return x.base() > y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator> (const move_iterator& x, const move_iterator& y) + { return x.m_it > y.m_it; } - friend bool operator>=(const move_iterator& x, const move_iterator& y) - { return x.base() >= y.base(); } + BOOST_MOVE_FORCEINLINE friend bool operator>=(const move_iterator& x, const move_iterator& y) + { return x.m_it >= y.m_it; } - friend difference_type operator-(const move_iterator& x, const move_iterator& y) - { return x.base() - y.base(); } + BOOST_MOVE_FORCEINLINE friend difference_type operator-(const move_iterator& x, const move_iterator& y) + { return x.m_it - y.m_it; } - friend move_iterator operator+(difference_type n, const move_iterator& x) - { return move_iterator(x.base() + n); } + BOOST_MOVE_FORCEINLINE friend move_iterator operator+(difference_type n, const move_iterator& x) + { return move_iterator(x.m_it + n); } private: It m_it; diff --git a/lib/3rdParty/boost/boost/move/make_unique.hpp b/lib/3rdParty/boost/boost/move/make_unique.hpp index bb59ab6..ef106db 100644 --- a/lib/3rdParty/boost/boost/move/make_unique.hpp +++ b/lib/3rdParty/boost/boost/move/make_unique.hpp @@ -75,7 +75,8 @@ struct nothrow_holder }; template -std::nothrow_t *nothrow_holder::pnothrow; +std::nothrow_t *nothrow_holder::pnothrow = + reinterpret_cast(0x1234); //Avoid reference to null errors in sanitizers } //namespace move_upmu { } //namespace boost{ diff --git a/lib/3rdParty/boost/boost/move/unique_ptr.hpp b/lib/3rdParty/boost/boost/move/unique_ptr.hpp index 5b06743..2d794e8 100644 --- a/lib/3rdParty/boost/boost/move/unique_ptr.hpp +++ b/lib/3rdParty/boost/boost/move/unique_ptr.hpp @@ -20,7 +20,7 @@ #endif #include -#include +#include //forceinline #include #include #include @@ -93,25 +93,25 @@ struct unique_ptr_data typedef typename deleter_types::del_ref del_ref; typedef typename deleter_types::del_cref del_cref; - unique_ptr_data() BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data() BOOST_NOEXCEPT : m_p(), d() {} - explicit unique_ptr_data(P p) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE explicit unique_ptr_data(P p) BOOST_NOEXCEPT : m_p(p), d() {} - unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT : m_p(p), d(d1) {} template - unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT : m_p(p), d(::boost::forward(d1)) {} - del_ref deleter() { return d; } - del_cref deleter() const{ return d; } + BOOST_MOVE_FORCEINLINE del_ref deleter() { return d; } + BOOST_MOVE_FORCEINLINE del_cref deleter() const{ return d; } P m_p; D d; @@ -129,25 +129,25 @@ struct unique_ptr_data typedef typename deleter_types::del_ref del_ref; typedef typename deleter_types::del_cref del_cref; - unique_ptr_data() BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data() BOOST_NOEXCEPT : D(), m_p() {} - explicit unique_ptr_data(P p) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE explicit unique_ptr_data(P p) BOOST_NOEXCEPT : D(), m_p(p) {} - unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT : D(d1), m_p(p) {} template - unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT : D(::boost::forward(d)), m_p(p) {} - del_ref deleter() BOOST_NOEXCEPT { return static_cast(*this); } - del_cref deleter() const BOOST_NOEXCEPT { return static_cast(*this); } + BOOST_MOVE_FORCEINLINE del_ref deleter() BOOST_NOEXCEPT { return static_cast(*this); } + BOOST_MOVE_FORCEINLINE del_cref deleter() const BOOST_NOEXCEPT { return static_cast(*this); } P m_p; @@ -389,7 +389,7 @@ class unique_ptr //! //! Remarks: If this constructor is instantiated with a pointer type or reference type //! for the template argument D, the program is ill-formed. - BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT : m_data() { //If this constructor is instantiated with a pointer type or reference type @@ -400,7 +400,7 @@ class unique_ptr //! Effects: Same as unique_ptr() (default constructor). //! - BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT : m_data() { //If this constructor is instantiated with a pointer type or reference type @@ -423,7 +423,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template - explicit unique_ptr(Pointer p + BOOST_MOVE_FORCEINLINE explicit unique_ptr(Pointer p BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr::type* =0) ) BOOST_NOEXCEPT : m_data(p) @@ -461,7 +461,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template - unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1 + BOOST_MOVE_FORCEINLINE unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1 BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr::type* =0) ) BOOST_NOEXCEPT : m_data(p, d1) @@ -474,7 +474,7 @@ class unique_ptr //! Effects: Same effects as template unique_ptr(Pointer p, deleter_arg_type1 d1) //! and additionally get() == nullptr - unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT : m_data(pointer(), d1) {} @@ -499,7 +499,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template - unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2 + BOOST_MOVE_FORCEINLINE unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2 BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr::type* =0) ) BOOST_NOEXCEPT : m_data(p, ::boost::move(d2)) @@ -512,7 +512,7 @@ class unique_ptr //! Effects: Same effects as template unique_ptr(Pointer p, deleter_arg_type2 d2) //! and additionally get() == nullptr - unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT : m_data(pointer(), ::boost::move(d2)) {} @@ -526,7 +526,7 @@ class unique_ptr //! Postconditions: get() yields the value u.get() yielded before the construction. get_deleter() //! returns a reference to the stored deleter that was constructed from u.get_deleter(). If D is a //! reference type then get_deleter() and u.get_deleter() both reference the same lvalue deleter. - unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT : m_data(u.release(), ::boost::move_if_not_lvalue_reference(u.get_deleter())) {} @@ -546,7 +546,7 @@ class unique_ptr //! Postconditions: get() yields the value u.get() yielded before the construction. get_deleter() //! returns a reference to the stored deleter that was constructed from u.get_deleter(). template - unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr BOOST_RV_REF_END_IF_CXX11 u + BOOST_MOVE_FORCEINLINE unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr BOOST_RV_REF_END_IF_CXX11 u BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_moveconv_constr::type* =0) ) BOOST_NOEXCEPT : m_data(u.release(), ::boost::move_if_not_lvalue_reference(u.get_deleter())) @@ -629,7 +629,7 @@ class unique_ptr //! Returns: get()[i]. //! //! Remarks::type) + BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference::type) operator[](std::size_t i) const BOOST_NOEXCEPT { BOOST_ASSERT( bmupmu::extent::value == 0 || i < bmupmu::extent::value ); @@ -644,7 +644,7 @@ class unique_ptr //! Note: use typically requires that T be a complete type. //! //! Remarks() const BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE pointer operator->() const BOOST_NOEXCEPT { BOOST_STATIC_ASSERT((!bmupmu::is_array::value)); BOOST_ASSERT(m_data.m_p); @@ -653,27 +653,27 @@ class unique_ptr //! Returns: The stored pointer. //! - pointer get() const BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE pointer get() const BOOST_NOEXCEPT { return m_data.m_p; } //! Returns: A reference to the stored deleter. //! - BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference::type) + BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference::type) get_deleter() BOOST_NOEXCEPT { return m_data.deleter(); } //! Returns: A reference to the stored deleter. //! - BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference::type) + BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference::type) get_deleter() const BOOST_NOEXCEPT { return m_data.deleter(); } #ifdef BOOST_MOVE_DOXYGEN_INVOKED //! Returns: Returns: get() != nullptr. //! - explicit operator bool + BOOST_MOVE_FORCEINLINE explicit operator bool #else - operator bmupd::explicit_bool_arg + BOOST_MOVE_FORCEINLINE operator bmupd::explicit_bool_arg #endif ()const BOOST_NOEXCEPT { @@ -685,7 +685,7 @@ class unique_ptr //! Postcondition: get() == nullptr. //! //! Returns: The value get() had at the start of the call to release. - pointer release() BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE pointer release() BOOST_NOEXCEPT { const pointer tmp = m_data.m_p; m_data.m_p = pointer(); @@ -748,19 +748,19 @@ class unique_ptr //! Effects: Calls x.swap(y). //! template -inline void swap(unique_ptr &x, unique_ptr &y) BOOST_NOEXCEPT +BOOST_MOVE_FORCEINLINE void swap(unique_ptr &x, unique_ptr &y) BOOST_NOEXCEPT { x.swap(y); } //! Returns: x.get() == y.get(). //! template -inline bool operator==(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator==(const unique_ptr &x, const unique_ptr &y) { return x.get() == y.get(); } //! Returns: x.get() != y.get(). //! template -inline bool operator!=(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator!=(const unique_ptr &x, const unique_ptr &y) { return x.get() != y.get(); } //! Returns: x.get() < y.get(). @@ -768,99 +768,99 @@ inline bool operator!=(const unique_ptr &x, const unique_ptr &y) //! Remarks: This comparison shall induce a //! strict weak ordering betwen pointers. template -inline bool operator<(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator<(const unique_ptr &x, const unique_ptr &y) { return x.get() < y.get(); } //! Returns: !(y < x). //! template -inline bool operator<=(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator<=(const unique_ptr &x, const unique_ptr &y) { return !(y < x); } //! Returns: y < x. //! template -inline bool operator>(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator>(const unique_ptr &x, const unique_ptr &y) { return y < x; } //! Returns:!(x < y). //! template -inline bool operator>=(const unique_ptr &x, const unique_ptr &y) +BOOST_MOVE_FORCEINLINE bool operator>=(const unique_ptr &x, const unique_ptr &y) { return !(x < y); } //! Returns:!x. //! template -inline bool operator==(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT +BOOST_MOVE_FORCEINLINE bool operator==(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT { return !x; } //! Returns:!x. //! template -inline bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) BOOST_NOEXCEPT +BOOST_MOVE_FORCEINLINE bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) BOOST_NOEXCEPT { return !x; } //! Returns: (bool)x. //! template -inline bool operator!=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT +BOOST_MOVE_FORCEINLINE bool operator!=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT { return !!x; } //! Returns: (bool)x. //! template -inline bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) BOOST_NOEXCEPT +BOOST_MOVE_FORCEINLINE bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) BOOST_NOEXCEPT { return !!x; } //! Requires: operator shall induce a strict weak ordering on unique_ptr::pointer values. //! //! Returns: Returns x.get() < pointer(). template -inline bool operator<(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +BOOST_MOVE_FORCEINLINE bool operator<(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return x.get() < typename unique_ptr::pointer(); } //! Requires: operator shall induce a strict weak ordering on unique_ptr::pointer values. //! //! Returns: Returns pointer() < x.get(). template -inline bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) +BOOST_MOVE_FORCEINLINE bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) { return typename unique_ptr::pointer() < x.get(); } //! Returns: nullptr < x. //! template -inline bool operator>(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +BOOST_MOVE_FORCEINLINE bool operator>(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return x.get() > typename unique_ptr::pointer(); } //! Returns: x < nullptr. //! template -inline bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) +BOOST_MOVE_FORCEINLINE bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) { return typename unique_ptr::pointer() > x.get(); } //! Returns: !(nullptr < x). //! template -inline bool operator<=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +BOOST_MOVE_FORCEINLINE bool operator<=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return !(bmupd::nullptr_type() < x); } //! Returns: !(x < nullptr). //! template -inline bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) +BOOST_MOVE_FORCEINLINE bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) { return !(x < bmupd::nullptr_type()); } //! Returns: !(x < nullptr). //! template -inline bool operator>=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +BOOST_MOVE_FORCEINLINE bool operator>=(const unique_ptr &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return !(x < bmupd::nullptr_type()); } //! Returns: !(nullptr < x). //! template -inline bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) +BOOST_MOVE_FORCEINLINE bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr &x) { return !(bmupd::nullptr_type() < x); } } //namespace movelib { diff --git a/lib/3rdParty/boost/boost/move/utility.hpp b/lib/3rdParty/boost/boost/move/utility.hpp index 8f9c20b..28de793 100644 --- a/lib/3rdParty/boost/boost/move/utility.hpp +++ b/lib/3rdParty/boost/boost/move/utility.hpp @@ -25,6 +25,7 @@ #endif #include +#include //forceinline #include #include @@ -39,7 +40,7 @@ ////////////////////////////////////////////////////////////////////////////// template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < enable_move_utility_emulation::value && !has_move_emulation_enabled::value , typename ::boost::move_detail::add_const::type & >::type @@ -49,7 +50,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < enable_move_utility_emulation::value && has_move_emulation_enabled::value && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value, rv&>::type move_if_noexcept(T& x) BOOST_NOEXCEPT @@ -58,7 +59,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < enable_move_utility_emulation::value && has_move_emulation_enabled::value && ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value , rv& @@ -69,7 +70,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < enable_move_utility_emulation::value && has_move_emulation_enabled::value && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value , typename ::boost::move_detail::add_const::type & @@ -80,7 +81,7 @@ } template - inline typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < enable_move_utility_emulation::value && has_move_emulation_enabled::value && !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value , typename ::boost::move_detail::add_const::type & @@ -125,13 +126,13 @@ #else //BOOST_MOVE_DOXYGEN_INVOKED template - typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < ::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value, T&&>::type move_if_noexcept(T& x) BOOST_NOEXCEPT { return ::boost::move(x); } template - typename ::boost::move_detail::enable_if_c + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c < !::boost::move_detail::is_nothrow_move_constructible_or_uncopyable::value, const T&>::type move_if_noexcept(T& x) BOOST_NOEXCEPT { return x; } diff --git a/lib/3rdParty/boost/boost/move/utility_core.hpp b/lib/3rdParty/boost/boost/move/utility_core.hpp index 7fd1ea1..55042a9 100644 --- a/lib/3rdParty/boost/boost/move/utility_core.hpp +++ b/lib/3rdParty/boost/boost/move/utility_core.hpp @@ -26,6 +26,7 @@ #endif #include +#include //forceinline #include #include #include @@ -47,7 +48,7 @@ ////////////////////////////////////////////////////////////////////////////// template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < T & , enable_move_utility_emulation , has_move_emulation_disabled @@ -58,7 +59,7 @@ } template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < rv& , enable_move_utility_emulation , has_move_emulation_enabled @@ -69,7 +70,7 @@ } template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < rv& , enable_move_utility_emulation , has_move_emulation_enabled @@ -86,7 +87,7 @@ ////////////////////////////////////////////////////////////////////////////// template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < T & , enable_move_utility_emulation , ::boost::move_detail::is_rv @@ -97,7 +98,7 @@ } template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < const T & , enable_move_utility_emulation , ::boost::move_detail::is_not_rv @@ -114,7 +115,7 @@ ////////////////////////////////////////////////////////////////////////////// template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < T & , enable_move_utility_emulation , ::boost::move_detail::is_rv @@ -125,7 +126,7 @@ } template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < typename ::boost::move_detail::add_lvalue_reference::type , enable_move_utility_emulation , ::boost::move_detail::is_not_rv @@ -140,7 +141,7 @@ } template - inline typename ::boost::move_detail::enable_if_and + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_and < rv& , enable_move_utility_emulation , ::boost::move_detail::is_not_rv @@ -202,13 +203,13 @@ //Old move approach, lvalues could bind to rvalue references template - inline typename ::boost::move_detail::remove_reference::type && move(T&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::remove_reference::type && move(T&& t) BOOST_NOEXCEPT { return t; } #else //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES template - inline typename ::boost::move_detail::remove_reference::type && move(T&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::remove_reference::type && move(T&& t) BOOST_NOEXCEPT { return static_cast::type &&>(t); } #endif //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES @@ -238,17 +239,17 @@ //Old move approach, lvalues could bind to rvalue references template - inline T&& forward(typename ::boost::move_detail::identity::type&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::identity::type&& t) BOOST_NOEXCEPT { return t; } #else //Old move template - inline T&& forward(typename ::boost::move_detail::remove_reference::type& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::remove_reference::type& t) BOOST_NOEXCEPT { return static_cast(t); } template - inline T&& forward(typename ::boost::move_detail::remove_reference::type&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::remove_reference::type&& t) BOOST_NOEXCEPT { //"boost::forward error: 'T' is a lvalue reference, can't forward as rvalue."; BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference::value); @@ -273,17 +274,17 @@ //Old move approach, lvalues could bind to rvalue references template - inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::identity::type&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::identity::type&& t) BOOST_NOEXCEPT { return t; } #else //Old move template - inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference::type& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference::type& t) BOOST_NOEXCEPT { return static_cast(t); } template - inline T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference::type&& t) BOOST_NOEXCEPT + BOOST_MOVE_FORCEINLINE T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference::type&& t) BOOST_NOEXCEPT { //"boost::forward error: 'T' is a lvalue reference, can't forward as rvalue."; BOOST_STATIC_ASSERT(!boost::move_detail::is_lvalue_reference::value); diff --git a/lib/3rdParty/boost/boost/mpl/print.hpp b/lib/3rdParty/boost/boost/mpl/print.hpp index e3b0d31..36e25cd 100644 --- a/lib/3rdParty/boost/boost/mpl/print.hpp +++ b/lib/3rdParty/boost/boost/mpl/print.hpp @@ -47,7 +47,10 @@ struct print #endif { #if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wc++11-extensions" const int m_x = 1 / (sizeof(T) - sizeof(T)); +# pragma clang diagnostic pop #elif defined(BOOST_MSVC) enum { n = sizeof(T) + -1 }; #elif defined(__MWERKS__) diff --git a/lib/3rdParty/boost/boost/operators.hpp b/lib/3rdParty/boost/boost/operators.hpp index ab20330..3fc08d5 100644 --- a/lib/3rdParty/boost/boost/operators.hpp +++ b/lib/3rdParty/boost/boost/operators.hpp @@ -1,6 +1,7 @@ // Boost operators.hpp header file ----------------------------------------// // (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001. +// (C) Copyright Daniel Frey 2002-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) @@ -8,6 +9,8 @@ // See http://www.boost.org/libs/utility/operators.htm for documentation. // Revision History +// 22 Feb 16 Added ADL protection, preserve old work-arounds in +// operators_v1.hpp and clean up this file. (Daniel Frey) // 16 Dec 10 Limit warning suppression for 4284 to older versions of VC++ // (Matthew Bradbury, fixes #4432) // 07 Aug 08 Added "euclidean" spelling. (Daniel Frey) @@ -24,8 +27,8 @@ // additional classes for groups of related operators added; // workaround for empty base class optimization // bug of GCC 3.0 (Helmut Zeisel) -// 25 Jun 01 output_iterator_helper changes: removed default template -// parameters, added support for self-proxying, additional +// 25 Jun 01 output_iterator_helper changes: removed default template +// parameters, added support for self-proxying, additional // documentation and tests (Aleksey Gurtovoy) // 29 May 01 Added operator classes for << and >>. Added input and output // iterator helper classes. Added classes to connect equality and @@ -38,18 +41,18 @@ // 04 Jul 00 Fixed NO_OPERATORS_IN_NAMESPACE bugs, major cleanup and // refactoring of compiler workarounds, additional documentation // (Alexy Gurtovoy and Mark Rodgers with some help and prompting from -// Dave Abrahams) +// Dave Abrahams) // 28 Jun 00 General cleanup and integration of bugfixes from Mark Rodgers and // Jeremy Siek (Dave Abrahams) // 20 Jun 00 Changes to accommodate Borland C++Builder 4 and Borland C++ 5.5 // (Mark Rodgers) // 20 Jun 00 Minor fixes to the prior revision (Aleksey Gurtovoy) // 10 Jun 00 Support for the base class chaining technique was added -// (Aleksey Gurtovoy). See documentation and the comments below -// for the details. +// (Aleksey Gurtovoy). See documentation and the comments below +// for the details. // 12 Dec 99 Initial version with iterator operators (Jeremy Siek) // 18 Nov 99 Change name "divideable" to "dividable", remove unnecessary -// specializations of dividable, subtractable, modable (Ed Brey) +// specializations of dividable, subtractable, modable (Ed Brey) // 17 Nov 99 Add comments (Beman Dawes) // Remove unnecessary specialization of operators<> (Ed Brey) // 15 Nov 99 Fix less_than_comparable second operand type for first two @@ -60,8 +63,8 @@ // 10 Nov 99 Initial version // 10 Jun 00: -// An additional optional template parameter was added to most of -// operator templates to support the base class chaining technique (see +// An additional optional template parameter was added to most of +// operator templates to support the base class chaining technique (see // documentation for the details). Unfortunately, a straightforward // implementation of this change would have broken compatibility with the // previous version of the library by making it impossible to use the same @@ -70,18 +73,24 @@ // issue at the cost of some simplicity. // // One of the complications is an existence of special auxiliary class template -// 'is_chained_base<>' (see 'detail' namespace below), which is used +// 'is_chained_base<>' (see 'operators_detail' namespace below), which is used // to determine whether its template parameter is a library's operator template -// or not. You have to specialize 'is_chained_base<>' for each new +// or not. You have to specialize 'is_chained_base<>' for each new // operator template you add to the library. // -// However, most of the non-trivial implementation details are hidden behind +// However, most of the non-trivial implementation details are hidden behind // several local macros defined below, and as soon as you understand them, -// you understand the whole library implementation. +// you understand the whole library implementation. #ifndef BOOST_OPERATORS_HPP #define BOOST_OPERATORS_HPP +// If old work-arounds are needed, refer to the preserved version without +// ADL protection. +#if defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_USE_OPERATORS_V1) +#include "operators_v1.hpp" +#else + #include #include @@ -93,35 +102,30 @@ #endif #if BOOST_WORKAROUND(BOOST_MSVC, < 1600) -# pragma warning( disable : 4284 ) // complaint about return type of +# pragma warning( disable : 4284 ) // complaint about return type of #endif // operator-> not begin a UDT -namespace boost { -namespace detail { - -template class empty_base {}; - -} // namespace detail -} // namespace boost - // In this section we supply the xxxx1 and xxxx2 forms of the operator // templates, which are explicitly targeted at the 1-type-argument and -// 2-type-argument operator forms, respectively. Some compilers get confused -// when inline friend functions are overloaded in namespaces other than the -// global namespace. When BOOST_NO_OPERATORS_IN_NAMESPACE is defined, all of -// these templates must go in the global namespace. +// 2-type-argument operator forms, respectively. -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE namespace boost { -#endif +namespace operators_impl +{ +namespace operators_detail +{ + +template class empty_base {}; + +} // namespace operators_detail // Basic operator classes (contributed by Dave Abrahams) ------------------// // Note that friend functions defined in a class are implicitly inline. // See the C++ std, 11.4 [class.friend] paragraph 5 -template > +template > struct less_than_comparable2 : B { friend bool operator<=(const T& x, const U& y) { return !static_cast(x > y); } @@ -132,7 +136,7 @@ struct less_than_comparable2 : B friend bool operator>=(const U& x, const T& y) { return !static_cast(y > x); } }; -template > +template > struct less_than_comparable1 : B { friend bool operator>(const T& x, const T& y) { return y < x; } @@ -140,7 +144,7 @@ struct less_than_comparable1 : B friend bool operator>=(const T& x, const T& y) { return !static_cast(x < y); } }; -template > +template > struct equality_comparable2 : B { friend bool operator==(const U& y, const T& x) { return x == y; } @@ -148,7 +152,7 @@ struct equality_comparable2 : B friend bool operator!=(const T& y, const U& x) { return !static_cast(y == x); } }; -template > +template > struct equality_comparable1 : B { friend bool operator!=(const T& x, const T& y) { return !static_cast(x == y); } @@ -166,39 +170,39 @@ struct equality_comparable1 : B // If the compiler has no NRVO, this is the best symmetric // implementation available. -#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \ -template > \ -struct NAME##2 : B \ -{ \ - friend T operator OP( const T& lhs, const U& rhs ) \ - { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ - friend T operator OP( const U& lhs, const T& rhs ) \ - { T nrv( rhs ); nrv OP##= lhs; return nrv; } \ -}; \ - \ -template > \ -struct NAME##1 : B \ -{ \ - friend T operator OP( const T& lhs, const T& rhs ) \ - { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ +#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \ +template > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( const T& lhs, const U& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ + friend T operator OP( const U& lhs, const T& rhs ) \ + { T nrv( rhs ); nrv OP##= lhs; return nrv; } \ +}; \ + \ +template > \ +struct NAME##1 : B \ +{ \ + friend T operator OP( const T& lhs, const T& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ }; #define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \ -template > \ +template > \ struct NAME##2 : B \ { \ friend T operator OP( const T& lhs, const U& rhs ) \ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ }; \ \ -template > \ +template > \ struct BOOST_OPERATOR2_LEFT(NAME) : B \ { \ friend T operator OP( const U& lhs, const T& rhs ) \ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ }; \ \ -template > \ +template > \ struct NAME##1 : B \ { \ friend T operator OP( const T& lhs, const T& rhs ) \ @@ -213,34 +217,34 @@ struct NAME##1 : B \ // optimization opportunities to the compiler :) #define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \ -template > \ +template > \ struct NAME##2 : B \ { \ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ friend T operator OP( const U& lhs, T rhs ) { return rhs OP##= lhs; } \ }; \ \ -template > \ +template > \ struct NAME##1 : B \ { \ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \ }; #define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \ -template > \ +template > \ struct NAME##2 : B \ { \ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ }; \ \ -template > \ +template > \ struct BOOST_OPERATOR2_LEFT(NAME) : B \ { \ friend T operator OP( const U& lhs, const T& rhs ) \ { return T( lhs ) OP##= rhs; } \ }; \ \ -template > \ +template > \ struct NAME##1 : B \ { \ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \ @@ -263,7 +267,7 @@ BOOST_BINARY_OPERATOR_COMMUTATIVE( orable, | ) // incrementable and decrementable contributed by Jeremy Siek -template > +template > struct incrementable : B { friend T operator++(T& x, int) @@ -276,7 +280,7 @@ private: // The use of this typedef works around a Borland bug typedef T incrementable_type; }; -template > +template > struct decrementable : B { friend T operator--(T& x, int) @@ -291,16 +295,16 @@ private: // The use of this typedef works around a Borland bug // Iterator operator classes (contributed by Jeremy Siek) ------------------// -template > +template > struct dereferenceable : B { P operator->() const - { - return &*static_cast(*this); + { + return &*static_cast(*this); } }; -template > +template > struct indexable : B { R operator[](I n) const @@ -314,34 +318,34 @@ struct indexable : B #if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS) -#define BOOST_BINARY_OPERATOR( NAME, OP ) \ -template > \ -struct NAME##2 : B \ -{ \ - friend T operator OP( const T& lhs, const U& rhs ) \ - { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ -}; \ - \ -template > \ -struct NAME##1 : B \ -{ \ - friend T operator OP( const T& lhs, const T& rhs ) \ - { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ +#define BOOST_BINARY_OPERATOR( NAME, OP ) \ +template > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( const T& lhs, const U& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ +}; \ + \ +template > \ +struct NAME##1 : B \ +{ \ + friend T operator OP( const T& lhs, const T& rhs ) \ + { T nrv( lhs ); nrv OP##= rhs; return nrv; } \ }; #else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS) -#define BOOST_BINARY_OPERATOR( NAME, OP ) \ -template > \ -struct NAME##2 : B \ -{ \ - friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ -}; \ - \ -template > \ -struct NAME##1 : B \ -{ \ - friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \ +#define BOOST_BINARY_OPERATOR( NAME, OP ) \ +template > \ +struct NAME##2 : B \ +{ \ + friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \ +}; \ + \ +template > \ +struct NAME##1 : B \ +{ \ + friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \ }; #endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS) @@ -351,7 +355,7 @@ BOOST_BINARY_OPERATOR( right_shiftable, >> ) #undef BOOST_BINARY_OPERATOR -template > +template > struct equivalent2 : B { friend bool operator==(const T& x, const U& y) @@ -360,7 +364,7 @@ struct equivalent2 : B } }; -template > +template > struct equivalent1 : B { friend bool operator==(const T&x, const T&y) @@ -369,7 +373,7 @@ struct equivalent1 : B } }; -template > +template > struct partially_ordered2 : B { friend bool operator<=(const T& x, const U& y) @@ -386,7 +390,7 @@ struct partially_ordered2 : B { return static_cast(y < x) || static_cast(y == x); } }; -template > +template > struct partially_ordered1 : B { friend bool operator>(const T& x, const T& y) @@ -399,161 +403,161 @@ struct partially_ordered1 : B // Combined operator classes (contributed by Daryle Walker) ----------------// -template > +template > struct totally_ordered2 : less_than_comparable2 > {}; -template > +template > struct totally_ordered1 : less_than_comparable1 > {}; -template > +template > struct additive2 : addable2 > {}; -template > +template > struct additive1 : addable1 > {}; -template > +template > struct multiplicative2 : multipliable2 > {}; -template > +template > struct multiplicative1 : multipliable1 > {}; -template > +template > struct integer_multiplicative2 : multiplicative2 > {}; -template > +template > struct integer_multiplicative1 : multiplicative1 > {}; -template > +template > struct arithmetic2 : additive2 > {}; -template > +template > struct arithmetic1 : additive1 > {}; -template > +template > struct integer_arithmetic2 : additive2 > {}; -template > +template > struct integer_arithmetic1 : additive1 > {}; -template > +template > struct bitwise2 : xorable2 > > {}; -template > +template > struct bitwise1 : xorable1 > > {}; -template > +template > struct unit_steppable : incrementable > {}; -template > +template > struct shiftable2 : left_shiftable2 > {}; -template > +template > struct shiftable1 : left_shiftable1 > {}; -template > +template > struct ring_operators2 : additive2 > > {}; -template > +template > struct ring_operators1 : additive1 > {}; -template > +template > struct ordered_ring_operators2 : ring_operators2 > {}; -template > +template > struct ordered_ring_operators1 : ring_operators1 > {}; -template > +template > struct field_operators2 : ring_operators2 > > {}; -template > +template > struct field_operators1 : ring_operators1 > {}; -template > +template > struct ordered_field_operators2 : field_operators2 > {}; -template > +template > struct ordered_field_operators1 : field_operators1 > {}; -template > +template > struct euclidian_ring_operators2 : ring_operators2 > > > > {}; -template > +template > struct euclidian_ring_operators1 : ring_operators1 > > {}; -template > +template > struct ordered_euclidian_ring_operators2 : totally_ordered2 > {}; -template > +template > struct ordered_euclidian_ring_operators1 : totally_ordered1 > {}; -template > +template > struct euclidean_ring_operators2 : ring_operators2 > > > > {}; -template > +template > struct euclidean_ring_operators1 : ring_operators1 > > {}; -template > +template > struct ordered_euclidean_ring_operators2 : totally_ordered2 > {}; -template > +template > struct ordered_euclidean_ring_operators1 : totally_ordered1 > {}; -template > +template > struct input_iteratable : equality_comparable1 > > {}; -template > +template > struct output_iteratable : incrementable {}; -template > +template > struct forward_iteratable : input_iteratable {}; -template > +template > struct bidirectional_iteratable : forward_iteratable > +template > struct random_access_iteratable : bidirectional_iteratable > > > {}; -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE -} // namespace boost -#endif // BOOST_NO_OPERATORS_IN_NAMESPACE - - -// BOOST_IMPORT_TEMPLATE1 .. BOOST_IMPORT_TEMPLATE4 - -// -// When BOOST_NO_OPERATORS_IN_NAMESPACE is defined we need a way to import an -// operator template into the boost namespace. BOOST_IMPORT_TEMPLATE1 is used -// for one-argument forms of operator templates; BOOST_IMPORT_TEMPLATE2 for -// two-argument forms. Note that these macros expect to be invoked from within -// boost. - -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE - - // The template is already in boost so we have nothing to do. -# define BOOST_IMPORT_TEMPLATE4(template_name) -# define BOOST_IMPORT_TEMPLATE3(template_name) -# define BOOST_IMPORT_TEMPLATE2(template_name) -# define BOOST_IMPORT_TEMPLATE1(template_name) - -#else // BOOST_NO_OPERATORS_IN_NAMESPACE - -# ifndef BOOST_NO_USING_TEMPLATE - - // Bring the names in with a using-declaration - // to avoid stressing the compiler. -# define BOOST_IMPORT_TEMPLATE4(template_name) using ::template_name; -# define BOOST_IMPORT_TEMPLATE3(template_name) using ::template_name; -# define BOOST_IMPORT_TEMPLATE2(template_name) using ::template_name; -# define BOOST_IMPORT_TEMPLATE1(template_name) using ::template_name; - -# else - - // Otherwise, because a Borland C++ 5.5 bug prevents a using declaration - // from working, we are forced to use inheritance for that compiler. -# define BOOST_IMPORT_TEMPLATE4(template_name) \ - template > \ - struct template_name : ::template_name {}; - -# define BOOST_IMPORT_TEMPLATE3(template_name) \ - template > \ - struct template_name : ::template_name {}; - -# define BOOST_IMPORT_TEMPLATE2(template_name) \ - template > \ - struct template_name : ::template_name {}; - -# define BOOST_IMPORT_TEMPLATE1(template_name) \ - template > \ - struct template_name : ::template_name {}; - -# endif // BOOST_NO_USING_TEMPLATE - -#endif // BOOST_NO_OPERATORS_IN_NAMESPACE // -// Here's where we put it all together, defining the xxxx forms of the templates -// in namespace boost. We also define specializations of is_chained_base<> for -// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as -// necessary. +// Here's where we put it all together, defining the xxxx forms of the templates. +// We also define specializations of is_chained_base<> for +// the xxxx, xxxx1, and xxxx2 templates. // +namespace operators_detail +{ + +// A type parameter is used instead of a plain bool because Borland's compiler +// didn't cope well with the more obvious non-type template parameter. +struct true_t {}; +struct false_t {}; + +} // namespace operators_detail + // is_chained_base<> - a traits class used to distinguish whether an operator // template argument is being used for base class chaining, or is specifying a // 2nd argument type. -namespace boost { -// A type parameter is used instead of a plain bool because Borland's compiler -// didn't cope well with the more obvious non-type template parameter. -namespace detail { - struct true_t {}; - struct false_t {}; -} // namespace detail - // Unspecialized version assumes that most types are not being used for base // class chaining. We specialize for the operator templates defined in this // library. template struct is_chained_base { - typedef ::boost::detail::false_t value; + typedef operators_detail::false_t value; }; -} // namespace boost - -// Import a 4-type-argument operator template into boost (if necessary) and -// provide a specialization of 'is_chained_base<>' for it. -# define BOOST_OPERATOR_TEMPLATE4(template_name4) \ - BOOST_IMPORT_TEMPLATE4(template_name4) \ - template \ - struct is_chained_base< ::boost::template_name4 > { \ - typedef ::boost::detail::true_t value; \ +// Provide a specialization of 'is_chained_base<>' +// for a 4-type-argument operator template. +# define BOOST_OPERATOR_TEMPLATE4(template_name4) \ + template \ + struct is_chained_base< template_name4 > { \ + typedef operators_detail::true_t value; \ }; -// Import a 3-type-argument operator template into boost (if necessary) and -// provide a specialization of 'is_chained_base<>' for it. -# define BOOST_OPERATOR_TEMPLATE3(template_name3) \ - BOOST_IMPORT_TEMPLATE3(template_name3) \ - template \ - struct is_chained_base< ::boost::template_name3 > { \ - typedef ::boost::detail::true_t value; \ +// Provide a specialization of 'is_chained_base<>' +// for a 3-type-argument operator template. +# define BOOST_OPERATOR_TEMPLATE3(template_name3) \ + template \ + struct is_chained_base< template_name3 > { \ + typedef operators_detail::true_t value; \ }; -// Import a 2-type-argument operator template into boost (if necessary) and -// provide a specialization of 'is_chained_base<>' for it. -# define BOOST_OPERATOR_TEMPLATE2(template_name2) \ - BOOST_IMPORT_TEMPLATE2(template_name2) \ - template \ - struct is_chained_base< ::boost::template_name2 > { \ - typedef ::boost::detail::true_t value; \ +// Provide a specialization of 'is_chained_base<>' +// for a 2-type-argument operator template. +# define BOOST_OPERATOR_TEMPLATE2(template_name2) \ + template \ + struct is_chained_base< template_name2 > { \ + typedef operators_detail::true_t value; \ }; -// Import a 1-type-argument operator template into boost (if necessary) and -// provide a specialization of 'is_chained_base<>' for it. -# define BOOST_OPERATOR_TEMPLATE1(template_name1) \ - BOOST_IMPORT_TEMPLATE1(template_name1) \ - template \ - struct is_chained_base< ::boost::template_name1 > { \ - typedef ::boost::detail::true_t value; \ +// Provide a specialization of 'is_chained_base<>' +// for a 1-type-argument operator template. +# define BOOST_OPERATOR_TEMPLATE1(template_name1) \ + template \ + struct is_chained_base< template_name1 > { \ + typedef operators_detail::true_t value; \ }; // BOOST_OPERATOR_TEMPLATE(template_name) defines template_name<> such that it @@ -778,34 +722,34 @@ template struct is_chained_base { // implementation in terms of either '1' or '2'. // -# define BOOST_OPERATOR_TEMPLATE(template_name) \ -template \ - ,class O = typename is_chained_base::value \ - > \ -struct template_name : template_name##2 {}; \ - \ -template \ -struct template_name \ - : template_name##1 {}; \ - \ -template \ -struct template_name \ - : template_name##1 {}; \ - \ -template \ -struct is_chained_base< ::boost::template_name > { \ - typedef ::boost::detail::true_t value; \ -}; \ - \ -BOOST_OPERATOR_TEMPLATE2(template_name##2) \ +# define BOOST_OPERATOR_TEMPLATE(template_name) \ +template \ + ,class O = typename is_chained_base::value \ + > \ +struct template_name; \ + \ +template \ +struct template_name \ + : template_name##2 {}; \ + \ +template \ +struct template_name, operators_detail::true_t> \ + : template_name##1 {}; \ + \ +template \ +struct template_name \ + : template_name##1 {}; \ + \ +template \ +struct is_chained_base< template_name > { \ + typedef operators_detail::true_t value; \ +}; \ + \ +BOOST_OPERATOR_TEMPLATE2(template_name##2) \ BOOST_OPERATOR_TEMPLATE1(template_name##1) - - -namespace boost { - BOOST_OPERATOR_TEMPLATE(less_than_comparable) BOOST_OPERATOR_TEMPLATE(equality_comparable) BOOST_OPERATOR_TEMPLATE(multipliable) @@ -859,13 +803,7 @@ BOOST_OPERATOR_TEMPLATE4(random_access_iteratable) #undef BOOST_OPERATOR_TEMPLATE3 #undef BOOST_OPERATOR_TEMPLATE2 #undef BOOST_OPERATOR_TEMPLATE1 -#undef BOOST_IMPORT_TEMPLATE1 -#undef BOOST_IMPORT_TEMPLATE2 -#undef BOOST_IMPORT_TEMPLATE3 -#undef BOOST_IMPORT_TEMPLATE4 -// The following 'operators' classes can only be used portably if the derived class -// declares ALL of the required member operators. template struct operators2 : totally_ordered2 > {}; template @@ -941,10 +879,14 @@ struct random_access_iterator_helper } }; // random_access_iterator_helper +} // namespace operators_impl +using namespace operators_impl; + } // namespace boost #if defined(__sgi) && !defined(__GNUC__) #pragma reset woff 1234 #endif +#endif // BOOST_NO_OPERATORS_IN_NAMESPACE #endif // BOOST_OPERATORS_HPP diff --git a/lib/3rdParty/boost/boost/predef/hardware/simd.h b/lib/3rdParty/boost/boost/predef/hardware/simd.h index 4de1e70..ac5c9da 100644 --- a/lib/3rdParty/boost/boost/predef/hardware/simd.h +++ b/lib/3rdParty/boost/boost/predef/hardware/simd.h @@ -77,12 +77,24 @@ http://www.boost.org/LICENSE_1_0.txt) # error "Multiple SIMD architectures detected, this cannot happen!" #endif -#if defined(BOOST_HW_SIMD_X86_AVAILABLE) -# define BOOST_HW_SIMD BOOST_HW_SIMD_X86 +#if defined(BOOST_HW_SIMD_X86_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE) + // If both standard _X86 and _X86_AMD are available, + // then take the biggest version of the two! +# if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_AMD +# define BOOST_HW_SIMD BOOST_HW_SIMD_X86 +# else +# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD +# endif #endif -#if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE) -# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD +#if !defined(BOOST_HW_SIMD) + // At this point, only one of these two is defined +# if defined(BOOST_HW_SIMD_X86_AVAILABLE) +# define BOOST_HW_SIMD BOOST_HW_SIMD_X86 +# endif +# if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE) +# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD +# endif #endif #if defined(BOOST_HW_SIMD_ARM_AVAILABLE) diff --git a/lib/3rdParty/boost/boost/predef/hardware/simd/x86.h b/lib/3rdParty/boost/boost/predef/hardware/simd/x86.h index 0874bc4..88bd81e 100644 --- a/lib/3rdParty/boost/boost/predef/hardware/simd/x86.h +++ b/lib/3rdParty/boost/boost/predef/hardware/simd/x86.h @@ -67,7 +67,7 @@ http://www.boost.org/LICENSE_1_0.txt) [[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]] - [[`__AVX2__`] [BOOST_HW_SIMD_x86_AVX2_VERSION]] + [[`__AVX2__`] [BOOST_HW_SIMD_X86_AVX2_VERSION]] ] */ @@ -99,10 +99,10 @@ http://www.boost.org/LICENSE_1_0.txt) #if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__) # define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION #endif -#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || _M_IX86_FP >= 2) +#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2)) # define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION #endif -#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || _M_IX86_FP >= 1) +#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1)) # define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION #endif #if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__) diff --git a/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd.h b/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd.h index 60fd448..c80d1ce 100644 --- a/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd.h +++ b/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd.h @@ -33,13 +33,13 @@ http://www.boost.org/LICENSE_1_0.txt) [table [[__predef_symbol__] [__predef_version__]] - [[`__SSE4A__`] [BOOST_HW_SIMD_x86_SSE4A_VERSION]] + [[`__SSE4A__`] [BOOST_HW_SIMD_X86_SSE4A_VERSION]] - [[`__FMA4__`] [BOOST_HW_SIMD_x86_FMA4_VERSION]] + [[`__FMA4__`] [BOOST_HW_SIMD_X86_FMA4_VERSION]] - [[`__XOP__`] [BOOST_HW_SIMD_x86_XOP_VERSION]] + [[`__XOP__`] [BOOST_HW_SIMD_X86_XOP_VERSION]] - [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_x86]] + [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_X86]] ] [note This predef includes every other x86 SIMD extensions and also has other diff --git a/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd/versions.h b/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd/versions.h index a0a9e91..1f9e96c 100644 --- a/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd/versions.h +++ b/lib/3rdParty/boost/boost/predef/hardware/simd/x86_amd/versions.h @@ -21,7 +21,7 @@ http://www.boost.org/LICENSE_1_0.txt) // --------------------------------- /*` - [heading `BOOST_HW_SIMD_X86_SSE4A_VERSION`] + [heading `BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION`] [@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific). @@ -30,16 +30,16 @@ http://www.boost.org/LICENSE_1_0.txt) #define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0) /*` - [heading `BOOST_HW_SIMD_X86_XOP_VERSION`] + [heading `BOOST_HW_SIMD_X86_AMD_FMA4_VERSION`] - [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific). + [@https://en.wikipedia.org/wiki/FMA_instruction_set#FMA4_instruction_set FMA4] x86 extension (AMD specific). Version number is: *5.1.0*. */ #define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0) /*` - [heading `BOOST_HW_SIMD_X86_XOP_VERSION`] + [heading `BOOST_HW_SIMD_X86_AMD_XOP_VERSION`] [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific). diff --git a/lib/3rdParty/boost/boost/predef/os/cygwin.h b/lib/3rdParty/boost/boost/predef/os/cygwin.h index 1985c97..9d36f0f 100644 --- a/lib/3rdParty/boost/boost/predef/os/cygwin.h +++ b/lib/3rdParty/boost/boost/predef/os/cygwin.h @@ -29,7 +29,7 @@ http://www.boost.org/LICENSE_1_0.txt) defined(__CYGWIN__) \ ) # undef BOOST_OS_CYGWIN -# define BOOST_OS_CGYWIN BOOST_VERSION_NUMBER_AVAILABLE +# define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_AVAILABLE #endif #if BOOST_OS_CYGWIN diff --git a/lib/3rdParty/boost/boost/predef/version.h b/lib/3rdParty/boost/boost/predef/version.h index 2fcdefa..8745c94 100644 --- a/lib/3rdParty/boost/boost/predef/version.h +++ b/lib/3rdParty/boost/boost/predef/version.h @@ -1,5 +1,5 @@ /* -Copyright Rene Rivera 2015 +Copyright Rene Rivera 2015-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) @@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt) #include -#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,0) +#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,1) #endif diff --git a/lib/3rdParty/boost/boost/preprocessor/config/config.hpp b/lib/3rdParty/boost/boost/preprocessor/config/config.hpp index 835b283..8be0e47 100644 --- a/lib/3rdParty/boost/boost/preprocessor/config/config.hpp +++ b/lib/3rdParty/boost/boost/preprocessor/config/config.hpp @@ -73,7 +73,7 @@ # define BOOST_PP_VARIADICS_MSVC 0 # if !defined BOOST_PP_VARIADICS # /* variadic support explicitly disabled for all untested compilers */ -# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5130 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI +# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5120 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI # define BOOST_PP_VARIADICS 0 # /* VC++ (C/C++) */ # elif defined _MSC_VER && _MSC_VER >= 1400 && (!defined __EDG__ || defined(__INTELLISENSE__)) && !defined __clang__ diff --git a/lib/3rdParty/boost/boost/range/const_iterator.hpp b/lib/3rdParty/boost/boost/range/const_iterator.hpp index 3413e59..727fdad 100644 --- a/lib/3rdParty/boost/boost/range/const_iterator.hpp +++ b/lib/3rdParty/boost/boost/range/const_iterator.hpp @@ -36,7 +36,7 @@ namespace boost BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator ) template< typename C > -struct range_const_iterator +struct range_const_iterator_helper : extract_const_iterator {}; @@ -45,7 +45,7 @@ struct range_const_iterator ////////////////////////////////////////////////////////////////////////// template< typename Iterator > -struct range_const_iterator > +struct range_const_iterator_helper > { typedef Iterator type; }; @@ -55,7 +55,7 @@ struct range_const_iterator > ////////////////////////////////////////////////////////////////////////// template< typename T, std::size_t sz > -struct range_const_iterator< T[sz] > +struct range_const_iterator_helper< T[sz] > { typedef const T* type; }; @@ -64,7 +64,7 @@ struct range_const_iterator< T[sz] > template struct range_const_iterator - : range_detail::range_const_iterator< + : range_detail::range_const_iterator_helper< BOOST_DEDUCED_TYPENAME remove_reference::type > { diff --git a/lib/3rdParty/boost/boost/range/size_type.hpp b/lib/3rdParty/boost/boost/range/size_type.hpp index f41c321..0a2ea81 100644 --- a/lib/3rdParty/boost/boost/range/size_type.hpp +++ b/lib/3rdParty/boost/boost/range/size_type.hpp @@ -83,11 +83,6 @@ namespace boost detail::range_size { }; - template< class T > - struct range_size : - detail::range_size - { }; - } // namespace boost diff --git a/lib/3rdParty/boost/boost/smart_ptr/bad_weak_ptr.hpp b/lib/3rdParty/boost/boost/smart_ptr/bad_weak_ptr.hpp index 3e0a1b7..582fad8 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/bad_weak_ptr.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/bad_weak_ptr.hpp @@ -36,6 +36,11 @@ namespace boost # pragma option push -pc #endif +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wweak-vtables" +#endif + class bad_weak_ptr: public std::exception { public: @@ -46,6 +51,10 @@ public: } }; +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + #if defined(__BORLANDC__) && __BORLANDC__ <= 0x564 # pragma option pop #endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count.hpp index 8aefd44..6e4f71a 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/detail/atomic_count.hpp @@ -73,6 +73,9 @@ #elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 ) # include +#elif !defined( BOOST_NO_CXX11_HDR_ATOMIC ) +# include + #elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined( __PATHSCALE__ ) # include diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base.hpp index 0addf07..83ede23 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base.hpp @@ -44,6 +44,9 @@ #elif defined( BOOST_SP_HAS_CLANG_C11_ATOMICS ) # include +#elif !defined( BOOST_NO_CXX11_HDR_ATOMIC ) +# include + #elif defined( __SNC__ ) # include @@ -65,7 +68,7 @@ #elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) && !defined(__PATHSCALE__) && !defined( _AIX ) # include -#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) && !defined(__PATHSCALE__) +#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) && !defined(__PATHSCALE__) && !defined( __mips16 ) # include #elif defined( BOOST_SP_HAS_SYNC ) diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_clang.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_clang.hpp index c66b985..7598495 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_clang.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/detail/sp_counted_base_clang.hpp @@ -58,6 +58,11 @@ inline boost::int_least32_t atomic_conditional_increment( atomic_int_least32_t * } } +#if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wweak-vtables" +#endif + class sp_counted_base { private: @@ -133,6 +138,10 @@ public: } }; +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + } // namespace detail } // namespace boost diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock.hpp index 19f93d7..0b618df 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/detail/spinlock.hpp @@ -43,6 +43,9 @@ #elif defined( BOOST_SP_USE_PTHREADS ) # include +#elif !defined( BOOST_NO_CXX11_HDR_ATOMIC ) +# include + #elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) # include diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_array.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_array.hpp deleted file mode 100644 index 7e62d10..0000000 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_array.hpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2014 Glen Joseph Fernandes - * glenfe at live dot com - * - * Distributed under the Boost Software License, - * Version 1.0. (See accompanying file LICENSE_1_0.txt - * or copy at http://boost.org/LICENSE_1_0.txt) - */ -#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP -#define BOOST_SMART_PTR_DETAIL_UP_IF_ARRAY_HPP - -#include - -namespace boost { - namespace detail { - template - struct up_if_array; - - template - struct up_if_array { - typedef std::unique_ptr type; - }; - } -} - -#endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_not_array.hpp b/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_not_array.hpp deleted file mode 100644 index fd74f25..0000000 --- a/lib/3rdParty/boost/boost/smart_ptr/detail/up_if_not_array.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2014 Glen Joseph Fernandes - * glenfe at live dot com - * - * Distributed under the Boost Software License, - * Version 1.0. (See accompanying file LICENSE_1_0.txt - * or copy at http://boost.org/LICENSE_1_0.txt) - */ -#ifndef BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP -#define BOOST_SMART_PTR_DETAIL_UP_IF_NOT_ARRAY_HPP - -#include - -namespace boost { - namespace detail { - template - struct up_if_not_array { - typedef std::unique_ptr type; - }; - - template - struct up_if_not_array { - }; - - template - struct up_if_not_array { - }; - } -} - -#endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_raw.hpp b/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_raw.hpp index 669a649..5cd3574 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_raw.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/enable_shared_from_raw.hpp @@ -104,7 +104,7 @@ private: } // Note: invoked automatically by shared_ptr; do not call - template void _internal_accept_owner( shared_ptr * ppx, Y * py ) const + template void _internal_accept_owner( shared_ptr * ppx, Y * ) const { BOOST_ASSERT( ppx != 0 ); diff --git a/lib/3rdParty/boost/boost/smart_ptr/intrusive_ptr.hpp b/lib/3rdParty/boost/boost/smart_ptr/intrusive_ptr.hpp index e5db609..1e93397 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/intrusive_ptr.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/intrusive_ptr.hpp @@ -59,7 +59,7 @@ public: typedef T element_type; - intrusive_ptr() BOOST_NOEXCEPT : px( 0 ) + BOOST_CONSTEXPR intrusive_ptr() BOOST_NOEXCEPT : px( 0 ) { } @@ -122,6 +122,30 @@ public: return *this; } + template friend class intrusive_ptr; + + template +#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) + + intrusive_ptr(intrusive_ptr && rhs, typename boost::detail::sp_enable_if_convertible::type = boost::detail::sp_empty()) + +#else + + intrusive_ptr(intrusive_ptr && rhs) + +#endif + : px( rhs.px ) + { + rhs.px = 0; + } + + template + intrusive_ptr & operator=(intrusive_ptr && rhs) BOOST_NOEXCEPT + { + this_type( static_cast< intrusive_ptr && >( rhs ) ).swap(*this); + return *this; + } + #endif intrusive_ptr & operator=(intrusive_ptr const & rhs) diff --git a/lib/3rdParty/boost/boost/smart_ptr/intrusive_ref_counter.hpp b/lib/3rdParty/boost/boost/smart_ptr/intrusive_ref_counter.hpp index 82fa8bc..b7587ea 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/intrusive_ref_counter.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/intrusive_ref_counter.hpp @@ -83,7 +83,7 @@ struct thread_safe_counter static unsigned int decrement(boost::detail::atomic_count& counter) BOOST_NOEXCEPT { - return --counter; + return static_cast< unsigned int >(--counter); } }; diff --git a/lib/3rdParty/boost/boost/smart_ptr/make_shared_object.hpp b/lib/3rdParty/boost/boost/smart_ptr/make_shared_object.hpp index 62372fa..3bc78ee 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/make_shared_object.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/make_shared_object.hpp @@ -13,6 +13,8 @@ // for documentation. #include +#include +#include #include #include #include @@ -338,466 +340,10 @@ template< class T, class A > typename boost::detail::sp_if_not_array< T >::type return boost::shared_ptr< T >( pt, pt2 ); } -#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) - -// For example MSVC 10.0 - -template< class T, class A1 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4, class A5 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4, class A5 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ), - boost::detail::sp_forward( a8 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ), - boost::detail::sp_forward( a8 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ), - boost::detail::sp_forward( a8 ), - boost::detail::sp_forward( a9 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) -{ - boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); - - boost::detail::sp_ms_deleter< T > * pd = static_cast *>( pt._internal_get_untyped_deleter() ); - - void * pv = pd->address(); - - ::new( pv ) T( - boost::detail::sp_forward( a1 ), - boost::detail::sp_forward( a2 ), - boost::detail::sp_forward( a3 ), - boost::detail::sp_forward( a4 ), - boost::detail::sp_forward( a5 ), - boost::detail::sp_forward( a6 ), - boost::detail::sp_forward( a7 ), - boost::detail::sp_forward( a8 ), - boost::detail::sp_forward( a9 ) - ); - - pd->set_initialized(); - - T * pt2 = static_cast< T* >( pv ); - - boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 ); - return boost::shared_ptr< T >( pt, pt2 ); -} - -#else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) - // C++03 version template< class T, class A1 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -805,7 +351,10 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 ) void * pv = pd->address(); - ::new( pv ) T( a1 ); + ::new( pv ) T( + boost::forward( a1 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -815,7 +364,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 ) } template< class T, class A, class A1 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -823,7 +372,10 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1 ); + ::new( pv ) T( + boost::forward( a1 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -833,7 +385,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -841,7 +393,11 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -851,7 +407,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -859,7 +415,11 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -869,7 +429,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -877,7 +437,12 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -887,7 +452,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -895,7 +460,12 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -905,7 +475,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -913,7 +483,13 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -923,7 +499,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -931,7 +507,13 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -941,7 +523,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4, class A5 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -949,7 +531,14 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -959,7 +548,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4, class A5 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -967,7 +556,14 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -977,7 +573,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -985,7 +581,15 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -995,7 +599,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -1003,7 +607,15 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1013,7 +625,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -1021,7 +633,16 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1031,7 +652,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -1039,7 +660,16 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1049,7 +679,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7, BOOST_FWD_REF(A8) a8 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -1057,7 +687,17 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ), + boost::forward( a8 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1067,7 +707,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7, BOOST_FWD_REF(A8) a8 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -1075,7 +715,17 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ), + boost::forward( a8 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1085,7 +735,7 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, } template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > -typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +typename boost::detail::sp_if_not_array< T >::type make_shared( BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7, BOOST_FWD_REF(A8) a8, BOOST_FWD_REF(A9) a9 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) ); @@ -1093,7 +743,18 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ), + boost::forward( a8 ), + boost::forward( a9 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1103,7 +764,7 @@ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A } template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > -typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 ) +typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(A4) a4, BOOST_FWD_REF(A5) a5, BOOST_FWD_REF(A6) a6, BOOST_FWD_REF(A7) a7, BOOST_FWD_REF(A8) a8, BOOST_FWD_REF(A9) a9 ) { boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a ); @@ -1111,7 +772,18 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, void * pv = pd->address(); - ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); + ::new( pv ) T( + boost::forward( a1 ), + boost::forward( a2 ), + boost::forward( a3 ), + boost::forward( a4 ), + boost::forward( a5 ), + boost::forward( a6 ), + boost::forward( a7 ), + boost::forward( a8 ), + boost::forward( a9 ) + ); + pd->set_initialized(); T * pt2 = static_cast< T* >( pv ); @@ -1120,8 +792,6 @@ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, return boost::shared_ptr< T >( pt, pt2 ); } -#endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) - #endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) #undef BOOST_SP_MSD diff --git a/lib/3rdParty/boost/boost/smart_ptr/make_unique.hpp b/lib/3rdParty/boost/boost/smart_ptr/make_unique.hpp index 90402e2..d054e3d 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/make_unique.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/make_unique.hpp @@ -1,15 +1,105 @@ /* - * Copyright (c) 2014 Glen Joseph Fernandes - * glenfe at live dot com - * - * Distributed under the Boost Software License, - * Version 1.0. (See accompanying file LICENSE_1_0.txt - * or copy at http://boost.org/LICENSE_1_0.txt) - */ +(c) 2014-2015 Glen Joseph Fernandes + + +Distributed under the Boost Software +License, Version 1.0. +http://boost.org/LICENSE_1_0.txt +*/ #ifndef BOOST_SMART_PTR_MAKE_UNIQUE_HPP #define BOOST_SMART_PTR_MAKE_UNIQUE_HPP -#include -#include +#include +#include +#include + +namespace boost { +namespace detail { +template +struct up_if_object { + typedef std::unique_ptr type; +}; + +template +struct up_if_object { }; + +template +struct up_if_object { }; + +template +struct up_if_array { }; + +template +struct up_if_array { + typedef std::unique_ptr type; +}; + +template +struct up_remove_reference { + typedef T type; +}; + +template +struct up_remove_reference { + typedef T type; +}; + +template +struct up_remove_reference { + typedef T type; +}; + +template +struct up_element { }; + +template +struct up_element { + typedef T type; +}; +} /* detail */ + +template +inline typename detail::up_if_object::type make_unique() +{ + return std::unique_ptr(new T()); +} + +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) +template +inline typename detail::up_if_object::type + make_unique(Args&&... args) +{ + return std::unique_ptr(new T(std::forward(args)...)); +} +#endif + +template +inline typename detail::up_if_object::type + make_unique(typename detail::up_remove_reference::type&& value) +{ + return std::unique_ptr(new T(std::move(value))); +} + +template +inline typename detail::up_if_object::type make_unique_noinit() +{ + return std::unique_ptr(new T); +} + +template +inline typename detail::up_if_array::type make_unique(std::size_t n) +{ + return std::unique_ptr(new + typename detail::up_element::type[n]()); +} + +template +inline typename detail::up_if_array::type + make_unique_noinit(std::size_t n) +{ + return std::unique_ptr(new + typename detail::up_element::type[n]); +} +} /* boost */ #endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/make_unique_array.hpp b/lib/3rdParty/boost/boost/smart_ptr/make_unique_array.hpp deleted file mode 100644 index eb0528e..0000000 --- a/lib/3rdParty/boost/boost/smart_ptr/make_unique_array.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2014 Glen Joseph Fernandes - * glenfe at live dot com - * - * Distributed under the Boost Software License, - * Version 1.0. (See accompanying file LICENSE_1_0.txt - * or copy at http://boost.org/LICENSE_1_0.txt) - */ -#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP -#define BOOST_SMART_PTR_MAKE_UNIQUE_ARRAY_HPP - -#include -#include - -namespace boost { - template - inline typename boost::detail::up_if_array::type - make_unique(std::size_t size) { - typedef typename boost::detail::array_inner::type U; - return std::unique_ptr(new U[size]()); - } - - template - inline typename boost::detail::up_if_array::type - make_unique_noinit(std::size_t size) { - typedef typename boost::detail::array_inner::type U; - return std::unique_ptr(new U[size]); - } -} - -#endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/make_unique_object.hpp b/lib/3rdParty/boost/boost/smart_ptr/make_unique_object.hpp deleted file mode 100644 index 9e6108a..0000000 --- a/lib/3rdParty/boost/boost/smart_ptr/make_unique_object.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014 Glen Joseph Fernandes - * glenfe at live dot com - * - * Distributed under the Boost Software License, - * Version 1.0. (See accompanying file LICENSE_1_0.txt - * or copy at http://boost.org/LICENSE_1_0.txt) - */ -#ifndef BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP -#define BOOST_SMART_PTR_MAKE_UNIQUE_OBJECT_HPP - -#include -#include -#include -#include - -namespace boost { - template - inline typename boost::detail::up_if_not_array::type - make_unique() { - return std::unique_ptr(new T()); - } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template - inline typename boost::detail::up_if_not_array::type - make_unique(Args&&... args) { - return std::unique_ptr(new T(std::forward(args)...)); - } -#endif - - template - inline typename boost::detail::up_if_not_array::type - make_unique(typename add_rvalue_reference::type value) { - return std::unique_ptr(new T(std::move(value))); - } - - template - inline typename boost::detail::up_if_not_array::type - make_unique_noinit() { - return std::unique_ptr(new T); - } -} - -#endif diff --git a/lib/3rdParty/boost/boost/smart_ptr/shared_ptr.hpp b/lib/3rdParty/boost/boost/smart_ptr/shared_ptr.hpp index 47bc33d..77f68be 100644 --- a/lib/3rdParty/boost/boost/smart_ptr/shared_ptr.hpp +++ b/lib/3rdParty/boost/boost/smart_ptr/shared_ptr.hpp @@ -642,6 +642,14 @@ public: return *this; } + // aliasing move + template + shared_ptr( shared_ptr && r, element_type * p ) BOOST_NOEXCEPT : px( p ), pn() + { + pn.swap( r.pn ); + r.px = 0; + } + #endif #if !defined( BOOST_NO_CXX11_NULLPTR ) @@ -679,7 +687,16 @@ public: { this_type( r, p ).swap( *this ); } - + +#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) + + template void reset( shared_ptr && r, element_type * p ) + { + this_type( static_cast< shared_ptr && >( r ), p ).swap( *this ); + } + +#endif + // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT) typename boost::detail::sp_dereference< T >::type operator* () const { @@ -1065,7 +1082,7 @@ template< class T > struct hash; template< class T > std::size_t hash_value( boost::shared_ptr const & p ) BOOST_NOEXCEPT { - return boost::hash< T* >()( p.get() ); + return boost::hash< typename boost::shared_ptr::element_type* >()( p.get() ); } } // namespace boost diff --git a/lib/3rdParty/boost/boost/type_index.hpp b/lib/3rdParty/boost/boost/type_index.hpp new file mode 100644 index 0000000..0310e20 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index.hpp @@ -0,0 +1,265 @@ +// +// Copyright (c) Antony Polukhin, 2012-2014. +// +// 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) +// + +#ifndef BOOST_TYPE_INDEX_HPP +#define BOOST_TYPE_INDEX_HPP + +/// \file boost/type_index.hpp +/// \brief Includes minimal set of headers required to use the Boost.TypeIndex library. +/// +/// By inclusion of this file most optimal type index classes will be included and used +/// as a boost::typeindex::type_index and boost::typeindex::type_info. + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +#if defined(BOOST_TYPE_INDEX_USER_TYPEINDEX) +# include BOOST_TYPE_INDEX_USER_TYPEINDEX +# ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH +# pragma detect_mismatch( "boost__type_index__abi", "user defined type_index class is used: " BOOST_STRINGIZE(BOOST_TYPE_INDEX_USER_TYPEINDEX)) +# endif +#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC) +# include +# if defined(BOOST_NO_RTTI) || defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY) +# include +# ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH +# pragma detect_mismatch( "boost__type_index__abi", "RTTI is off - typeid() is used only for templates") +# endif +# else +# ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH +# pragma detect_mismatch( "boost__type_index__abi", "RTTI is used") +# endif +# endif +#else +# include +# include +# ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH +# pragma detect_mismatch( "boost__type_index__abi", "RTTI is off - using CTTI") +# endif +#endif + +#ifndef BOOST_TYPE_INDEX_REGISTER_CLASS +#define BOOST_TYPE_INDEX_REGISTER_CLASS +#endif + +namespace boost { namespace typeindex { + +#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) + +/// \def BOOST_TYPE_INDEX_FUNCTION_SIGNATURE +/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is used by boost::typeindex::ctti_type_index class to +/// deduce the name of a type. If your compiler is not recognized +/// by the TypeIndex library and you wish to work with boost::typeindex::ctti_type_index, you may +/// define this macro by yourself. +/// +/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE must be defined to a compiler specific macro +/// that outputs the \b whole function signature \b including \b template \b parameters. +/// +/// If your compiler is not recognised and BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is not defined, +/// then a compile-time error will arise at any attempt to use boost::typeindex::ctti_type_index classes. +/// +/// See BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS and BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING +/// for an information of how to tune the implementation to make a nice pretty_name() output. +#define BOOST_TYPE_INDEX_FUNCTION_SIGNATURE BOOST_CURRENT_FUNCTION + +/// \def BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING +/// This is a helper macro for making correct pretty_names() with RTTI off. +/// +/// BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING macro may be defined to +/// '(begin_skip, end_skip, runtime_skip, runtime_skip_until)' with parameters for adding a +/// support for compilers, that by default are not recognized by TypeIndex library. +/// +/// \b Example: +/// +/// Imagine the situation when +/// \code boost::typeindex::ctti_type_index::type_id().pretty_name() \endcode +/// returns the following string: +/// \code "static const char *boost::detail::ctti::n() [T = int]" \endcode +/// and \code boost::typeindex::ctti_type_index::type_id().pretty_name() \endcode returns the following: +/// \code "static const char *boost::detail::ctti::n() [T = short]" \endcode +/// +/// As we may see first 39 characters are "static const char *boost::detail::ctti<" and they do not depend on +/// the type T. After first 39 characters we have a human readable type name which is duplicated at the end +/// of a string. String always ends on ']', which consumes 1 character. +/// +/// Now if we define `BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING` to +/// `(39, 1, false, "")` we'll be getting \code "int>::n() [T = int" \endcode +/// for `boost::typeindex::ctti_type_index::type_id().pretty_name()` and \code "short>::n() [T = short" \endcode +/// for `boost::typeindex::ctti_type_index::type_id().pretty_name()`. +/// +/// Now we need to take additional care of the characters that go before the last mention of our type. We'll +/// do that by telling the macro that we need to cut off everything that goes before the "T = " including the "T = " +/// itself: +/// +/// \code (39, 1, true, "T = ") \endcode +/// +/// In case of GCC or Clang command line we need to add the following line while compiling all the sources: +/// +/// \code +/// -DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING='(39, 1, true, "T = ")' +/// \endcode +/// \param begin_skip How many characters must be skipped at the beginning of the type holding string. +/// Must be a compile time constant. +/// \param end_skip How many characters must be skipped at the end of the type holding string. +/// Must be a compile time constant. +/// \param runtime_skip Do we need additional checks at runtime to cut off the more characters. +/// Must be `true` or `false`. +/// \param runtime_skip_until Skip all the characters before the following string (including the string itself). +/// Must be a compile time array of characters. +/// +/// See [RTTI emulation limitations](boost_typeindex/rtti_emulation_limitations.html) for more info. +#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (0, 0, false, "") + + + /// Depending on a compiler flags, optimal implementation of type_index will be used + /// as a default boost::typeindex::type_index. + /// + /// Could be a boost::typeindex::stl_type_index, boost::typeindex::ctti_type_index or + /// user defined type_index class. + /// + /// \b See boost::typeindex::type_index_facade for a full description of type_index functions. + typedef platform_specific type_index; +#elif defined(BOOST_TYPE_INDEX_USER_TYPEINDEX) + // Nothing to do +#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC) + typedef boost::typeindex::stl_type_index type_index; +#else + typedef boost::typeindex::ctti_type_index type_index; +#endif + +/// Depending on a compiler flags, optimal implementation of type_info will be used +/// as a default boost::typeindex::type_info. +/// +/// Could be a std::type_info, boost::typeindex::detail::ctti_data or +/// some user defined class. +/// +/// type_info \b is \b not copyable or default constructible. It is \b not assignable too! +typedef type_index::type_info_t type_info; + +#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) + +/// \def BOOST_TYPE_INDEX_USER_TYPEINDEX +/// BOOST_TYPE_INDEX_USER_TYPEINDEX can be defined to the path to header file +/// with user provided implementation of type_index. +/// +/// See [Making a custom type_index](boost_typeindex/making_a_custom_type_index.html) section +/// of documentation for usage example. +#define BOOST_TYPE_INDEX_USER_TYPEINDEX + + +/// \def BOOST_TYPE_INDEX_REGISTER_CLASS +/// BOOST_TYPE_INDEX_REGISTER_CLASS is used to help to emulate RTTI. +/// Put this macro into the public section of polymorphic class to allow runtime type detection. +/// +/// Depending on the typeid() availability this macro will expand to nothing or to virtual helper function +/// `virtual const type_info& boost_type_info_type_id_runtime_() const noexcept`. +/// +/// \b Example: +/// \code +/// class A { +/// public: +/// BOOST_TYPE_INDEX_REGISTER_CLASS +/// virtual ~A(){} +/// }; +/// +/// struct B: public A { +/// BOOST_TYPE_INDEX_REGISTER_CLASS +/// }; +/// +/// struct C: public B { +/// BOOST_TYPE_INDEX_REGISTER_CLASS +/// }; +/// +/// ... +/// +/// C c1; +/// A* pc1 = &c1; +/// assert(boost::typeindex::type_id() == boost::typeindex::type_id_runtime(*pc1)); +/// \endcode +#define BOOST_TYPE_INDEX_REGISTER_CLASS nothing-or-some-virtual-functions + +/// \def BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY +/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY is a helper macro that must be defined if mixing +/// RTTI on/off modules. See +/// [Mixing sources with RTTI on and RTTI off](boost_typeindex/mixing_sources_with_rtti_on_and_.html) +/// section of documentation for more info. +#define BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY + +#endif // defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) + + +/// Function to get boost::typeindex::type_index for a type T. +/// Removes const, volatile && and & modifiers from T. +/// +/// \b Example: +/// \code +/// type_index ti = type_id(); +/// std::cout << ti.pretty_name(); // Outputs 'int' +/// \endcode +/// +/// \tparam T Type for which type_index must be created. +/// \throw Nothing. +/// \return boost::typeindex::type_index with information about the specified type T. +template +inline type_index type_id() BOOST_NOEXCEPT { + return type_index::type_id(); +} + +/// Function for constructing boost::typeindex::type_index instance for type T. +/// Does not remove const, volatile, & and && modifiers from T. +/// +/// If T has no const, volatile, & and && modifiers, then returns exactly +/// the same result as in case of calling `type_id()`. +/// +/// \b Example: +/// \code +/// type_index ti = type_id_with_cvr(); +/// std::cout << ti.pretty_name(); // Outputs 'int&' +/// \endcode +/// +/// \tparam T Type for which type_index must be created. +/// \throw Nothing. +/// \return boost::typeindex::type_index with information about the specified type T. +template +inline type_index type_id_with_cvr() BOOST_NOEXCEPT { + return type_index::type_id_with_cvr(); +} + +/// Function that works exactly like C++ typeid(rtti_val) call, but returns boost::type_index. +/// +/// Returns runtime information about specified type. +/// +/// \b Requirements: RTTI available or Base and Derived classes must be marked with BOOST_TYPE_INDEX_REGISTER_CLASS. +/// +/// \b Example: +/// \code +/// struct Base { virtual ~Base(){} }; +/// struct Derived: public Base {}; +/// ... +/// Derived d; +/// Base& b = d; +/// type_index ti = type_id_runtime(b); +/// std::cout << ti.pretty_name(); // Outputs 'Derived' +/// \endcode +/// +/// \param runtime_val Variable which runtime type must be returned. +/// \throw Nothing. +/// \return boost::typeindex::type_index with information about the specified variable. +template +inline type_index type_id_runtime(const T& runtime_val) BOOST_NOEXCEPT { + return type_index::type_id_runtime(runtime_val); +} + +}} // namespace boost::typeindex + + + +#endif // BOOST_TYPE_INDEX_HPP + diff --git a/lib/3rdParty/boost/boost/type_index/ctti_type_index.hpp b/lib/3rdParty/boost/boost/type_index/ctti_type_index.hpp new file mode 100644 index 0000000..611ad92 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/ctti_type_index.hpp @@ -0,0 +1,212 @@ +// +// Copyright (c) Antony Polukhin, 2013-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) +// + +#ifndef BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP +#define BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP + +/// \file ctti_type_index.hpp +/// \brief Contains boost::typeindex::ctti_type_index class that is constexpr if C++14 constexpr is supported by compiler. +/// +/// boost::typeindex::ctti_type_index class can be used as a drop-in replacement +/// for std::type_index. +/// +/// It is used in situations when typeid() method is not available or +/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro is defined. + +#include +#include + +#include +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +namespace detail { + +// That's the most trickiest part of the TypeIndex library: +// 1) we do not want to give user ability to manually construct and compare `struct-that-represents-type` +// 2) we need to distinguish between `struct-that-represents-type` and `const char*` +// 3) we need a thread-safe way to have references to instances `struct-that-represents-type` +// 4) we need a compile-time control to make sure that user does not copy or +// default construct `struct-that-represents-type` +// +// Solution would be the following: + +/// \class ctti_data +/// Standard-layout class with private constructors and assignment operators. +/// +/// You can not work with this class directly. The purpose of this class is to hold type info +/// \b when \b RTTI \b is \b off and allow ctti_type_index construction from itself. +/// +/// \b Example: +/// \code +/// const detail::ctti_data& foo(); +/// ... +/// type_index ti = type_index(foo()); +/// std::cout << ti.pretty_name(); +/// \endcode +class ctti_data { +#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS +public: + ctti_data() = delete; + ctti_data(const ctti_data&) = delete; + ctti_data& operator=(const ctti_data&) = delete; +#else +private: + ctti_data(); + ctti_data(const ctti_data&); + ctti_data& operator=(const ctti_data&); +#endif +}; + +} // namespace detail + +/// Helper method for getting detail::ctti_data of a template parameter T. +template +inline const detail::ctti_data& ctti_construct() BOOST_NOEXCEPT { + // Standard C++11, 5.2.10 Reinterpret cast: + // An object pointer can be explicitly converted to an object pointer of a different type. When a prvalue + // v of type "pointer to T1" is converted to the type "pointer to cv T2", the result is static_cast(static_cast(v)) if both T1 and T2 are standard-layout types (3.9) and the alignment + // requirements of T2 are no stricter than those of T1, or if either type is void. Converting a prvalue of type + // "pointer to T1" to the type "pointer to T2" (where T1 and T2 are object types and where the alignment + // requirements of T2 are no stricter than those of T1) and back to its original type yields the original pointer + // value. + // + // Alignments are checked in `type_index_test_ctti_alignment.cpp` test. + return *reinterpret_cast(boost::detail::ctti::n()); +} + +/// \class ctti_type_index +/// This class is a wrapper that pretends to work exactly like stl_type_index, but does +/// not require RTTI support. \b For \b description \b of \b functions \b see type_index_facade. +/// +/// This class on C++14 compatible compilers has following functions marked as constexpr: +/// * default constructor +/// * copy constructors and assignemnt operations +/// * class methods: name(), before(const ctti_type_index& rhs), equal(const ctti_type_index& rhs) +/// * static methods type_id(), type_id_with_cvr() +/// * comparison operators +/// +/// This class produces slightly longer type names, so consider using stl_type_index +/// in situations when typeid() is working. +class ctti_type_index: public type_index_facade { + const char* data_; + + inline std::size_t get_raw_name_length() const BOOST_NOEXCEPT; + + BOOST_CXX14_CONSTEXPR inline explicit ctti_type_index(const char* data) BOOST_NOEXCEPT + : data_(data) + {} + +public: + typedef detail::ctti_data type_info_t; + + BOOST_CXX14_CONSTEXPR inline ctti_type_index() BOOST_NOEXCEPT + : data_(boost::detail::ctti::n()) + {} + + inline ctti_type_index(const type_info_t& data) BOOST_NOEXCEPT + : data_(reinterpret_cast(&data)) + {} + + inline const type_info_t& type_info() const BOOST_NOEXCEPT; + BOOST_CXX14_CONSTEXPR inline const char* raw_name() const BOOST_NOEXCEPT; + BOOST_CXX14_CONSTEXPR inline const char* name() const BOOST_NOEXCEPT; + inline std::string pretty_name() const; + inline std::size_t hash_code() const BOOST_NOEXCEPT; + + BOOST_CXX14_CONSTEXPR inline bool equal(const ctti_type_index& rhs) const BOOST_NOEXCEPT; + BOOST_CXX14_CONSTEXPR inline bool before(const ctti_type_index& rhs) const BOOST_NOEXCEPT; + + template + BOOST_CXX14_CONSTEXPR inline static ctti_type_index type_id() BOOST_NOEXCEPT; + + template + BOOST_CXX14_CONSTEXPR inline static ctti_type_index type_id_with_cvr() BOOST_NOEXCEPT; + + template + inline static ctti_type_index type_id_runtime(const T& variable) BOOST_NOEXCEPT; +}; + + +inline const ctti_type_index::type_info_t& ctti_type_index::type_info() const BOOST_NOEXCEPT { + return *reinterpret_cast(data_); +} + + +BOOST_CXX14_CONSTEXPR inline bool ctti_type_index::equal(const ctti_type_index& rhs) const BOOST_NOEXCEPT { + const char* const left = raw_name(); + const char* const right = rhs.raw_name(); + return /*left == right ||*/ !boost::typeindex::detail::constexpr_strcmp(left, right); +} + +BOOST_CXX14_CONSTEXPR inline bool ctti_type_index::before(const ctti_type_index& rhs) const BOOST_NOEXCEPT { + const char* const left = raw_name(); + const char* const right = rhs.raw_name(); + return /*left != right &&*/ boost::typeindex::detail::constexpr_strcmp(left, right) < 0; +} + + +template +BOOST_CXX14_CONSTEXPR inline ctti_type_index ctti_type_index::type_id() BOOST_NOEXCEPT { + typedef BOOST_DEDUCED_TYPENAME boost::remove_reference::type no_ref_t; + typedef BOOST_DEDUCED_TYPENAME boost::remove_cv::type no_cvr_t; + return ctti_type_index(boost::detail::ctti::n()); +} + + + +template +BOOST_CXX14_CONSTEXPR inline ctti_type_index ctti_type_index::type_id_with_cvr() BOOST_NOEXCEPT { + return ctti_type_index(boost::detail::ctti::n()); +} + + +template +inline ctti_type_index ctti_type_index::type_id_runtime(const T& variable) BOOST_NOEXCEPT { + return variable.boost_type_index_type_id_runtime_(); +} + + +BOOST_CXX14_CONSTEXPR inline const char* ctti_type_index::raw_name() const BOOST_NOEXCEPT { + return data_; +} + + +BOOST_CXX14_CONSTEXPR inline const char* ctti_type_index::name() const BOOST_NOEXCEPT { + return data_; +} + +inline std::size_t ctti_type_index::get_raw_name_length() const BOOST_NOEXCEPT { + return std::strlen(raw_name() + detail::ctti_skip_size_at_end); +} + + +inline std::string ctti_type_index::pretty_name() const { + std::size_t len = get_raw_name_length(); + while (raw_name()[len - 1] == ' ') --len; // MSVC sometimes adds whitespaces + return std::string(raw_name(), len); +} + + +inline std::size_t ctti_type_index::hash_code() const BOOST_NOEXCEPT { + return boost::hash_range(raw_name(), raw_name() + get_raw_name_length()); +} + + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP + diff --git a/lib/3rdParty/boost/boost/type_index/detail/compile_time_type_info.hpp b/lib/3rdParty/boost/boost/type_index/detail/compile_time_type_info.hpp new file mode 100644 index 0000000..a2a89ae --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/detail/compile_time_type_info.hpp @@ -0,0 +1,289 @@ +// +// Copyright (c) Antony Polukhin, 2012-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) +// + +#ifndef BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP +#define BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP + +/// \file compile_time_type_info.hpp +/// \brief Contains helper macros and implementation details of boost::typeindex::ctti_type_index. +/// Not intended for inclusion from user's code. + +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +/// @cond +#define BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(begin_skip, end_skip, runtime_skip, runtime_skip_until) \ + namespace boost { namespace typeindex { namespace detail { \ + BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_begin = begin_skip; \ + BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_end = end_skip; \ + BOOST_STATIC_CONSTEXPR bool ctti_skip_more_at_runtime = runtime_skip; \ + BOOST_STATIC_CONSTEXPR char ctti_skip_until_runtime[] = runtime_skip_until; \ + }}} /* namespace boost::typeindex::detail */ \ + /**/ +/// @endcond + + +#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) + /* Nothing to document. All the macro docs are moved to */ +#elif defined(BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING) +# include + BOOST_PP_EXPAND( BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING ) +#elif defined(_MSC_VER) && defined (BOOST_NO_CXX11_NOEXCEPT) + // sizeof("const char *__cdecl boost::detail::ctti<") - 1, sizeof(">::n(void)") - 1 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(40, 10, false, "") +#elif defined(_MSC_VER) && !defined (BOOST_NO_CXX11_NOEXCEPT) + // sizeof("const char *__cdecl boost::detail::ctti<") - 1, sizeof(">::n(void) noexcept") - 1 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(40, 19, false, "") +#elif defined(__clang__) && defined(__APPLE__) + // Someone made __clang_major__ equal to LLVM version rather than compiler version + // on APPLE platform. + // + // Using less efficient solution because there is no good way to detect real version of Clang. + // sizeof("static const char *boost::detail::ctti<") - 1, sizeof("]") - 1, true, "???????????>::n() [T = int" + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ") +#elif defined(__clang__) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ == 0)) + // sizeof("static const char *boost::detail::ctti<") - 1, sizeof(">::n()") - 1 + // note: checked on 3.0 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 6, false, "") +#elif defined(__clang__) && (__clang_major__ >= 4 || (__clang_major__ == 3 && __clang_minor__ > 0)) + // sizeof("static const char *boost::detail::ctti<") - 1, sizeof("]") - 1, true, "int>::n() [T = int" + // note: checked on 3.1, 3.4 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ") +#elif defined(__GNUC__) && !defined(BOOST_NO_CXX14_CONSTEXPR) + // sizeof("static contexpr char boost::detail::ctti::s() [with unsigned int I = 0u; T = ") - 1, sizeof("]") - 1 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(81, 1, false, "") +#elif defined(__GNUC__) && defined(BOOST_NO_CXX14_CONSTEXPR) + // sizeof("static const char* boost::detail::ctti::n() [with T = ") - 1, sizeof("]") - 1 + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(57, 1, false, "") +#else + // Deafult code for other platforms... Just skip nothing! + BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(0, 0, false, "") +#endif + +#undef BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS + +namespace boost { namespace typeindex { namespace detail { + template + BOOST_CXX14_CONSTEXPR inline void assert_compile_time_legths() BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG( + Condition, + "TypeIndex library is misconfigured for your compiler. " + "Please define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct values. See section " + "'RTTI emulation limitations' of the documentation for more information." + ); + } + + template + BOOST_CXX14_CONSTEXPR inline void failed_to_get_function_name() BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG( + sizeof(T) && false, + "TypeIndex library could not detect your compiler. " + "Please make the BOOST_TYPE_INDEX_FUNCTION_SIGNATURE macro use " + "correct compiler macro for getting the whole function name. " + "Define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct value after that." + ); + } + + template + BOOST_CXX14_CONSTEXPR inline const char* skip_begining_runtime(const char* begin, boost::mpl::false_) BOOST_NOEXCEPT { + return begin; + } + + template + BOOST_CXX14_CONSTEXPR inline ForwardIterator1 constexpr_search( + ForwardIterator1 first1, + ForwardIterator1 last1, + ForwardIterator2 first2, + ForwardIterator2 last2) BOOST_NOEXCEPT + { + if (first2 == last2) { + return first1; // specified in C++11 + } + + while (first1 != last1) { + ForwardIterator1 it1 = first1; + ForwardIterator2 it2 = first2; + + while (*it1 == *it2) { + ++it1; + ++it2; + if (it2 == last2) return first1; + if (it1 == last1) return last1; + } + + ++first1; + } + + return last1; + } + + BOOST_CXX14_CONSTEXPR inline int constexpr_strcmp(const char *v1, const char *v2) BOOST_NOEXCEPT { + while (*v1 != '\0' && *v1 == *v2) { + ++v1; + ++v2; + }; + + return static_cast(*v1) - *v2; + } + + template + BOOST_CXX14_CONSTEXPR inline const char* skip_begining_runtime(const char* begin, boost::mpl::true_) BOOST_NOEXCEPT { + const char* const it = constexpr_search( + begin, begin + ArrayLength, + ctti_skip_until_runtime, ctti_skip_until_runtime + sizeof(ctti_skip_until_runtime) - 1 + ); + return (it == begin + ArrayLength ? begin : it + sizeof(ctti_skip_until_runtime) - 1); + } + + template + BOOST_CXX14_CONSTEXPR inline const char* skip_begining(const char* begin) BOOST_NOEXCEPT { + assert_compile_time_legths<(ArrayLength > ctti_skip_size_at_begin + ctti_skip_size_at_end)>(); + return skip_begining_runtime( + begin + ctti_skip_size_at_begin, + boost::mpl::bool_() + ); + } + +#if !defined(__clang__) && defined(__GNUC__) && !defined(BOOST_NO_CXX14_CONSTEXPR) + template + struct index_seq {}; + + template + struct make_index_sequence_join; + + template + struct make_index_sequence_join, index_seq > { + typedef index_seq type; + }; + + template + struct make_index_seq_impl { + typedef typename make_index_sequence_join< + typename make_index_seq_impl::type, + typename make_index_seq_impl::type + >::type type; + }; + + template + struct make_index_seq_impl { + typedef index_seq<> type; + }; + + template + struct make_index_seq_impl { + typedef index_seq type; + }; + + template + struct cstring { + static constexpr unsigned int size_ = sizeof...(C); + static constexpr char data_[size_] = { C... }; + }; + + template + constexpr char cstring::data_[]; +#endif + +}}} // namespace boost::typeindex::detail + +namespace boost { namespace detail { + +/// Noncopyable type_info that does not require RTTI. +/// CTTI == Compile Time Type Info. +/// This name must be as short as possible, to avoid code bloat +template +struct ctti { + +#if !defined(__clang__) && defined(__GNUC__) && !defined(BOOST_NO_CXX14_CONSTEXPR) + //helper functions + template + constexpr static char s() BOOST_NOEXCEPT { // step + constexpr unsigned int offset = + (I >= 10u ? 1u : 0u) + + (I >= 100u ? 1u : 0u) + + (I >= 1000u ? 1u : 0u) + + (I >= 10000u ? 1u : 0u) + + (I >= 100000u ? 1u : 0u) + + (I >= 1000000u ? 1u : 0u) + ; + + #if defined(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE) + return BOOST_TYPE_INDEX_FUNCTION_SIGNATURE[I + offset]; + #elif defined(__FUNCSIG__) + return __FUNCSIG__[I + offset]; + #else + return __PRETTY_FUNCTION__[I + offset]; + #endif + } + + template + constexpr static const char* impl(::boost::typeindex::detail::index_seq ) BOOST_NOEXCEPT { + return ::boost::typeindex::detail::cstring()...>::data_; + } + + template // `D` means `Dummy` + constexpr static const char* n() BOOST_NOEXCEPT { + #if defined(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE) + constexpr unsigned int size = sizeof(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE); + #elif defined(__FUNCSIG__) + constexpr unsigned int size = sizeof(__FUNCSIG__); + #elif defined(__PRETTY_FUNCTION__) \ + || defined(__GNUC__) \ + || (defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)) \ + || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) \ + || (defined(__ICC) && (__ICC >= 600)) \ + || defined(__ghs__) \ + || defined(__DMC__) + constexpr unsigned int size = sizeof(__PRETTY_FUNCTION__); + #else + boost::typeindex::detail::failed_to_get_function_name(); + #endif + + boost::typeindex::detail::assert_compile_time_legths< + (size > boost::typeindex::detail::ctti_skip_size_at_begin + boost::typeindex::detail::ctti_skip_size_at_end + sizeof("const *") - 1) + >(); + static_assert(!boost::typeindex::detail::ctti_skip_more_at_runtime, "Skipping for GCC in C++14 mode is unsupported"); + + typedef typename boost::typeindex::detail::make_index_seq_impl< + boost::typeindex::detail::ctti_skip_size_at_begin, + size - sizeof("const *") + 1 - boost::typeindex::detail::ctti_skip_size_at_begin + >::type idx_seq; + return impl(idx_seq()); + } +#else + /// Returns raw name. Must be as short, as possible, to avoid code bloat + BOOST_CXX14_CONSTEXPR static const char* n() BOOST_NOEXCEPT { + #if defined(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE) + return boost::typeindex::detail::skip_begining< sizeof(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE) >(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE); + #elif defined(__FUNCSIG__) + return boost::typeindex::detail::skip_begining< sizeof(__FUNCSIG__) >(__FUNCSIG__); + #elif defined(__PRETTY_FUNCTION__) \ + || defined(__GNUC__) \ + || (defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)) \ + || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) \ + || (defined(__ICC) && (__ICC >= 600)) \ + || defined(__ghs__) \ + || defined(__DMC__) + return boost::typeindex::detail::skip_begining< sizeof(__PRETTY_FUNCTION__) >(__PRETTY_FUNCTION__); + #else + boost::typeindex::detail::failed_to_get_function_name(); + return ""; + #endif + } +#endif +}; + +}} // namespace boost::detail + +#endif // BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP + diff --git a/lib/3rdParty/boost/boost/type_index/detail/ctti_register_class.hpp b/lib/3rdParty/boost/boost/type_index/detail/ctti_register_class.hpp new file mode 100644 index 0000000..a8cef2c --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/detail/ctti_register_class.hpp @@ -0,0 +1,40 @@ +// +// Copyright (c) Antony Polukhin, 2013-2014. +// +// +// 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) +// + +#ifndef BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP +#define BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP + +/// \file ctti_register_class.hpp +/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses boost::typeindex::ctti_type_index. +/// Not intended for inclusion from user's code. + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { namespace detail { + +template +inline const ctti_data& ctti_construct_typeid_ref(const T*) BOOST_NOEXCEPT { + return ctti_construct(); +} + +}}} // namespace boost::typeindex::detail + +/// @cond +#define BOOST_TYPE_INDEX_REGISTER_CLASS \ + virtual const boost::typeindex::detail::ctti_data& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT { \ + return boost::typeindex::detail::ctti_construct_typeid_ref(this); \ + } \ +/**/ +/// @endcond + +#endif // BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP + diff --git a/lib/3rdParty/boost/boost/type_index/detail/stl_register_class.hpp b/lib/3rdParty/boost/boost/type_index/detail/stl_register_class.hpp new file mode 100644 index 0000000..95a26f7 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/detail/stl_register_class.hpp @@ -0,0 +1,40 @@ +// +// Copyright (c) Antony Polukhin, 2013-2014. +// +// +// 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) +// + +#ifndef BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP +#define BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP + +/// \file stl_register_class.hpp +/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses boost::typeindex::stl_type_index. +/// Not intended for inclusion from user's code. + +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { namespace detail { + +template +inline const stl_type_index::type_info_t& stl_construct_typeid_ref(const T*) BOOST_NOEXCEPT { + return typeid(T); +} + +}}} // namespace boost::typeindex::detail + +/// @cond +#define BOOST_TYPE_INDEX_REGISTER_CLASS \ + virtual const boost::typeindex::stl_type_index::type_info_t& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT { \ + return boost::typeindex::detail::stl_construct_typeid_ref(this); \ + } \ +/**/ +/// @endcond + +#endif // BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP + diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast.hpp new file mode 100644 index 0000000..c72b119 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast.hpp @@ -0,0 +1,28 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_HPP + +/// \file runtime_cast.hpp +/// \brief Contains the basic utilities necessary to fully emulate +/// dynamic_cast for language level constructs (raw pointers and references). +/// +/// boost::typeindex::runtime_cast is a drop in replacement for dynamic_cast +/// that can be used in situations where traditional rtti is either unavailable +/// or undesirable. + +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp new file mode 100644 index 0000000..e31f19d --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_BOOST_SHARED_PTR_CAST_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_BOOST_SHARED_PTR_CAST_HPP + +/// \file boost_shared_ptr_cast.hpp +/// \brief Contains the overload of boost::typeindex::runtime_pointer_cast for +/// boost::shared_ptr types. + +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +/// \brief Creates a new instance of std::shared_ptr whose stored pointer is obtained from u's +/// stored pointer using a runtime_cast. +/// +/// The new shared_ptr will share ownership with u, except that it is empty if the runtime_cast +/// performed by runtime_pointer_cast returns a null pointer. +/// \tparam T The desired target type to return a pointer of. +/// \tparam U A complete class type of the source instance pointed to from u. +/// \return If there exists a valid conversion from U* to T*, returns a boost::shared_ptr +/// that points to an address suitably offset from u. +/// If no such conversion exists, returns boost::shared_ptr(); +template +boost::shared_ptr runtime_pointer_cast(boost::shared_ptr const& u) { + T* value = detail::runtime_cast_impl(u.get(), boost::is_base_and_derived()); + if(value) + return boost::shared_ptr(u, value); + return boost::shared_ptr(); +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_BOOST_SHARED_PTR_CAST_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp new file mode 100644 index 0000000..6181df6 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp @@ -0,0 +1,57 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_DETAIL_RUNTIME_CAST_IMPL_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_DETAIL_RUNTIME_CAST_IMPL_HPP + +/// \file runtime_cast_impl.hpp +/// \brief Contains the overload of boost::typeindex::runtime_cast for +/// pointer types. +/// +/// boost::typeindex::runtime_cast can be used to emulate dynamic_cast +/// functionality on platorms that don't provide it or should the user +/// desire opt in functionality instead of enabling it system wide. + +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +namespace detail { + +template +T* runtime_cast_impl(U* u, boost::true_type) BOOST_NOEXCEPT { + return u; +} + +template +T const* runtime_cast_impl(U const* u, boost::true_type) BOOST_NOEXCEPT { + return u; +} + +template +T* runtime_cast_impl(U* u, boost::false_type) BOOST_NOEXCEPT { + return const_cast(static_cast( + u->boost_type_index_find_instance_(boost::typeindex::type_id()) + )); +} + +template +T const* runtime_cast_impl(U const* u, boost::false_type) BOOST_NOEXCEPT { + return static_cast(u->boost_type_index_find_instance_(boost::typeindex::type_id())); +} + +} // namespace detail + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_DETAIL_RUNTIME_CAST_IMPL_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/pointer_cast.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/pointer_cast.hpp new file mode 100644 index 0000000..49a7613 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/pointer_cast.hpp @@ -0,0 +1,74 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_POINTER_CAST_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_POINTER_CAST_HPP + +/// \file pointer_class.hpp +/// \brief Contains the function overloads of boost::typeindex::runtime_cast for +/// pointer types. +#include +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +/// \brief Safely converts pointers to classes up, down, and sideways along the inheritance hierarchy. +/// \tparam T The desired target type. Like dynamic_cast, must be a pointer to complete class type. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U* to T, returns a T that points to +/// an address suitably offset from u. If no such conversion exists, returns NULL. +template +T runtime_cast(U* u) BOOST_NOEXCEPT { + typedef typename boost::remove_pointer::type impl_type; + return detail::runtime_cast_impl(u, boost::is_base_and_derived()); +} + +/// \brief Safely converts pointers to classes up, down, and sideways along the inheritance hierarchy. +/// \tparam T The desired target type. Like dynamic_cast, must be a pointer to complete class type. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U* to T, returns a T that points to +/// an address suitably offset from u. If no such conversion exists, returns NULL. +template +T runtime_cast(U const* u) BOOST_NOEXCEPT { + typedef typename boost::remove_pointer::type impl_type; + return detail::runtime_cast_impl(u, boost::is_base_and_derived()); +} + +/// \brief Safely converts pointers to classes up, down, and sideways along the inheritance +/// hierarchy. +/// \tparam T The desired target type to return a pointer to. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U const* to T*, returns a T* +/// that points to an address suitably offset from u. +/// If no such conversion exists, returns NULL. +template +T* runtime_pointer_cast(U* u) BOOST_NOEXCEPT { + return detail::runtime_cast_impl(u, boost::is_base_and_derived()); +} + +/// \brief Safely converts pointers to classes up, down, and sideways along the inheritance +/// hierarchy. +/// \tparam T The desired target type to return a pointer to. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U const* to T const*, returns a T const* +/// that points to an address suitably offset from u. +/// If no such conversion exists, returns NULL. +template +T const* runtime_pointer_cast(U const* u) BOOST_NOEXCEPT { + return detail::runtime_cast_impl(u, boost::is_base_and_derived()); +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_POINTER_CAST_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/reference_cast.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/reference_cast.hpp new file mode 100644 index 0000000..1511f7d --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/reference_cast.hpp @@ -0,0 +1,66 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_REFERENCE_CAST_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_REFERENCE_CAST_HPP + +/// \file reference_cast.hpp +/// \brief Contains the overload of boost::typeindex::runtime_cast for +/// reference types. + +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +/// \brief Indicates that runtime_cast was unable to perform the desired cast operation +/// because the source instance was not also an instance of the target type. +struct bad_runtime_cast : std::exception +{}; + +/// \brief Safely converts references to classes up, down, and sideways along the inheritance hierarchy. +/// \tparam T The desired target type. Like dynamic_cast, must be a pointer to complete class type. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U& to T, returns a T that references an address +/// suitably offset from u. If no such conversion exists, throws boost::typeindex::bad_runtime_cast. +template +typename boost::add_reference::type runtime_cast(U& u) { + typedef typename boost::remove_reference::type impl_type; + impl_type* value = detail::runtime_cast_impl( + boost::addressof(u), boost::is_base_and_derived()); + if(!value) + BOOST_THROW_EXCEPTION(bad_runtime_cast()); + return *value; +} + +/// \brief Safely converts references to classes up, down, and sideways along the inheritance hierarchy. +/// \tparam T The desired target type. Like dynamic_cast, must be a pointer to complete class type. +/// \tparam U A complete class type of the source instance, u. +/// \return If there exists a valid conversion from U const& to T const, returns a T const that references an address +/// suitably offset from u. If no such conversion exists, throws boost::typeindex::bad_runtime_cast. +template +typename boost::add_reference::type runtime_cast(U const& u) { + typedef typename boost::remove_reference::type impl_type; + impl_type* value = detail::runtime_cast_impl( + boost::addressof(u), boost::is_base_and_derived()); + if(!value) + BOOST_THROW_EXCEPTION(bad_runtime_cast()); + return *value; +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_REFERENCE_CAST_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/register_runtime_class.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/register_runtime_class.hpp new file mode 100644 index 0000000..37ce686 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/register_runtime_class.hpp @@ -0,0 +1,88 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_REGISTER_RUNTIME_CLASS_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_REGISTER_RUNTIME_CLASS_HPP + +/// \file register_runtime_class.hpp +/// \brief Contains the macro BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +namespace detail { + +template +inline type_index runtime_class_construct_type_id(T const*) { + return type_id(); +} + +} // namespace detail + +/// @cond + +#define BOOST_TYPE_INDEX_CHECK_BASE_(r, data, Base) \ + if(void const* ret_val = this->Base::boost_type_index_find_instance_(idx)) return ret_val; + +/// @endcond + +/// \def BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS +/// \brief Macro used to make a class compatible with boost::typeindex::runtime_cast +/// +/// BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS generates a virtual function +/// in the current class that, when combined with the supplied base class information, allows +/// boost::typeindex::runtime_cast to accurately convert between dynamic types of instances of +/// the current class. +/// +/// \b Example: +/// \code +/// struct base1 { +/// BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_TYPE_INDEX_NO_BASE_CLASS) +/// virtual ~base1(); +/// }; +/// +/// struct base2 { +/// BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_TYPE_INDEX_NO_BASE_CLASS) +/// virtual ~base2(); +/// }; +/// +/// struct derived1 : base1 { +/// BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base1)) +/// }; +/// +/// struct derived2 : base1, base2 { +/// BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((base1)(base2)) +/// }; +/// +/// ... +/// +/// base1* pb1 = get_object(); +/// if(derived2* pb2 = boost::typeindex::runtime_cast(pb1)) +/// { /* ... */ } +/// \endcode +/// +/// \param base_class_seq A Boost.Preprocessor sequence of the current class' direct bases, or +/// BOOST_PP_SEQ_NIL if this class has no direct base classes. +#define BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(base_class_seq) \ + BOOST_TYPE_INDEX_REGISTER_CLASS \ + virtual void const* boost_type_index_find_instance_(boost::typeindex::type_index const& idx) const BOOST_NOEXCEPT { \ + if(idx == boost::typeindex::detail::runtime_class_construct_type_id(this)) \ + return this; \ + BOOST_PP_SEQ_FOR_EACH(BOOST_TYPE_INDEX_CHECK_BASE_, _, base_class_seq) \ + return NULL; \ + } +}} // namespace boost::typeindex + +#define BOOST_TYPE_INDEX_NO_BASE_CLASS BOOST_PP_SEQ_NIL + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_REGISTER_RUNTIME_CLASS_HPP diff --git a/lib/3rdParty/boost/boost/type_index/runtime_cast/std_shared_ptr_cast.hpp b/lib/3rdParty/boost/boost/type_index/runtime_cast/std_shared_ptr_cast.hpp new file mode 100644 index 0000000..277a524 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/runtime_cast/std_shared_ptr_cast.hpp @@ -0,0 +1,46 @@ +// +// Copyright (c) Chris Glover, 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) +// + +#ifndef BOOST_TYPE_INDEX_RUNTIME_CAST_STD_SHARED_PTR_CAST_HPP +#define BOOST_TYPE_INDEX_RUNTIME_CAST_STD_SHARED_PTR_CAST_HPP + +/// \file std_shared_ptr_cast.hpp +/// \brief Contains the overload of boost::typeindex::runtime_pointer_cast for +/// std::shared_ptr types. + +#include +#include +#include + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +/// \brief Creates a new instance of std::shared_ptr whose stored pointer is obtained from u's +/// stored pointer using a runtime_cast. +/// +/// The new shared_ptr will share ownership with u, except that it is empty if the runtime_cast +/// performed by runtime_pointer_cast returns a null pointer. +/// \tparam T The desired target type to return a pointer of. +/// \tparam U A complete class type of the source instance pointed to from u. +/// \return If there exists a valid conversion from U* to T*, returns a std::shared_ptr +/// that points to an address suitably offset from u. +/// If no such conversion exists, returns std::shared_ptr(); +template +std::shared_ptr runtime_pointer_cast(std::shared_ptr const& u) { + T* value = detail::runtime_cast_impl(u.get(), boost::is_base_and_derived()); + if(value) + return std::shared_ptr(u, value); + return std::shared_ptr(); +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_RUNTIME_CAST_STD_SHARED_PTR_CAST_HPP diff --git a/lib/3rdParty/boost/boost/type_index/stl_type_index.hpp b/lib/3rdParty/boost/boost/type_index/stl_type_index.hpp new file mode 100644 index 0000000..a5add88 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/stl_type_index.hpp @@ -0,0 +1,272 @@ +// +// Copyright (c) Antony Polukhin, 2013-2015. +// +// +// 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) +// + +#ifndef BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP +#define BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP + +/// \file stl_type_index.hpp +/// \brief Contains boost::typeindex::stl_type_index class. +/// +/// boost::typeindex::stl_type_index class can be used as a drop-in replacement +/// for std::type_index. +/// +/// It is used in situations when RTTI is enabled or typeid() method is available. +/// When typeid() is disabled or BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro +/// is defined boost::typeindex::ctti is usually used instead of boost::typeindex::stl_type_index. + +#include + +// MSVC is capable of calling typeid(T) even when RTTI is off +#if defined(BOOST_NO_RTTI) && !defined(BOOST_MSVC) +#error "File boost/type_index/stl_type_index.ipp is not usable when typeid() is not available." +#endif + +#include +#include // std::strcmp, std::strlen, std::strstr +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \ + || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744) +# include +# include +# include +#endif + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +namespace boost { namespace typeindex { + +/// \class stl_type_index +/// This class is a wrapper around std::type_info, that workarounds issues and provides +/// much more rich interface. \b For \b description \b of \b functions \b see type_index_facade. +/// +/// This class requires typeid() to work. For cases when RTTI is disabled see ctti_type_index. +class stl_type_index + : public type_index_facade< + stl_type_index, + #ifdef BOOST_NO_STD_TYPEINFO + type_info + #else + std::type_info + #endif + > +{ +public: +#ifdef BOOST_NO_STD_TYPEINFO + typedef type_info type_info_t; +#else + typedef std::type_info type_info_t; +#endif + +private: + const type_info_t* data_; + +public: + inline stl_type_index() BOOST_NOEXCEPT + : data_(&typeid(void)) + {} + + inline stl_type_index(const type_info_t& data) BOOST_NOEXCEPT + : data_(&data) + {} + + inline const type_info_t& type_info() const BOOST_NOEXCEPT; + + inline const char* raw_name() const BOOST_NOEXCEPT; + inline const char* name() const BOOST_NOEXCEPT; + inline std::string pretty_name() const; + + inline std::size_t hash_code() const BOOST_NOEXCEPT; + inline bool equal(const stl_type_index& rhs) const BOOST_NOEXCEPT; + inline bool before(const stl_type_index& rhs) const BOOST_NOEXCEPT; + + template + inline static stl_type_index type_id() BOOST_NOEXCEPT; + + template + inline static stl_type_index type_id_with_cvr() BOOST_NOEXCEPT; + + template + inline static stl_type_index type_id_runtime(const T& value) BOOST_NOEXCEPT; +}; + +inline const stl_type_index::type_info_t& stl_type_index::type_info() const BOOST_NOEXCEPT { + return *data_; +} + + +inline const char* stl_type_index::raw_name() const BOOST_NOEXCEPT { +#ifdef _MSC_VER + return data_->raw_name(); +#else + return data_->name(); +#endif +} + +inline const char* stl_type_index::name() const BOOST_NOEXCEPT { + return data_->name(); +} + +inline std::string stl_type_index::pretty_name() const { + static const char cvr_saver_name[] = "boost::typeindex::detail::cvr_saver<"; + static BOOST_CONSTEXPR_OR_CONST std::string::size_type cvr_saver_name_len = sizeof(cvr_saver_name) - 1; + + // In case of MSVC demangle() is a no-op, and name() already returns demangled name. + // In case of GCC and Clang (on non-Windows systems) name() returns mangled name and demangle() undecorates it. + const boost::core::scoped_demangled_name demangled_name(data_->name()); + + const char* begin = demangled_name.get(); + if (!begin) { + boost::throw_exception(std::runtime_error("Type name demangling failed")); + } + + const std::string::size_type len = std::strlen(begin); + const char* end = begin + len; + + if (len > cvr_saver_name_len) { + const char* b = std::strstr(begin, cvr_saver_name); + if (b) { + b += cvr_saver_name_len; + + // Trim leading spaces + while (*b == ' ') { // the string is zero terminated, we won't exceed the buffer size + ++ b; + } + + // Skip the closing angle bracket + const char* e = end - 1; + while (e > b && *e != '>') { + -- e; + } + + // Trim trailing spaces + while (e > b && *(e - 1) == ' ') { + -- e; + } + + if (b < e) { + // Parsing seems to have succeeded, the type name is not empty + begin = b; + end = e; + } + } + } + + return std::string(begin, end); +} + + +inline std::size_t stl_type_index::hash_code() const BOOST_NOEXCEPT { +#if _MSC_VER > 1600 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5 && defined(__GXX_EXPERIMENTAL_CXX0X__)) + return data_->hash_code(); +#else + return boost::hash_range(raw_name(), raw_name() + std::strlen(raw_name())); +#endif +} + + +/// @cond + +// for this compiler at least, cross-shared-library type_info +// comparisons don't work, so we are using typeid(x).name() instead. +# if (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))) \ + || defined(_AIX) \ + || (defined(__sgi) && defined(__host_mips)) \ + || (defined(__hpux) && defined(__HP_aCC)) \ + || (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC)) +# define BOOST_CLASSINFO_COMPARE_BY_NAMES +# endif + +/// @endcond + +inline bool stl_type_index::equal(const stl_type_index& rhs) const BOOST_NOEXCEPT { +#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES + return raw_name() == rhs.raw_name() || !std::strcmp(raw_name(), rhs.raw_name()); +#else + return !!(*data_ == *rhs.data_); +#endif +} + +inline bool stl_type_index::before(const stl_type_index& rhs) const BOOST_NOEXCEPT { +#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES + return raw_name() != rhs.raw_name() && std::strcmp(raw_name(), rhs.raw_name()) < 0; +#else + return !!data_->before(*rhs.data_); +#endif +} + +#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES +#undef BOOST_CLASSINFO_COMPARE_BY_NAMES +#endif + + + +template +inline stl_type_index stl_type_index::type_id() BOOST_NOEXCEPT { + typedef BOOST_DEDUCED_TYPENAME boost::remove_reference::type no_ref_t; + typedef BOOST_DEDUCED_TYPENAME boost::remove_cv::type no_cvr_prefinal_t; + + # if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \ + || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744) + + // Old EDG-based compilers seem to mistakenly distinguish 'integral' from 'signed integral' + // in typeid() expressions. Full template specialization for 'integral' fixes that issue: + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::is_signed, + boost::make_signed, + boost::mpl::identity + >::type no_cvr_prefinal_lazy_t; + + typedef BOOST_DEDUCED_TYPENAME no_cvr_prefinal_t::type no_cvr_t; + #else + typedef no_cvr_prefinal_t no_cvr_t; + #endif + + return typeid(no_cvr_t); +} + +namespace detail { + template class cvr_saver{}; +} + +template +inline stl_type_index stl_type_index::type_id_with_cvr() BOOST_NOEXCEPT { + typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< + boost::mpl::or_, boost::is_const, boost::is_volatile >, + detail::cvr_saver, + T + >::type type; + + return typeid(type); +} + + +template +inline stl_type_index stl_type_index::type_id_runtime(const T& value) BOOST_NOEXCEPT { +#ifdef BOOST_NO_RTTI + return value.boost_type_index_type_id_runtime_(); +#else + return typeid(value); +#endif +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP diff --git a/lib/3rdParty/boost/boost/type_index/type_index_facade.hpp b/lib/3rdParty/boost/boost/type_index/type_index_facade.hpp new file mode 100644 index 0000000..dd35df2 --- /dev/null +++ b/lib/3rdParty/boost/boost/type_index/type_index_facade.hpp @@ -0,0 +1,300 @@ +// +// Copyright (c) Antony Polukhin, 2013-2015. +// +// +// 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) +// + +#ifndef BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP +#define BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP + +#include +#include +#include + +#if !defined(BOOST_NO_IOSTREAM) +#if !defined(BOOST_NO_IOSFWD) +#include // for std::basic_ostream +#else +#include +#endif +#endif + +#ifdef BOOST_HAS_PRAGMA_ONCE +# pragma once +#endif + +// Forward declaration from #include +namespace boost { + template std::size_t hash_range(It, It); +} + +namespace boost { namespace typeindex { + +/// \class type_index_facade +/// +/// This class takes care about the comparison operators, hash functions and +/// ostream operators. Use this class as a public base class for defining new +/// type_info-conforming classes. +/// +/// \b Example: +/// \code +/// class stl_type_index: public type_index_facade +/// { +/// public: +/// typedef std::type_info type_info_t; +/// private: +/// const type_info_t* data_; +/// +/// public: +/// stl_type_index(const type_info_t& data) noexcept +/// : data_(&data) +/// {} +/// // ... +/// }; +/// \endcode +/// +/// \tparam Derived Class derived from type_index_facade. +/// \tparam TypeInfo Class that will be used as a base type_info class. +/// \note Take a look at the protected methods. They are \b not \b defined in type_index_facade. +/// Protected member functions raw_name() \b must be defined in Derived class. All the other +/// methods are mandatory. +/// \see 'Making a custom type_index' section for more information about +/// creating your own type_index using type_index_facade. +template +class type_index_facade { +private: + /// @cond + BOOST_CXX14_CONSTEXPR const Derived & derived() const BOOST_NOEXCEPT { + return *static_cast(this); + } + /// @endcond +public: + typedef TypeInfo type_info_t; + + /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw. + /// \return Name of a type. By default returns Derived::raw_name(). + inline const char* name() const BOOST_NOEXCEPT { + return derived().raw_name(); + } + + /// \b Override: This function \b may be redefined in Derived class. Overrides may throw. + /// \return Human readable type name. By default returns Derived::name(). + inline std::string pretty_name() const { + return derived().name(); + } + + /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw. + /// \return True if two types are equal. By default compares types by raw_name(). + inline bool equal(const Derived& rhs) const BOOST_NOEXCEPT { + const char* const left = derived().raw_name(); + const char* const right = rhs.raw_name(); + return left == right || !std::strcmp(left, right); + } + + /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw. + /// \return True if rhs is greater than this. By default compares types by raw_name(). + inline bool before(const Derived& rhs) const BOOST_NOEXCEPT { + const char* const left = derived().raw_name(); + const char* const right = rhs.raw_name(); + return left != right && std::strcmp(left, right) < 0; + } + + /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw. + /// \return Hash code of a type. By default hashes types by raw_name(). + /// \note has to be included if this function is used. + inline std::size_t hash_code() const BOOST_NOEXCEPT { + const char* const name_raw = derived().raw_name(); + return boost::hash_range(name_raw, name_raw + std::strlen(name_raw)); + } + +#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) +protected: + /// \b Override: This function \b must be redefined in Derived class. Overrides \b must not throw. + /// \return Pointer to unredable/raw type name. + inline const char* raw_name() const BOOST_NOEXCEPT; + + /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw. + /// \return Const reference to underlying low level type_info_t. + inline const type_info_t& type_info() const BOOST_NOEXCEPT; + + /// This is a factory method that is used to create instances of Derived classes. + /// boost::typeindex::type_id() will call this method, if Derived has same type as boost::typeindex::type_index. + /// + /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw. + /// Overrides \b must remove const, volatile && and & modifiers from T. + /// \tparam T Type for which type_index must be created. + /// \return type_index for type T. + template + static Derived type_id() BOOST_NOEXCEPT; + + /// This is a factory method that is used to create instances of Derived classes. + /// boost::typeindex::type_id_with_cvr() will call this method, if Derived has same type as boost::typeindex::type_index. + /// + /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw. + /// Overrides \b must \b not remove const, volatile && and & modifiers from T. + /// \tparam T Type for which type_index must be created. + /// \return type_index for type T. + template + static Derived type_id_with_cvr() BOOST_NOEXCEPT; + + /// This is a factory method that is used to create instances of Derived classes. + /// boost::typeindex::type_id_runtime(const T&) will call this method, if Derived has same type as boost::typeindex::type_index. + /// + /// \b Override: This function \b may be redefined and made public in Derived class. + /// \param variable Variable which runtime type will be stored in type_index. + /// \return type_index with runtime type of variable. + template + static Derived type_id_runtime(const T& variable) BOOST_NOEXCEPT; + +#endif + +}; + +/// @cond +template +BOOST_CXX14_CONSTEXPR inline bool operator == (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return static_cast(lhs).equal(static_cast(rhs)); +} + +template +BOOST_CXX14_CONSTEXPR inline bool operator < (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return static_cast(lhs).before(static_cast(rhs)); +} + + + +template +BOOST_CXX14_CONSTEXPR inline bool operator > (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return rhs < lhs; +} + +template +BOOST_CXX14_CONSTEXPR inline bool operator <= (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(lhs > rhs); +} + +template +BOOST_CXX14_CONSTEXPR inline bool operator >= (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(lhs < rhs); +} + +template +BOOST_CXX14_CONSTEXPR inline bool operator != (const type_index_facade& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(lhs == rhs); +} + +// ######################### COMPARISONS with Derived ############################ // +template +inline bool operator == (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return Derived(lhs) == rhs; +} + +template +inline bool operator < (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return Derived(lhs) < rhs; +} + +template +inline bool operator > (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return rhs < Derived(lhs); +} + +template +inline bool operator <= (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(Derived(lhs) > rhs); +} + +template +inline bool operator >= (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(Derived(lhs) < rhs); +} + +template +inline bool operator != (const TypeInfo& lhs, const type_index_facade& rhs) BOOST_NOEXCEPT { + return !(Derived(lhs) == rhs); +} + + +template +inline bool operator == (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return lhs == Derived(rhs); +} + +template +inline bool operator < (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return lhs < Derived(rhs); +} + +template +inline bool operator > (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return Derived(rhs) < lhs; +} + +template +inline bool operator <= (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return !(lhs > Derived(rhs)); +} + +template +inline bool operator >= (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return !(lhs < Derived(rhs)); +} + +template +inline bool operator != (const type_index_facade& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT { + return !(lhs == Derived(rhs)); +} + +// ######################### COMPARISONS with Derived END ############################ // + +/// @endcond + +#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) + +/// noexcept comparison operators for type_index_facade classes. +bool operator ==, !=, <, ... (const type_index_facade& lhs, const type_index_facade& rhs) noexcept; + +/// noexcept comparison operators for type_index_facade and it's TypeInfo classes. +bool operator ==, !=, <, ... (const type_index_facade& lhs, const TypeInfo& rhs) noexcept; + +/// noexcept comparison operators for type_index_facade's TypeInfo and type_index_facade classes. +bool operator ==, !=, <, ... (const TypeInfo& lhs, const type_index_facade& rhs) noexcept; + +#endif + +#ifndef BOOST_NO_IOSTREAM +#ifdef BOOST_NO_TEMPLATED_IOSTREAMS +/// @cond +/// Ostream operator that will output demangled name +template +inline std::ostream& operator<<(std::ostream& ostr, const type_index_facade& ind) { + ostr << static_cast(ind).pretty_name(); + return ostr; +} +/// @endcond +#else +/// Ostream operator that will output demangled name. +template +inline std::basic_ostream& operator<<( + std::basic_ostream& ostr, + const type_index_facade& ind) +{ + ostr << static_cast(ind).pretty_name(); + return ostr; +} +#endif // BOOST_NO_TEMPLATED_IOSTREAMS +#endif // BOOST_NO_IOSTREAM + +/// This free function is used by Boost's unordered containers. +/// \note has to be included if this function is used. +template +inline std::size_t hash_value(const type_index_facade& lhs) BOOST_NOEXCEPT { + return static_cast(lhs).hash_code(); +} + +}} // namespace boost::typeindex + +#endif // BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP + diff --git a/lib/3rdParty/boost/boost/type_traits/add_reference.hpp b/lib/3rdParty/boost/boost/type_traits/add_reference.hpp index 526f259..3c91415 100644 --- a/lib/3rdParty/boost/boost/type_traits/add_reference.hpp +++ b/lib/3rdParty/boost/boost/type_traits/add_reference.hpp @@ -49,9 +49,9 @@ template struct add_reference // these full specialisations are always required: template <> struct add_reference { typedef void type; }; #ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS -template <> struct add_reference { typedef void type; }; -template <> struct add_reference { typedef void type; }; -template <> struct add_reference { typedef void type; }; +template <> struct add_reference { typedef const void type; }; +template <> struct add_reference { typedef const volatile void type; }; +template <> struct add_reference { typedef volatile void type; }; #endif } // namespace boost diff --git a/lib/3rdParty/boost/boost/type_traits/aligned_storage.hpp b/lib/3rdParty/boost/boost/type_traits/aligned_storage.hpp index 09f0c6b..171f5d4 100644 --- a/lib/3rdParty/boost/boost/type_traits/aligned_storage.hpp +++ b/lib/3rdParty/boost/boost/type_traits/aligned_storage.hpp @@ -15,12 +15,12 @@ #include // for std::size_t -#include "boost/config.hpp" -#include "boost/detail/workaround.hpp" -#include "boost/type_traits/alignment_of.hpp" -#include "boost/type_traits/type_with_alignment.hpp" -#include "boost/type_traits/is_pod.hpp" -#include "boost/type_traits/conditional.hpp" +#include +#include +#include +#include +#include +#include namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/common_type.hpp b/lib/3rdParty/boost/boost/type_traits/common_type.hpp index 5c4303b..c887a89 100644 --- a/lib/3rdParty/boost/boost/type_traits/common_type.hpp +++ b/lib/3rdParty/boost/boost/type_traits/common_type.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #if defined(BOOST_NO_CXX11_DECLTYPE) #include diff --git a/lib/3rdParty/boost/boost/type_traits/detail/common_arithmetic_type.hpp b/lib/3rdParty/boost/boost/type_traits/detail/common_arithmetic_type.hpp index 7211002..8c09158 100644 --- a/lib/3rdParty/boost/boost/type_traits/detail/common_arithmetic_type.hpp +++ b/lib/3rdParty/boost/boost/type_traits/detail/common_arithmetic_type.hpp @@ -35,12 +35,16 @@ template<> struct arithmetic_type<2> typedef char (&result_type) [2]; }; +#ifndef BOOST_NO_INTRINSIC_WCHAR_T + template<> struct arithmetic_type<3> { typedef wchar_t type; typedef char (&result_type) [3]; }; +#endif + // There are five standard signed integer types: // “signed char”, “short int”, “int”, “long int”, and “long long int”. @@ -170,7 +174,9 @@ private: static arithmetic_type<1>::result_type select( arithmetic_type<1>::type ); static arithmetic_type<2>::result_type select( arithmetic_type<2>::type ); +#ifndef BOOST_NO_INTRINSIC_WCHAR_T static arithmetic_type<3>::result_type select( arithmetic_type<3>::type ); +#endif static arithmetic_type<4>::result_type select( arithmetic_type<4>::type ); static arithmetic_type<5>::result_type select( arithmetic_type<5>::type ); static arithmetic_type<6>::result_type select( arithmetic_type<6>::type ); diff --git a/lib/3rdParty/boost/boost/type_traits/detail/mp_defer.hpp b/lib/3rdParty/boost/boost/type_traits/detail/mp_defer.hpp index 7910e54..f3beeb2 100644 --- a/lib/3rdParty/boost/boost/type_traits/detail/mp_defer.hpp +++ b/lib/3rdParty/boost/boost/type_traits/detail/mp_defer.hpp @@ -25,12 +25,12 @@ template class F, class... T> struct mp_valid_impl { template class G, class = G> - static boost::true_type check(int); + static boost::true_type check_s(int); template class> - static boost::false_type check(...); + static boost::false_type check_s(...); - using type = decltype(check(0)); + using type = decltype(check_s(0)); }; template class F, class... T> diff --git a/lib/3rdParty/boost/boost/type_traits/extent.hpp b/lib/3rdParty/boost/boost/type_traits/extent.hpp index dfb3c54..1242578 100644 --- a/lib/3rdParty/boost/boost/type_traits/extent.hpp +++ b/lib/3rdParty/boost/boost/type_traits/extent.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_TT_EXTENT_HPP_INCLUDED #define BOOST_TT_EXTENT_HPP_INCLUDED +#include // size_t #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_nothrow_assign.hpp b/lib/3rdParty/boost/boost/type_traits/has_nothrow_assign.hpp index a7312a1..7517fa8 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_nothrow_assign.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_nothrow_assign.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED #define BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED +#include // size_t #include #include @@ -24,7 +25,7 @@ #include #endif #endif -#if defined(__GNUC__) || defined(__SUNPRO_CC) +#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__clang__) #include #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_nothrow_constructor.hpp b/lib/3rdParty/boost/boost/type_traits/has_nothrow_constructor.hpp index e5af89f..fa47b1d 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_nothrow_constructor.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_nothrow_constructor.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED #define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED +#include // size_t #include #include @@ -17,7 +18,7 @@ #if defined(BOOST_MSVC) || defined(BOOST_INTEL) #include #endif -#if defined(__GNUC__ ) || defined(__SUNPRO_CC) +#if defined(__GNUC__ ) || defined(__SUNPRO_CC) || defined(__clang__) #include #endif diff --git a/lib/3rdParty/boost/boost/type_traits/has_nothrow_destructor.hpp b/lib/3rdParty/boost/boost/type_traits/has_nothrow_destructor.hpp index 273eb9f..ba70e89 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_nothrow_destructor.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_nothrow_destructor.hpp @@ -11,7 +11,7 @@ #include -#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(__SUNPRO_CC) && !defined(BOOST_MSVC) +#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(__SUNPRO_CC) && !(defined(BOOST_MSVC) && (_MSC_FULL_VER < 190023506)) #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_trivial_assign.hpp b/lib/3rdParty/boost/boost/type_traits/has_trivial_assign.hpp index a5e625d..15b917e 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_trivial_assign.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_trivial_assign.hpp @@ -9,11 +9,12 @@ #ifndef BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED #define BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED +#include // size_t #include #include #include -#if !defined(BOOST_HAS_TRIVIAL_ASSIGN) || defined(BOOST_MSVC) || defined(__GNUC__) || defined(BOOST_INTEL) || defined(__SUNPRO_CC) || defined(__clang) +#if !defined(BOOST_HAS_TRIVIAL_ASSIGN) || defined(BOOST_MSVC) || defined(__GNUC__) || defined(BOOST_INTEL) || defined(__SUNPRO_CC) || defined(__clang__) #include #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_trivial_copy.hpp b/lib/3rdParty/boost/boost/type_traits/has_trivial_copy.hpp index 9d3265d..fd6ad2d 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_trivial_copy.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_trivial_copy.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED #define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED +#include // size_t #include #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_trivial_destructor.hpp b/lib/3rdParty/boost/boost/type_traits/has_trivial_destructor.hpp index 763283d..9a3a61f 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_trivial_destructor.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_trivial_destructor.hpp @@ -21,7 +21,7 @@ #include #endif -#if defined(__GNUC__) || defined(__clang) || defined(__SUNPRO_CC) +#if defined(__GNUC__) || defined(__clang__) || defined(__SUNPRO_CC) #include #endif diff --git a/lib/3rdParty/boost/boost/type_traits/has_trivial_move_assign.hpp b/lib/3rdParty/boost/boost/type_traits/has_trivial_move_assign.hpp index f7bb198..6d954ab 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_trivial_move_assign.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_trivial_move_assign.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED #define BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED +#include // size_t #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/has_trivial_move_constructor.hpp b/lib/3rdParty/boost/boost/type_traits/has_trivial_move_constructor.hpp index 9e601f3..5784f4b 100644 --- a/lib/3rdParty/boost/boost/type_traits/has_trivial_move_constructor.hpp +++ b/lib/3rdParty/boost/boost/type_traits/has_trivial_move_constructor.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED #define BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED +#include // size_t #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/is_abstract.hpp b/lib/3rdParty/boost/boost/type_traits/is_abstract.hpp index 7715c5c..781d94a 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_abstract.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_abstract.hpp @@ -48,6 +48,7 @@ // to degrade gracefully, rather than trash the compiler (John Maddock). // +#include // size_t #include #include #ifndef BOOST_IS_ABSTRACT diff --git a/lib/3rdParty/boost/boost/type_traits/is_array.hpp b/lib/3rdParty/boost/boost/type_traits/is_array.hpp index 497dc49..53e1613 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_array.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_array.hpp @@ -15,7 +15,7 @@ #define BOOST_TT_IS_ARRAY_HPP_INCLUDED #include -#include +#include // size_t namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/is_assignable.hpp b/lib/3rdParty/boost/boost/type_traits/is_assignable.hpp index 9cf681d..49d1716 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_assignable.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_assignable.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED #define BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED +#include // size_t #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/is_const.hpp b/lib/3rdParty/boost/boost/type_traits/is_const.hpp index d9dd2aa..e0ed88a 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_const.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_const.hpp @@ -21,6 +21,7 @@ #ifndef BOOST_TT_IS_CONST_HPP_INCLUDED #define BOOST_TT_IS_CONST_HPP_INCLUDED +#include // size_t #include namespace boost { @@ -35,7 +36,7 @@ namespace boost { template struct is_const : public false_type {}; template struct is_const : public true_type{}; - template struct is_const : public true_type{}; + template struct is_const : public true_type{}; template struct is_const : public true_type{}; #endif diff --git a/lib/3rdParty/boost/boost/type_traits/is_default_constructible.hpp b/lib/3rdParty/boost/boost/type_traits/is_default_constructible.hpp index 7fd63f8..fa5d76a 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_default_constructible.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_default_constructible.hpp @@ -9,9 +9,14 @@ #ifndef BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED #define BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED +#include // size_t #include #include +#if BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700) +#include +#endif + #if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500) #include @@ -28,10 +33,25 @@ namespace boost{ template static boost::type_traits::no_type test(...); }; - +#if BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700) + template + struct is_default_constructible_abstract_filter + { + static const bool value = sizeof(is_default_constructible_imp::test(0)) == sizeof(boost::type_traits::yes_type); + }; + template + struct is_default_constructible_abstract_filter + { + static const bool value = false; + }; +#endif } +#if BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700) + template struct is_default_constructible : public integral_constant::value>::value>{}; +#else template struct is_default_constructible : public integral_constant(0)) == sizeof(boost::type_traits::yes_type)>{}; +#endif template struct is_default_constructible : public is_default_constructible{}; template struct is_default_constructible : public is_default_constructible{}; template struct is_default_constructible : public integral_constant{}; diff --git a/lib/3rdParty/boost/boost/type_traits/is_destructible.hpp b/lib/3rdParty/boost/boost/type_traits/is_destructible.hpp index 9f1e5d9..742d990 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_destructible.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_destructible.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED #define BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED +#include // size_t #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_assignable.hpp b/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_assignable.hpp index 9755430..4fb5bd8 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_assignable.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_assignable.hpp @@ -33,7 +33,7 @@ template struct is_nothrow_move_assignable : public false_type{}; template struct is_nothrow_move_assignable : public false_type{}; #endif -#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) +#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700) namespace detail{ diff --git a/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_constructible.hpp b/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_constructible.hpp index 8f4cee2..0d5d57a 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_constructible.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_nothrow_move_constructible.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED #define BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED +#include // size_t #include #include #include @@ -26,7 +27,7 @@ struct is_nothrow_move_constructible : public integral_constant struct is_nothrow_move_constructible : public ::boost::false_type {}; template struct is_nothrow_move_constructible : public ::boost::false_type{}; -#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700) +#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40800) #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/is_pod.hpp b/lib/3rdParty/boost/boost/type_traits/is_pod.hpp index 9204c93..9bd1962 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_pod.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_pod.hpp @@ -9,6 +9,7 @@ #ifndef BOOST_TT_IS_POD_HPP_INCLUDED #define BOOST_TT_IS_POD_HPP_INCLUDED +#include // size_t #include #include #include diff --git a/lib/3rdParty/boost/boost/type_traits/is_virtual_base_of.hpp b/lib/3rdParty/boost/boost/type_traits/is_virtual_base_of.hpp index f005256..84cb355 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_virtual_base_of.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_virtual_base_of.hpp @@ -17,7 +17,7 @@ namespace detail { #ifdef BOOST_MSVC #pragma warning( push ) -#pragma warning( disable : 4584 4250) +#pragma warning( disable : 4584 4250 4594) #elif defined(__GNUC__) && (__GNUC__ >= 4) #pragma GCC system_header #endif diff --git a/lib/3rdParty/boost/boost/type_traits/is_volatile.hpp b/lib/3rdParty/boost/boost/type_traits/is_volatile.hpp index cefe987..5b8e716 100644 --- a/lib/3rdParty/boost/boost/type_traits/is_volatile.hpp +++ b/lib/3rdParty/boost/boost/type_traits/is_volatile.hpp @@ -21,6 +21,7 @@ #ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED #define BOOST_TT_IS_VOLATILE_HPP_INCLUDED +#include // size_t #include namespace boost { @@ -35,7 +36,7 @@ namespace boost { template struct is_volatile : public false_type {}; template struct is_volatile : public true_type{}; - template struct is_volatile : public true_type{}; + template struct is_volatile : public true_type{}; template struct is_volatile : public true_type{}; #endif diff --git a/lib/3rdParty/boost/boost/type_traits/rank.hpp b/lib/3rdParty/boost/boost/type_traits/rank.hpp index 3dfc693..1f820f1 100644 --- a/lib/3rdParty/boost/boost/type_traits/rank.hpp +++ b/lib/3rdParty/boost/boost/type_traits/rank.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_TT_RANK_HPP_INCLUDED #define BOOST_TT_RANK_HPP_INCLUDED +#include // size_t #include namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/remove_all_extents.hpp b/lib/3rdParty/boost/boost/type_traits/remove_all_extents.hpp index 3ccdc98..90c90d3 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_all_extents.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_all_extents.hpp @@ -10,7 +10,7 @@ #define BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED #include -#include +#include // size_t #include namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/remove_const.hpp b/lib/3rdParty/boost/boost/type_traits/remove_const.hpp index b47f851..e238962 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_const.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_const.hpp @@ -12,7 +12,7 @@ #define BOOST_TT_REMOVE_CONST_HPP_INCLUDED #include -#include +#include // size_t #include namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/remove_cv.hpp b/lib/3rdParty/boost/boost/type_traits/remove_cv.hpp index b50607f..08393cf 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_cv.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_cv.hpp @@ -13,7 +13,7 @@ #include #include -#include +#include // size_t namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/remove_extent.hpp b/lib/3rdParty/boost/boost/type_traits/remove_extent.hpp index 0b50a07..b6528e5 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_extent.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_extent.hpp @@ -11,7 +11,7 @@ #include #include -#include +#include // size_t namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/remove_pointer.hpp b/lib/3rdParty/boost/boost/type_traits/remove_pointer.hpp index fb79e59..9216652 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_pointer.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_pointer.hpp @@ -18,7 +18,7 @@ namespace boost { -#ifdef BOOST_MSVC +#if BOOST_WORKAROUND(BOOST_MSVC, < 1900) namespace detail{ diff --git a/lib/3rdParty/boost/boost/type_traits/remove_volatile.hpp b/lib/3rdParty/boost/boost/type_traits/remove_volatile.hpp index 475e39d..f5870f3 100644 --- a/lib/3rdParty/boost/boost/type_traits/remove_volatile.hpp +++ b/lib/3rdParty/boost/boost/type_traits/remove_volatile.hpp @@ -13,7 +13,7 @@ #include #include -#include +#include // size_t namespace boost { diff --git a/lib/3rdParty/boost/boost/type_traits/type_with_alignment.hpp b/lib/3rdParty/boost/boost/type_traits/type_with_alignment.hpp index ffa054a..ddf1d98 100644 --- a/lib/3rdParty/boost/boost/type_traits/type_with_alignment.hpp +++ b/lib/3rdParty/boost/boost/type_traits/type_with_alignment.hpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include // size_t #include #ifdef BOOST_MSVC diff --git a/lib/3rdParty/boost/boost/utility/base_from_member.hpp b/lib/3rdParty/boost/boost/utility/base_from_member.hpp index fc0e13c..604541d 100644 --- a/lib/3rdParty/boost/boost/utility/base_from_member.hpp +++ b/lib/3rdParty/boost/boost/utility/base_from_member.hpp @@ -47,11 +47,11 @@ // {} // This macro should only persist within this file. -#define BOOST_PRIVATE_CTR_DEF( z, n, data ) \ - template < BOOST_PP_ENUM_PARAMS(n, typename T) > \ - explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \ - : member( BOOST_PP_ENUM_PARAMS(n, x) ) \ - {} \ +#define BOOST_PRIVATE_CTR_DEF( z, n, data ) \ + template < BOOST_PP_ENUM_PARAMS(n, typename T) > \ + base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \ + : member( BOOST_PP_ENUM_PARAMS(n, x) ) \ + {} \ /**/ @@ -142,7 +142,8 @@ protected: : member() {} - BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY), + template < typename T0 > explicit base_from_member( T0 x0 ) : member( x0 ) {} + BOOST_PP_REPEAT_FROM_TO( 2, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY), BOOST_PRIVATE_CTR_DEF, _ ) #endif diff --git a/lib/3rdParty/boost/boost/utility/compare_pointees.hpp b/lib/3rdParty/boost/boost/utility/compare_pointees.hpp index 7e2515c..5ab21cd 100644 --- a/lib/3rdParty/boost/boost/utility/compare_pointees.hpp +++ b/lib/3rdParty/boost/boost/utility/compare_pointees.hpp @@ -33,8 +33,12 @@ bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y ) } template -struct equal_pointees_t : std::binary_function +struct equal_pointees_t { + typedef bool result_type; + typedef OptionalPointee first_argument_type; + typedef OptionalPointee second_argument_type; + bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const { return equal_pointees(x,y) ; } } ; @@ -56,8 +60,12 @@ bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y ) } template -struct less_pointees_t : std::binary_function +struct less_pointees_t { + typedef bool result_type; + typedef OptionalPointee first_argument_type; + typedef OptionalPointee second_argument_type; + bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const { return less_pointees(x,y) ; } } ; diff --git a/lib/3rdParty/boost/boost/utility/string_ref.hpp b/lib/3rdParty/boost/boost/utility/string_ref.hpp index 8707157..5acf346 100644 --- a/lib/3rdParty/boost/boost/utility/string_ref.hpp +++ b/lib/3rdParty/boost/boost/utility/string_ref.hpp @@ -27,6 +27,11 @@ #include #include +#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || (defined(BOOST_GCC) && ((BOOST_GCC+0) / 100) <= 406) +// GCC 4.6 cannot handle a defaulted function with noexcept specifier +#define BOOST_STRING_REF_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS +#endif + namespace boost { namespace detail { @@ -57,26 +62,37 @@ namespace boost { static BOOST_CONSTEXPR_OR_CONST size_type npos = size_type(-1); // construct/copy - BOOST_CONSTEXPR basic_string_ref () + BOOST_CONSTEXPR basic_string_ref () BOOST_NOEXCEPT : ptr_(NULL), len_(0) {} - BOOST_CONSTEXPR basic_string_ref (const basic_string_ref &rhs) + // by defaulting these functions, basic_string_ref becomes + // trivially copy/move constructible. + BOOST_CONSTEXPR basic_string_ref (const basic_string_ref &rhs) BOOST_NOEXCEPT +#ifndef BOOST_STRING_REF_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS + = default; +#else : ptr_(rhs.ptr_), len_(rhs.len_) {} +#endif - basic_string_ref& operator=(const basic_string_ref &rhs) { + basic_string_ref& operator=(const basic_string_ref &rhs) BOOST_NOEXCEPT +#ifndef BOOST_STRING_REF_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS + = default; +#else + { ptr_ = rhs.ptr_; len_ = rhs.len_; return *this; } +#endif - basic_string_ref(const charT* str) + basic_string_ref(const charT* str) BOOST_NOEXCEPT : ptr_(str), len_(traits::length(str)) {} template basic_string_ref(const std::basic_string& str) : ptr_(str.data()), len_(str.length()) {} - BOOST_CONSTEXPR basic_string_ref(const charT* str, size_type len) + BOOST_CONSTEXPR basic_string_ref(const charT* str, size_type len) BOOST_NOEXCEPT : ptr_(str), len_(len) {} #ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS @@ -174,13 +190,13 @@ namespace boost { size_type rfind(basic_string_ref s) const { const_reverse_iterator iter = std::search ( this->crbegin (), this->crend (), s.crbegin (), s.crend (), traits::eq ); - return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter ); + return iter == this->crend () ? npos : (std::distance(iter, this->crend()) - s.size()); } size_type rfind(charT c) const { const_reverse_iterator iter = std::find_if ( this->crbegin (), this->crend (), detail::string_ref_traits_eq ( c )); - return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter ); + return iter == this->crend () ? npos : (this->size() - 1 - std::distance(this->crbegin(), iter)); } size_type find_first_of(charT c) const { return find (c); } @@ -195,7 +211,7 @@ namespace boost { size_type find_last_of(basic_string_ref s) const { const_reverse_iterator iter = std::find_first_of ( this->crbegin (), this->crend (), s.cbegin (), s.cend (), traits::eq ); - return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter); + return iter == this->crend () ? npos : (this->size() - 1 - std::distance(this->crbegin(), iter)); } size_type find_first_not_of(basic_string_ref s) const { @@ -212,21 +228,17 @@ namespace boost { size_type find_last_not_of(basic_string_ref s) const { const_reverse_iterator iter = find_not_of ( this->crbegin (), this->crend (), s ); - return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter ); + return iter == this->crend () ? npos : (this->size() - 1 - std::distance(this->crbegin(), iter)); } size_type find_last_not_of(charT c) const { for ( const_reverse_iterator iter = this->crbegin (); iter != this->crend (); ++iter ) if ( !traits::eq ( c, *iter )) - return reverse_distance ( this->crbegin (), iter ); + return this->size() - 1 - std::distance(this->crbegin(), iter); return npos; } private: - template - size_type reverse_distance ( r_iter first, r_iter last ) const { - return len_ - 1 - std::distance ( first, last ); - } template Iterator find_not_of ( Iterator first, Iterator last, basic_string_ref s ) const { @@ -405,7 +417,7 @@ namespace boost { namespace detail { template - inline void insert_fill_chars(std::basic_ostream& os, std::size_t n) { + inline void sr_insert_fill_chars(std::basic_ostream& os, std::size_t n) { enum { chunk_size = 8 }; charT fill_chars[chunk_size]; std::fill_n(fill_chars, static_cast< std::size_t >(chunk_size), os.fill()); @@ -416,19 +428,19 @@ namespace boost { } template - void insert_aligned(std::basic_ostream& os, const basic_string_ref& str) { + void sr_insert_aligned(std::basic_ostream& os, const basic_string_ref& str) { const std::size_t size = str.size(); const std::size_t alignment_size = static_cast< std::size_t >(os.width()) - size; const bool align_left = (os.flags() & std::basic_ostream::adjustfield) == std::basic_ostream::left; if (!align_left) { - detail::insert_fill_chars(os, alignment_size); + detail::sr_insert_fill_chars(os, alignment_size); if (os.good()) os.write(str.data(), size); } else { os.write(str.data(), size); if (os.good()) - detail::insert_fill_chars(os, alignment_size); + detail::sr_insert_fill_chars(os, alignment_size); } } @@ -444,7 +456,7 @@ namespace boost { if (w <= size) os.write(str.data(), size); else - detail::insert_aligned(os, str); + detail::sr_insert_aligned(os, str); os.width(0); } return os; diff --git a/lib/3rdParty/boost/boost/utility/string_view.hpp b/lib/3rdParty/boost/boost/utility/string_view.hpp new file mode 100644 index 0000000..167b30c --- /dev/null +++ b/lib/3rdParty/boost/boost/utility/string_view.hpp @@ -0,0 +1,691 @@ +/* + Copyright (c) Marshall Clow 2012-2015. + Copyright (c) Beman Dawes 2015 + + 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) + + For more information, see http://www.boost.org + + Based on the StringRef implementation in LLVM (http://llvm.org) and + N3422 by Jeffrey Yasskin + http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html + Updated July 2015 to reflect the Library Fundamentals TS + http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html +*/ + +#ifndef BOOST_STRING_VIEW_HPP +#define BOOST_STRING_VIEW_HPP + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || (defined(BOOST_GCC) && ((BOOST_GCC+0) / 100) <= 406) +// GCC 4.6 cannot handle a defaulted function with noexcept specifier +#define BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS +#endif + +namespace boost { + + namespace detail { + // A helper functor because sometimes we don't have lambdas + template + class string_view_traits_eq { + public: + string_view_traits_eq ( charT ch ) : ch_(ch) {} + bool operator()( charT val ) const { return traits::eq (ch_, val); } + charT ch_; + }; + } + + template // traits defaulted in string_view_fwd.hpp + class basic_string_view { + public: + // types + typedef traits traits_type; + typedef charT value_type; + typedef charT* pointer; + typedef const charT* const_pointer; + typedef charT& reference; + typedef const charT& const_reference; + typedef const_pointer const_iterator; // impl-defined + typedef const_iterator iterator; + typedef std::reverse_iterator const_reverse_iterator; + typedef const_reverse_iterator reverse_iterator; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + static BOOST_CONSTEXPR_OR_CONST size_type npos = size_type(-1); + + // construct/copy + BOOST_CONSTEXPR basic_string_view() BOOST_NOEXCEPT + : ptr_(NULL), len_(0) {} + + // by defaulting these functions, basic_string_ref becomes + // trivially copy/move constructible. + BOOST_CONSTEXPR basic_string_view(const basic_string_view &rhs) BOOST_NOEXCEPT +#ifndef BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS + = default; +#else + : ptr_(rhs.ptr_), len_(rhs.len_) {} +#endif + + basic_string_view& operator=(const basic_string_view &rhs) BOOST_NOEXCEPT +#ifndef BOOST_STRING_VIEW_NO_CXX11_DEFAULTED_NOEXCEPT_FUNCTIONS + = default; +#else + { + ptr_ = rhs.ptr_; + len_ = rhs.len_; + return *this; + } +#endif + + template + basic_string_view(const std::basic_string& str) BOOST_NOEXCEPT + : ptr_(str.data()), len_(str.length()) {} + + BOOST_CONSTEXPR basic_string_view(const charT* str) + : ptr_(str), len_(traits::length(str)) {} + + BOOST_CONSTEXPR basic_string_view(const charT* str, size_type len) + : ptr_(str), len_(len) {} + + // iterators + BOOST_CONSTEXPR const_iterator begin() const BOOST_NOEXCEPT { return ptr_; } + BOOST_CONSTEXPR const_iterator cbegin() const BOOST_NOEXCEPT { return ptr_; } + BOOST_CONSTEXPR const_iterator end() const BOOST_NOEXCEPT { return ptr_ + len_; } + BOOST_CONSTEXPR const_iterator cend() const BOOST_NOEXCEPT { return ptr_ + len_; } + const_reverse_iterator rbegin() const BOOST_NOEXCEPT { return const_reverse_iterator(end()); } + const_reverse_iterator crbegin() const BOOST_NOEXCEPT { return const_reverse_iterator(end()); } + const_reverse_iterator rend() const BOOST_NOEXCEPT { return const_reverse_iterator(begin()); } + const_reverse_iterator crend() const BOOST_NOEXCEPT { return const_reverse_iterator(begin()); } + + // capacity + BOOST_CONSTEXPR size_type size() const BOOST_NOEXCEPT { return len_; } + BOOST_CONSTEXPR size_type length() const BOOST_NOEXCEPT { return len_; } + BOOST_CONSTEXPR size_type max_size() const BOOST_NOEXCEPT { return len_; } + BOOST_CONSTEXPR bool empty() const BOOST_NOEXCEPT { return len_ == 0; } + + // element access + BOOST_CONSTEXPR const_reference operator[](size_type pos) const BOOST_NOEXCEPT { return ptr_[pos]; } + + BOOST_CONSTEXPR const_reference at(size_t pos) const { + return pos >= len_ ? BOOST_THROW_EXCEPTION(std::out_of_range("boost::string_view::at")) : ptr_[pos]; +// if ( pos >= len_ ) +// BOOST_THROW_EXCEPTION( std::out_of_range ( "boost::string_view::at" ) ); +// return ptr_[pos]; + } + + BOOST_CONSTEXPR const_reference front() const { return ptr_[0]; } + BOOST_CONSTEXPR const_reference back() const { return ptr_[len_-1]; } + BOOST_CONSTEXPR const_pointer data() const BOOST_NOEXCEPT { return ptr_; } + + // modifiers + void clear() BOOST_NOEXCEPT { len_ = 0; } // Boost extension + + BOOST_CXX14_CONSTEXPR void remove_prefix(size_type n) { + if ( n > len_ ) + n = len_; + ptr_ += n; + len_ -= n; + } + + BOOST_CXX14_CONSTEXPR void remove_suffix(size_type n) { + if ( n > len_ ) + n = len_; + len_ -= n; + } + + BOOST_CXX14_CONSTEXPR void swap(basic_string_view& s) BOOST_NOEXCEPT { + std::swap(ptr_, s.ptr_); + std::swap(len_, s.len_); + } + + // basic_string_view string operations +#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS + template + explicit operator std::basic_string() const { + return std::basic_string(begin(), end()); + } +#endif + +#ifndef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS + template > + std::basic_string to_string(const Allocator& a = Allocator()) const { + return std::basic_string(begin(), end(), a); + } +#else + std::basic_string to_string() const { + return std::basic_string(begin(), end()); + } + + template + std::basic_string to_string(const Allocator& a) const { + return std::basic_string(begin(), end(), a); + } +#endif + + size_type copy(charT* s, size_type n, size_type pos=0) const { + if (pos > size()) + BOOST_THROW_EXCEPTION(std::out_of_range("string_view::copy" )); + size_type rlen = (std::min)(n, len_ - pos); + // use std::copy(begin() + pos, begin() + pos + rlen, s) rather than + // std::copy_n(begin() + pos, rlen, s) to support pre-C++11 standard libraries + std::copy(begin() + pos, begin() + pos + rlen, s); + return rlen; + } + + BOOST_CXX14_CONSTEXPR basic_string_view substr(size_type pos, size_type n=npos) const { + if ( pos > size()) + BOOST_THROW_EXCEPTION( std::out_of_range ( "string_view::substr" ) ); + if (n == npos || pos + n > size()) + n = size () - pos; + return basic_string_view(data() + pos, n); + } + + BOOST_CXX14_CONSTEXPR int compare(basic_string_view x) const BOOST_NOEXCEPT { + const int cmp = traits::compare(ptr_, x.ptr_, (std::min)(len_, x.len_)); + return cmp != 0 ? cmp : (len_ == x.len_ ? 0 : len_ < x.len_ ? -1 : 1); + } + + BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, basic_string_view x) + const BOOST_NOEXCEPT { + return substr(pos1, n1).compare(x); + } + + BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, + basic_string_view x, size_type pos2, size_type n2) const { + return substr(pos1, n1).compare(x.substr(pos2, n2)); + } + + BOOST_CXX14_CONSTEXPR int compare(const charT* x) const { + return compare(basic_string_view(x)); + } + + BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, const charT* x) const { + return substr(pos1, n1).compare(basic_string_view(x)); + } + + BOOST_CXX14_CONSTEXPR int compare(size_type pos1, size_type n1, + const charT* x, size_type n2) const { + return substr(pos1, n1).compare(basic_string_view(x, n2)); + } + + // Searches + BOOST_CONSTEXPR bool starts_with(charT c) const BOOST_NOEXCEPT { // Boost extension + return !empty() && traits::eq(c, front()); + } + + BOOST_CONSTEXPR bool starts_with(basic_string_view x) const BOOST_NOEXCEPT { // Boost extension + return len_ >= x.len_ && traits::compare(ptr_, x.ptr_, x.len_) == 0; + } + + BOOST_CONSTEXPR bool ends_with(charT c) const BOOST_NOEXCEPT { // Boost extension + return !empty() && traits::eq(c, back()); + } + + BOOST_CONSTEXPR bool ends_with(basic_string_view x) const BOOST_NOEXCEPT { // Boost extension + return len_ >= x.len_ && + traits::compare(ptr_ + len_ - x.len_, x.ptr_, x.len_) == 0; + } + + // find + BOOST_CXX14_CONSTEXPR size_type find(basic_string_view s, size_type pos = 0) const BOOST_NOEXCEPT { + if (pos > size()) + return npos; + if (s.empty()) + return pos; + const_iterator iter = std::search(this->cbegin() + pos, this->cend(), + s.cbegin (), s.cend (), traits::eq); + return iter == this->cend () ? npos : std::distance(this->cbegin (), iter); + } + BOOST_CXX14_CONSTEXPR size_type find(charT c, size_type pos = 0) const BOOST_NOEXCEPT + { return find(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type find(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return find(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type find(const charT* s, size_type pos = 0) const BOOST_NOEXCEPT + { return find(basic_string_view(s), pos); } + + // rfind + BOOST_CXX14_CONSTEXPR size_type rfind(basic_string_view s, size_type pos = npos) const BOOST_NOEXCEPT { + if (len_ < s.len_) + return npos; + if (pos > len_ - s.len_) + pos = len_ - s.len_; + if (s.len_ == 0u) // an empty string is always found + return pos; + for (const charT* cur = ptr_ + pos; ; --cur) { + if (traits::compare(cur, s.ptr_, s.len_) == 0) + return cur - ptr_; + if (cur == ptr_) + return npos; + }; + } + BOOST_CXX14_CONSTEXPR size_type rfind(charT c, size_type pos = npos) const BOOST_NOEXCEPT + { return rfind(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type rfind(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return rfind(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type rfind(const charT* s, size_type pos = npos) const BOOST_NOEXCEPT + { return rfind(basic_string_view(s), pos); } + + // find_first_of + BOOST_CXX14_CONSTEXPR size_type find_first_of(basic_string_view s, size_type pos = 0) const BOOST_NOEXCEPT { + if (pos >= len_ || s.len_ == 0) + return npos; + const_iterator iter = std::find_first_of + (this->cbegin () + pos, this->cend (), s.cbegin (), s.cend (), traits::eq); + return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter ); + } + BOOST_CXX14_CONSTEXPR size_type find_first_of(charT c, size_type pos = 0) const BOOST_NOEXCEPT + { return find_first_of(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type find_first_of(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return find_first_of(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type find_first_of(const charT* s, size_type pos = 0) const BOOST_NOEXCEPT + { return find_first_of(basic_string_view(s), pos); } + + // find_last_of + BOOST_CXX14_CONSTEXPR size_type find_last_of(basic_string_view s, size_type pos = npos) const BOOST_NOEXCEPT { + if (s.len_ == 0u) + return npos; + if (pos >= len_) + pos = 0; + else + pos = len_ - (pos+1); + const_reverse_iterator iter = std::find_first_of + ( this->crbegin () + pos, this->crend (), s.cbegin (), s.cend (), traits::eq ); + return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter); + } + BOOST_CXX14_CONSTEXPR size_type find_last_of(charT c, size_type pos = npos) const BOOST_NOEXCEPT + { return find_last_of(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type find_last_of(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return find_last_of(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type find_last_of(const charT* s, size_type pos = npos) const BOOST_NOEXCEPT + { return find_last_of(basic_string_view(s), pos); } + + // find_first_not_of + BOOST_CXX14_CONSTEXPR size_type find_first_not_of(basic_string_view s, size_type pos = 0) const BOOST_NOEXCEPT { + if (pos >= len_) + return npos; + if (s.len_ == 0) + return pos; + const_iterator iter = find_not_of ( this->cbegin () + pos, this->cend (), s ); + return iter == this->cend () ? npos : std::distance ( this->cbegin (), iter ); + } + BOOST_CXX14_CONSTEXPR size_type find_first_not_of(charT c, size_type pos = 0) const BOOST_NOEXCEPT + { return find_first_not_of(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type find_first_not_of(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return find_first_not_of(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type find_first_not_of(const charT* s, size_type pos = 0) const BOOST_NOEXCEPT + { return find_first_not_of(basic_string_view(s), pos); } + + // find_last_not_of + BOOST_CXX14_CONSTEXPR size_type find_last_not_of(basic_string_view s, size_type pos = npos) const BOOST_NOEXCEPT { + if (pos >= len_) + pos = len_ - 1; + if (s.len_ == 0u) + return pos; + pos = len_ - (pos+1); + const_reverse_iterator iter = find_not_of ( this->crbegin () + pos, this->crend (), s ); + return iter == this->crend () ? npos : reverse_distance ( this->crbegin (), iter ); + } + BOOST_CXX14_CONSTEXPR size_type find_last_not_of(charT c, size_type pos = npos) const BOOST_NOEXCEPT + { return find_last_not_of(basic_string_view(&c, 1), pos); } + BOOST_CXX14_CONSTEXPR size_type find_last_not_of(const charT* s, size_type pos, size_type n) const BOOST_NOEXCEPT + { return find_last_not_of(basic_string_view(s, n), pos); } + BOOST_CXX14_CONSTEXPR size_type find_last_not_of(const charT* s, size_type pos = npos) const BOOST_NOEXCEPT + { return find_last_not_of(basic_string_view(s), pos); } + + private: + template + size_type reverse_distance(r_iter first, r_iter last) const BOOST_NOEXCEPT { + // Portability note here: std::distance is not NOEXCEPT, but calling it with a string_view::reverse_iterator will not throw. + return len_ - 1 - std::distance ( first, last ); + } + + template + Iterator find_not_of(Iterator first, Iterator last, basic_string_view s) const BOOST_NOEXCEPT { + for (; first != last ; ++first) + if ( 0 == traits::find(s.ptr_, s.len_, *first)) + return first; + return last; + } + + const charT *ptr_; + std::size_t len_; + }; + + +// Comparison operators +// Equality + template + inline bool operator==(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + if (x.size () != y.size ()) return false; + return x.compare(y) == 0; + } + +// Inequality + template + inline bool operator!=(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + if ( x.size () != y.size ()) return true; + return x.compare(y) != 0; + } + +// Less than + template + inline bool operator<(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + return x.compare(y) < 0; + } + +// Greater than + template + inline bool operator>(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + return x.compare(y) > 0; + } + +// Less than or equal to + template + inline bool operator<=(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + return x.compare(y) <= 0; + } + +// Greater than or equal to + template + inline bool operator>=(basic_string_view x, + basic_string_view y) BOOST_NOEXCEPT { + return x.compare(y) >= 0; + } + +// "sufficient additional overloads of comparison functions" + template + inline bool operator==(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x == basic_string_view(y); + } + + template + inline bool operator==(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) == y; + } + + template + inline bool operator==(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x == basic_string_view(y); + } + + template + inline bool operator==(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) == y; + } + + template + inline bool operator!=(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x != basic_string_view(y); + } + + template + inline bool operator!=(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) != y; + } + + template + inline bool operator!=(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x != basic_string_view(y); + } + + template + inline bool operator!=(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) != y; + } + + template + inline bool operator<(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x < basic_string_view(y); + } + + template + inline bool operator<(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) < y; + } + + template + inline bool operator<(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x < basic_string_view(y); + } + + template + inline bool operator<(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) < y; + } + + template + inline bool operator>(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x > basic_string_view(y); + } + + template + inline bool operator>(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) > y; + } + + template + inline bool operator>(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x > basic_string_view(y); + } + + template + inline bool operator>(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) > y; + } + + template + inline bool operator<=(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x <= basic_string_view(y); + } + + template + inline bool operator<=(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) <= y; + } + + template + inline bool operator<=(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x <= basic_string_view(y); + } + + template + inline bool operator<=(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) <= y; + } + + template + inline bool operator>=(basic_string_view x, + const std::basic_string & y) BOOST_NOEXCEPT { + return x >= basic_string_view(y); + } + + template + inline bool operator>=(const std::basic_string & x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) >= y; + } + + template + inline bool operator>=(basic_string_view x, + const charT * y) BOOST_NOEXCEPT { + return x >= basic_string_view(y); + } + + template + inline bool operator>=(const charT * x, + basic_string_view y) BOOST_NOEXCEPT { + return basic_string_view(x) >= y; + } + + namespace detail { + + template + inline void sv_insert_fill_chars(std::basic_ostream& os, std::size_t n) { + enum { chunk_size = 8 }; + charT fill_chars[chunk_size]; + std::fill_n(fill_chars, static_cast< std::size_t >(chunk_size), os.fill()); + for (; n >= chunk_size && os.good(); n -= chunk_size) + os.write(fill_chars, static_cast< std::size_t >(chunk_size)); + if (n > 0 && os.good()) + os.write(fill_chars, n); + } + + template + void sv_insert_aligned(std::basic_ostream& os, const basic_string_view& str) { + const std::size_t size = str.size(); + const std::size_t alignment_size = static_cast< std::size_t >(os.width()) - size; + const bool align_left = (os.flags() & std::basic_ostream::adjustfield) == std::basic_ostream::left; + if (!align_left) { + detail::sv_insert_fill_chars(os, alignment_size); + if (os.good()) + os.write(str.data(), size); + } + else { + os.write(str.data(), size); + if (os.good()) + detail::sv_insert_fill_chars(os, alignment_size); + } + } + + } // namespace detail + + // Inserter + template + inline std::basic_ostream& + operator<<(std::basic_ostream& os, + const basic_string_view& str) { + if (os.good()) { + const std::size_t size = str.size(); + const std::size_t w = static_cast< std::size_t >(os.width()); + if (w <= size) + os.write(str.data(), size); + else + detail::sv_insert_aligned(os, str); + os.width(0); + } + return os; + } + +#if 0 + // numeric conversions + // + // These are short-term implementations. + // In a production environment, I would rather avoid the copying. + // + inline int stoi (string_view str, size_t* idx=0, int base=10) { + return std::stoi ( std::string(str), idx, base ); + } + + inline long stol (string_view str, size_t* idx=0, int base=10) { + return std::stol ( std::string(str), idx, base ); + } + + inline unsigned long stoul (string_view str, size_t* idx=0, int base=10) { + return std::stoul ( std::string(str), idx, base ); + } + + inline long long stoll (string_view str, size_t* idx=0, int base=10) { + return std::stoll ( std::string(str), idx, base ); + } + + inline unsigned long long stoull (string_view str, size_t* idx=0, int base=10) { + return std::stoull ( std::string(str), idx, base ); + } + + inline float stof (string_view str, size_t* idx=0) { + return std::stof ( std::string(str), idx ); + } + + inline double stod (string_view str, size_t* idx=0) { + return std::stod ( std::string(str), idx ); + } + + inline long double stold (string_view str, size_t* idx=0) { + return std::stold ( std::string(str), idx ); + } + + inline int stoi (wstring_view str, size_t* idx=0, int base=10) { + return std::stoi ( std::wstring(str), idx, base ); + } + + inline long stol (wstring_view str, size_t* idx=0, int base=10) { + return std::stol ( std::wstring(str), idx, base ); + } + + inline unsigned long stoul (wstring_view str, size_t* idx=0, int base=10) { + return std::stoul ( std::wstring(str), idx, base ); + } + + inline long long stoll (wstring_view str, size_t* idx=0, int base=10) { + return std::stoll ( std::wstring(str), idx, base ); + } + + inline unsigned long long stoull (wstring_view str, size_t* idx=0, int base=10) { + return std::stoull ( std::wstring(str), idx, base ); + } + + inline float stof (wstring_view str, size_t* idx=0) { + return std::stof ( std::wstring(str), idx ); + } + + inline double stod (wstring_view str, size_t* idx=0) { + return std::stod ( std::wstring(str), idx ); + } + + inline long double stold (wstring_view str, size_t* idx=0) { + return std::stold ( std::wstring(str), idx ); + } +#endif + +} + +#if 0 +namespace std { + // Hashing + template<> struct hash; + template<> struct hash; + template<> struct hash; + template<> struct hash; +} +#endif + +#endif diff --git a/lib/3rdParty/boost/boost/utility/string_view_fwd.hpp b/lib/3rdParty/boost/boost/utility/string_view_fwd.hpp new file mode 100644 index 0000000..dbda0de --- /dev/null +++ b/lib/3rdParty/boost/boost/utility/string_view_fwd.hpp @@ -0,0 +1,39 @@ +/* + Copyright (c) Marshall Clow 2012-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) + + For more information, see http://www.boost.org + + Based on the StringRef implementation in LLVM (http://llvm.org) and + N3422 by Jeffrey Yasskin + http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html + Updated July 2015 to reflect the Library Fundamentals TS + http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html + +*/ + +#ifndef BOOST_STRING_VIEW_FWD_HPP +#define BOOST_STRING_VIEW_FWD_HPP + +#include +#include + +namespace boost { + + template > class basic_string_view; + typedef basic_string_view > string_view; + typedef basic_string_view > wstring_view; + +#ifndef BOOST_NO_CXX11_CHAR16_T + typedef basic_string_view > u16string_view; +#endif + +#ifndef BOOST_NO_CXX11_CHAR32_T + typedef basic_string_view > u32string_view; +#endif + +} + +#endif diff --git a/lib/3rdParty/boost/boost/version.hpp b/lib/3rdParty/boost/boost/version.hpp index fce02ec..94c16c3 100644 --- a/lib/3rdParty/boost/boost/version.hpp +++ b/lib/3rdParty/boost/boost/version.hpp @@ -19,7 +19,7 @@ // BOOST_VERSION / 100 % 1000 is the minor version // BOOST_VERSION / 100000 is the major version -#define BOOST_VERSION 106000 +#define BOOST_VERSION 106300 // // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION @@ -27,6 +27,6 @@ // number, y is the minor version number, and z is the patch level if not 0. // This is used by to select which library version to link to. -#define BOOST_LIB_VERSION "1_60" +#define BOOST_LIB_VERSION "1_63" #endif diff --git a/lib/3rdParty/boost/boost_d.props b/lib/3rdParty/boost/boost_d.props index 743d0d0..97b70cc 100644 --- a/lib/3rdParty/boost/boost_d.props +++ b/lib/3rdParty/boost/boost_d.props @@ -9,7 +9,7 @@ $(SolutionDir)lib\3rdParty\boost\$(PlatformTarget)\$(PlatformToolset)\lib;%(AdditionalLibraryDirectories) - libboost_filesystem-vc$(PlatformToolsetVersion)-mt-gd-1_60.lib;%(AdditionalDependencies) + libboost_filesystem-vc$(PlatformToolsetVersion)-mt-gd-1_63.lib;%(AdditionalDependencies) diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_60.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_60.lib deleted file mode 100644 index 16516de..0000000 Binary files a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_63.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_63.lib new file mode 100644 index 0000000..8e21c96 Binary files /dev/null and b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-1_63.lib differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib deleted file mode 100644 index 96642b8..0000000 Binary files a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib new file mode 100644 index 0000000..3c2a734 Binary files /dev/null and b/lib/3rdParty/boost/x64/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_60.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_60.lib deleted file mode 100644 index 9a85641..0000000 Binary files a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_63.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_63.lib new file mode 100644 index 0000000..aa1dd2d Binary files /dev/null and b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-1_63.lib differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_60.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_60.lib deleted file mode 100644 index f1b698b..0000000 Binary files a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_63.lib b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_63.lib new file mode 100644 index 0000000..609f3b3 Binary files /dev/null and b/lib/3rdParty/boost/x64/v140/lib/libboost_system-vc140-mt-gd-1_63.lib differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_60.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_60.lib deleted file mode 100644 index 877f18e..0000000 Binary files a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_63.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_63.lib new file mode 100644 index 0000000..2823d35 Binary files /dev/null and b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-1_63.lib differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib deleted file mode 100644 index 86d19cd..0000000 Binary files a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib new file mode 100644 index 0000000..9baa103 Binary files /dev/null and b/lib/3rdParty/boost/x86/v140/lib/libboost_filesystem-vc140-mt-gd-1_63.lib differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_60.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_60.lib deleted file mode 100644 index 562e18e..0000000 Binary files a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_63.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_63.lib new file mode 100644 index 0000000..639916b Binary files /dev/null and b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-1_63.lib differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_60.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_60.lib deleted file mode 100644 index 21e701f..0000000 Binary files a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_60.lib and /dev/null differ diff --git a/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_63.lib b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_63.lib new file mode 100644 index 0000000..ea94bb3 Binary files /dev/null and b/lib/3rdParty/boost/x86/v140/lib/libboost_system-vc140-mt-gd-1_63.lib differ diff --git a/lib/local/CppInerop/CppInerop.vcxproj b/lib/local/CppInerop/CppInerop.vcxproj index 0dd42b2..7e85cb9 100644 --- a/lib/local/CppInerop/CppInerop.vcxproj +++ b/lib/local/CppInerop/CppInerop.vcxproj @@ -112,7 +112,7 @@ Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;CPPINEROP_EXPORTS;%(PreprocessorDefinitions) - ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;$(SolutionDir)lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) Windows @@ -126,7 +126,7 @@ Level3 Disabled _DEBUG;_WINDOWS;_USRDLL;CPPINEROP_EXPORTS;%(PreprocessorDefinitions) - ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;$(SolutionDir)lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) Windows @@ -142,7 +142,7 @@ true true WIN32;NDEBUG;_WINDOWS;_USRDLL;CPPINEROP_EXPORTS;%(PreprocessorDefinitions) - ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;$(SolutionDir)lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) Windows @@ -160,7 +160,7 @@ true true NDEBUG;_WINDOWS;_USRDLL;CPPINEROP_EXPORTS;%(PreprocessorDefinitions) - ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + ./;$(SolutionDir)lib\local\LandmarkDetector\include;$(SolutionDir)lib\local\FaceAnalyser\include;$(SolutionDir)lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) Windows @@ -176,6 +176,7 @@ + @@ -189,6 +190,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/lib/local/CppInerop/CppInerop.vcxproj.filters b/lib/local/CppInerop/CppInerop.vcxproj.filters index 6d1324c..abe126c 100644 --- a/lib/local/CppInerop/CppInerop.vcxproj.filters +++ b/lib/local/CppInerop/CppInerop.vcxproj.filters @@ -23,9 +23,6 @@ - - Header Files - Header Files @@ -35,5 +32,11 @@ Header Files + + Header Files + + + Header Files + \ No newline at end of file diff --git a/lib/local/CppInerop/CppInterop.cpp b/lib/local/CppInerop/CppInterop.cpp index faf7097..d7804f6 100644 --- a/lib/local/CppInerop/CppInterop.cpp +++ b/lib/local/CppInerop/CppInterop.cpp @@ -35,5 +35,6 @@ // This is the main DLL file. #include "LandmarkDetectorInterop.h" #include "FaceAnalyserInterop.h" +#include "GazeAnalyserInterop.h" #include "OpenCVWrappers.h" #include "CameraInterop.h" diff --git a/lib/local/CppInerop/FaceAnalyserInterop.h b/lib/local/CppInerop/FaceAnalyserInterop.h index a192d90..7b00911 100644 --- a/lib/local/CppInerop/FaceAnalyserInterop.h +++ b/lib/local/CppInerop/FaceAnalyserInterop.h @@ -46,6 +46,11 @@ #pragma unmanaged +// Allows to overcome boost name clash stuff with C++ CLI +#ifdef __cplusplus_cli +#define generic __identifier(generic) +#endif + #include #include "opencv2/objdetect.hpp" #include "opencv2/calib3d.hpp" @@ -54,15 +59,8 @@ #include #include -#include #include #include -#include - -// Allows to overcome boost name clash stuff with C++ CLI -#ifdef __cplusplus_cli -#define generic __identifier(generic) -#endif // Boost stuff #include @@ -87,7 +85,6 @@ private: cv::Mat_* hog_features; cv::Mat* aligned_face; cv::Mat* visualisation; - cv::Mat* tracked_face; // Variables used for recording things std::ofstream* hog_output_file; @@ -95,52 +92,20 @@ private: int* num_rows; int* num_cols; bool* good_frame; - cv::VideoWriter* tracked_vid_writer; - - // Variable storing gaze for recording - - // Absolute gaze direction - cv::Point3f* gazeDirection0; - cv::Point3f* gazeDirection1; - cv::Vec2d* gazeAngle; - - cv::Point3f* pupil_left; - cv::Point3f* pupil_right; public: FaceAnalyserManaged(System::String^ root, bool dynamic, int output_width) { - - vector orientation_bins; - orientation_bins.push_back(cv::Vec3d(0,0,0)); - - int width = output_width; - int height = output_width; - - double scale = width * (0.7 / 112.0); - string root_std = msclr::interop::marshal_as(root); - - // TODO diff paths and locations for the demo mode - boost::filesystem::path tri_loc = boost::filesystem::path(root_std) / "model" / "tris_68_full.txt"; - boost::filesystem::path au_loc; - if(dynamic) - { - au_loc = boost::filesystem::path(root_std) / "AU_predictors" / "AU_all_best.txt"; - } - else - { - au_loc = boost::filesystem::path(root_std) / "AU_predictors" / "AU_all_static.txt"; - } - - face_analyser = new FaceAnalysis::FaceAnalyser(orientation_bins, scale, width, height, au_loc.string(), tri_loc.string()); + FaceAnalysis::FaceAnalyserParameters params(root_std); + params.setAlignedOutput(output_width); + face_analyser = new FaceAnalysis::FaceAnalyser(params); hog_features = new cv::Mat_(); aligned_face = new cv::Mat(); visualisation = new cv::Mat(); - tracked_face = new cv::Mat(); num_rows = new int; num_cols = new int; @@ -151,12 +116,6 @@ public: hog_output_file = new std::ofstream(); - gazeDirection0 = new cv::Point3f(); - gazeDirection1 = new cv::Point3f(); - gazeAngle = new cv::Vec2d(); - - pupil_left = new cv::Point3f(); - pupil_right = new cv::Point3f(); } void SetupAlignedImageRecording(System::String^ directory) @@ -170,21 +129,11 @@ public: hog_output_file->open(msclr::interop::marshal_as(file), ios_base::out | ios_base::binary); } - void SetupTrackingRecording(System::String^ file, int width, int height, double fps) - { - tracked_vid_writer = new cv::VideoWriter(msclr::interop::marshal_as(file), CV_FOURCC('D', 'I', 'V', 'X'), fps, cv::Size(width, height)); - } - void StopHOGRecording() { hog_output_file->close(); } - void StopTrackingRecording() - { - tracked_vid_writer->release(); - } - void RecordAlignedFrame(int frame_num) { char name[100]; @@ -230,140 +179,37 @@ public: } } - - void RecordTrackedFace() - { - tracked_vid_writer->write(*tracked_face); - } - - void PostProcessOutputFile(System::String^ file, bool dynamic) + + void PostProcessOutputFile(System::String^ file) { - face_analyser->PostprocessOutputFile(msclr::interop::marshal_as(file), dynamic); + face_analyser->PostprocessOutputFile(msclr::interop::marshal_as(file)); } - void AddNextFrame(OpenCVWrappers::RawImage^ frame, CppInterop::LandmarkDetector::CLNF^ clnf, double fx, double fy, double cx, double cy, bool online, bool vis_hog, bool vis_tracked) { + void AddNextFrame(OpenCVWrappers::RawImage^ frame, System::Collections::Generic::List^>^ landmarks, bool success, bool online, bool vis_hog) { - face_analyser->AddNextFrame(frame->Mat, *clnf->getCLNF(), 0, online, vis_hog); + // Construct an OpenCV matric from the landmarks + cv::Mat_ landmarks_mat(landmarks->Count * 2, 1, 0.0); + for (int i = 0; i < landmarks->Count; ++i) + { + landmarks_mat.at(i, 0) = landmarks[i]->Item1; + landmarks_mat.at(i + landmarks->Count, 0) = landmarks[i]->Item2; + } + + face_analyser->AddNextFrame(frame->Mat, landmarks_mat, success, 0, online, vis_hog); face_analyser->GetLatestHOG(*hog_features, *num_rows, *num_cols); face_analyser->GetLatestAlignedFace(*aligned_face); - *good_frame = clnf->clnf->detection_success; + *good_frame = success; if(vis_hog) { *visualisation = face_analyser->GetLatestHOGDescriptorVisualisation(); } - if(vis_tracked) - { - if(frame->Mat.cols != tracked_face->cols && frame->Mat.rows != tracked_face->rows) - { - *tracked_face = frame->Mat.clone(); - } - else - { - frame->Mat.clone().copyTo(*tracked_face); - } - - if(clnf->clnf->detection_success) - { - ::LandmarkDetector::Draw(*tracked_face, *clnf->clnf); - } - tracked_face->deallocate(); - } - - // After the AUs have been detected do some gaze estimation as well - FaceAnalysis::EstimateGaze(*clnf->getCLNF(), *gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(*clnf->getCLNF(), *gazeDirection1, fx, fy, cx, cy, false); - - // Estimate the gaze angle WRT to head pose here - System::Collections::Generic::List^ pose_list = gcnew System::Collections::Generic::List(); - clnf->GetPose(pose_list, fx, fy, cx, cy); - cv::Vec6d pose(pose_list[0], pose_list[1], pose_list[2], pose_list[3], pose_list[4], pose_list[5]); - - *gazeAngle = FaceAnalysis::GetGazeAngle(*gazeDirection0, *gazeDirection1, pose); - - // Grab pupil locations - int part_left = -1; - int part_right = -1; - for (size_t i = 0; i < clnf->getCLNF()->hierarchical_models.size(); ++i) - { - if (clnf->getCLNF()->hierarchical_model_names[i].compare("left_eye_28") == 0) - { - part_left = i; - } - if (clnf->getCLNF()->hierarchical_model_names[i].compare("right_eye_28") == 0) - { - part_right = i; - } - } - - cv::Mat_ eyeLdmks3d_left = clnf->getCLNF()->hierarchical_models[part_left].GetShape(fx, fy, cx, cy); - cv::Point3f pupil_left_h = FaceAnalysis::GetPupilPosition(eyeLdmks3d_left); - pupil_left->x = pupil_left_h.x; pupil_left->y = pupil_left_h.y; pupil_left->z = pupil_left_h.z; - - cv::Mat_ eyeLdmks3d_right = clnf->getCLNF()->hierarchical_models[part_right].GetShape(fx, fy, cx, cy); - cv::Point3f pupil_right_h = FaceAnalysis::GetPupilPosition(eyeLdmks3d_right); - pupil_right->x = pupil_right_h.x; pupil_right->y = pupil_right_h.y; pupil_right->z = pupil_right_h.z; } - - System::Tuple^, System::Tuple^>^ GetGazeCamera() - { - - auto gaze0 = gcnew System::Tuple(gazeDirection0->x, gazeDirection0->y, gazeDirection0->z); - auto gaze1 = gcnew System::Tuple(gazeDirection1->x, gazeDirection1->y, gazeDirection1->z); - - return gcnew System::Tuple^, System::Tuple^>(gaze0, gaze1); - - } - - System::Tuple^ GetGazeAngle() - { - auto gaze_angle = gcnew System::Tuple((*gazeAngle)[0], (*gazeAngle)[1]); - return gaze_angle; - - } - System::Collections::Generic::List^>^ CalculateGazeLines(double scale, float fx, float fy, float cx, float cy) - { - - cv::Mat_ cameraMat = (cv::Mat_(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 0); - - vector points_left; - points_left.push_back(cv::Point3f(*pupil_left)); - points_left.push_back(cv::Point3f(*pupil_left + *gazeDirection0 * 40.0 * scale)); - - vector points_right; - points_right.push_back(cv::Point3f(*pupil_right)); - points_right.push_back(cv::Point3f(*pupil_right + *gazeDirection1 * 40.0 * scale)); - - // Perform manual projection of points - vector imagePoints_left; - for (int i = 0; i < points_left.size(); ++i) - { - double x = points_left[i].x * fx / points_left[i].z + cx; - double y = points_left[i].y * fy / points_left[i].z + cy; - imagePoints_left.push_back(cv::Point2d(x, y)); - - } - - vector imagePoints_right; - for (int i = 0; i < points_right.size(); ++i) - { - double x = points_right[i].x * fx / points_right[i].z + cx; - double y = points_right[i].y * fy / points_right[i].z + cy; - imagePoints_right.push_back(cv::Point2d(x, y)); - - } - - auto lines = gcnew System::Collections::Generic::List^>(); - lines->Add(gcnew System::Tuple(System::Windows::Point(imagePoints_left[0].x, imagePoints_left[0].y), System::Windows::Point(imagePoints_left[1].x, imagePoints_left[1].y))); - lines->Add(gcnew System::Tuple(System::Windows::Point(imagePoints_right[0].x, imagePoints_right[0].y), System::Windows::Point(imagePoints_right[1].x, imagePoints_right[1].y))); - return lines; - } - - + System::Collections::Generic::List^ GetClassActionUnitsNames() { auto names = face_analyser->GetAUClassNames(); @@ -447,19 +293,6 @@ public: delete good_frame; delete align_output_dir; delete face_analyser; - delete tracked_face; - - delete gazeDirection0; - delete gazeDirection1; - delete gazeAngle; - - delete pupil_left; - delete pupil_right; - - if(tracked_vid_writer != 0) - { - delete tracked_vid_writer; - } } // Destructor. Called on explicit Dispose() only. diff --git a/lib/local/CppInerop/GazeAnalyserInterop.h b/lib/local/CppInerop/GazeAnalyserInterop.h new file mode 100644 index 0000000..3b3cbd1 --- /dev/null +++ b/lib/local/CppInerop/GazeAnalyserInterop.h @@ -0,0 +1,219 @@ +#pragma once +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt + +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +// FaceAnalyser_Interop.h +#ifndef __GAZE_ANALYSER_INTEROP_h_ +#define __GAZE_ANALYSER_INTEROP_h_ + +#pragma once + +// Include all the unmanaged things we need. +#pragma managed + +#include +#include + +#pragma unmanaged + +#include +#include "opencv2/objdetect.hpp" +#include "opencv2/calib3d.hpp" +#include +#include +#include + +// Allows to overcome boost name clash stuff with C++ CLI +#ifdef __cplusplus_cli +#define generic __identifier(generic) +#endif + +#include +#include +#include + +// Boost stuff +#include +#include + +#ifdef __cplusplus_cli +#undef generic +#endif + +#pragma managed + +namespace GazeAnalyser_Interop { + + public ref class GazeAnalyserManaged + { + + private: + + // Variable storing gaze for recording + + // Absolute gaze direction + cv::Point3f* gazeDirection0; + cv::Point3f* gazeDirection1; + cv::Vec2d* gazeAngle; + + cv::Point3f* pupil_left; + cv::Point3f* pupil_right; + + public: + GazeAnalyserManaged() + { + gazeDirection0 = new cv::Point3f(); + gazeDirection1 = new cv::Point3f(); + gazeAngle = new cv::Vec2d(); + + pupil_left = new cv::Point3f(); + pupil_right = new cv::Point3f(); + } + + void AddNextFrame(CppInterop::LandmarkDetector::CLNF^ clnf, bool success, double fx, double fy, double cx, double cy) { + + // After the AUs have been detected do some gaze estimation as well + GazeAnalysis::EstimateGaze(*clnf->getCLNF(), *gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(*clnf->getCLNF(), *gazeDirection1, fx, fy, cx, cy, false); + + // Estimate the gaze angle WRT to head pose here + System::Collections::Generic::List^ pose_list = gcnew System::Collections::Generic::List(); + clnf->GetPose(pose_list, fx, fy, cx, cy); + cv::Vec6d pose(pose_list[0], pose_list[1], pose_list[2], pose_list[3], pose_list[4], pose_list[5]); + + *gazeAngle = GazeAnalysis::GetGazeAngle(*gazeDirection0, *gazeDirection1, pose); + + // Grab pupil locations + int part_left = -1; + int part_right = -1; + for (size_t i = 0; i < clnf->getCLNF()->hierarchical_models.size(); ++i) + { + if (clnf->getCLNF()->hierarchical_model_names[i].compare("left_eye_28") == 0) + { + part_left = i; + } + if (clnf->getCLNF()->hierarchical_model_names[i].compare("right_eye_28") == 0) + { + part_right = i; + } + } + + cv::Mat_ eyeLdmks3d_left = clnf->getCLNF()->hierarchical_models[part_left].GetShape(fx, fy, cx, cy); + cv::Point3f pupil_left_h = GazeAnalysis::GetPupilPosition(eyeLdmks3d_left); + pupil_left->x = pupil_left_h.x; pupil_left->y = pupil_left_h.y; pupil_left->z = pupil_left_h.z; + + cv::Mat_ eyeLdmks3d_right = clnf->getCLNF()->hierarchical_models[part_right].GetShape(fx, fy, cx, cy); + cv::Point3f pupil_right_h = GazeAnalysis::GetPupilPosition(eyeLdmks3d_right); + pupil_right->x = pupil_right_h.x; pupil_right->y = pupil_right_h.y; pupil_right->z = pupil_right_h.z; + } + + System::Tuple^, System::Tuple^>^ GetGazeCamera() + { + + auto gaze0 = gcnew System::Tuple(gazeDirection0->x, gazeDirection0->y, gazeDirection0->z); + auto gaze1 = gcnew System::Tuple(gazeDirection1->x, gazeDirection1->y, gazeDirection1->z); + + return gcnew System::Tuple^, System::Tuple^>(gaze0, gaze1); + + } + + System::Tuple^ GetGazeAngle() + { + auto gaze_angle = gcnew System::Tuple((*gazeAngle)[0], (*gazeAngle)[1]); + return gaze_angle; + + } + System::Collections::Generic::List^>^ CalculateGazeLines(double scale, float fx, float fy, float cx, float cy) + { + + cv::Mat_ cameraMat = (cv::Mat_(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 0); + + vector points_left; + points_left.push_back(cv::Point3f(*pupil_left)); + points_left.push_back(cv::Point3f(*pupil_left + *gazeDirection0 * 40.0 * scale)); + + vector points_right; + points_right.push_back(cv::Point3f(*pupil_right)); + points_right.push_back(cv::Point3f(*pupil_right + *gazeDirection1 * 40.0 * scale)); + + // Perform manual projection of points + vector imagePoints_left; + for (int i = 0; i < points_left.size(); ++i) + { + double x = points_left[i].x * fx / points_left[i].z + cx; + double y = points_left[i].y * fy / points_left[i].z + cy; + imagePoints_left.push_back(cv::Point2d(x, y)); + + } + + vector imagePoints_right; + for (int i = 0; i < points_right.size(); ++i) + { + double x = points_right[i].x * fx / points_right[i].z + cx; + double y = points_right[i].y * fy / points_right[i].z + cy; + imagePoints_right.push_back(cv::Point2d(x, y)); + + } + + auto lines = gcnew System::Collections::Generic::List^>(); + lines->Add(gcnew System::Tuple(System::Windows::Point(imagePoints_left[0].x, imagePoints_left[0].y), System::Windows::Point(imagePoints_left[1].x, imagePoints_left[1].y))); + lines->Add(gcnew System::Tuple(System::Windows::Point(imagePoints_right[0].x, imagePoints_right[0].y), System::Windows::Point(imagePoints_right[1].x, imagePoints_right[1].y))); + return lines; + } + + // Finalizer. Definitely called before Garbage Collection, + // but not automatically called on explicit Dispose(). + // May be called multiple times. + !GazeAnalyserManaged() + { + + delete gazeDirection0; + delete gazeDirection1; + delete gazeAngle; + + delete pupil_left; + delete pupil_right; + + } + + // Destructor. Called on explicit Dispose() only. + ~GazeAnalyserManaged() + { + this->!GazeAnalyserManaged(); + } + + }; +} + +#endif \ No newline at end of file diff --git a/lib/local/CppInerop/LandmarkDetectorInterop.h b/lib/local/CppInerop/LandmarkDetectorInterop.h index c250f0f..407db77 100644 --- a/lib/local/CppInerop/LandmarkDetectorInterop.h +++ b/lib/local/CppInerop/LandmarkDetectorInterop.h @@ -52,6 +52,11 @@ #include #include +// Allows to overcome boost name clash stuff with C++ CLI +#ifdef __cplusplus_cli +#define generic __identifier(generic) +#endif + #include #include @@ -59,6 +64,10 @@ #include #include +#ifdef __cplusplus_cli +#undef generic +#endif + #pragma managed namespace CppInterop { @@ -258,8 +267,8 @@ namespace CppInterop { } } - System::Collections::Generic::List^>^ CalculateLandmarks() { - vector vecLandmarks = ::LandmarkDetector::CalculateLandmarks(*clnf); + System::Collections::Generic::List^>^ CalculateVisibleLandmarks() { + vector vecLandmarks = ::LandmarkDetector::CalculateVisibleLandmarks(*clnf); auto landmarks = gcnew System::Collections::Generic::List^>(); for(cv::Point2d p : vecLandmarks) { @@ -269,8 +278,30 @@ namespace CppInterop { return landmarks; } - System::Collections::Generic::List^>^ CalculateEyeLandmarks() { - vector vecLandmarks = ::LandmarkDetector::CalculateEyeLandmarks(*clnf); + System::Collections::Generic::List^>^ CalculateAllLandmarks() { + vector vecLandmarks = ::LandmarkDetector::CalculateAllLandmarks(*clnf); + + auto landmarks = gcnew System::Collections::Generic::List^>(); + for (cv::Point2d p : vecLandmarks) { + landmarks->Add(gcnew System::Tuple(p.x, p.y)); + } + + return landmarks; + } + + System::Collections::Generic::List^>^ CalculateAllEyeLandmarks() { + vector vecLandmarks = ::LandmarkDetector::CalculateAllEyeLandmarks(*clnf); + + auto landmarks = gcnew System::Collections::Generic::List^>(); + for (cv::Point2d p : vecLandmarks) { + landmarks->Add(gcnew System::Tuple(p.x, p.y)); + } + + return landmarks; + } + + System::Collections::Generic::List^>^ CalculateVisibleEyeLandmarks() { + vector vecLandmarks = ::LandmarkDetector::CalculateVisibleEyeLandmarks(*clnf); auto landmarks = gcnew System::Collections::Generic::List^>(); for (cv::Point2d p : vecLandmarks) { diff --git a/lib/local/FaceAnalyser/AU_predictors/In-the-wild_aligned_PDM_68.txt b/lib/local/FaceAnalyser/AU_predictors/In-the-wild_aligned_PDM_68.txt new file mode 100644 index 0000000..d538397 --- /dev/null +++ b/lib/local/FaceAnalyser/AU_predictors/In-the-wild_aligned_PDM_68.txt @@ -0,0 +1,421 @@ +# The mean values of the components (in mm) +204 +1 +6 +-73.393523 +-72.775014 +-70.533638 +-66.850058 +-59.790187 +-48.368973 +-34.121101 +-17.875411 +0.098749 +17.477031 +32.648966 +46.372358 +57.343480 +64.388482 +68.212038 +70.486405 +71.375822 +-61.119406 +-51.287588 +-37.804800 +-24.022754 +-11.635713 +12.056636 +25.106256 +38.338588 +51.191007 +60.053851 +0.653940 +0.804809 +0.992204 +1.226783 +-14.772472 +-7.180239 +0.555920 +8.272499 +15.214351 +-46.047290 +-37.674688 +-27.883856 +-19.648268 +-28.272965 +-38.082418 +19.265868 +27.894191 +37.437529 +45.170805 +38.196454 +28.764989 +-28.916267 +-17.533194 +-6.684590 +0.381001 +8.375443 +18.876618 +28.794412 +19.057574 +8.956375 +0.381549 +-7.428895 +-18.160634 +-24.377490 +-6.897633 +0.340663 +8.444722 +24.474473 +8.449166 +0.205322 +-7.198266 +-29.801432 +-10.949766 +7.929818 +26.074280 +42.564390 +56.481080 +67.246992 +75.056892 +77.061286 +74.758448 +66.929021 +56.311389 +42.419126 +25.455880 +6.990805 +-11.666193 +-30.365191 +-49.361602 +-58.769795 +-61.996155 +-61.033399 +-56.686759 +-57.391033 +-61.902186 +-62.777713 +-59.302347 +-50.190255 +-42.193790 +-30.993721 +-19.944596 +-8.414541 +2.598255 +4.751589 +6.562900 +4.661005 +2.643046 +-37.471411 +-42.730510 +-42.711517 +-36.754742 +-35.134493 +-34.919043 +-37.032306 +-43.342445 +-43.110822 +-38.086515 +-35.532024 +-35.484289 +28.612716 +22.172187 +19.029051 +20.721118 +19.035460 +22.394109 +28.079924 +36.298248 +39.634575 +40.395647 +39.836405 +36.677899 +28.677771 +25.475976 +26.014269 +25.326198 +28.323008 +30.596216 +31.408738 +30.844876 +47.667532 +45.909403 +44.842580 +43.141114 +38.635298 +30.750622 +18.456453 +3.609035 +-0.881698 +5.181201 +19.176563 +30.770570 +37.628629 +40.886309 +42.281449 +44.142567 +47.140426 +14.254422 +7.268147 +0.442051 +-6.606501 +-11.967398 +-12.051204 +-7.315098 +-1.022953 +5.349435 +11.615746 +-13.380835 +-21.150853 +-29.284036 +-36.948060 +-20.132003 +-23.536684 +-25.944448 +-23.695741 +-20.858157 +7.037989 +3.021217 +1.353629 +-0.111088 +-0.147273 +1.476612 +-0.665746 +0.247660 +1.696435 +4.894163 +0.282961 +-1.172675 +-2.240310 +-15.934335 +-22.611355 +-23.748437 +-22.721995 +-15.610679 +-3.217393 +-14.987997 +-22.554245 +-23.591626 +-22.406106 +-15.121907 +-4.785684 +-20.893742 +-22.220479 +-21.025520 +-5.712776 +-20.671489 +-21.903670 +-20.328022 +# The principal components (eigenvectors) of identity or combined identity and expression model +204 +34 +6 +-0.007395 -0.093690 0.039362 0.204443 -0.104698 0.033568 -0.090173 0.010170 -0.042341 0.104375 0.032695 0.038750 0.064385 -0.037025 0.058377 0.032457 -0.100005 -0.082042 -0.053440 0.008782 -0.027164 -0.000368 -0.129614 0.035436 -0.062685 -0.075349 0.140764 -0.032290 -0.115829 -0.037865 0.068590 0.008886 -0.066442 0.259211 +-0.002553 -0.075344 0.037127 0.201967 -0.069124 0.041645 -0.100939 0.018352 0.006598 0.081569 0.004894 0.038886 0.050631 0.056656 0.055353 -0.028457 -0.022518 -0.089693 -0.079196 0.010851 -0.017583 0.015095 -0.077834 -0.000944 -0.104255 -0.060338 0.106169 -0.065799 -0.067068 -0.051588 0.080490 0.063152 -0.047531 0.178216 +-0.002097 -0.055385 0.025705 0.215785 -0.026274 0.053548 -0.086364 0.041926 0.035784 0.033485 -0.014602 0.049999 0.031950 0.125201 0.045372 -0.064200 0.070073 -0.074313 -0.083942 -0.007566 -0.003666 0.034226 -0.018354 -0.011639 -0.084633 -0.039431 0.064057 -0.056515 -0.046926 -0.074699 0.073477 0.074109 -0.054882 0.046675 +-0.005533 -0.035821 0.019787 0.226957 0.030415 0.059508 -0.051058 0.057386 0.023240 -0.025487 -0.013088 0.043330 0.025141 0.113119 0.017370 -0.071064 0.108140 -0.049138 -0.043417 -0.065375 0.012959 0.070483 0.075536 -0.035685 -0.005847 0.012618 0.040297 -0.049743 -0.061354 -0.087164 0.033762 0.048771 -0.096563 -0.045189 +-0.006914 0.011987 0.030022 0.205560 0.099633 0.072384 -0.008313 0.060244 -0.006584 -0.104943 -0.018036 0.032806 0.029879 0.068434 -0.043721 -0.052564 0.077505 -0.062192 0.026865 -0.122834 -0.001529 0.064443 0.160557 -0.036750 0.124476 0.072641 0.048609 -0.043443 -0.060729 -0.040443 -0.050540 0.050509 -0.118886 -0.146867 +-0.004182 0.064263 0.036886 0.149341 0.158261 0.075501 0.030568 0.067074 -0.040268 -0.167116 -0.020230 0.029360 0.046726 0.033410 -0.121685 -0.004528 -0.017505 -0.050390 0.063237 -0.133203 -0.070794 0.005133 0.178032 -0.002768 0.153446 0.105966 0.061693 0.011010 -0.027442 0.001944 -0.103967 0.045708 -0.083197 -0.172889 +0.016954 0.088125 0.034199 0.081242 0.170872 0.048964 0.063434 0.083842 -0.058188 -0.164769 -0.012135 0.002128 0.084787 -0.009691 -0.136231 0.068411 -0.091616 0.042046 0.053339 -0.068859 -0.141834 -0.040710 0.017020 0.034007 0.053187 0.096749 0.068416 0.075079 0.038728 0.063588 -0.109581 0.007737 0.033105 -0.152075 +0.021733 0.081042 0.015310 0.029492 0.112212 0.012959 0.065003 0.095565 -0.047228 -0.120559 -0.022904 -0.051461 0.036411 -0.036990 -0.101765 0.150918 -0.102123 0.163128 0.047199 0.037063 -0.223718 -0.065303 -0.149191 -0.017823 -0.134138 0.084419 0.010718 0.087970 0.043030 0.040099 -0.068487 -0.008773 0.077035 -0.082281 +0.024713 0.084952 0.002319 -0.002792 0.028194 -0.016856 0.036083 0.087381 -0.020743 -0.024386 -0.027268 -0.091654 -0.009025 -0.052124 -0.033407 0.168353 -0.061447 0.244847 0.024587 0.064221 -0.161138 0.020993 -0.164584 -0.068179 -0.181775 0.087509 -0.068202 0.059078 -0.004250 -0.001472 -0.031248 -0.049011 -0.019415 0.022163 +0.025404 0.095704 -0.013447 -0.036864 -0.064015 -0.035962 0.001144 0.050101 0.006172 0.084003 -0.015860 -0.102295 -0.028308 -0.053076 0.017520 0.110370 -0.009494 0.248830 -0.017769 0.064655 -0.062487 0.133872 -0.077193 -0.077102 -0.104610 0.084923 -0.116710 -0.000424 -0.001453 -0.001504 -0.004986 -0.072792 -0.151917 0.063339 +0.027234 0.088446 -0.037011 -0.090962 -0.124015 -0.052844 -0.020061 0.017974 0.031824 0.138013 -0.009523 -0.093892 -0.061812 -0.016350 0.043025 0.034106 0.036403 0.177560 -0.066137 0.039288 0.041972 0.145398 -0.004524 -0.021113 0.025045 0.065780 -0.102128 -0.061053 0.010043 -0.018688 0.018733 -0.002990 -0.240304 0.007274 +0.033301 0.051083 -0.050161 -0.137239 -0.130410 -0.078352 -0.030467 -0.016581 0.042916 0.153230 -0.008295 -0.048519 -0.056020 -0.017449 0.051644 -0.021078 0.049456 0.042549 -0.075780 0.051205 0.057200 0.117965 0.058462 0.078890 0.121853 0.027311 -0.037081 -0.082100 0.013948 0.019188 0.029703 0.076102 -0.243643 -0.067711 +0.034561 -0.024817 -0.037181 -0.171731 -0.091823 -0.080914 -0.018022 -0.019280 0.055534 0.112038 -0.006388 0.000380 -0.027767 -0.031689 0.027915 -0.012644 0.004351 -0.072270 -0.053990 0.028620 0.011428 0.077628 0.073278 0.159948 0.096141 0.006855 0.036568 -0.013290 -0.001587 0.033748 0.052795 0.164287 -0.166678 -0.098685 +0.031311 -0.094373 -0.015266 -0.181991 -0.032285 -0.067979 0.020822 -0.028457 0.050194 0.060652 0.006169 0.060618 0.005717 -0.047184 0.006512 0.012425 -0.059877 -0.141325 -0.029145 -0.010906 -0.069894 0.032082 0.054382 0.151384 0.041519 0.026929 0.076049 0.067107 -0.027885 0.040313 0.041582 0.194576 -0.086531 -0.080338 +0.030327 -0.127857 -0.008012 -0.166922 0.025066 -0.062660 0.063753 -0.029802 0.044933 0.028298 0.025152 0.109179 0.013585 -0.043385 0.003918 0.007538 -0.080941 -0.141969 0.011067 -0.055727 -0.099322 -0.018025 0.009874 0.065510 -0.019589 0.084273 0.059580 0.099232 -0.026102 0.043042 0.023322 0.151827 -0.031702 -0.023000 +0.030239 -0.141766 -0.020490 -0.154724 0.073176 -0.066098 0.076339 -0.045120 0.049403 -0.014474 0.024782 0.109864 0.005943 -0.008921 0.001482 -0.008304 -0.060453 -0.100507 0.030769 -0.093919 -0.042422 -0.045051 -0.014060 -0.020183 -0.093279 0.134797 0.006048 0.040717 -0.038709 0.039630 0.006137 0.076303 0.021244 0.014680 +0.030493 -0.158938 -0.031460 -0.156567 0.120023 -0.070626 0.084879 -0.065759 0.063746 -0.047728 -0.002344 0.094855 -0.013995 0.014159 0.011125 -0.034394 -0.064702 -0.055871 0.041269 -0.110361 0.045722 -0.064289 -0.013213 -0.104140 -0.133226 0.183607 -0.037284 0.002311 -0.041808 0.033510 -0.034315 0.012710 0.065609 0.046794 +-0.029307 -0.000612 0.006003 0.066897 -0.126329 0.008282 0.106455 -0.058070 -0.127455 0.112217 0.028721 -0.008227 0.023123 -0.184660 -0.000131 0.060814 -0.038192 0.061802 0.055924 -0.086767 -0.011372 0.116214 0.039681 -0.047083 0.046626 0.042705 0.011194 -0.002237 0.023832 0.021378 0.074731 -0.040608 -0.025003 0.203421 +-0.038458 0.020813 -0.004500 0.021759 -0.086203 0.017004 0.123118 -0.051398 -0.154096 0.048594 0.160783 0.035847 -0.105209 -0.131283 -0.034334 0.088202 -0.022053 0.065794 0.043514 -0.164773 0.038562 0.221823 -0.008980 0.076251 -0.067806 0.014541 0.027230 -0.014379 -0.016754 -0.010835 0.026126 -0.010414 0.029183 0.058614 +-0.021490 0.036216 -0.005865 0.020024 -0.060804 0.026512 0.126241 -0.083197 -0.120419 0.032472 0.187630 -0.015555 -0.159327 -0.011903 -0.087082 0.079345 -0.061540 0.015194 0.062573 -0.039469 0.032277 0.191416 0.026454 0.082398 -0.056523 -0.017131 0.027510 -0.008610 0.004494 -0.034043 -0.017450 0.006765 0.078634 -0.036122 +0.000867 0.042636 0.003104 0.029552 -0.036234 0.016402 0.123844 -0.126971 -0.075012 0.060293 0.148833 -0.081953 -0.173218 0.088994 -0.136465 0.063644 -0.092909 -0.034989 0.083554 0.107321 0.022452 0.121649 0.095422 0.064093 -0.044127 -0.041514 -0.001734 -0.007934 0.040275 -0.042178 -0.037676 0.021143 0.091871 -0.056272 +0.024120 0.058528 0.006018 0.028610 -0.012243 0.008813 0.097121 -0.159602 -0.017056 0.077811 0.087002 -0.120528 -0.150197 0.184860 -0.180434 0.040369 -0.097894 -0.042266 0.075094 0.203623 0.039492 0.033806 0.132455 0.059185 -0.102173 -0.071020 -0.051542 0.002257 0.073697 -0.021845 -0.035627 0.009661 0.123071 -0.065039 +-0.056420 0.059125 -0.030321 -0.057038 0.055493 -0.007116 -0.126529 0.019949 -0.058614 -0.078223 0.002145 0.050900 0.167834 -0.173333 0.181067 -0.004047 0.063488 0.151506 -0.125850 -0.136067 0.023547 0.034287 -0.056834 0.003824 0.134406 -0.055792 0.087938 0.068804 -0.033240 0.076407 -0.033551 -0.097730 0.084249 -0.079917 +-0.038591 0.041658 -0.021071 -0.054808 0.085131 -0.020672 -0.150923 -0.028119 -0.005051 -0.082123 -0.027470 0.004437 0.151800 -0.139134 0.205779 0.055682 0.024516 0.096154 -0.038417 -0.113849 0.045637 0.075165 -0.039525 0.011140 0.058496 -0.061165 0.070389 0.031381 -0.020956 0.065917 -0.033395 -0.096762 0.067056 0.005758 +-0.007940 0.026461 -0.003035 -0.037585 0.112114 -0.032320 -0.154598 -0.070183 0.034104 -0.066949 -0.048103 -0.076036 0.108505 -0.081056 0.189128 0.100712 0.001290 0.009722 0.046728 -0.023127 0.013390 0.076873 0.012671 0.031037 0.075639 -0.064473 0.061414 -0.019564 0.014597 0.046786 -0.011485 -0.084927 -0.000334 0.061175 +0.018946 -0.000145 0.011179 -0.029672 0.136914 -0.030086 -0.147824 -0.105721 0.066935 -0.079902 -0.036968 -0.110909 0.052283 0.004188 0.126896 0.134626 -0.006676 -0.052490 0.091685 0.063396 -0.013036 0.002970 0.053049 0.019284 0.038579 -0.025497 0.025340 -0.089926 0.050450 -0.006666 -0.013118 -0.030505 -0.058633 0.064143 +0.026629 -0.059165 -0.000823 -0.058599 0.151849 -0.022073 -0.130501 -0.084385 0.071751 -0.134872 0.039773 -0.057794 -0.044027 0.076494 0.035989 0.101529 0.005315 -0.029779 0.032498 0.028803 0.005618 -0.063529 -0.004924 -0.022183 -0.113427 0.055922 -0.008186 -0.140830 0.090960 -0.114112 -0.009417 0.083947 -0.041032 -0.006371 +-0.010951 0.075350 -0.001817 -0.012876 0.013096 0.004579 -0.016153 -0.047823 -0.029850 0.016150 0.033334 0.015682 0.035621 0.037191 -0.019504 -0.019256 0.044839 0.020295 -0.073131 0.039780 -0.036879 -0.040970 0.053655 -0.001482 -0.002821 -0.032902 -0.000066 0.005729 0.001116 0.056517 -0.017058 -0.021947 0.037761 -0.039276 +-0.012100 0.064207 -0.001096 -0.013941 0.006814 0.008710 -0.012277 -0.037790 -0.022203 0.014245 0.023934 0.012607 0.028185 0.041440 -0.015444 -0.022646 0.048805 0.020521 -0.080918 0.029123 -0.081415 -0.044517 0.073681 0.021481 -0.045782 -0.048161 0.003254 0.036460 -0.020011 0.065280 0.002563 -0.013150 0.045393 -0.015692 +-0.013403 0.059276 0.001032 -0.014545 0.001798 0.010646 -0.008624 -0.026081 -0.017773 0.015405 0.015492 0.014040 0.022709 0.044120 -0.010399 -0.025661 0.051172 0.017503 -0.087720 0.021120 -0.123991 -0.047505 0.087387 0.047337 -0.088646 -0.065851 0.004667 0.069448 -0.040053 0.076718 0.023178 -0.004565 0.059432 0.003138 +-0.013951 0.058265 0.004661 -0.015235 -0.000197 0.012932 -0.005151 -0.015313 -0.012719 0.014418 0.008297 0.018443 0.016678 0.051541 -0.004867 -0.028055 0.052224 0.011609 -0.091004 0.016980 -0.158439 -0.046922 0.104617 0.077207 -0.137148 -0.078657 0.005486 0.103939 -0.062683 0.082257 0.041975 0.000801 0.070429 0.027527 +-0.012210 0.028100 -0.049457 -0.000857 0.000872 -0.019030 0.038293 -0.002178 0.022197 0.008799 -0.017828 -0.005589 -0.010209 -0.026452 0.021247 -0.052723 0.074659 0.058170 -0.117953 -0.020708 -0.092993 -0.079196 0.037883 0.239302 -0.027228 -0.100648 0.058909 0.082147 0.014782 0.033906 0.058190 -0.035069 -0.021313 -0.027376 +-0.009373 0.029412 -0.026531 -0.009199 -0.003610 -0.013154 0.015847 0.006945 0.008617 0.011675 -0.022788 0.000421 -0.007697 0.005751 0.004594 -0.044864 0.063024 0.031416 -0.086743 -0.005786 -0.098907 -0.064158 0.049203 0.156108 -0.042964 -0.089257 0.038446 0.080608 -0.015415 0.071399 0.069731 -0.012170 0.005798 -0.005172 +-0.007108 0.026011 0.001392 -0.008785 -0.008676 0.005534 -0.002323 0.008151 -0.006538 0.012718 -0.016466 0.016828 0.006599 0.032792 -0.008449 -0.031395 0.045979 0.010267 -0.064263 0.010528 -0.087206 -0.035954 0.070434 0.037452 -0.075439 -0.048176 -0.000307 0.074329 -0.047401 0.093968 0.057921 0.003554 0.025206 0.029137 +-0.008616 0.022966 0.025314 -0.006647 -0.012574 0.026313 -0.017855 0.005573 -0.012147 0.015962 -0.009681 0.035391 0.015389 0.061577 -0.023327 -0.005465 0.025007 -0.014906 -0.045808 0.023055 -0.069940 -0.012007 0.101986 -0.066696 -0.085795 -0.002255 -0.051891 0.079767 -0.057766 0.078189 0.009062 0.022309 0.030125 0.051138 +-0.007559 0.013536 0.044396 -0.007128 -0.015567 0.038755 -0.032699 0.009439 -0.018290 0.012901 -0.008295 0.047013 0.018435 0.076580 -0.045586 0.016721 0.010805 -0.037831 -0.013755 0.026798 -0.057710 -0.005862 0.113804 -0.159457 -0.085242 0.031892 -0.090113 0.066240 -0.055402 0.053706 -0.034191 0.047815 0.018971 0.071248 +-0.009091 0.030428 0.013028 0.035270 -0.081955 0.036276 0.100983 -0.087388 -0.023476 0.093938 -0.074920 -0.042748 0.009283 -0.052713 0.069944 0.007487 0.044433 0.011768 -0.036858 -0.036562 0.024165 -0.141056 -0.039714 -0.075826 0.052239 0.062199 -0.048408 -0.033798 0.070343 0.124688 -0.003466 0.051026 0.026850 -0.026589 +-0.006597 0.030631 0.019664 0.021478 -0.061211 0.024677 0.092608 -0.095386 -0.041650 0.068021 -0.054620 -0.036136 0.003440 -0.021689 0.046307 0.007803 0.056620 0.018329 -0.048106 -0.037355 0.044779 -0.170111 -0.043462 -0.076020 0.064547 0.063396 -0.047873 -0.054226 0.076392 0.081326 0.000747 0.074683 0.030657 -0.067772 +-0.006641 0.024694 0.004169 0.027776 -0.027517 0.013511 0.064805 -0.082940 -0.047464 0.039102 -0.047983 -0.025260 -0.012175 0.006766 0.039254 0.004585 0.108825 0.031769 -0.009359 -0.008230 0.016421 -0.164640 -0.117072 -0.007971 0.069640 0.013253 -0.033817 -0.074767 0.071010 0.026436 0.003056 0.090554 0.005886 -0.126966 +0.003124 0.009371 0.014768 0.046412 -0.023874 0.007554 0.036147 -0.057698 -0.058069 0.021256 -0.033315 -0.028152 -0.018259 0.027895 0.014161 0.004788 0.111066 0.042408 -0.022688 -0.017329 0.008180 -0.162840 -0.121148 0.012000 0.040787 0.005472 -0.028935 -0.070284 0.051087 0.002654 0.026039 0.077896 -0.025666 -0.138535 +-0.000470 0.012891 0.009958 0.038234 -0.036776 0.012638 0.068663 -0.077589 -0.036998 0.050930 -0.057174 -0.042770 -0.006013 -0.005012 0.037131 0.011314 0.092853 0.040593 -0.014258 -0.022855 0.028109 -0.170083 -0.092356 -0.017012 0.053071 0.021873 -0.039264 -0.061002 0.057296 0.043219 0.021993 0.064114 -0.018287 -0.100373 +-0.004849 0.015938 0.022983 0.026902 -0.073622 0.023429 0.089584 -0.088285 -0.026052 0.080286 -0.059955 -0.060351 0.007903 -0.035545 0.046797 0.007563 0.038369 0.030247 -0.059021 -0.056175 0.056872 -0.166273 -0.011250 -0.093711 0.035468 0.071037 -0.053530 -0.042127 0.065314 0.098363 0.023179 0.056227 0.018585 -0.031417 +-0.022520 -0.008135 -0.028919 -0.050592 0.028229 -0.006670 -0.060855 -0.025108 0.032576 -0.018823 0.066255 0.018170 0.050211 0.001974 -0.062666 -0.057057 -0.027695 0.045343 -0.016243 0.061633 0.033008 0.024487 0.074017 -0.133643 0.041960 -0.008005 0.017760 -0.020807 0.009949 -0.031184 -0.022929 0.014085 0.078201 0.073117 +-0.008675 -0.004691 -0.013081 -0.031226 0.031157 -0.009924 -0.096969 -0.029153 0.000787 -0.038194 0.087791 0.000669 0.047391 0.025733 -0.093797 -0.072336 -0.039133 0.081739 -0.024145 0.067113 0.036711 0.015968 0.050245 -0.135056 0.022818 0.008747 0.011110 -0.044613 0.004409 -0.030744 -0.014206 -0.016314 0.026864 0.033661 +-0.008350 -0.011949 -0.026508 -0.026911 0.063836 -0.024789 -0.126394 -0.011390 -0.004841 -0.063477 0.084207 0.008974 0.040823 0.048228 -0.106669 -0.072520 0.012682 0.093989 0.007098 0.087810 0.011179 0.012357 -0.005468 -0.074058 0.051617 -0.038525 0.027206 -0.052944 -0.001957 -0.069244 -0.001150 -0.012855 0.002275 -0.012184 +0.001527 -0.031469 -0.019959 -0.032691 0.084353 -0.036934 -0.139297 0.005872 -0.012615 -0.087659 0.090429 0.021235 0.029692 0.064764 -0.125564 -0.055872 0.037072 0.084147 -0.001494 0.073344 0.027889 -0.000113 -0.020299 -0.040534 0.015971 -0.035466 0.033553 -0.071962 -0.021193 -0.078379 0.024814 -0.018801 -0.021044 -0.038763 +-0.009394 -0.028927 -0.028906 -0.024460 0.073718 -0.026898 -0.120720 -0.003723 -0.012295 -0.070463 0.075708 0.021766 0.032103 0.053181 -0.101806 -0.052394 0.030694 0.112096 0.015064 0.098439 -0.005609 0.016172 -0.039627 -0.035390 0.062895 -0.064759 0.040731 -0.023003 -0.019984 -0.078158 0.013167 -0.008582 -0.012839 -0.026034 +-0.014806 -0.020586 -0.019304 -0.037248 0.040627 -0.009079 -0.093808 -0.017684 0.001926 -0.042956 0.076953 0.012620 0.038220 0.029003 -0.084598 -0.051706 -0.017717 0.096814 -0.013796 0.075862 0.017984 0.023149 0.017010 -0.093650 0.035446 -0.023135 0.026297 -0.011769 -0.011753 -0.043351 0.000060 -0.001953 0.028135 0.023804 +0.029937 -0.018527 -0.150727 0.081029 0.034186 -0.056299 0.148788 0.006526 0.091516 -0.080441 -0.035735 0.001997 0.019030 -0.077643 0.107984 -0.056258 0.031181 -0.051535 -0.027580 0.051815 0.012036 0.081437 0.046704 -0.059784 0.100904 0.025934 0.021662 -0.016937 0.039461 -0.046583 -0.092257 -0.006300 0.025170 0.075511 +0.027077 -0.012351 -0.112038 0.035893 0.028873 -0.001260 0.084827 -0.000242 0.048683 -0.054899 -0.029997 0.032628 -0.039785 -0.108273 0.045755 -0.052769 0.008202 -0.062941 -0.003272 0.105699 0.039987 0.020061 0.023151 0.020974 0.008953 0.010896 0.031997 -0.023033 0.010634 -0.071553 -0.062459 -0.034568 0.012175 0.063440 +0.008543 0.000575 -0.036234 0.011338 0.007897 -0.004413 0.042000 0.015857 0.024113 -0.029744 -0.022255 0.053502 -0.038865 -0.097944 0.017588 -0.046984 0.033087 -0.053276 0.001529 0.130264 0.069392 -0.067173 0.042421 0.083647 -0.052001 0.027113 0.009719 0.006872 -0.038341 -0.067952 0.010640 -0.078205 -0.015510 0.044074 +-0.004854 -0.002651 -0.001199 -0.004656 -0.017881 0.006502 0.011106 0.033451 0.012608 -0.007254 -0.021085 0.015936 -0.015926 -0.005386 0.006492 -0.032176 -0.004622 -0.056644 0.008831 0.017207 0.029211 -0.031234 -0.017190 0.017370 -0.014199 -0.016837 0.012242 0.028844 0.024051 -0.033052 0.005809 -0.026851 -0.003806 0.029867 +-0.015813 -0.010424 0.049608 -0.025236 -0.047180 0.033566 -0.017722 0.037312 0.003478 0.019989 -0.017899 -0.019776 0.013111 0.105673 -0.000689 -0.029181 -0.055355 -0.059296 0.016272 -0.126448 -0.003426 0.027239 -0.080562 -0.048943 0.063203 -0.071188 0.018085 0.055066 0.103002 0.015990 -0.024552 0.027166 0.005359 -0.008937 +-0.030164 -0.027591 0.112130 -0.046006 -0.063466 0.021257 -0.061882 0.075039 -0.009550 0.046188 -0.025234 -0.036147 0.006893 0.099786 -0.046972 -0.003808 -0.042536 -0.034124 0.072153 -0.146706 -0.007001 0.011713 -0.032354 -0.013285 0.064616 -0.076540 -0.019793 0.045941 0.057997 -0.041981 -0.013777 -0.007784 -0.005500 0.063654 +-0.019028 -0.051789 0.153268 -0.072220 -0.068001 0.053218 -0.114782 0.100188 -0.032458 0.065327 -0.041993 0.000529 -0.049657 0.064999 -0.113438 0.028145 -0.026783 -0.004495 0.083060 -0.067097 0.025177 -0.054527 0.012232 0.061208 0.035559 -0.041029 -0.084866 0.011647 -0.034824 -0.100697 -0.069165 -0.000768 0.005575 0.110722 +-0.028944 -0.046124 0.115567 -0.042613 -0.067724 0.014225 -0.060491 0.103470 0.006232 0.039413 -0.031752 -0.037167 -0.006997 0.085995 -0.038657 0.010688 -0.040086 -0.042208 0.098912 -0.130371 0.037304 0.026656 -0.077987 -0.030978 0.062407 -0.072535 -0.073939 0.000909 0.019295 -0.034458 0.004467 -0.047183 0.050673 0.035176 +-0.010823 -0.035975 0.055356 -0.020108 -0.053716 0.014079 -0.008891 0.083913 0.022598 0.005824 -0.031201 -0.038542 -0.005753 0.089595 0.015986 -0.004255 -0.071317 -0.065118 0.079317 -0.106829 0.072446 0.039057 -0.148855 -0.072824 0.059724 -0.064924 -0.048338 0.013216 0.059644 0.037032 0.035514 -0.058015 0.052789 -0.068904 +0.002749 -0.025782 0.001067 -0.000955 -0.021760 -0.004910 0.022410 0.073031 0.031948 -0.017623 -0.036578 0.002064 -0.036635 -0.028107 0.022568 -0.013938 -0.026049 -0.064352 0.076825 0.032919 0.104873 -0.018636 -0.086478 -0.011360 -0.025080 -0.005483 -0.057313 -0.019218 -0.018251 -0.006270 0.058547 -0.109717 0.043965 -0.042968 +0.019557 -0.022238 -0.040271 0.015531 -0.000923 -0.011734 0.050924 0.059961 0.044488 -0.037512 -0.047698 0.041131 -0.067325 -0.125904 0.038185 -0.026749 0.003161 -0.063752 0.059945 0.149873 0.138916 -0.043073 -0.038810 0.040424 -0.060299 0.036249 -0.057345 -0.030897 -0.069820 -0.039359 0.051438 -0.140784 0.040745 -0.023033 +0.038295 -0.025011 -0.119022 0.039087 0.023303 -0.007108 0.097748 0.031451 0.066314 -0.064618 -0.049757 0.022319 -0.054682 -0.131953 0.060803 -0.041005 -0.002889 -0.065952 0.048990 0.118731 0.087371 0.038178 -0.008116 -0.019859 0.013619 0.027323 -0.017437 -0.041034 -0.017123 -0.056194 -0.033365 -0.067470 0.076076 0.024548 +0.027485 -0.031004 -0.155083 0.076967 0.030238 -0.066616 0.146021 0.018614 0.095435 -0.090351 -0.026858 -0.001195 0.004065 -0.062969 0.102157 -0.046214 0.025250 -0.047454 0.004391 0.045916 0.011457 0.054752 0.064190 -0.063966 0.092363 0.019011 0.007010 -0.017645 0.023346 -0.068486 -0.085984 -0.024607 0.046082 0.096832 +0.011663 0.006518 -0.034439 0.013241 0.007617 -0.009766 0.044050 0.033840 0.029582 -0.028393 -0.028713 0.055641 -0.043922 -0.099413 0.025141 -0.040381 0.025727 -0.058214 0.010448 0.139032 0.097498 -0.059681 0.018053 0.084934 -0.052343 0.037634 -0.003643 0.010254 -0.050500 -0.038878 0.012009 -0.092562 -0.007898 0.022313 +-0.002313 0.000470 0.000002 -0.004007 -0.016215 0.003976 0.010717 0.048028 0.016739 -0.006186 -0.024483 0.020048 -0.016876 -0.003548 0.010717 -0.026953 -0.010998 -0.055979 0.019518 0.025395 0.050851 -0.031442 -0.027433 0.021960 -0.018106 -0.009491 0.000531 0.037647 0.007463 -0.008452 0.013288 -0.048925 0.006064 0.024257 +-0.012568 -0.006592 0.049539 -0.024277 -0.046609 0.030396 -0.019942 0.053337 0.007757 0.021468 -0.022706 -0.013044 0.011272 0.109312 0.003377 -0.022628 -0.060616 -0.061807 0.030161 -0.121278 0.019402 0.026839 -0.095660 -0.042434 0.064863 -0.064156 0.007525 0.057258 0.096057 0.035786 -0.019042 0.010115 0.006232 -0.015055 +-0.023212 -0.060246 0.157807 -0.069886 -0.065658 0.063342 -0.104423 0.082001 -0.030749 0.079114 -0.044460 0.004171 -0.030429 0.042545 -0.096287 0.021890 -0.044874 -0.001170 0.067071 -0.085689 0.021431 -0.035122 0.002907 0.064224 0.017922 -0.037758 -0.083689 0.004437 -0.037603 -0.087459 -0.078257 -0.011921 0.002713 0.130484 +-0.010961 -0.010595 0.057062 -0.023094 -0.047200 0.021346 -0.011516 0.068656 0.015527 0.014810 -0.022984 -0.021018 0.006940 0.106574 0.011226 -0.023889 -0.062806 -0.069001 0.044159 -0.108003 0.050370 0.047099 -0.112640 -0.068669 0.081751 -0.068521 -0.039172 0.022972 0.052837 0.036443 0.008144 -0.028320 0.041313 -0.064570 +0.001631 -0.003250 0.002325 -0.002118 -0.016181 0.000274 0.016759 0.060910 0.024499 -0.012519 -0.030588 0.015271 -0.023100 -0.011757 0.016440 -0.028638 -0.012990 -0.064844 0.039739 0.031429 0.079984 -0.015321 -0.052897 -0.006078 -0.010170 -0.011420 -0.050449 -0.009900 -0.025391 -0.012909 0.032748 -0.085004 0.038699 -0.043162 +0.017805 0.004146 -0.038887 0.014222 0.006581 -0.009683 0.047461 0.046887 0.038038 -0.032345 -0.032763 0.056280 -0.049485 -0.108966 0.031645 -0.041431 0.020138 -0.064023 0.031810 0.142533 0.126216 -0.050995 -0.002245 0.056266 -0.050403 0.037812 -0.053115 -0.030572 -0.081976 -0.050982 0.028974 -0.127634 0.029303 -0.029574 +0.012632 -0.105919 0.042832 -0.056614 0.095894 -0.023994 -0.019214 -0.026746 -0.070577 0.202269 0.218185 -0.141116 0.012637 -0.191347 0.155533 -0.244488 0.121779 -0.013130 0.138472 -0.059114 -0.216544 -0.050477 0.066853 -0.149560 -0.157390 -0.095098 -0.011175 -0.068427 0.210754 -0.054577 0.001436 0.040342 -0.004236 -0.006205 +-0.009740 -0.029067 0.036475 -0.046866 0.118228 0.012225 -0.006405 -0.060398 -0.086556 0.108100 0.186918 -0.112111 0.050136 -0.100126 0.105268 -0.169540 0.136663 -0.073114 0.067763 -0.014521 -0.082623 -0.012863 0.033765 -0.100967 -0.086562 -0.092416 -0.077945 0.022729 0.114331 -0.008651 -0.069342 0.005683 0.051571 -0.009558 +-0.031301 0.046217 0.033243 -0.035388 0.123785 0.052248 0.021922 -0.090547 -0.125667 0.007581 0.182378 -0.055823 0.074368 -0.029074 0.053632 -0.049594 0.107463 -0.137761 0.005821 -0.001673 0.066449 0.006118 0.023528 0.013804 -0.007269 -0.081388 -0.113434 0.070675 0.027780 0.045024 -0.106739 -0.011678 0.031635 0.044212 +-0.047441 0.105188 0.031918 -0.024384 0.114098 0.082601 0.048491 -0.112125 -0.170704 -0.059301 0.164752 -0.009947 0.090739 0.006616 0.010369 0.042357 0.050623 -0.158918 -0.042210 0.014508 0.136027 -0.007670 -0.034495 0.072312 0.050835 -0.067209 -0.075955 0.023597 0.006577 0.084867 -0.082590 0.024191 -0.041988 0.068711 +-0.060936 0.133902 0.031530 -0.004574 0.064304 0.088650 0.058070 -0.124018 -0.171917 -0.102988 0.148276 0.058157 0.076201 0.044152 0.002505 0.090897 -0.015203 -0.110439 -0.090091 0.069662 0.172459 -0.039446 -0.067579 0.050794 0.093654 -0.082964 -0.026363 0.019254 -0.002660 0.016061 0.024545 0.043909 -0.092051 0.131171 +-0.074646 0.131695 0.040257 0.018490 -0.004794 0.081236 0.061589 -0.133348 -0.147784 -0.119212 0.094712 0.084045 0.033173 0.036408 0.031797 0.094617 -0.048706 0.003825 -0.075566 0.078798 0.127307 -0.065285 -0.109546 -0.039558 0.030185 -0.072564 0.052974 -0.008825 -0.088317 -0.022192 0.091494 0.087785 -0.062428 0.116086 +-0.090236 0.103626 0.066939 0.057319 -0.079163 0.060686 0.053354 -0.131920 -0.087102 -0.115977 0.028577 0.074951 -0.040556 0.035491 0.087538 0.018752 -0.081645 0.116761 0.007481 0.045592 0.001466 -0.094081 -0.126988 -0.146376 -0.033849 -0.021719 0.127080 -0.004981 -0.202755 -0.119973 0.081963 0.106640 -0.105281 -0.008628 +-0.101059 0.055177 0.092659 0.069983 -0.150193 0.026469 0.028574 -0.115258 -0.008902 -0.088879 -0.036594 0.022392 -0.109572 -0.005240 0.149355 -0.115056 -0.119773 0.122550 0.083092 0.011822 -0.092288 -0.074034 -0.034558 -0.115984 -0.044921 0.007854 0.164244 0.014803 -0.170980 -0.127570 0.019750 0.095694 0.000371 -0.041291 +-0.101563 0.024376 0.106668 0.071318 -0.187231 0.012534 0.023991 -0.099795 0.030129 -0.076617 -0.069392 -0.016558 -0.116462 -0.024845 0.158655 -0.199665 -0.116228 0.076206 0.060656 -0.024832 -0.096681 -0.049299 0.082420 -0.042295 -0.032862 0.018749 0.125343 0.039212 -0.037558 -0.047906 -0.025870 -0.049529 0.088169 -0.088273 +-0.101840 -0.013119 0.089419 0.075166 -0.182579 0.048658 0.037188 -0.067749 0.031914 -0.101814 -0.073274 -0.026481 -0.109668 -0.000858 0.110793 -0.202483 -0.060253 0.007145 0.019590 -0.069464 -0.056870 0.023689 0.132006 0.031411 0.013119 -0.007012 0.038285 0.031656 0.001551 -0.025447 -0.065416 -0.114616 0.017261 -0.086359 +-0.084252 -0.076412 0.065909 0.060881 -0.142931 0.092286 0.073191 -0.013071 0.017189 -0.159961 -0.092115 -0.031651 -0.101432 -0.005721 0.027741 -0.106024 0.050453 -0.034217 -0.067543 -0.069923 -0.011090 0.116035 0.100208 0.041462 -0.024840 -0.044467 -0.108854 -0.009354 0.073244 0.020455 -0.063103 -0.129646 -0.010099 -0.129133 +-0.053651 -0.123308 0.046845 0.020630 -0.076671 0.113112 0.110897 0.086910 0.003931 -0.182808 -0.094838 -0.023499 -0.059496 -0.018019 -0.032692 -0.004557 0.053504 -0.066417 -0.110231 -0.014603 -0.024896 0.113252 0.016412 0.021225 -0.025860 -0.075046 -0.145044 -0.030890 0.110020 0.003382 0.007818 -0.098244 -0.037896 -0.009802 +-0.023018 -0.146263 0.038114 -0.004028 -0.020148 0.111274 0.136014 0.170400 0.002465 -0.171044 -0.075670 -0.007542 -0.006424 -0.025856 -0.031416 0.083827 0.010568 -0.069980 -0.109310 0.034905 -0.065427 0.031177 -0.044852 0.019905 -0.066999 -0.093510 -0.115084 -0.095158 0.120015 0.040204 0.030019 -0.030543 -0.096811 0.096700 +0.002563 -0.127886 0.038658 -0.012071 0.033255 0.099861 0.164565 0.238246 0.001567 -0.105923 -0.057783 0.008664 0.027296 -0.030573 -0.009853 0.117020 -0.032701 -0.000283 -0.057331 0.051644 -0.084379 -0.039476 -0.031627 -0.008417 -0.048362 -0.080557 -0.044505 -0.140295 0.129312 0.090377 0.020906 0.080368 -0.088585 0.136852 +0.022743 -0.067070 0.035835 -0.011617 0.073365 0.063325 0.146213 0.262278 -0.002566 -0.007656 -0.026090 0.035984 0.031533 -0.009645 0.044980 0.084848 -0.046015 0.086576 -0.001782 0.061428 0.003570 -0.047340 0.031674 0.003656 -0.006269 -0.074342 -0.011328 -0.102136 0.042874 0.026755 -0.027391 0.130301 -0.059867 0.018942 +0.044270 0.008816 0.045389 -0.021660 0.105411 0.011416 0.109320 0.275577 -0.009832 0.108035 0.004491 0.064390 0.012428 0.006669 0.095357 -0.012238 -0.068972 0.152817 0.075822 0.056884 0.138813 -0.051472 0.080042 0.012909 0.015075 -0.053459 0.028833 0.077070 0.026517 -0.070675 -0.045298 0.143809 -0.084532 -0.083487 +0.062375 0.088371 0.056930 -0.031399 0.124205 -0.042608 0.070908 0.302850 -0.030713 0.221806 0.047883 0.094536 -0.004204 0.009990 0.148794 -0.108520 -0.096997 0.187564 0.140322 0.044017 0.262141 -0.062547 0.161527 -0.013297 0.037476 -0.028287 0.047541 0.256555 -0.040101 -0.087736 0.006879 0.108453 -0.022617 -0.092782 +0.101351 -0.059896 0.089671 -0.007831 -0.037385 0.008829 -0.001672 -0.180136 0.189267 0.006458 -0.232031 -0.060867 0.181227 0.130852 -0.046776 0.035489 0.001493 0.160017 0.051721 0.209411 0.059181 -0.083851 0.207104 -0.102355 0.039265 -0.194572 -0.024321 -0.005820 -0.022768 0.136793 -0.107813 -0.023127 -0.048810 0.065417 +0.081528 -0.068502 0.070887 -0.055525 -0.045082 0.007139 -0.005518 -0.118178 0.156592 -0.033074 -0.063860 0.040561 0.111628 0.029568 0.001045 0.060952 0.022298 0.185051 0.009521 -0.033300 0.094005 0.013600 0.105380 0.040334 -0.061870 -0.114470 0.021331 0.005113 0.002683 0.024141 -0.026811 -0.015689 0.020153 0.092373 +0.068413 -0.083706 0.052305 -0.086296 -0.055880 0.021816 0.004492 -0.068120 0.145758 -0.102567 0.092434 0.075123 0.007851 0.008520 0.005845 0.082068 0.031453 0.180413 -0.035339 -0.133303 0.088724 0.067980 0.008976 0.111553 -0.060575 -0.053669 0.037053 -0.004075 0.049025 0.024206 0.031083 0.032459 0.049141 0.038812 +0.072230 -0.065201 0.036058 -0.094849 -0.081347 0.028568 0.008797 -0.040623 0.140707 -0.126779 0.170257 0.059293 -0.052776 0.003182 -0.000677 0.081645 0.026914 0.131691 -0.055588 -0.098342 0.031136 -0.006790 0.015095 0.065597 0.078600 0.017709 0.045791 -0.034864 0.076622 0.013773 0.067413 -0.028287 0.059081 0.012658 +0.085169 -0.029802 0.042368 -0.082336 -0.097939 0.016608 0.019748 -0.012989 0.121625 -0.087612 0.209630 0.002191 -0.126582 0.050998 -0.030648 0.060010 0.000332 0.046455 -0.023080 0.055862 -0.053376 -0.135321 0.065824 0.029844 0.265716 0.072053 0.059330 -0.027794 0.089039 -0.055593 0.088900 -0.113375 0.061857 -0.009200 +0.083666 0.022002 0.040552 -0.085899 -0.099865 0.015644 0.005068 0.015547 0.156486 -0.077980 0.202180 0.014951 -0.087338 0.065851 -0.063459 -0.028938 0.043400 -0.024140 -0.005938 0.066480 -0.072232 -0.179693 -0.014319 -0.032909 0.209669 0.122452 -0.039648 0.049486 0.011409 -0.011759 -0.007885 -0.033417 -0.079718 0.113528 +0.083042 0.057031 0.040177 -0.099114 -0.076680 0.009479 -0.003028 -0.000359 0.165022 -0.119377 0.166816 0.098159 -0.004888 0.020345 -0.028135 -0.047425 0.054928 -0.014242 -0.021031 -0.044814 0.032783 -0.054961 -0.131702 -0.039012 -0.016037 0.136114 -0.052413 0.121523 -0.038968 0.020495 -0.008329 -0.024960 -0.081805 0.022575 +0.083252 0.078107 0.056261 -0.095219 -0.059524 0.003298 -0.006615 -0.018114 0.165684 -0.099090 0.091701 0.078091 0.033441 -0.005544 -0.024775 -0.060616 0.054683 -0.025820 0.034770 -0.091304 0.061625 0.040350 -0.178139 0.001904 -0.150915 0.076588 -0.034127 0.096746 -0.053605 0.008977 -0.035470 0.025028 -0.047913 -0.054413 +0.104239 0.086773 0.093349 -0.055643 -0.033261 -0.013246 -0.005449 -0.083837 0.158899 -0.044047 -0.029467 -0.026012 0.082055 -0.049138 0.021797 0.008367 0.031893 -0.087107 0.189897 -0.063379 0.017963 0.128801 -0.143253 0.036421 -0.143812 -0.013284 0.024955 0.056737 -0.069906 0.014591 -0.040838 0.026539 -0.056752 -0.047314 +0.135218 0.100220 0.124814 0.000991 -0.008239 -0.012542 -0.007248 -0.156811 0.151583 -0.017420 -0.147099 -0.155713 0.101870 -0.021523 0.028922 0.110680 0.026595 -0.179864 0.346267 0.114265 -0.070904 0.161901 -0.031710 0.014850 -0.024451 -0.120325 0.049384 -0.013378 -0.123593 0.072623 -0.129874 0.065687 -0.065814 -0.083173 +0.059343 -0.012441 -0.000702 -0.081890 -0.008092 -0.077276 -0.028878 0.037295 -0.029467 -0.011411 -0.007775 0.009769 -0.027726 0.005769 0.053610 0.007873 -0.041172 -0.106420 -0.027219 0.033050 -0.102197 -0.048661 -0.066981 -0.013190 0.109772 0.030705 0.044138 0.003928 0.036674 0.004169 0.127857 0.033634 0.266703 0.060249 +0.041616 -0.014486 -0.010645 -0.063688 0.002398 0.007759 -0.030515 0.045130 -0.060320 -0.012907 -0.003144 -0.002022 0.026184 0.062737 0.093489 -0.012212 -0.012731 -0.061123 0.017645 0.059738 -0.070951 0.028276 -0.008200 -0.013282 0.059036 0.130001 0.007378 -0.026986 0.024631 0.046745 0.129132 0.029581 0.168902 0.047167 +0.022209 -0.018785 -0.021705 -0.047282 0.007684 0.096519 -0.037379 0.046370 -0.086593 -0.016226 0.004486 -0.016435 0.077777 0.123311 0.134030 -0.031013 0.005692 -0.004530 0.059412 0.082817 -0.053324 0.097630 0.047516 -0.011465 0.006049 0.229178 -0.021088 -0.047042 0.006557 0.091702 0.122335 0.003955 0.066979 0.045888 +0.003588 -0.021043 -0.030263 -0.030409 0.008371 0.181691 -0.044518 0.046051 -0.107937 -0.022794 0.009934 -0.032445 0.119848 0.179589 0.164240 -0.043652 0.020389 0.047092 0.094236 0.116267 -0.035936 0.155206 0.107422 -0.005142 -0.059549 0.322080 -0.057313 -0.069079 -0.015886 0.152295 0.127300 -0.018228 -0.013766 0.025152 +0.010241 -0.012175 -0.071132 -0.010497 0.020024 0.062831 -0.040007 0.039616 -0.072378 0.035685 -0.031690 0.021640 0.001871 0.085038 0.053829 -0.017137 0.002122 0.049195 0.087728 -0.000013 -0.026558 0.022211 -0.058457 0.166112 0.018559 -0.012076 -0.001099 0.016641 -0.019024 0.008824 0.091310 -0.040634 0.020518 0.051538 +0.005987 -0.016904 -0.065972 -0.010944 0.009374 0.084910 -0.052019 0.031735 -0.073636 0.036433 -0.016286 0.003295 0.010276 0.085334 0.068926 -0.031102 -0.004326 0.037220 0.078248 0.028015 -0.030765 0.043535 -0.024633 0.098897 0.024402 0.055196 -0.037672 -0.019356 0.027747 -0.077052 0.014090 -0.032531 0.010393 0.037211 +0.000485 -0.009792 -0.056592 -0.011803 0.001583 0.104774 -0.061755 0.023501 -0.079032 0.039804 -0.011369 -0.011280 0.024653 0.096826 0.073638 -0.046150 -0.008896 0.030450 0.076726 0.038805 -0.033667 0.064954 0.000900 0.056790 0.020232 0.116360 -0.065525 -0.045163 0.037248 -0.094933 -0.027418 -0.028737 -0.007585 -0.011135 +0.006045 -0.001260 -0.070490 -0.009554 0.009933 0.083302 -0.054060 0.013771 -0.080073 0.047390 -0.001836 -0.009542 0.020186 0.082461 0.052009 -0.037023 0.003870 0.028911 0.066158 0.019377 -0.061487 0.042407 -0.017089 0.104383 0.041935 0.073886 -0.019325 -0.089932 0.029586 -0.070428 0.024956 -0.057337 0.001123 -0.019238 +0.011242 -0.005679 -0.074412 -0.010055 0.015755 0.060586 -0.047635 0.003394 -0.091558 0.044380 -0.005161 -0.022962 0.015788 0.070458 0.028218 -0.036979 0.017605 0.028455 0.076360 -0.013275 -0.085415 0.018537 -0.048259 0.163691 0.057659 0.026190 0.028125 -0.133961 0.018631 -0.042571 0.090055 -0.092227 0.027934 -0.057308 +0.036225 -0.071534 0.000459 -0.046818 0.009337 -0.083866 -0.046178 -0.015273 -0.060642 -0.002822 -0.089257 0.012351 -0.039814 -0.035023 -0.019465 0.040371 -0.061960 0.039386 -0.094567 -0.024135 0.027052 0.059938 0.091591 0.001979 -0.040503 -0.107158 0.083539 -0.101314 0.013352 -0.110938 0.043372 0.129228 0.064399 -0.008668 +0.044367 -0.059525 0.015036 -0.064121 -0.018004 -0.082253 -0.045795 -0.026919 -0.070584 -0.018065 -0.070391 -0.010245 -0.029751 -0.046835 -0.028796 0.042482 -0.143375 0.002483 -0.181009 -0.070951 0.071994 -0.003359 0.199769 -0.097579 -0.087064 0.021258 0.050995 -0.107355 -0.017802 0.053633 0.017380 0.028065 0.073668 -0.008871 +0.043601 -0.049111 0.016832 -0.062722 -0.017690 -0.081388 -0.042392 -0.021628 -0.089830 -0.013515 -0.066851 -0.008770 -0.034597 -0.040346 -0.030496 0.037791 -0.131468 -0.012470 -0.162906 -0.049426 0.049875 -0.008340 0.154951 -0.079562 -0.052199 0.026980 0.057094 -0.092234 -0.013567 0.075758 0.017100 -0.027829 0.047598 -0.032337 +0.048275 -0.038263 0.001498 -0.051199 0.023312 -0.088975 -0.041336 0.005000 -0.095004 -0.003208 -0.060932 0.022466 -0.042236 0.005051 -0.023424 0.039786 -0.019435 -0.003108 -0.056234 0.026974 -0.047324 0.009209 -0.052575 0.062674 0.041095 -0.089544 0.071103 -0.050484 0.024541 0.021517 -0.001177 -0.034659 0.017784 -0.145986 +0.041785 -0.047523 -0.029972 -0.046078 0.035909 -0.097136 -0.056514 0.005071 -0.089750 -0.024247 -0.085315 0.019769 -0.065103 -0.012747 -0.033756 0.024734 -0.014857 0.011973 -0.055355 0.034763 -0.048361 0.024915 -0.036487 0.063963 0.019368 -0.114169 0.095381 -0.092460 0.033839 -0.059458 -0.018405 0.004700 0.059549 -0.091842 +0.044692 -0.060996 -0.030403 -0.035242 0.035271 -0.092818 -0.058749 -0.002830 -0.079239 -0.025316 -0.092148 0.019888 -0.062782 -0.020325 -0.029536 0.030127 -0.024623 0.028330 -0.061266 0.010928 -0.030107 0.035277 -0.006948 0.059755 -0.013675 -0.115893 0.086825 -0.110997 0.020747 -0.090179 -0.023240 0.046759 0.032906 -0.074567 +0.053635 0.024179 0.003976 -0.054942 0.021919 -0.085630 -0.040517 0.019222 -0.098845 -0.002500 -0.058854 0.005767 -0.030366 0.004222 -0.039686 -0.024247 -0.003591 -0.045881 -0.051159 0.028487 -0.059601 0.002317 -0.116937 0.048023 0.058109 -0.042187 -0.022689 0.101089 -0.085146 -0.047060 0.001347 -0.071920 -0.053922 -0.029344 +0.050654 0.043811 0.016440 -0.071448 -0.018825 -0.083915 -0.050552 0.001389 -0.099731 -0.011661 -0.055724 -0.038660 -0.011181 -0.044498 -0.046592 -0.061600 -0.110975 -0.092581 -0.146722 -0.054465 0.022640 -0.027495 0.052884 -0.124647 -0.044100 0.090185 -0.056166 0.049620 -0.094099 0.024798 -0.007076 -0.078109 -0.056294 0.024809 +0.056727 0.056174 0.016328 -0.067723 -0.018273 -0.089164 -0.053246 -0.004474 -0.088775 -0.016960 -0.055755 -0.049357 -0.003393 -0.057029 -0.057944 -0.078602 -0.116320 -0.116419 -0.135346 -0.065112 0.031714 -0.026089 0.053926 -0.146501 -0.088218 0.112238 -0.073090 0.019614 -0.073331 -0.010391 -0.016316 -0.081091 -0.101346 0.033206 +0.053863 0.070189 0.002551 -0.055065 0.015300 -0.088786 -0.052051 0.006288 -0.079362 0.003819 -0.069097 -0.028654 -0.012574 -0.043552 -0.060415 -0.082841 -0.030205 -0.090290 -0.056654 -0.010515 -0.026259 0.018692 -0.060457 -0.049003 -0.020092 0.013016 -0.079443 0.055920 -0.044095 -0.132379 -0.069462 -0.028557 -0.081805 -0.014368 +0.054487 0.052156 -0.025662 -0.043672 0.038234 -0.097652 -0.061550 0.009141 -0.091552 -0.018906 -0.073348 -0.023368 -0.035182 -0.019426 -0.067143 -0.077651 0.000840 -0.064016 -0.050794 0.012015 -0.070276 -0.009742 -0.116913 0.009872 0.004210 -0.020941 -0.054064 0.033929 -0.041700 -0.124288 -0.068147 -0.077671 -0.106441 -0.047888 +0.053071 0.036339 -0.025735 -0.047996 0.041005 -0.100444 -0.057829 0.013845 -0.101921 -0.018419 -0.077645 -0.013513 -0.041059 -0.010444 -0.059771 -0.061024 0.005044 -0.056949 -0.052826 0.026317 -0.078409 -0.007588 -0.129995 0.033848 0.029133 -0.047594 -0.035022 0.047235 -0.058100 -0.091996 -0.054179 -0.066075 -0.078103 -0.046683 +-0.031460 -0.013987 -0.149818 0.080350 0.020681 -0.057818 0.011712 -0.001008 0.061313 0.017201 0.005085 0.074818 -0.047190 0.015967 -0.029569 0.136405 0.070269 -0.039349 0.090760 -0.058563 0.065843 0.078259 -0.020924 -0.163454 -0.040312 -0.104189 0.069961 0.035861 0.064290 0.042196 0.239137 -0.024848 0.084332 -0.100068 +-0.002327 -0.017521 -0.139425 0.070865 0.048305 0.079434 -0.035213 -0.026484 0.062642 0.070813 -0.027307 0.065759 -0.050332 -0.068535 -0.050488 0.065260 -0.034808 0.001184 0.022065 -0.018875 0.057119 -0.010911 -0.054658 -0.020400 -0.028406 -0.025774 0.004056 0.020749 -0.040770 0.067283 0.024925 0.111530 0.079035 -0.073362 +-0.000584 -0.011118 -0.122177 0.051211 0.037283 0.151535 -0.057755 -0.043066 0.075106 0.105702 -0.045195 0.033969 -0.051730 -0.086152 -0.035502 0.008973 -0.086193 0.022393 -0.032203 -0.010625 0.037487 0.012267 -0.063710 0.003409 0.012534 0.018225 -0.069447 -0.045926 -0.057301 0.086177 -0.125110 0.108154 0.062487 -0.033929 +0.000480 -0.003086 -0.124476 0.057127 0.033887 0.149034 -0.061112 -0.048529 0.070950 0.110661 -0.040134 0.025767 -0.039288 -0.067746 -0.045629 0.005133 -0.081370 0.017086 -0.037104 -0.021039 0.008034 -0.013678 -0.051069 0.002511 0.032016 0.008503 -0.097044 -0.037501 -0.056407 0.051508 -0.144414 0.076356 0.059066 -0.021945 +-0.000559 0.003997 -0.124027 0.053465 0.037579 0.149996 -0.049979 -0.055144 0.070483 0.113771 -0.040946 0.023671 -0.042610 -0.080241 -0.054001 0.002411 -0.078521 0.019903 -0.057589 -0.015049 -0.008310 -0.005005 -0.034476 0.006235 0.033286 0.024151 -0.120019 0.018377 -0.072419 0.051602 -0.134832 0.064370 0.037586 0.038711 +-0.000565 0.012494 -0.144971 0.071663 0.048838 0.081814 -0.029624 -0.048941 0.058314 0.080172 -0.010279 0.030880 -0.020393 -0.055948 -0.087529 0.040786 -0.005034 0.001085 -0.046251 -0.044062 -0.050526 -0.012975 0.003798 -0.023311 0.028814 -0.002381 -0.096432 0.041930 -0.029305 0.030971 -0.027834 0.007430 -0.084175 0.004963 +-0.024116 0.030827 -0.152081 0.079655 0.025107 -0.047327 0.011967 -0.026416 0.054183 0.040100 0.018945 0.030843 -0.004122 0.017941 -0.093164 0.086158 0.096071 -0.024027 0.018254 -0.066233 -0.099375 0.036822 0.073623 -0.184943 0.021773 -0.066513 -0.059088 0.109738 0.066223 -0.037492 0.178023 -0.104653 -0.133898 -0.056362 +-0.091307 0.021185 0.005452 0.093079 0.004462 -0.137494 0.027255 0.016193 0.035027 0.043270 0.017597 -0.052594 0.050678 -0.017621 -0.100552 0.045091 0.137042 -0.020604 0.004831 0.003501 -0.076423 -0.058265 0.083175 0.046838 -0.041851 0.066991 0.022783 0.025688 0.023265 -0.031676 0.073439 -0.072413 -0.208999 0.025261 +-0.117606 0.016526 0.081068 0.093572 -0.000820 -0.179734 0.034199 0.055206 0.036610 0.045268 0.036467 -0.091173 0.086052 0.019906 -0.077335 0.021613 0.112294 -0.024854 0.001051 -0.024213 0.006556 -0.070798 0.044003 0.109037 -0.026106 0.108415 0.052460 -0.013149 -0.012349 -0.024464 -0.073565 -0.035321 -0.006109 0.085182 +-0.119255 0.013200 0.094025 0.092040 -0.002146 -0.181868 0.034095 0.066850 0.038987 0.042822 0.035705 -0.088591 0.084897 0.040278 -0.058173 0.015843 0.087899 -0.013908 0.006996 -0.042503 0.059924 -0.066579 0.004384 0.103210 -0.024232 0.105557 0.087612 -0.040335 0.005558 -0.016772 -0.091889 -0.007373 0.029448 0.052985 +-0.116290 0.010377 0.087191 0.091107 -0.002629 -0.185149 0.030103 0.072827 0.039401 0.035673 0.032489 -0.068554 0.067030 0.041143 -0.052476 0.026493 0.086061 -0.007730 0.013083 -0.014025 0.109392 -0.074283 -0.017676 0.099392 -0.055753 0.103876 0.090079 -0.044614 -0.019969 0.012981 -0.056802 -0.005694 0.062207 0.013923 +-0.088956 0.002770 0.014073 0.083735 0.000259 -0.146666 0.024624 0.057239 0.040658 0.024938 0.022137 -0.006530 0.016834 0.033547 -0.054639 0.066908 0.066243 -0.006261 0.048043 0.020086 0.160704 -0.046164 -0.050282 0.007988 -0.125443 0.055461 0.087275 -0.006875 -0.007782 0.054046 0.083770 0.004746 0.021062 -0.066056 +-0.035780 -0.013571 -0.129727 0.075906 0.019981 -0.033424 -0.002959 -0.000563 0.050482 0.021935 0.002944 0.075011 -0.045732 0.001801 -0.047564 0.120066 0.054278 -0.033545 0.090304 -0.063131 0.074862 0.062176 -0.020091 -0.117017 -0.059383 -0.080761 0.087965 0.081966 0.076590 0.065730 0.239584 -0.057628 0.009591 -0.117312 +-0.008820 -0.007627 -0.158056 0.055203 0.017956 0.077099 -0.075129 -0.007191 0.032083 0.085832 -0.010026 0.034463 -0.026295 -0.045494 -0.041653 0.027555 -0.049879 0.009335 0.083404 -0.078297 0.040478 -0.117472 0.024219 0.074484 -0.004484 -0.034318 -0.038895 -0.061118 -0.048430 -0.005360 -0.051358 0.010804 0.052828 0.036864 +-0.007737 -0.003256 -0.151791 0.055268 0.019966 0.087559 -0.078741 -0.018450 0.030698 0.091713 -0.015450 0.020864 -0.015028 -0.032981 -0.052983 0.014209 -0.059863 0.016094 0.069445 -0.092531 0.010370 -0.126361 0.028344 0.071716 0.009341 -0.033236 -0.067826 -0.044003 -0.045043 -0.018573 -0.090383 0.001302 0.035380 0.033187 +-0.007412 0.002548 -0.158757 0.061181 0.018661 0.073976 -0.071983 -0.025639 0.028395 0.091940 0.000206 0.022257 -0.009808 -0.034953 -0.058116 0.017318 -0.038657 0.005313 0.049993 -0.087077 -0.010529 -0.130728 0.062698 0.069370 0.019104 -0.031545 -0.097670 0.007100 -0.077453 -0.016369 -0.071504 -0.037358 0.022404 0.093558 +-0.032512 0.028427 -0.133433 0.078989 0.025468 -0.028533 0.004691 -0.021006 0.046417 0.047024 0.018770 0.037960 0.000477 0.007323 -0.092459 0.082200 0.086554 -0.011680 0.010444 -0.068859 -0.057549 0.014886 0.067619 -0.129370 0.001837 -0.039609 -0.014336 0.136787 0.056466 0.005406 0.166161 -0.086177 -0.153931 -0.065626 +-0.106396 0.012082 0.093804 0.073458 0.006325 -0.122138 0.053986 0.020569 0.052258 0.097040 -0.030117 -0.063935 0.029007 -0.048173 -0.073480 0.006487 0.079422 -0.018318 -0.098277 0.085998 -0.045678 0.124596 -0.056062 -0.009915 0.115255 0.082543 0.043762 0.055274 0.033651 0.018777 -0.097186 0.025652 0.107246 0.082007 +-0.108266 0.013196 0.107352 0.073267 0.005501 -0.118182 0.053900 0.026988 0.059629 0.098678 -0.033463 -0.059244 0.030748 -0.021010 -0.048874 -0.003174 0.046149 -0.004115 -0.096188 0.073125 -0.013743 0.137679 -0.084938 -0.025411 0.119975 0.081742 0.078842 0.041866 0.054237 0.044745 -0.113358 0.068330 0.125398 0.071168 +-0.105677 0.013856 0.100276 0.068541 0.007179 -0.120756 0.052194 0.033207 0.056095 0.092773 -0.030246 -0.037497 0.018805 -0.020756 -0.042271 0.009948 0.041864 0.000654 -0.101674 0.096004 0.022386 0.126403 -0.085055 -0.027232 0.087129 0.079991 0.091934 0.037413 0.035609 0.080869 -0.077055 0.068696 0.147811 0.051447 +0.200300 0.206381 0.037666 -0.062044 0.105603 0.039287 0.129443 -0.026108 -0.006145 0.008167 -0.180506 -0.005344 -0.154896 0.029728 -0.078524 -0.093022 0.282292 0.094500 -0.012038 -0.075772 -0.007254 0.075631 -0.021364 -0.032209 0.106197 -0.033075 -0.057528 -0.036911 -0.079279 -0.070271 0.134924 0.050103 0.176129 0.174669 +0.174909 0.262626 0.001650 -0.050760 0.056767 0.046800 0.116679 0.016697 0.036953 -0.001587 -0.129708 -0.018479 -0.077744 0.017170 -0.006678 -0.084015 0.149428 0.003802 0.023948 -0.034466 -0.037293 0.015672 -0.028566 0.018799 0.029636 -0.058638 0.022368 -0.067504 -0.036674 -0.038199 0.101980 -0.006688 0.114199 0.092127 +0.145419 0.271569 -0.034873 -0.044417 -0.005370 0.054598 0.106804 0.058877 0.047845 -0.006222 -0.038196 -0.028624 0.051275 0.021585 -0.019610 -0.032440 -0.042228 -0.040054 0.010931 -0.080129 -0.032979 -0.037624 0.046956 0.005674 -0.043045 -0.070160 0.084897 -0.059861 0.011866 -0.020727 0.016502 -0.105536 0.054309 0.077813 +0.121784 0.205203 -0.040615 -0.025224 -0.078037 0.055910 0.087096 0.101567 0.032281 0.047114 0.067450 -0.029754 0.115044 0.004978 -0.002689 0.033261 -0.183060 -0.118272 -0.032756 -0.083449 -0.036678 -0.109978 0.089839 -0.018425 -0.047398 -0.071371 0.132785 -0.079312 0.053450 -0.016013 -0.087251 -0.136778 0.010646 0.048749 +0.133914 0.102310 -0.020287 0.004986 -0.141709 0.003779 0.009098 0.120102 -0.047440 0.060693 0.150862 0.032856 0.123342 0.036340 0.053349 0.081323 -0.106337 -0.089787 -0.055918 0.076288 0.022085 -0.032767 0.044374 -0.049343 -0.054487 -0.077724 0.094554 -0.099233 0.070220 0.032782 -0.134028 -0.176615 0.058256 -0.110604 +0.136156 0.012237 0.028350 0.055205 -0.144687 -0.046150 -0.025253 0.036940 -0.082417 0.046931 0.140621 0.125137 0.070684 0.035326 0.117788 0.115735 0.014819 -0.011779 -0.095812 0.103471 0.027698 0.015841 -0.045732 -0.086235 -0.100680 -0.049399 -0.026388 -0.094643 0.100905 0.044076 -0.187605 -0.094315 0.003539 -0.202719 +0.096825 -0.052123 0.057933 0.114355 -0.098038 -0.121617 -0.055895 -0.022068 -0.059251 -0.000028 0.053843 0.302609 -0.066475 0.059366 0.163306 0.029775 0.086102 0.037617 -0.004275 0.136346 -0.030689 0.070476 -0.032601 -0.031896 -0.043260 -0.110607 -0.181097 0.120911 0.098080 0.036017 -0.155625 -0.014093 -0.023635 -0.063091 +0.053280 -0.060018 0.037506 0.137972 0.011258 -0.178318 -0.023102 -0.051378 -0.072595 -0.086067 0.000313 0.285580 -0.051029 -0.025127 0.085024 -0.036423 0.014116 0.013590 0.100603 0.056762 -0.064465 -0.011526 0.015876 -0.005954 0.118192 -0.107172 -0.166406 0.124543 0.111421 0.028985 -0.074010 0.076955 -0.032659 0.141702 +0.045574 -0.013216 0.032142 0.093571 0.050167 -0.171049 0.052834 -0.067576 -0.122586 -0.148784 -0.054492 0.096339 -0.018259 -0.062274 -0.040250 -0.143567 -0.086938 0.063209 0.139416 -0.029860 -0.021312 -0.063067 0.038636 0.074870 0.004951 -0.015358 -0.118334 -0.004443 0.136427 0.102426 0.070536 0.141456 -0.079749 0.125498 +0.059666 0.033773 0.011922 0.066781 0.019188 -0.136499 0.012310 -0.053448 -0.112842 -0.162605 -0.033516 -0.083470 0.040366 -0.073418 -0.073634 -0.134124 -0.183406 0.070520 0.140600 -0.024180 0.078113 -0.014717 -0.030918 0.055699 -0.059861 -0.024527 -0.045187 -0.018538 0.147098 0.098916 0.092276 0.126182 -0.051521 0.096536 +0.102008 0.062652 0.002559 0.033904 -0.034709 -0.028794 -0.029963 -0.001155 -0.088109 -0.139233 -0.017772 -0.206193 0.050147 -0.078321 -0.066908 -0.098039 -0.008521 0.078240 0.003116 -0.115075 0.170119 0.063555 0.042319 0.085075 -0.085497 -0.000332 -0.058397 -0.013971 0.095261 -0.001791 0.088311 0.169500 -0.076125 -0.011915 +0.130156 0.030796 -0.028981 0.037504 -0.110897 0.045667 -0.073986 0.097997 -0.071465 -0.114585 0.024864 -0.164295 0.078517 -0.068363 -0.064291 -0.015782 0.086141 -0.030675 -0.057981 -0.071696 0.160759 0.037941 0.106627 -0.011196 0.036540 -0.017581 -0.051521 0.093436 -0.051622 -0.102102 0.046722 0.156601 0.065388 -0.029184 +0.168973 -0.048346 -0.054128 0.028599 -0.159253 0.088824 -0.040072 0.101158 -0.015747 -0.066487 0.069651 -0.136555 0.131030 -0.095612 0.005098 0.051930 0.141634 -0.059902 -0.077737 -0.001406 0.060549 0.016779 0.073755 -0.079590 0.025474 0.002819 -0.008349 0.092361 -0.102785 -0.130624 0.011078 0.134838 0.105198 -0.029608 +0.196868 -0.140552 -0.038053 0.030363 -0.136280 0.109791 0.082851 0.031947 -0.010593 0.024018 0.071666 -0.120218 0.158965 -0.056053 -0.005157 0.089872 0.082277 -0.037538 -0.032307 -0.004000 -0.077070 -0.047653 -0.036306 -0.059558 -0.007532 0.012245 0.064610 0.069522 -0.100870 -0.125037 -0.000483 0.105122 0.004543 -0.031563 +0.220722 -0.189143 -0.019812 0.050177 -0.022114 0.078768 0.141034 -0.059095 -0.020072 0.062754 0.030385 -0.038935 0.084110 -0.009296 0.007037 0.034972 0.032848 -0.022511 0.007807 0.025446 -0.154512 -0.055275 -0.065423 0.057532 0.001583 -0.000069 0.148740 0.038380 -0.084950 -0.055361 -0.005477 0.024714 -0.104505 -0.036786 +0.226640 -0.179498 0.049226 0.043510 0.105148 -0.008538 0.147024 -0.091442 -0.062929 0.109845 0.005074 0.058119 0.017767 0.089994 -0.044924 -0.062390 -0.007394 0.037390 0.010439 -0.015520 -0.064619 0.042369 -0.058993 0.055481 -0.000104 0.024385 0.166181 0.000132 -0.087429 0.021365 -0.001406 -0.118401 -0.061089 0.025621 +0.236683 -0.154942 0.112382 0.048015 0.188712 -0.046365 0.145337 -0.144361 -0.102570 0.165949 -0.050088 0.165649 -0.012631 0.142407 -0.082270 -0.087023 0.021488 0.106059 -0.048916 -0.157005 0.118604 0.107512 -0.049746 -0.120962 0.092471 0.115214 0.092679 -0.156215 -0.070360 0.083441 -0.097703 -0.215489 -0.072382 0.027100 +0.098748 -0.110249 0.040632 0.106294 0.034691 0.030852 -0.096378 -0.114844 0.076385 0.054995 -0.090801 -0.147677 0.060390 0.097064 -0.014503 -0.075035 -0.111119 -0.058225 -0.072715 0.091030 0.140176 -0.115472 -0.124135 0.002804 -0.034399 0.069021 -0.071552 0.126436 0.208688 -0.064774 0.167890 0.023198 0.065838 -0.115322 +0.045293 -0.089374 0.018089 0.085862 0.012661 -0.008385 -0.067383 -0.079743 -0.026056 0.045936 -0.103235 -0.087935 0.099554 0.036145 -0.034997 -0.024818 -0.088738 0.005542 -0.088960 0.117580 0.051157 -0.047818 -0.031283 0.050240 -0.019133 0.069263 -0.073513 0.173658 0.080920 -0.038285 0.140359 -0.084856 0.069031 -0.038620 +-0.004362 -0.070045 -0.005441 0.028721 -0.035581 0.008714 -0.023807 -0.055672 -0.056772 0.019390 -0.051096 -0.030542 0.150701 -0.048870 -0.050577 0.013535 -0.059832 0.055515 -0.059955 0.062922 0.041041 0.043294 -0.006914 0.139734 -0.004182 0.051132 -0.044750 0.176739 0.008876 -0.029887 0.077004 -0.117767 0.056034 -0.030393 +-0.046908 -0.055997 -0.030801 -0.012931 -0.095239 0.007226 0.007382 -0.049966 -0.065128 -0.036849 -0.026556 0.024951 0.158839 -0.114967 -0.061207 0.047650 -0.045883 0.050290 0.011314 0.022440 -0.012041 0.017932 0.042840 0.074523 0.063977 0.076758 -0.024231 0.082162 -0.002699 -0.024259 0.019286 -0.035404 0.016136 -0.056954 +-0.084798 -0.042180 -0.051749 -0.022690 -0.163003 -0.027359 0.032238 -0.030906 -0.064720 -0.018269 -0.007672 0.068355 0.116840 -0.135774 -0.081552 0.048596 -0.080784 0.017814 0.146383 0.045115 -0.164446 -0.039490 0.025936 0.042829 0.216153 0.010996 0.006383 0.024871 0.002893 -0.034911 -0.009591 0.024318 -0.029688 -0.025116 +-0.106381 0.037472 -0.062633 -0.029746 -0.165792 -0.010239 0.012509 -0.033520 0.075020 0.048760 0.008410 0.182188 0.245250 0.004609 -0.187742 -0.114282 -0.018821 0.047174 0.096399 0.074864 -0.071890 0.002693 0.007320 0.000897 0.070591 0.012206 -0.053249 -0.072801 0.098886 -0.111274 0.027638 0.030143 0.068139 0.024639 +-0.081730 0.078091 -0.032084 -0.016937 -0.094799 -0.034978 -0.035412 -0.016776 0.073337 0.010988 -0.014905 0.221079 0.199761 -0.067149 -0.096254 -0.041963 0.032786 0.009098 0.047313 -0.051221 -0.021669 0.051603 0.007726 -0.033954 -0.118397 0.100014 -0.080501 -0.162248 0.076284 -0.144372 0.005300 0.030886 0.089261 -0.018362 +-0.032591 0.093392 0.005011 0.033984 -0.033653 -0.056018 -0.045205 -0.034382 0.054241 0.038895 -0.028006 0.147818 0.118347 -0.066122 -0.022476 0.025348 -0.024972 -0.006291 0.042302 -0.124172 0.007567 0.044630 0.010710 0.049093 -0.093271 0.092758 -0.055927 -0.139825 0.084283 -0.141690 0.001749 -0.018718 0.034520 -0.013745 +0.025131 0.111171 0.052338 0.093959 0.036120 -0.076090 -0.055111 -0.055018 0.028419 0.039071 -0.021446 0.070711 -0.045120 0.015776 0.119003 0.157191 -0.056194 -0.037864 -0.019407 -0.101495 -0.025226 -0.020203 0.081456 0.053677 0.018315 0.139230 -0.090725 -0.024605 0.076010 -0.142354 0.011727 -0.028982 0.009696 0.010824 +0.086343 0.128544 0.089920 0.151910 0.118411 -0.058267 -0.085331 -0.086356 0.086411 0.023158 -0.022226 -0.036163 -0.177136 0.077261 0.277540 0.318083 -0.140120 -0.082366 -0.088998 -0.072522 -0.066982 0.005449 0.106803 0.086831 0.077782 0.142782 -0.071544 0.132130 0.111582 -0.160749 0.004996 0.042392 -0.012883 0.064412 +-0.061540 0.002620 -0.073689 0.003550 -0.071570 -0.007284 0.013967 -0.001633 -0.094799 -0.008264 -0.030895 0.022099 0.055730 0.034688 -0.025540 -0.038442 -0.002687 -0.049120 0.053353 0.026489 0.022921 0.048577 -0.071688 0.080905 0.064980 0.013782 -0.014355 -0.070959 -0.107091 0.226291 0.009386 0.025020 -0.005604 -0.092437 +-0.083267 -0.013381 -0.104616 -0.054605 -0.053350 -0.040950 0.035114 0.002258 -0.090956 -0.033881 -0.040826 0.018097 0.028479 0.074550 0.001071 0.021358 0.041581 -0.040821 0.048402 0.008007 0.052241 0.038045 -0.031619 0.029420 0.021501 0.017835 -0.011740 -0.040020 -0.113478 0.098608 -0.030604 0.032750 0.004352 -0.062761 +-0.112570 -0.029556 -0.131694 -0.107775 -0.048902 -0.072433 0.059086 0.003800 -0.085443 -0.052929 -0.057306 0.008400 0.005223 0.134826 0.035720 0.064559 0.065656 -0.055342 0.042012 0.015993 0.045317 0.026565 0.036061 -0.016830 -0.006164 0.013784 -0.005233 0.023644 -0.106323 0.001697 -0.058936 0.048287 0.020797 -0.018860 +-0.138208 -0.042880 -0.154716 -0.161145 -0.036682 -0.087614 0.078138 -0.004009 -0.085960 -0.078308 -0.075158 -0.013667 -0.009818 0.193081 0.069946 0.112698 0.091929 -0.063611 0.052582 0.024224 0.037179 0.031363 0.096072 -0.069509 -0.079675 0.025210 -0.001654 0.058541 -0.103434 -0.086341 -0.084715 0.091389 0.038254 0.015236 +-0.071614 -0.025433 -0.079555 -0.044231 -0.056001 0.003353 0.020448 0.039313 -0.034449 0.021201 -0.079939 0.028644 -0.024787 0.188439 0.060152 0.035784 0.042994 0.023862 -0.002200 -0.094819 -0.024939 0.021039 0.009160 -0.055080 -0.021112 -0.045149 -0.025621 0.216443 -0.029294 0.072591 -0.079226 -0.017757 0.067523 0.075291 +-0.072195 -0.021031 -0.121170 -0.072247 -0.036905 -0.070614 0.012662 0.040015 -0.043028 0.012293 -0.078126 -0.030670 -0.033902 0.118408 0.040616 0.048834 0.050552 0.038276 0.008483 -0.058060 -0.034078 -0.041976 -0.009228 -0.045368 -0.013261 -0.068158 0.022561 0.132560 0.004265 -0.025965 -0.059467 -0.019725 0.063179 0.097074 +-0.083844 -0.027702 -0.148124 -0.094158 -0.023167 -0.103209 0.009646 0.023882 -0.042179 0.000862 -0.043166 -0.071528 -0.042289 0.065372 0.035839 0.017436 0.064917 0.010734 0.049860 -0.058510 -0.037633 -0.085134 -0.033890 -0.026309 -0.004119 -0.070958 0.080402 -0.027002 0.048232 -0.088265 -0.053340 0.014549 0.001863 0.085118 +-0.077701 -0.032876 -0.116524 -0.069424 -0.039070 -0.071006 0.000686 0.000032 -0.060440 -0.009999 -0.033027 -0.093775 -0.041865 0.049000 0.019074 0.068912 0.042780 0.002562 0.084029 -0.024194 0.004517 -0.150073 -0.009540 -0.075583 0.001970 -0.012793 0.069308 -0.097943 0.026051 -0.040273 -0.046429 -0.037232 -0.075387 0.056425 +-0.073314 -0.025474 -0.086713 -0.034135 -0.056786 -0.033425 -0.010800 -0.006306 -0.083626 -0.019529 -0.023848 -0.103377 -0.072124 0.027925 0.038858 0.096703 0.015690 0.004385 0.117400 -0.019385 0.068925 -0.151549 0.006375 -0.118295 0.070831 0.037136 0.042043 -0.099400 -0.017748 0.020165 -0.062059 -0.092214 -0.152389 0.036151 +0.044589 -0.132278 -0.016993 0.083882 0.043778 -0.034594 -0.072011 0.039110 -0.046069 -0.040587 0.123917 -0.047575 -0.122385 -0.035400 -0.024195 -0.012518 0.013652 0.031937 0.019659 -0.001715 0.023088 -0.000309 -0.031436 0.022571 0.019611 -0.006564 0.012784 0.083317 -0.104572 0.062104 0.000647 -0.056669 0.044672 0.004338 +0.016329 -0.109007 -0.005045 0.067630 0.019108 -0.002645 -0.071902 0.025076 0.007237 -0.051092 0.091200 -0.100586 -0.101496 -0.065336 -0.015376 0.013166 0.008475 0.063623 0.047215 0.020495 -0.013691 0.030534 0.016318 -0.010397 -0.023315 0.035663 -0.023907 0.042304 -0.100402 0.062642 -0.013752 0.012255 0.032336 0.012548 +0.005789 -0.090540 0.006017 0.048376 -0.000562 -0.003770 -0.064679 0.019118 0.018765 -0.056858 0.072645 -0.105570 -0.099008 -0.063197 -0.036400 0.020176 0.006068 0.073862 0.022493 -0.014200 -0.022956 0.011319 0.028866 -0.059130 0.024068 0.043375 -0.037957 0.009386 -0.070164 0.052847 -0.054076 0.043887 0.014360 -0.001251 +0.001863 -0.067279 -0.004424 0.022537 -0.021339 0.004205 -0.062496 0.031100 0.053349 -0.011934 0.065752 -0.132376 -0.118604 -0.084354 0.018198 0.004240 -0.004340 0.003937 0.017652 -0.050848 0.024164 -0.013728 -0.034087 -0.019119 0.077051 0.006899 0.013968 -0.043247 -0.030695 0.066883 -0.075176 -0.002876 0.013993 -0.016796 +0.005001 -0.090158 -0.011976 0.055472 -0.011104 -0.019645 -0.061557 0.044266 0.027270 -0.030345 0.068012 -0.132701 -0.097672 -0.062167 -0.026502 -0.015816 -0.002765 0.014242 0.048233 0.014931 0.013361 0.021076 -0.002662 -0.047362 0.074697 -0.011056 0.032939 0.005948 -0.057100 0.111103 -0.023048 -0.033487 -0.004465 0.045128 +0.012182 -0.107450 -0.027021 0.065245 0.008961 -0.027772 -0.074458 0.050282 0.025229 -0.041151 0.086397 -0.119923 -0.099702 -0.055513 -0.011844 -0.012761 -0.000561 0.025024 0.077500 0.042190 0.004065 0.022608 -0.020626 -0.014056 0.026667 -0.025100 0.039847 0.066569 -0.072695 0.106463 0.007401 -0.072767 0.005736 0.071139 +-0.009462 0.065949 -0.034941 0.008894 -0.064655 -0.020166 -0.060698 0.028627 0.066320 0.002801 0.040050 0.031191 -0.045838 0.048249 0.022311 -0.088733 0.012498 0.012592 -0.012528 -0.038889 0.028963 -0.007368 -0.006653 0.082948 -0.006713 0.005645 -0.025498 -0.054304 -0.022462 0.175263 -0.039024 -0.042552 -0.094353 -0.013449 +0.000399 0.075432 -0.010525 0.041532 -0.020281 -0.016042 -0.094246 0.065468 0.057754 -0.013075 0.035003 0.037001 -0.063322 0.051499 0.004328 -0.061380 -0.015256 0.001025 -0.051518 0.003395 -0.032991 0.024094 0.008757 0.054130 -0.053594 0.010905 -0.022832 -0.025114 -0.048340 0.149929 -0.021867 0.081009 -0.007931 -0.009067 +0.011378 0.085467 -0.017111 0.041300 -0.001692 -0.039680 -0.104984 0.079709 0.063221 -0.028397 0.048561 0.041353 -0.084814 0.040411 0.000268 -0.038789 -0.000559 -0.008586 -0.044596 0.040237 -0.063474 -0.003204 -0.031149 0.016331 -0.050858 0.018453 -0.008099 -0.080392 -0.015774 0.091864 -0.016377 0.134277 0.049921 -0.027301 +0.029766 0.102153 -0.038143 0.053924 0.038638 -0.061103 -0.101860 0.090831 0.056649 -0.017724 0.060045 0.040849 -0.108462 0.025297 0.013784 -0.048798 0.017389 -0.036169 -0.049864 0.021916 -0.066484 0.016243 -0.106255 -0.005066 -0.033200 -0.008221 0.050207 -0.137478 0.022810 0.034341 -0.021252 0.120671 0.042481 -0.025859 +0.006889 0.087347 -0.040353 0.029840 -0.010245 -0.040820 -0.091202 0.072685 0.079209 -0.016224 0.043485 -0.001910 -0.084857 0.044870 -0.001342 -0.071705 -0.002282 -0.026485 -0.039688 0.033741 -0.055799 -0.013397 -0.029281 0.000374 -0.037317 -0.004296 0.042230 -0.104897 0.024080 0.125291 0.011644 0.079126 -0.013272 0.018850 +-0.000936 0.077182 -0.035678 0.029087 -0.033747 -0.023682 -0.089809 0.060071 0.081219 -0.000659 0.033152 -0.007048 -0.054525 0.054060 -0.010472 -0.078847 -0.000530 -0.009111 -0.033111 0.004942 -0.009483 0.002476 0.026701 0.054112 -0.050766 -0.014615 0.013950 -0.054182 -0.017408 0.176648 0.019946 -0.001332 -0.069141 0.058993 +-0.053340 -0.049736 0.202485 -0.040699 0.016891 0.098603 -0.079165 0.012530 -0.068702 0.013827 -0.018413 0.064039 -0.096530 -0.107456 -0.034620 0.115038 0.176489 0.048911 0.043125 -0.004140 0.021027 -0.096280 0.063451 0.033838 -0.029605 0.024958 -0.044214 -0.018466 -0.082116 -0.029533 0.007344 -0.061482 0.038981 -0.084020 +-0.084313 -0.038019 0.077710 -0.058798 0.076335 0.124114 -0.036329 -0.056135 -0.011941 0.019801 -0.032605 0.049799 -0.014743 -0.022984 -0.023983 0.002739 0.115499 0.010250 -0.071667 0.052221 0.028701 -0.018035 0.046885 0.065758 -0.088996 0.058902 0.045509 0.021842 0.012293 -0.058012 -0.054652 -0.028210 -0.045572 0.005237 +-0.092694 -0.031386 -0.029516 -0.066011 0.056512 0.140318 0.017759 -0.055408 0.042409 -0.001841 -0.047881 0.006271 -0.044880 0.010562 -0.008572 -0.032142 0.031237 0.011784 -0.071950 -0.017154 0.021388 0.094393 -0.059446 -0.036018 -0.074495 0.032641 0.092606 0.062712 0.134488 -0.112228 -0.109084 0.090907 -0.032517 0.032689 +-0.086068 -0.007082 -0.045041 -0.060765 0.055270 0.132259 0.009008 -0.042025 0.050070 -0.002958 -0.051816 0.001503 -0.066612 -0.017554 -0.020320 -0.047269 0.007336 0.021029 -0.065278 0.045943 0.031788 0.044150 -0.060233 -0.015205 -0.047170 0.032557 0.110315 0.067668 0.142436 -0.112995 -0.095937 0.043696 -0.053263 0.018166 +-0.089411 0.023741 -0.038912 -0.067964 0.042282 0.140245 0.010622 -0.036806 0.040610 0.006060 -0.017474 0.000163 -0.063926 0.009072 -0.059385 -0.064253 -0.040611 0.016892 -0.098455 0.064721 0.042317 0.071934 -0.068174 -0.023171 -0.006137 0.021292 0.136552 0.086574 0.159669 -0.085905 -0.090037 0.025543 -0.060574 -0.002428 +-0.078575 0.034575 0.031263 -0.073552 0.040647 0.136747 -0.043737 -0.008796 0.032331 0.016926 -0.029196 0.043721 -0.033823 -0.069883 -0.054957 0.000382 0.001785 -0.066324 -0.031587 0.075610 0.002026 0.123617 -0.016946 -0.073108 0.082295 -0.003377 0.160760 0.045913 0.138259 -0.012841 -0.021037 0.019773 -0.081271 0.003220 +-0.033366 0.059208 0.160210 -0.064990 0.028624 0.104300 -0.099598 0.045261 -0.039277 0.065556 -0.102912 0.108074 -0.081503 -0.190293 -0.052187 0.075107 0.008671 -0.121671 0.069010 0.122685 -0.035632 -0.012154 0.063158 -0.139158 0.053250 0.013035 0.078006 -0.006941 0.005533 0.101138 0.135668 0.005174 -0.004429 -0.021124 +-0.092656 0.031357 0.103505 -0.059111 0.068764 0.010312 0.008929 0.034866 0.057992 0.068053 0.014425 0.007778 0.041020 -0.040683 -0.027837 -0.022634 -0.126523 -0.071192 0.073877 0.037044 -0.024998 0.031381 0.000446 -0.063882 0.075465 -0.089846 -0.003293 -0.014744 -0.039966 0.049482 0.125205 -0.021707 -0.015263 0.035730 +-0.111708 0.016302 0.021802 -0.017327 0.098757 -0.032632 0.102916 -0.004106 0.112659 0.043944 0.086722 -0.075135 0.053748 0.008377 0.026036 -0.051027 -0.181615 0.007593 -0.029718 -0.022786 -0.013286 0.004632 0.013051 -0.001664 0.043884 -0.080356 -0.074392 -0.041220 -0.096235 -0.001700 0.105291 -0.079759 -0.034690 -0.007809 +-0.106284 -0.022433 0.016803 -0.009022 0.113956 -0.059454 0.115911 -0.012451 0.125340 0.015307 0.082184 -0.057654 0.037795 0.019407 0.065630 -0.026223 -0.104086 0.015953 -0.052260 -0.022874 -0.001840 -0.000797 -0.004680 0.054162 0.031667 -0.086636 -0.106973 -0.052172 -0.115387 -0.039377 0.098135 -0.063370 -0.010368 -0.058260 +-0.105834 -0.044185 0.028207 -0.010833 0.109847 -0.041639 0.113964 -0.035423 0.117943 0.018785 0.073258 -0.043540 0.048715 0.037758 0.075421 -0.003877 -0.043429 0.013819 -0.039051 -0.084951 -0.018739 0.005618 -0.000400 0.028961 0.006799 -0.081430 -0.141147 -0.095855 -0.105823 -0.040548 0.071096 -0.022040 -0.010334 -0.072087 +-0.085770 -0.066339 0.119689 -0.034493 0.098418 0.002001 0.025266 -0.023246 0.059661 0.027629 0.052453 0.022351 0.015313 -0.007107 -0.005840 0.096765 0.062508 -0.012640 -0.032725 -0.080090 -0.027756 -0.041996 0.055252 0.063300 -0.038983 -0.076443 -0.130005 -0.083137 -0.110099 -0.085295 0.021676 -0.004858 0.062427 -0.049960 +-0.063490 -0.034197 0.223953 -0.071609 0.017273 0.072534 -0.070046 0.008472 -0.059151 0.024538 -0.057458 0.054908 -0.069500 -0.108298 -0.024305 0.086168 0.173404 0.023995 0.062833 0.058041 0.036625 -0.084243 -0.007661 0.049316 -0.069261 0.031241 -0.034048 -0.059035 -0.063512 -0.030367 -0.002864 -0.044970 0.061520 -0.067669 +-0.080995 -0.029362 -0.020969 -0.037152 0.055714 0.092056 0.009933 -0.025303 0.020523 -0.004640 -0.020295 -0.009164 -0.005931 0.018848 0.033915 -0.030364 0.045067 0.004015 0.011173 -0.058507 0.056901 -0.042073 -0.006012 0.046935 -0.107241 0.032777 0.116424 0.038938 0.083070 0.044785 -0.024341 -0.040868 -0.054497 0.021228 +-0.079570 -0.003619 -0.038468 -0.043009 0.061929 0.088254 0.002999 -0.017741 0.034379 -0.004900 -0.032478 -0.019353 -0.018212 -0.005055 0.014637 -0.048472 -0.001520 0.022877 0.006651 -0.017392 0.069312 -0.058844 -0.004646 0.065142 -0.096265 0.026598 0.135522 0.071861 0.091550 0.032257 -0.016765 -0.075337 -0.064651 0.050908 +-0.077037 0.036024 -0.029906 -0.041175 0.045056 0.108172 0.001799 -0.013867 0.031473 0.010155 -0.003491 -0.014995 -0.021891 0.005419 -0.006514 -0.067131 -0.050711 0.002908 -0.017700 0.003424 0.063512 -0.037825 -0.008255 0.061508 -0.030670 0.015575 0.161325 0.090053 0.117788 0.091435 -0.010989 -0.096824 -0.085735 0.003260 +-0.051962 0.043127 0.185753 -0.068488 0.030906 0.083935 -0.070252 0.031192 -0.032752 0.081860 -0.058415 0.100433 -0.075819 -0.159865 -0.059411 0.067034 0.026048 -0.117863 0.048451 0.078422 -0.022589 0.005932 0.109565 -0.086305 0.028208 0.027111 0.068306 -0.018619 -0.000395 0.065584 0.129299 -0.018649 -0.057046 -0.000423 +-0.110771 0.026821 0.039896 -0.026400 0.073464 0.011366 0.088839 0.010905 0.059433 0.027762 0.038964 -0.069547 0.034358 0.017245 0.035428 -0.063296 -0.129262 0.026781 -0.092055 0.071498 -0.050266 0.045878 -0.036457 -0.040249 0.060855 -0.044906 -0.090430 -0.018843 -0.111822 -0.025148 0.069191 -0.000310 -0.018828 -0.067576 +-0.109310 -0.015148 0.033856 -0.022173 0.084027 -0.011325 0.100709 0.004099 0.070556 0.012019 0.035921 -0.046262 0.047837 0.012906 0.059339 -0.023335 -0.082080 0.034241 -0.099980 0.038508 -0.057517 0.048531 -0.049704 -0.033707 0.035725 -0.049554 -0.119832 -0.033233 -0.116399 -0.076705 0.057450 0.017861 0.007758 -0.058416 +-0.105002 -0.041286 0.052806 -0.020899 0.081333 0.007181 0.095687 -0.011183 0.063719 0.009967 0.029662 -0.037522 0.062980 0.038468 0.065127 -0.003635 -0.032995 0.016733 -0.100860 -0.006462 -0.072928 0.073195 -0.048581 -0.059580 0.018777 -0.048728 -0.138328 -0.072245 -0.108275 -0.063238 0.030578 0.066053 0.024802 -0.084883 +# The variances of the components (eigenvalues) of identity or combined identity and expression model +1 +34 +6 +826.213804 695.783596 380.584790 282.861398 209.814481 184.418561 113.076307 104.852653 81.857546 77.095662 71.081802 55.760367 49.883312 39.122009 37.668889 32.916377 31.165932 26.644275 24.233150 21.357573 17.029065 15.432317 13.812689 12.440567 10.213426 9.316734 5.327325 2.526152 1.659451 1.123615 1.015840 0.816193 0.718969 0.582660 diff --git a/lib/local/FaceAnalyser/AU_predictors/main_dynamic_svms.txt b/lib/local/FaceAnalyser/AU_predictors/main_dynamic_svms.txt new file mode 100644 index 0000000..49476e2 --- /dev/null +++ b/lib/local/FaceAnalyser/AU_predictors/main_dynamic_svms.txt @@ -0,0 +1,3 @@ +AUPredictor AU_all_best.txt +PDM In-the-wild_aligned_PDM_68.txt +Triangulation tris_68_full.txt \ No newline at end of file diff --git a/lib/local/FaceAnalyser/AU_predictors/main_static_svms.txt b/lib/local/FaceAnalyser/AU_predictors/main_static_svms.txt new file mode 100644 index 0000000..0ef644a --- /dev/null +++ b/lib/local/FaceAnalyser/AU_predictors/main_static_svms.txt @@ -0,0 +1,3 @@ +AUPredictor AU_all_static.txt +PDM In-the-wild_aligned_PDM_68.txt +Triangulation tris_68_full.txt \ No newline at end of file diff --git a/lib/local/FaceAnalyser/AU_predictors/tris_68_full.txt b/lib/local/FaceAnalyser/AU_predictors/tris_68_full.txt new file mode 100644 index 0000000..25ee5c0 --- /dev/null +++ b/lib/local/FaceAnalyser/AU_predictors/tris_68_full.txt @@ -0,0 +1,114 @@ +111 +3 +4 +58 67 59 +60 49 48 +58 59 6 +34 52 35 +44 45 25 +39 40 29 +37 18 36 +27 42 22 +23 44 24 +41 36 1 +50 62 51 +56 65 66 +57 58 7 +64 53 63 +28 27 39 +52 34 51 +54 14 35 +29 42 28 +19 20 24 +35 15 46 +37 19 18 +36 0 1 +18 17 36 +37 20 19 +38 20 37 +21 20 38 +21 38 39 +24 44 25 +30 34 35 +21 39 27 +28 42 27 +39 29 28 +29 30 35 +31 30 29 +30 33 34 +31 29 40 +36 17 0 +41 31 40 +31 32 30 +31 41 1 +49 31 48 +48 2 3 +67 60 59 +4 48 3 +5 48 4 +6 59 5 +59 48 5 +60 48 59 +7 58 6 +61 49 60 +58 66 67 +31 2 48 +31 50 32 +1 2 31 +61 50 49 +52 62 63 +50 31 49 +34 33 51 +51 62 52 +32 50 51 +50 61 62 +63 53 52 +54 55 11 +57 8 9 +66 58 57 +8 57 7 +56 57 9 +66 57 56 +10 56 9 +55 56 10 +53 54 35 +53 35 52 +12 54 11 +55 10 11 +65 56 55 +64 55 54 +65 55 64 +54 53 64 +12 13 54 +14 54 13 +15 35 14 +47 35 46 +33 32 51 +30 32 33 +29 35 47 +15 45 46 +22 21 27 +20 21 23 +43 23 22 +29 47 42 +23 21 22 +24 20 23 +22 42 43 +23 43 44 +45 16 26 +15 16 45 +25 45 26 +41 36 37 +40 41 37 +38 40 37 +39 40 38 +47 42 43 +46 47 43 +46 43 44 +45 46 44 +67 60 61 +66 67 61 +62 66 61 +65 66 62 +63 65 62 +64 65 63 \ No newline at end of file diff --git a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj index 8ac84ae..e5d0637 100644 --- a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj +++ b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj @@ -94,7 +94,7 @@ Level3 Disabled false - ./include;$(SolutionDir)lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + ./include;%(AdditionalIncludeDirectories) StreamingSIMDExtensions2 true @@ -113,9 +113,10 @@ Level3 Disabled false - ./include;$(SolutionDir)lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + ./include;%(AdditionalIncludeDirectories) AdvancedVectorExtensions true + WIN64;_DEBUG;_LIB;EIGEN_MPL2_ONLY;%(PreprocessorDefinitions) true @@ -135,7 +136,7 @@ true - ./include;$(SolutionDir)lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + ./include;%(AdditionalIncludeDirectories) StreamingSIMDExtensions2 true @@ -160,9 +161,10 @@ true - ./include;$(SolutionDir)lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + ./include;%(AdditionalIncludeDirectories) AdvancedVectorExtensions true + WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions) true @@ -181,23 +183,24 @@ {b47a5f12-2567-44e9-ae49-35763ec82149} - - {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} - - + + + + CppCode - + + diff --git a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters index 3edc5a6..65db052 100644 --- a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters +++ b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters @@ -33,7 +33,13 @@ Header Files - + + Header Files + + + Header Files + + Header Files @@ -56,7 +62,13 @@ Source Files - + + Source Files + + + Source Files + + Source Files diff --git a/lib/local/FaceAnalyser/include/FaceAnalyser.h b/lib/local/FaceAnalyser/include/FaceAnalyser.h index 1447ee2..ca155b4 100644 --- a/lib/local/FaceAnalyser/include/FaceAnalyser.h +++ b/lib/local/FaceAnalyser/include/FaceAnalyser.h @@ -35,17 +35,21 @@ #ifndef __FACEANALYSER_h_ #define __FACEANALYSER_h_ +// STL includes +#include +#include +#include + +// OpenCV includes +#include + +// Local includes #include "SVR_dynamic_lin_regressors.h" #include "SVR_static_lin_regressors.h" #include "SVM_static_lin.h" #include "SVM_dynamic_lin.h" - -#include -#include - -#include - -#include "LandmarkCoreIncludes.h" +#include "PDM.h" +#include "FaceAnalyserParameters.h" namespace FaceAnalysis { @@ -57,14 +61,10 @@ public: enum RegressorType{ SVR_appearance_static_linear = 0, SVR_appearance_dynamic_linear = 1, SVR_dynamic_geom_linear = 2, SVR_combined_linear = 3, SVM_linear_stat = 4, SVM_linear_dyn = 5, SVR_linear_static_seg = 6, SVR_linear_dynamic_seg =7}; - // Constructor from a model file (or a default one if not provided - // TODO scale width and height should be read in as part of the model as opposed to being here? - FaceAnalyser(vector orientation_bins = vector(), double scale = 0.7, int width = 112, int height = 112, std::string au_location = "AU_predictors/AU_all_best.txt", std::string tri_location = "model/tris_68_full.txt"); + // Constructor for FaceAnalyser using the parameters structure + FaceAnalyser(const FaceAnalysis::FaceAnalyserParameters& face_analyser_params); - void AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, double timestamp_seconds, bool online = false, bool visualise = true); - - // If the features are extracted manually (shouldn't really be used) - void PredictAUs(const cv::Mat_& hog_features, const cv::Mat_& geom_features, const LandmarkDetector::CLNF& clnf_model, bool online); + void AddNextFrame(const cv::Mat& frame, const cv::Mat_& detected_landmarks, bool success, double timestamp_seconds, bool online = false, bool visualise = true); cv::Mat GetLatestHOGDescriptorVisualisation(); @@ -77,7 +77,7 @@ public: // A standalone call for predicting AUs from a static image, the first element in the pair represents occurence the second intensity // This call is useful for detecting action units in images - std::pair>, std::vector>> PredictStaticAUs(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, bool visualise = true); + std::pair>, std::vector>> PredictStaticAUs(const cv::Mat& frame, const cv::Mat_& detected_landmarks, bool visualise = true); void Reset(); @@ -96,17 +96,22 @@ public: // Identify if models are static or dynamic (useful for correction and shifting) std::vector GetDynamicAUClass() const; // Presence - std::vector> GetDynamicAUReg() const; // Intensity + std::vector> GetDynamicAUReg() const; // Intensity - void ExtractAllPredictionsOfflineReg(vector>>& au_predictions, vector& confidences, vector& successes, vector& timestamps, bool dynamic); - void ExtractAllPredictionsOfflineClass(vector>>& au_predictions, vector& confidences, vector& successes, vector& timestamps, bool dynamic); + void ExtractAllPredictionsOfflineReg(std::vector>>& au_predictions, + std::vector& confidences, std::vector& successes, std::vector& timestamps, bool dynamic); + void ExtractAllPredictionsOfflineClass(std::vector>>& au_predictions, + std::vector& confidences, std::vector& successes, std::vector& timestamps, bool dynamic); // Helper function for post-processing AU output files - void FaceAnalyser::PostprocessOutputFile(string output_file, bool dynamic); + void FaceAnalyser::PostprocessOutputFile(std::string output_file); private: + // Point distribution model coddesponding to the current Face Analyser + FaceAnalysis::PDM pdm; + // Where the predictions are kept std::vector> AU_predictions_reg; std::vector> AU_predictions_class; @@ -114,18 +119,21 @@ private: std::vector> AU_predictions_combined; // Keeping track of AU predictions over time (useful for post-processing) - vector timestamps; - std::map> AU_predictions_reg_all_hist; - std::map> AU_predictions_class_all_hist; - std::vector confidences; + std::vector timestamps; + std::map> AU_predictions_reg_all_hist; + std::map> AU_predictions_class_all_hist; std::vector valid_preds; int frames_tracking; + // Is the AU model dynamic + bool dynamic; + // Cache of intermediate images cv::Mat aligned_face_for_au; cv::Mat aligned_face_for_output; cv::Mat hog_descriptor_visualisation; + bool out_grayscale; // Private members to be used for predictions // The HOG descriptor of the last frame @@ -139,18 +147,18 @@ private: // Use histograms for quick (but approximate) median computation // Use the same for - vector > hog_desc_hist; + std::vector > hog_desc_hist; // This is not being used at the moment as it is a bit slow - vector > face_image_hist; - vector face_image_hist_sum; + std::vector > face_image_hist; + std::vector face_image_hist_sum; - vector head_orientations; + std::vector head_orientations; int num_bins_hog; double min_val_hog; double max_val_hog; - vector hog_hist_sum; + std::vector hog_hist_sum; int view_used; // The geometry descriptor (rigid followed by non-rigid shape parameters from CLNF) @@ -171,11 +179,13 @@ private: std::vector> PredictCurrentAUsClass(int view); // special step for online (rather than offline AU prediction) - std::vector> CorrectOnlineAUs(std::vector> predictions_orig, int view, bool dyn_shift = false, bool dyn_scale = false, bool update_track = true, bool clip_values = false); + std::vector> CorrectOnlineAUs(std::vector> predictions_orig, int view, bool dyn_shift = false, bool dyn_scale = false, bool update_track = true, bool clip_values = false); + + void Read(std::string model_loc); void ReadAU(std::string au_location); - void ReadRegressor(std::string fname, const vector& au_names); + void ReadRegressor(std::string fname, const std::vector& au_names); // A utility function for keeping track of approximate running medians used for AU and emotion inference using a set of histograms (the histograms are evenly spaced from min_val to max_val) // Descriptor has to be a row vector @@ -193,18 +203,20 @@ private: // The AUs predicted by the model are not always 0 calibrated to a person. That is they don't always predict 0 for a neutral expression // Keeping track of the predictions we can correct for this, by assuming that at least "ratio" of frames are neutral and subtract that value of prediction, only perform the correction after min_frames - void UpdatePredictionTrack(cv::Mat_& prediction_corr_histogram, int& prediction_correction_count, vector& correction, const vector>& predictions, double ratio=0.25, int num_bins = 200, double min_val = -3, double max_val = 5, int min_frames = 10); - void GetSampleHist(cv::Mat_& prediction_corr_histogram, int prediction_correction_count, vector& sample, double ratio, int num_bins = 200, double min_val = 0, double max_val = 5); + void UpdatePredictionTrack(cv::Mat_& prediction_corr_histogram, int& prediction_correction_count, + std::vector& correction, const std::vector>& predictions, double ratio=0.25, int num_bins = 200, double min_val = -3, double max_val = 5, int min_frames = 10); + void GetSampleHist(cv::Mat_& prediction_corr_histogram, int prediction_correction_count, + std::vector& sample, double ratio, int num_bins = 200, double min_val = 0, double max_val = 5); void PostprocessPredictions(); - vector> au_prediction_correction_histogram; - vector au_prediction_correction_count; + std::vector> au_prediction_correction_histogram; + std::vector au_prediction_correction_count; // Some dynamic scaling (the logic is that before the extreme versions of expression or emotion are shown, // it is hard to tell the boundaries, this allows us to scale the model to the most extreme seen) // They have to be view specific - vector> dyn_scaling; + std::vector> dyn_scaling; // Keeping track of predictions for summary stats cv::Mat_ AU_prediction_track; @@ -214,15 +226,19 @@ private: // Used for face alignment cv::Mat_ triangulation; - double align_scale; - int align_width; - int align_height; + double align_scale_au; + int align_width_au; + int align_height_au; + + double align_scale_out; + int align_width_out; + int align_height_out; // Useful placeholder for renormalizing the initial frames of shorter videos int max_init_frames = 3000; - vector> hog_desc_frames_init; - vector> geom_descriptor_frames_init; - vector views; + std::vector> hog_desc_frames_init; + std::vector> geom_descriptor_frames_init; + std::vector views; bool postprocessed = false; int frames_tracking_succ = 0; diff --git a/lib/local/FaceAnalyser/include/FaceAnalyserParameters.h b/lib/local/FaceAnalyser/include/FaceAnalyserParameters.h new file mode 100644 index 0000000..5473225 --- /dev/null +++ b/lib/local/FaceAnalyser/include/FaceAnalyserParameters.h @@ -0,0 +1,100 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +// Parameters of the Face analyser +#ifndef __FACE_ANALYSER_PARAM_H +#define __FACE_ANALYSER_PARAM_H + +#include +#include + +// Boost includes +#include +#include + +using namespace std; + +namespace FaceAnalysis +{ + +struct FaceAnalyserParameters +{ +public: + // Constructors + FaceAnalyserParameters(); + FaceAnalyserParameters(string root_exe); + FaceAnalyserParameters(vector &arguments); + + // These are the parameters of training and will not change and are fixed + const double sim_scale_au = 0.7; + const int sim_size_au = 112; + + // Should the output aligned faces be grayscale + bool grayscale; + + // Use getters and setters for these as they might need to reload models and make sure the scale and size ratio makes sense + void setAlignedOutput(int output_size, double scale=-1); + // This will also change the model location + void OptimizeForVideos(); + void OptimizeForImages(); + + double getSimScaleOut() const { return sim_scale_out; } + int getSimSizeOut() const { return sim_size_out; } + bool getDynamic() const { return dynamic; } + string getModelLoc() const { return string(model_location); } + vector getOrientationBins() const { return vector(orientation_bins); } + +private: + + void init(); + + // Aligned face output size + double sim_scale_out; + int sim_size_out; + + // Should a video stream be assumed + bool dynamic; + + // Where to load the models from + string model_location; + // The location of the executable + boost::filesystem::path root; + + vector orientation_bins; + +}; + +} + +#endif // __FACE_ANALYSER_PARAM_H diff --git a/lib/local/FaceAnalyser/include/Face_utils.h b/lib/local/FaceAnalyser/include/Face_utils.h index 8660800..51ebf9b 100644 --- a/lib/local/FaceAnalyser/include/Face_utils.h +++ b/lib/local/FaceAnalyser/include/Face_utils.h @@ -35,19 +35,19 @@ #ifndef __FACE_UTILS_h_ #define __FACE_UTILS_h_ -#include - #include #include +#include "PDM.h" + namespace FaceAnalysis { //=========================================================================== // Defining a set of useful utility functions to be used within FaceAnalyser // Aligning a face to a common reference frame - void AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, bool rigid = true, double scale = 0.6, int width = 96, int height = 96); - void AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, const cv::Mat_& triangulation, bool rigid = true, double scale = 0.6, int width = 96, int height = 96); + void AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const cv::Mat_& detected_landmarks, cv::Vec6d params_global, const PDM& pdm, bool rigid = true, double scale = 0.6, int width = 96, int height = 96); + void AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const cv::Mat_& detected_landmarks, cv::Vec6d params_global, const PDM& pdm, const cv::Mat_& triangulation, bool rigid = true, double scale = 0.6, int width = 96, int height = 96); void Extract_FHOG_descriptor(cv::Mat_& descriptor, const cv::Mat& image, int& num_rows, int& num_cols, int cell_size = 8); @@ -57,5 +57,50 @@ namespace FaceAnalysis void ExtractSummaryStatistics(const cv::Mat_& descriptors, cv::Mat_& sum_stats, bool mean, bool stdev, bool max_min); void AddDescriptor(cv::Mat_& descriptors, cv::Mat_ new_descriptor, int curr_frame, int num_frames_to_keep = 120); + //=========================================================================== + // Point set and landmark manipulation functions + //=========================================================================== + // Using Kabsch's algorithm for aligning shapes + //This assumes that align_from and align_to are already mean normalised + cv::Matx22d AlignShapesKabsch2D(const cv::Mat_& align_from, const cv::Mat_& align_to); + + //============================================================================= + // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other + cv::Matx22d AlignShapesWithScale(cv::Mat_& src, cv::Mat_ dst); + + //=========================================================================== + // Visualisation functions + //=========================================================================== + void Project(cv::Mat_& dest, const cv::Mat_& mesh, double fx, double fy, double cx, double cy); + + //=========================================================================== + // Angle representation conversion helpers + //=========================================================================== + cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles); + + // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign + cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix); + + cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler); + + cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle); + + cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle); + + cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix); + + //============================================================================ + // Matrix reading functionality + //============================================================================ + + // Reading a matrix written in a binary format + void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat); + + // Reading in a matrix from a stream + void ReadMat(std::ifstream& stream, cv::Mat& output_matrix); + + // Skipping comments (lines starting with # symbol) + void SkipComments(std::ifstream& stream); + } #endif diff --git a/lib/local/FaceAnalyser/include/PAW.h b/lib/local/FaceAnalyser/include/PAW.h new file mode 100644 index 0000000..64ee14d --- /dev/null +++ b/lib/local/FaceAnalyser/include/PAW.h @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef __PAW_h_ +#define __PAW_h_ + +// OpenCV includes +#include + +namespace FaceAnalysis +{ + //=========================================================================== + /** + A Piece-wise Affine Warp + The ideas for this piece-wise affine triangular warping are taken from the + Active appearance models revisited by Iain Matthews and Simon Baker in IJCV 2004 + This is used for both validation of landmark detection, and for avatar animation + + The code is based on the CLM tracker by Jason Saragih et al. + */ + +class PAW{ +public: + // Number of pixels after the warping to neutral shape + int number_of_pixels; + + // Minimum x coordinate in destination + double min_x; + + // minimum y coordinate in destination + double min_y; + + // Destination points (landmarks to be warped to) + cv::Mat_ destination_landmarks; + + // Destination points (landmarks to be warped from) + cv::Mat_ source_landmarks; + + // Triangulation, each triangle is warped using an affine transform + cv::Mat_ triangulation; + + // Triangle index, indicating which triangle each of destination pixels lies in + cv::Mat_ triangle_id; + + // Indicating if the destination warped pixels is valid (lies within a face) + cv::Mat_ pixel_mask; + + // A number of precomputed coefficients that are helpful for quick warping + + // affine coefficients for all triangles (see Matthews and Baker 2004) + // 6 coefficients for each triangle (are computed from alpha and beta) + // This is computed during each warp based on source landmarks + cv::Mat_ coefficients; + + // matrix of (c,x,y) coeffs for alpha + cv::Mat_ alpha; + + // matrix of (c,x,y) coeffs for alpha + cv::Mat_ beta; + + // x-source of warped points + cv::Mat_ map_x; + + // y-source of warped points + cv::Mat_ map_y; + + // Default constructor + PAW(){;} + + // Construct a warp from a destination shape and triangulation + PAW(const cv::Mat_& destination_shape, const cv::Mat_& triangulation); + + // The final optional argument allows for optimisation if the triangle indices from previous frame are known (for tracking in video) + PAW(const cv::Mat_& destination_shape, const cv::Mat_& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y); + + // Copy constructor + PAW(const PAW& other); + + void Read(std::ifstream &s); + + // The actual warping + void Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_& landmarks_to_warp); + + // Compute coefficients needed for warping + void CalcCoeff(); + + // Perform the actual warping + void WarpRegion(cv::Mat_& map_x, cv::Mat_& map_y); + + inline int NumberOfLandmarks() const {return destination_landmarks.rows/2;} ; + inline int NumberOfTriangles() const {return triangulation.rows;} ; + + // The width and height of the warped image + inline int constWidth() const {return pixel_mask.cols;} + inline int Height() const {return pixel_mask.rows;} + +private: + + // Helper functions for dealing with triangles + static bool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); + static bool pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); + static int findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess = -1); + + }; + //=========================================================================== +} +#endif diff --git a/lib/local/FaceAnalyser/include/PDM.h b/lib/local/FaceAnalyser/include/PDM.h new file mode 100644 index 0000000..bee404e --- /dev/null +++ b/lib/local/FaceAnalyser/include/PDM.h @@ -0,0 +1,105 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef __PDMA_h_ +#define __PDMA_h_ + +// OpenCV includes +#include + +#include +#include +#include + +namespace FaceAnalysis +{ +//=========================================================================== +// A linear 3D Point Distribution Model (constructed using Non-Rigid structure from motion or PCA) +// Only describes the model but does not contain an instance of it (no local or global parameters are stored here) +// Contains the utility functions to help manipulate the model + +class PDM{ + public: + + // The 3D mean shape vector of the PDM [x1,..,xn,y1,...yn,z1,...,zn] + cv::Mat_ mean_shape; + + // Principal components or variation bases of the model, + cv::Mat_ princ_comp; + + // Eigenvalues (variances) corresponding to the bases + cv::Mat_ eigen_values; + + PDM(){;} + + // A copy constructor + PDM(const PDM& other); + + void Read(std::string location); + + // Number of vertices + inline int NumberOfPoints() const {return mean_shape.rows/3;} + + // Listing the number of modes of variation + inline int NumberOfModes() const {return princ_comp.cols;} + + // Compute shape in object space (3D) + void CalcShape3D(cv::Mat_& out_shape, const cv::Mat_& params_local) const; + + // Compute shape in image space (2D) + void CalcShape2D(cv::Mat_& out_shape, const cv::Mat_& params_local, const cv::Vec6d& params_global) const; + + // provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box + void CalcParams(cv::Vec6d& out_params_global, const cv::Rect_& bounding_box, const cv::Mat_& params_local, const cv::Vec3d rotation = cv::Vec3d(0.0)) const; + + // Provided the landmark location compute global and local parameters best fitting it (can provide optional rotation for potentially better results) + void CalcParams(cv::Vec6d& out_params_global, cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation = cv::Vec3d(0.0)) const; + + // provided the model parameters, compute the bounding box of a face + void CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_& params_local) const; + + // Helpers for computing Jacobians, and Jacobians with the weight matrix + void ComputeRigidJacobian(const cv::Mat_& params_local, const cv::Vec6d& params_global, cv::Mat_ &Jacob, const cv::Mat_ W, cv::Mat_ &Jacob_t_w) const; + void ComputeJacobian(const cv::Mat_& params_local, const cv::Vec6d& params_global, cv::Mat_ &Jacobian, const cv::Mat_ W, cv::Mat_ &Jacob_t_w) const; + + // Given the current parameters, and the computed delta_p compute the updated parameters + void UpdateModelParameters(const cv::Mat_& delta_p, cv::Mat_& params_local, cv::Vec6d& params_global) const; + + // Helper utilities + private: + static void Orthonormalise(cv::Matx33d &R); + }; + //=========================================================================== +} +#endif diff --git a/lib/local/FaceAnalyser/include/SVM_dynamic_lin.h b/lib/local/FaceAnalyser/include/SVM_dynamic_lin.h index 39fdd6a..5b80134 100644 --- a/lib/local/FaceAnalyser/include/SVM_dynamic_lin.h +++ b/lib/local/FaceAnalyser/include/SVM_dynamic_lin.h @@ -40,6 +40,7 @@ #include #include +#include #include diff --git a/lib/local/FaceAnalyser/include/SVM_static_lin.h b/lib/local/FaceAnalyser/include/SVM_static_lin.h index ea1b0ed..3d58d2a 100644 --- a/lib/local/FaceAnalyser/include/SVM_static_lin.h +++ b/lib/local/FaceAnalyser/include/SVM_static_lin.h @@ -40,6 +40,7 @@ #include #include +#include #include diff --git a/lib/local/FaceAnalyser/include/SVR_dynamic_lin_regressors.h b/lib/local/FaceAnalyser/include/SVR_dynamic_lin_regressors.h index 6de0bfe..b90b9a3 100644 --- a/lib/local/FaceAnalyser/include/SVR_dynamic_lin_regressors.h +++ b/lib/local/FaceAnalyser/include/SVR_dynamic_lin_regressors.h @@ -40,6 +40,7 @@ #include #include +#include #include diff --git a/lib/local/FaceAnalyser/include/SVR_static_lin_regressors.h b/lib/local/FaceAnalyser/include/SVR_static_lin_regressors.h index 14a6fd6..8f4fc3e 100644 --- a/lib/local/FaceAnalyser/include/SVR_static_lin_regressors.h +++ b/lib/local/FaceAnalyser/include/SVR_static_lin_regressors.h @@ -40,6 +40,7 @@ #include #include +#include #include diff --git a/lib/local/FaceAnalyser/src/FaceAnalyser.cpp b/lib/local/FaceAnalyser/src/FaceAnalyser.cpp index 633eef3..8fbd025 100644 --- a/lib/local/FaceAnalyser/src/FaceAnalyser.cpp +++ b/lib/local/FaceAnalyser/src/FaceAnalyser.cpp @@ -41,6 +41,7 @@ // System includes #include #include +#include #include @@ -51,7 +52,6 @@ #include // Local includes -#include "LandmarkCoreIncludes.h" #include "Face_utils.h" using namespace FaceAnalysis; @@ -59,13 +59,17 @@ using namespace FaceAnalysis; using namespace std; // Constructor from a model file (or a default one if not provided -FaceAnalyser::FaceAnalyser(vector orientation_bins, double scale, int width, int height, std::string au_location, std::string tri_location) +FaceAnalyser::FaceAnalyser(const FaceAnalysis::FaceAnalyserParameters& face_analyser_params) { - this->ReadAU(au_location); + this->Read(face_analyser_params.getModelLoc()); - align_scale = scale; - align_width = width; - align_height = height; + align_scale_out = face_analyser_params.getSimScaleOut(); + align_width_out = face_analyser_params.getSimSizeOut(); + align_height_out = face_analyser_params.getSimSizeOut(); + + align_scale_au = face_analyser_params.sim_scale_au; + align_width_au = face_analyser_params.sim_size_au; + align_height_au = face_analyser_params.sim_size_au; // Initialise the histograms that will represent bins from 0 - 1 (as HoG values are only stored as those) num_bins_hog = 1000; @@ -79,15 +83,20 @@ FaceAnalyser::FaceAnalyser(vector orientation_bins, double scale, int // Keep track for how many frames have been tracked so far frames_tracking = 0; - - if(orientation_bins.empty()) + + // If the model used is dynamic (person callibration and video correction) + dynamic = face_analyser_params.getDynamic(); + + out_grayscale = face_analyser_params.grayscale; + + if(face_analyser_params.getOrientationBins().empty()) { // Just using frontal currently head_orientations.push_back(cv::Vec3d(0,0,0)); } else { - head_orientations = orientation_bins; + head_orientations = face_analyser_params.getOrientationBins(); } hog_hist_sum.resize(head_orientations.size()); face_image_hist_sum.resize(head_orientations.size()); @@ -99,10 +108,6 @@ FaceAnalyser::FaceAnalyser(vector orientation_bins, double scale, int au_prediction_correction_histogram.resize(head_orientations.size()); dyn_scaling.resize(head_orientations.size()); - // The triangulation used for masking out the non-face parts of aligned image - std::ifstream triangulation_file(tri_location); - LandmarkDetector::ReadMat(triangulation_file, triangulation); - } // Utility for getting the names of returned AUs (presence) @@ -243,11 +248,16 @@ int GetViewId(const vector orientations_all, const cv::Vec3d& orienta } -std::pair>, std::vector>> FaceAnalyser::PredictStaticAUs(const cv::Mat& frame, const LandmarkDetector::CLNF& clnf, bool visualise) +std::pair>, std::vector>> FaceAnalyser::PredictStaticAUs(const cv::Mat& frame, const cv::Mat_& detected_landmarks, bool visualise) { + // Extract shape parameters from the detected landmarks + cv::Vec6d params_global; + cv::Mat_ params_local; + pdm.CalcParams(params_global, params_local, detected_landmarks); + // First align the face - AlignFaceMask(aligned_face_for_au, frame, clnf, triangulation, true, 0.7, 112, 112); + AlignFaceMask(aligned_face_for_au, frame, detected_landmarks, params_global, pdm, triangulation, true, 0.7, 112, 112); // Extract HOG descriptor from the frame and convert it to a useable format cv::Mat_ hog_descriptor; @@ -256,14 +266,14 @@ std::pair>, std::vectorhead_orientations, curr_orient); // Geom descriptor and its median - geom_descriptor_frame = clnf.params_local.t(); + geom_descriptor_frame = params_local.t(); // Stack with the actual feature point locations (without mean) - cv::Mat_ locs = clnf.pdm.princ_comp * geom_descriptor_frame.t(); + cv::Mat_ locs = pdm.princ_comp * geom_descriptor_frame.t(); cv::hconcat(locs.t(), geom_descriptor_frame.clone(), geom_descriptor_frame); @@ -296,36 +306,46 @@ std::pair>, std::vector& detected_landmarks, bool success, double timestamp_seconds, bool online, bool visualise) { frames_tracking++; + // Extract shape parameters from the detected landmarks + cv::Vec6d params_global; + cv::Mat_ params_local; + pdm.CalcParams(params_global, params_local, detected_landmarks); + // First align the face if tracking was successfull - if(clnf_model.detection_success) + if(success) { // The aligned face requirement for AUs - AlignFaceMask(aligned_face_for_au, frame, clnf_model, triangulation, true, 0.7, 112, 112); + AlignFaceMask(aligned_face_for_au, frame, detected_landmarks, params_global, pdm, triangulation, true, align_scale_au, align_width_au, align_height_au); // If the output requirement matches use the already computed one, else compute it again - if(align_scale == 0.7 && align_width == 112 && align_height == 112) + if(align_scale_out == align_scale_au && align_width_out == align_width_au && align_height_out == align_height_au) { aligned_face_for_output = aligned_face_for_au.clone(); } else { - AlignFaceMask(aligned_face_for_output, frame, clnf_model, triangulation, true, align_scale, align_width, align_height); + AlignFaceMask(aligned_face_for_output, frame, detected_landmarks, params_global, pdm, triangulation, true, align_scale_out, align_width_out, align_height_out); } } else { - aligned_face_for_output = cv::Mat(align_height, align_width, CV_8UC3); - aligned_face_for_au = cv::Mat(112, 112, CV_8UC3); + aligned_face_for_output = cv::Mat(align_height_out, align_width_out, CV_8UC3); + aligned_face_for_au = cv::Mat(align_height_au, align_width_au, CV_8UC3); aligned_face_for_output.setTo(0); aligned_face_for_au.setTo(0); } + if (aligned_face_for_output.channels() == 3 && out_grayscale) + { + cvtColor(aligned_face_for_output, aligned_face_for_output, CV_BGR2GRAY); + } + // Extract HOG descriptor from the frame and convert it to a useable format cv::Mat_ hog_descriptor; Extract_FHOG_descriptor(hog_descriptor, aligned_face_for_au, this->num_hog_rows, this->num_hog_cols); @@ -333,7 +353,7 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL // Store the descriptor hog_desc_frame = hog_descriptor; - cv::Vec3d curr_orient(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]); + cv::Vec3d curr_orient(params_global[1], params_global[2], params_global[3]); int orientation_to_use = GetViewId(this->head_orientations, curr_orient); // Only update the running median if predictions are not high @@ -365,9 +385,9 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL // } //} - update_median = update_median & clnf_model.detection_success; + update_median = update_median & success; - if (clnf_model.detection_success) + if (success) frames_tracking_succ++; // A small speedup @@ -378,15 +398,15 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL } // Geom descriptor and its median - geom_descriptor_frame = clnf_model.params_local.t(); + geom_descriptor_frame = params_local.t(); - if(!clnf_model.detection_success) + if(!success) { geom_descriptor_frame.setTo(0); } // Stack with the actual feature point locations (without mean) - cv::Mat_ locs = clnf_model.pdm.princ_comp * geom_descriptor_frame.t(); + cv::Mat_ locs = pdm.princ_comp * geom_descriptor_frame.t(); cv::hconcat(locs.t(), geom_descriptor_frame.clone(), geom_descriptor_frame); @@ -413,7 +433,7 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL std::vector> AU_predictions_reg_corrected; if(online) { - AU_predictions_reg_corrected = CorrectOnlineAUs(AU_predictions_reg, orientation_to_use, true, false, clnf_model.detection_success, true); + AU_predictions_reg_corrected = CorrectOnlineAUs(AU_predictions_reg, orientation_to_use, true, false, success, true); } // Add the reg predictions to the historic data @@ -422,7 +442,7 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL // Find the appropriate AU (if not found add it) // Only add if the detection was successful - if(clnf_model.detection_success) + if(success) { AU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(AU_predictions_reg[au].second); } @@ -439,7 +459,7 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL // Find the appropriate AU (if not found add it) // Only add if the detection was successful - if(clnf_model.detection_success) + if(success) { AU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(AU_predictions_class[au].second); } @@ -456,7 +476,7 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL } else { - if (clnf_model.detection_success && frames_tracking_succ - 1 < max_init_frames) + if (success && frames_tracking_succ - 1 < max_init_frames) { hog_desc_frames_init.push_back(hog_descriptor); geom_descriptor_frames_init.push_back(geom_descriptor_frame); @@ -468,14 +488,9 @@ void FaceAnalyser::AddNextFrame(const cv::Mat& frame, const LandmarkDetector::CL view_used = orientation_to_use; - bool success = clnf_model.detection_success; - - confidences.push_back(clnf_model.detection_certainty); valid_preds.push_back(success); timestamps.push_back(timestamp_seconds); - - } void FaceAnalyser::GetGeomDescriptor(cv::Mat_& geom_desc) @@ -483,79 +498,6 @@ void FaceAnalyser::GetGeomDescriptor(cv::Mat_& geom_desc) geom_desc = this->geom_descriptor_frame.clone(); } -void FaceAnalyser::PredictAUs(const cv::Mat_& hog_features, const cv::Mat_& geom_features, const LandmarkDetector::CLNF& clnf_model, bool online) -{ - // Store the descriptor - hog_desc_frame = hog_features.clone(); - this->geom_descriptor_frame = geom_features.clone(); - - cv::Vec3d curr_orient(clnf_model.params_global[1], clnf_model.params_global[2], clnf_model.params_global[3]); - int orientation_to_use = GetViewId(this->head_orientations, curr_orient); - - // Perform AU prediction - AU_predictions_reg = PredictCurrentAUs(orientation_to_use); - - std::vector> AU_predictions_reg_corrected; - if(online) - { - AU_predictions_reg_corrected = CorrectOnlineAUs(AU_predictions_reg, orientation_to_use, true, false, clnf_model.detection_success); - } - - // Add the reg predictions to the historic data - for (size_t au = 0; au < AU_predictions_reg.size(); ++au) - { - - // Find the appropriate AU (if not found add it) - // Only add if the detection was successful - if(clnf_model.detection_success) - { - AU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(AU_predictions_reg[au].second); - } - else - { - AU_predictions_reg_all_hist[AU_predictions_reg[au].first].push_back(0.0); - } - } - - AU_predictions_class = PredictCurrentAUsClass(orientation_to_use); - - for (size_t au = 0; au < AU_predictions_class.size(); ++au) - { - - // Find the appropriate AU (if not found add it) - // Only add if the detection was successful - if(clnf_model.detection_success) - { - AU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(AU_predictions_class[au].second); - } - else - { - AU_predictions_class_all_hist[AU_predictions_class[au].first].push_back(0.0); - } - } - - if(online) - { - AU_predictions_reg = AU_predictions_reg_corrected; - } - - for(size_t i = 0; i < AU_predictions_reg.size(); ++i) - { - AU_predictions_combined.push_back(AU_predictions_reg[i]); - } - for(size_t i = 0; i < AU_predictions_class.size(); ++i) - { - AU_predictions_combined.push_back(AU_predictions_class[i]); - } - - view_used = orientation_to_use; - - bool success = clnf_model.detection_success; - - confidences.push_back(clnf_model.detection_certainty); - valid_preds.push_back(success); -} - // Perform prediction on initial n frames anew as the current neutral face estimate is better now void FaceAnalyser::PostprocessPredictions() { @@ -614,7 +556,6 @@ void FaceAnalyser::ExtractAllPredictionsOfflineReg(vector> aus_valid; vector offsets; - confidences = this->confidences; successes = this->valid_preds; vector dyn_au_names = AU_SVR_dynamic_appearance_lin_regressors.GetAUNames(); @@ -661,7 +602,7 @@ void FaceAnalyser::ExtractAllPredictionsOfflineReg(vectorconfidences; successes = this->valid_preds; } @@ -804,7 +744,6 @@ void FaceAnalyser::Reset() timestamps.clear(); AU_predictions_reg_all_hist.clear(); AU_predictions_class_all_hist.clear(); - confidences.clear(); valid_preds.clear(); // Clean up the postprocessing data as well @@ -1060,10 +999,78 @@ vector> FaceAnalyser::GetCurrentAUsCombined() const return AU_predictions_combined; } +void FaceAnalyser::Read(std::string model_loc) +{ + // Reading in the modules for AU recognition + + cout << "Reading the AU analysis module from: " << model_loc << endl; + + ifstream locations(model_loc.c_str(), ios_base::in); + if (!locations.is_open()) + { + cout << "Couldn't open the model file, aborting" << endl; + return; + } + string line; + + // The other module locations should be defined as relative paths from the main model + boost::filesystem::path root = boost::filesystem::path(model_loc).parent_path(); + + // The main file contains the references to other files + while (!locations.eof()) + { + getline(locations, line); + + stringstream lineStream(line); + + string module; + string location; + + // figure out which module is to be read from which file + lineStream >> module; + + lineStream >> location; + + // remove carriage return at the end for compatibility with unix systems + if (location.size() > 0 && location.at(location.size() - 1) == '\r') + { + location = location.substr(0, location.size() - 1); + } + + // append to root + location = (root / location).string(); + if (module.compare("AUPredictor") == 0) + { + // The AU predictors + cout << "Reading the AU predictors from: " << location; + ReadAU(location); + cout << "... Done" << endl; + } + else if (module.compare("PDM") == 0) + { + cout << "Reading the PDM from: " << location; + pdm = PDM::PDM(); + pdm.Read(location); + cout << "... Done" << endl; + } + else if (module.compare("Triangulation") == 0) + { + cout << "Reading the triangulation from:" << location; + // The triangulation used for masking out the non-face parts of aligned image + std::ifstream triangulation_file(location); + ReadMat(triangulation_file, triangulation); + cout << "... Done" << endl; + } + } + +} + // Reading in AU prediction modules void FaceAnalyser::ReadAU(std::string au_model_location) { + + // Open the list of the regressors in the file ifstream locations(au_model_location.c_str(), ios::in); @@ -1095,7 +1102,7 @@ void FaceAnalyser::ReadAU(std::string au_model_location) // Parse comma separated names that this regressor produces name = lineStream.str(); - int index = name.find_first_of(' '); + int index = (int)name.find_first_of(' '); if(index >= 0) { @@ -1129,13 +1136,13 @@ void FaceAnalyser::UpdatePredictionTrack(cv::Mat_& prediction_corr // The median update if(prediction_corr_histogram.empty()) { - prediction_corr_histogram = cv::Mat_(predictions.size(), num_bins, (unsigned int)0); + prediction_corr_histogram = cv::Mat_((int)predictions.size(), num_bins, (unsigned int)0); } for(int i = 0; i < prediction_corr_histogram.rows; ++i) { // Find the bins corresponding to the current descriptor - int index = (predictions[i].second - min_val)*((double)num_bins)/(length); + int index = (int)((predictions[i].second - min_val)*((double)num_bins)/(length)); if(index < 0) { index = 0; @@ -1153,7 +1160,7 @@ void FaceAnalyser::UpdatePredictionTrack(cv::Mat_& prediction_corr if(prediction_correction_count >= min_frames) { // Recompute the correction - int cutoff_point = ratio * prediction_correction_count; + int cutoff_point = (int)(ratio * prediction_correction_count); // For each dimension for(int i = 0; i < prediction_corr_histogram.rows; ++i) @@ -1183,7 +1190,7 @@ void FaceAnalyser::GetSampleHist(cv::Mat_& prediction_corr_histogr sample.resize(prediction_corr_histogram.rows, 0); // Recompute the correction - int cutoff_point = ratio * prediction_correction_count; + int cutoff_point = (int)(ratio * prediction_correction_count); // For each dimension for(int i = 0; i < prediction_corr_histogram.rows; ++i) @@ -1234,7 +1241,7 @@ double FaceAnalyser::GetCurrentTimeSeconds() { } // Allows for post processing of the AU signal -void FaceAnalyser::PostprocessOutputFile(string output_file, bool dynamic) +void FaceAnalyser::PostprocessOutputFile(string output_file) { vector certainties; @@ -1247,8 +1254,8 @@ void FaceAnalyser::PostprocessOutputFile(string output_file, bool dynamic) ExtractAllPredictionsOfflineReg(predictions_reg, certainties, successes, timestamps, dynamic); ExtractAllPredictionsOfflineClass(predictions_class, certainties, successes, timestamps, dynamic); - int num_class = predictions_class.size(); - int num_reg = predictions_reg.size(); + int num_class = (int)predictions_class.size(); + int num_reg = (int)predictions_reg.size(); // Extract the indices of writing out first vector au_reg_names = GetAURegNames(); @@ -1305,7 +1312,7 @@ void FaceAnalyser::PostprocessOutputFile(string output_file, bool dynamic) { if (tokens[i].find("AU") != string::npos && begin_ind == -1) { - begin_ind = i; + begin_ind = (int)i; break; } } diff --git a/lib/local/FaceAnalyser/src/FaceAnalyserParameters.cpp b/lib/local/FaceAnalyser/src/FaceAnalyserParameters.cpp new file mode 100644 index 0000000..8c2e5ad --- /dev/null +++ b/lib/local/FaceAnalyser/src/FaceAnalyserParameters.cpp @@ -0,0 +1,253 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "FaceAnalyserParameters.h" + +// System includes +#include +#include +#include + +#ifndef CONFIG_DIR +#define CONFIG_DIR "~" +#endif + +using namespace std; + +using namespace FaceAnalysis; + +FaceAnalyserParameters::FaceAnalyserParameters():root() +{ + // initialise the default values + init(); +} + +FaceAnalyserParameters::FaceAnalyserParameters(string root_dir) +{ + this->root = root_dir; + init(); + +} +FaceAnalyserParameters::FaceAnalyserParameters(vector &arguments):root() +{ + // initialise the default values + init(); + + // First element is reserved for the executable location (useful for finding relative model locs) + this->root = boost::filesystem::path(arguments[0]).parent_path(); + + bool* valid = new bool[arguments.size()]; + valid[0] = true; + + bool scale_set = false; + bool size_set = false; + + for (size_t i = 1; i < arguments.size(); ++i) + { + valid[i] = true; + + if (arguments[i].compare("-au_static") == 0) + { + dynamic = false; + valid[i] = false; + } + else if (arguments[i].compare("-g") == 0) + { + grayscale = true; + valid[i] = false; + } + else if (arguments[i].compare("-simscale") == 0) + { + sim_scale_out = stod(arguments[i + 1]); + valid[i] = false; + valid[i + 1] = false; + scale_set = true; + i++; + } + else if (arguments[i].compare("-simsize") == 0) + { + sim_size_out = stoi(arguments[i + 1]); + valid[i] = false; + valid[i + 1] = false; + size_set = true; + i++; + } + } + + for (int i = (int)arguments.size() - 1; i >= 0; --i) + { + if (!valid[i]) + { + arguments.erase(arguments.begin() + i); + } + } + + if (dynamic) + { + this->model_location = "AU_predictors/main_dynamic_svms.txt"; + } + else + { + this->model_location = "AU_predictors/main_static_svms.txt"; + } + + // If we set the size but not the scale, adapt the scale to the right size + if (!scale_set && size_set) sim_scale_out = sim_size_out * (0.7 / 112.0); + + // Make sure model_location is valid + // First check working directory, then the executable's directory, then the config path set by the build process. + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path model_path = boost::filesystem::path(this->model_location); + if (boost::filesystem::exists(model_path)) + { + this->model_location = model_path.string(); + } + else if (boost::filesystem::exists(root/model_path)) + { + this->model_location = (root/model_path).string(); + } + else if (boost::filesystem::exists(config_path/model_path)) + { + this->model_location = (config_path/model_path).string(); + } + else + { + std::cout << "Could not find the AU detection model to load" << std::endl; + } +} + +void FaceAnalyserParameters::init() +{ + // Initialize default parameter values + this->dynamic = true; + this->grayscale = false; + this->sim_scale_out = 0.7; + this->sim_size_out = 112; + + this->model_location = "AU_predictors/main_dynamic_svms.txt"; + + // Make sure model_location is valid + // First check working directory, then the executable's directory, then the config path set by the build process. + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path model_path = boost::filesystem::path(this->model_location); + if (boost::filesystem::exists(model_path)) + { + this->model_location = model_path.string(); + } + else if (boost::filesystem::exists(root / model_path)) + { + this->model_location = (root / model_path).string(); + } + else if (boost::filesystem::exists(config_path / model_path)) + { + this->model_location = (config_path / model_path).string(); + } + else + { + std::cout << "Could not find the AU detection model to load" << std::endl; + } + + orientation_bins = vector(); + +} + +// Use getters and setters for these as they might need to reload models and make sure the scale and size ratio makes sense +void FaceAnalyserParameters::setAlignedOutput(int output_size, double scale) +{ + this->sim_size_out = output_size; + // If we set the size but not the scale, adapt the scale to the right size + if (scale ==-1) this->sim_scale_out = sim_size_out * (0.7 / 112.0); + else this->sim_scale_out = sim_scale_out; + +} +// This will also change the model location +void FaceAnalyserParameters::OptimizeForVideos() +{ + // Set the post-processing to true and load a dynamic model + dynamic = true; + + this->model_location = "AU_predictors/main_dynamic_svms.txt"; + + // Make sure model_location is valid + // First check working directory, then the executable's directory, then the config path set by the build process. + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path model_path = boost::filesystem::path(this->model_location); + if (boost::filesystem::exists(model_path)) + { + this->model_location = model_path.string(); + } + else if (boost::filesystem::exists(root / model_path)) + { + this->model_location = (root / model_path).string(); + } + else if (boost::filesystem::exists(config_path / model_path)) + { + this->model_location = (config_path / model_path).string(); + } + else + { + std::cout << "Could not find the AU detection model to load" << std::endl; + } + +} + +void FaceAnalyserParameters::OptimizeForImages() +{ + // Set the post-processing to true and load a dynamic model + dynamic = false; + + this->model_location = "AU_predictors/main_static_svms.txt"; + + // Make sure model_location is valid + // First check working directory, then the executable's directory, then the config path set by the build process. + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path model_path = boost::filesystem::path(this->model_location); + if (boost::filesystem::exists(model_path)) + { + this->model_location = model_path.string(); + } + else if (boost::filesystem::exists(root / model_path)) + { + this->model_location = (root / model_path).string(); + } + else if (boost::filesystem::exists(config_path / model_path)) + { + this->model_location = (config_path / model_path).string(); + } + else + { + std::cout << "Could not find the AU detection model to load" << std::endl; + } +} + diff --git a/lib/local/FaceAnalyser/src/Face_utils.cpp b/lib/local/FaceAnalyser/src/Face_utils.cpp index fd42789..f9a6fd3 100644 --- a/lib/local/FaceAnalyser/src/Face_utils.cpp +++ b/lib/local/FaceAnalyser/src/Face_utils.cpp @@ -33,13 +33,16 @@ /////////////////////////////////////////////////////////////////////////////// #include +#include // OpenCV includes #include #include +#include // For FHOG visualisation #include +#include using namespace std; @@ -112,15 +115,15 @@ namespace FaceAnalysis } // Aligning a face to a common reference frame - void AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, bool rigid, double sim_scale, int out_width, int out_height) + void AlignFace(cv::Mat& aligned_face, const cv::Mat& frame, const cv::Mat_& detected_landmarks, cv::Vec6d params_global, const PDM& pdm, bool rigid, double sim_scale, int out_width, int out_height) { // Will warp to scaled mean shape - cv::Mat_ similarity_normalised_shape = clnf_model.pdm.mean_shape * sim_scale; + cv::Mat_ similarity_normalised_shape = pdm.mean_shape * sim_scale; // Discard the z component similarity_normalised_shape = similarity_normalised_shape(cv::Rect(0, 0, 1, 2*similarity_normalised_shape.rows/3)).clone(); - cv::Mat_ source_landmarks = clnf_model.detected_landmarks.reshape(1, 2).t(); + cv::Mat_ source_landmarks = detected_landmarks.reshape(1, 2).t(); cv::Mat_ destination_landmarks = similarity_normalised_shape.reshape(1, 2).t(); // Aligning only the more rigid points @@ -129,7 +132,7 @@ namespace FaceAnalysis extract_rigid_points(source_landmarks, destination_landmarks); } - cv::Matx22d scale_rot_matrix = LandmarkDetector::AlignShapesWithScale(source_landmarks, destination_landmarks); + cv::Matx22d scale_rot_matrix = AlignShapesWithScale(source_landmarks, destination_landmarks); cv::Matx23d warp_matrix; warp_matrix(0,0) = scale_rot_matrix(0,0); @@ -137,8 +140,8 @@ namespace FaceAnalysis warp_matrix(1,0) = scale_rot_matrix(1,0); warp_matrix(1,1) = scale_rot_matrix(1,1); - double tx = clnf_model.params_global[4]; - double ty = clnf_model.params_global[5]; + double tx = params_global[4]; + double ty = params_global[5]; cv::Vec2d T(tx, ty); T = scale_rot_matrix * T; @@ -151,15 +154,15 @@ namespace FaceAnalysis } // Aligning a face to a common reference frame - void AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const LandmarkDetector::CLNF& clnf_model, const cv::Mat_& triangulation, bool rigid, double sim_scale, int out_width, int out_height) + void AlignFaceMask(cv::Mat& aligned_face, const cv::Mat& frame, const cv::Mat_& detected_landmarks, cv::Vec6d params_global, const PDM& pdm, const cv::Mat_& triangulation, bool rigid, double sim_scale, int out_width, int out_height) { // Will warp to scaled mean shape - cv::Mat_ similarity_normalised_shape = clnf_model.pdm.mean_shape * sim_scale; + cv::Mat_ similarity_normalised_shape = pdm.mean_shape * sim_scale; // Discard the z component similarity_normalised_shape = similarity_normalised_shape(cv::Rect(0, 0, 1, 2*similarity_normalised_shape.rows/3)).clone(); - cv::Mat_ source_landmarks = clnf_model.detected_landmarks.reshape(1, 2).t(); + cv::Mat_ source_landmarks = detected_landmarks.reshape(1, 2).t(); cv::Mat_ destination_landmarks = similarity_normalised_shape.reshape(1, 2).t(); // Aligning only the more rigid points @@ -168,7 +171,7 @@ namespace FaceAnalysis extract_rigid_points(source_landmarks, destination_landmarks); } - cv::Matx22d scale_rot_matrix = LandmarkDetector::AlignShapesWithScale(source_landmarks, destination_landmarks); + cv::Matx22d scale_rot_matrix = AlignShapesWithScale(source_landmarks, destination_landmarks); cv::Matx23d warp_matrix; warp_matrix(0,0) = scale_rot_matrix(0,0); @@ -176,8 +179,8 @@ namespace FaceAnalysis warp_matrix(1,0) = scale_rot_matrix(1,0); warp_matrix(1,1) = scale_rot_matrix(1,1); - double tx = clnf_model.params_global[4]; - double ty = clnf_model.params_global[5]; + double tx = params_global[4]; + double ty = params_global[5]; cv::Vec2d T(tx, ty); T = scale_rot_matrix * T; @@ -191,7 +194,7 @@ namespace FaceAnalysis // Move the destination landmarks there as well cv::Matx22d warp_matrix_2d(warp_matrix(0,0), warp_matrix(0,1), warp_matrix(1,0), warp_matrix(1,1)); - destination_landmarks = cv::Mat(clnf_model.detected_landmarks.reshape(1, 2).t()) * cv::Mat(warp_matrix_2d).t(); + destination_landmarks = cv::Mat(detected_landmarks.reshape(1, 2).t()) * cv::Mat(warp_matrix_2d).t(); destination_landmarks.col(0) = destination_landmarks.col(0) + warp_matrix(0,2); destination_landmarks.col(1) = destination_landmarks.col(1) + warp_matrix(1,2); @@ -213,7 +216,7 @@ namespace FaceAnalysis destination_landmarks = cv::Mat(destination_landmarks.t()).reshape(1, 1).t(); - LandmarkDetector::PAW paw(destination_landmarks, triangulation, 0, 0, aligned_face.cols-1, aligned_face.rows-1); + PAW paw(destination_landmarks, triangulation, 0, 0, aligned_face.cols-1, aligned_face.rows-1); // Mask each of the channels (a bit of a roundabout way, but OpenCV 3.1 in debug mode doesn't seem to be able to handle a more direct way using split and merge) vector aligned_face_channels(aligned_face.channels()); @@ -355,4 +358,298 @@ namespace FaceAnalysis new_descriptor.copyTo(descriptors.row(row_to_change)); } + //=========================================================================== + // Point set and landmark manipulation functions + //=========================================================================== + // Using Kabsch's algorithm for aligning shapes + //This assumes that align_from and align_to are already mean normalised + cv::Matx22d AlignShapesKabsch2D(const cv::Mat_& align_from, const cv::Mat_& align_to) + { + + cv::SVD svd(align_from.t() * align_to); + + // make sure no reflection is there + // corr ensures that we do only rotaitons and not reflections + double d = cv::determinant(svd.vt.t() * svd.u.t()); + + cv::Matx22d corr = cv::Matx22d::eye(); + if (d > 0) + { + corr(1, 1) = 1; + } + else + { + corr(1, 1) = -1; + } + + cv::Matx22d R; + cv::Mat(svd.vt.t()*cv::Mat(corr)*svd.u.t()).copyTo(R); + + return R; + } + + //============================================================================= + // Basically Kabsch's algorithm but also allows the collection of points to be different in scale from each other + cv::Matx22d AlignShapesWithScale(cv::Mat_& src, cv::Mat_ dst) + { + int n = src.rows; + + // First we mean normalise both src and dst + double mean_src_x = cv::mean(src.col(0))[0]; + double mean_src_y = cv::mean(src.col(1))[0]; + + double mean_dst_x = cv::mean(dst.col(0))[0]; + double mean_dst_y = cv::mean(dst.col(1))[0]; + + cv::Mat_ src_mean_normed = src.clone(); + src_mean_normed.col(0) = src_mean_normed.col(0) - mean_src_x; + src_mean_normed.col(1) = src_mean_normed.col(1) - mean_src_y; + + cv::Mat_ dst_mean_normed = dst.clone(); + dst_mean_normed.col(0) = dst_mean_normed.col(0) - mean_dst_x; + dst_mean_normed.col(1) = dst_mean_normed.col(1) - mean_dst_y; + + // Find the scaling factor of each + cv::Mat src_sq; + cv::pow(src_mean_normed, 2, src_sq); + + cv::Mat dst_sq; + cv::pow(dst_mean_normed, 2, dst_sq); + + double s_src = sqrt(cv::sum(src_sq)[0] / n); + double s_dst = sqrt(cv::sum(dst_sq)[0] / n); + + src_mean_normed = src_mean_normed / s_src; + dst_mean_normed = dst_mean_normed / s_dst; + + double s = s_dst / s_src; + + // Get the rotation + cv::Matx22d R = AlignShapesKabsch2D(src_mean_normed, dst_mean_normed); + + cv::Matx22d A; + cv::Mat(s * R).copyTo(A); + + cv::Mat_ aligned = (cv::Mat(cv::Mat(A) * src.t())).t(); + cv::Mat_ offset = dst - aligned; + + double t_x = cv::mean(offset.col(0))[0]; + double t_y = cv::mean(offset.col(1))[0]; + + return A; + + } + + + //=========================================================================== + // Visualisation functions + //=========================================================================== + void Project(cv::Mat_& dest, const cv::Mat_& mesh, double fx, double fy, double cx, double cy) + { + dest = cv::Mat_(mesh.rows, 2, 0.0); + + int num_points = mesh.rows; + + double X, Y, Z; + + + cv::Mat_::const_iterator mData = mesh.begin(); + cv::Mat_::iterator projected = dest.begin(); + + for (int i = 0; i < num_points; i++) + { + // Get the points + X = *(mData++); + Y = *(mData++); + Z = *(mData++); + + double x; + double y; + + // if depth is 0 the projection is different + if (Z != 0) + { + x = ((X * fx / Z) + cx); + y = ((Y * fy / Z) + cy); + } + else + { + x = X; + y = Y; + } + + // Project and store in dest matrix + (*projected++) = x; + (*projected++) = y; + } + + } + //=========================================================================== + // Angle representation conversion helpers + //=========================================================================== + + // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign + cv::Matx33d Euler2RotationMatrix(const cv::Vec3d& eulerAngles) + { + cv::Matx33d rotation_matrix; + + double s1 = sin(eulerAngles[0]); + double s2 = sin(eulerAngles[1]); + double s3 = sin(eulerAngles[2]); + + double c1 = cos(eulerAngles[0]); + double c2 = cos(eulerAngles[1]); + double c3 = cos(eulerAngles[2]); + + rotation_matrix(0, 0) = c2 * c3; + rotation_matrix(0, 1) = -c2 *s3; + rotation_matrix(0, 2) = s2; + rotation_matrix(1, 0) = c1 * s3 + c3 * s1 * s2; + rotation_matrix(1, 1) = c1 * c3 - s1 * s2 * s3; + rotation_matrix(1, 2) = -c2 * s1; + rotation_matrix(2, 0) = s1 * s3 - c1 * c3 * s2; + rotation_matrix(2, 1) = c3 * s1 + c1 * s2 * s3; + rotation_matrix(2, 2) = c1 * c2; + + return rotation_matrix; + } + + // Using the XYZ convention R = Rx * Ry * Rz, left-handed positive sign + cv::Vec3d RotationMatrix2Euler(const cv::Matx33d& rotation_matrix) + { + double q0 = sqrt(1 + rotation_matrix(0, 0) + rotation_matrix(1, 1) + rotation_matrix(2, 2)) / 2.0; + double q1 = (rotation_matrix(2, 1) - rotation_matrix(1, 2)) / (4.0*q0); + double q2 = (rotation_matrix(0, 2) - rotation_matrix(2, 0)) / (4.0*q0); + double q3 = (rotation_matrix(1, 0) - rotation_matrix(0, 1)) / (4.0*q0); + + double t1 = 2.0 * (q0*q2 + q1*q3); + + double yaw = asin(2.0 * (q0*q2 + q1*q3)); + double pitch = atan2(2.0 * (q0*q1 - q2*q3), q0*q0 - q1*q1 - q2*q2 + q3*q3); + double roll = atan2(2.0 * (q0*q3 - q1*q2), q0*q0 + q1*q1 - q2*q2 - q3*q3); + + return cv::Vec3d(pitch, yaw, roll); + } + + cv::Vec3d Euler2AxisAngle(const cv::Vec3d& euler) + { + cv::Matx33d rotMatrix = Euler2RotationMatrix(euler); + cv::Vec3d axis_angle; + cv::Rodrigues(rotMatrix, axis_angle); + return axis_angle; + } + + cv::Vec3d AxisAngle2Euler(const cv::Vec3d& axis_angle) + { + cv::Matx33d rotation_matrix; + cv::Rodrigues(axis_angle, rotation_matrix); + return RotationMatrix2Euler(rotation_matrix); + } + + cv::Matx33d AxisAngle2RotationMatrix(const cv::Vec3d& axis_angle) + { + cv::Matx33d rotation_matrix; + cv::Rodrigues(axis_angle, rotation_matrix); + return rotation_matrix; + } + + cv::Vec3d RotationMatrix2AxisAngle(const cv::Matx33d& rotation_matrix) + { + cv::Vec3d axis_angle; + cv::Rodrigues(rotation_matrix, axis_angle); + return axis_angle; + } + + + //============================================================================ + // Matrix reading functionality + //============================================================================ + + // Reading in a matrix from a stream + void ReadMat(std::ifstream& stream, cv::Mat &output_mat) + { + // Read in the number of rows, columns and the data type + int row, col, type; + + stream >> row >> col >> type; + + output_mat = cv::Mat(row, col, type); + + switch (output_mat.type()) + { + case CV_64FC1: + { + cv::MatIterator_ begin_it = output_mat.begin(); + cv::MatIterator_ end_it = output_mat.end(); + + while (begin_it != end_it) + { + stream >> *begin_it++; + } + } + break; + case CV_32FC1: + { + cv::MatIterator_ begin_it = output_mat.begin(); + cv::MatIterator_ end_it = output_mat.end(); + + while (begin_it != end_it) + { + stream >> *begin_it++; + } + } + break; + case CV_32SC1: + { + cv::MatIterator_ begin_it = output_mat.begin(); + cv::MatIterator_ end_it = output_mat.end(); + while (begin_it != end_it) + { + stream >> *begin_it++; + } + } + break; + case CV_8UC1: + { + cv::MatIterator_ begin_it = output_mat.begin(); + cv::MatIterator_ end_it = output_mat.end(); + while (begin_it != end_it) + { + stream >> *begin_it++; + } + } + break; + default: + printf("ERROR(%s,%d) : Unsupported Matrix type %d!\n", __FILE__, __LINE__, output_mat.type()); abort(); + + + } + } + + void ReadMatBin(std::ifstream& stream, cv::Mat &output_mat) + { + // Read in the number of rows, columns and the data type + int row, col, type; + + stream.read((char*)&row, 4); + stream.read((char*)&col, 4); + stream.read((char*)&type, 4); + + output_mat = cv::Mat(row, col, type); + int size = output_mat.rows * output_mat.cols * output_mat.elemSize(); + stream.read((char *)output_mat.data, size); + + } + + // Skipping lines that start with # (together with empty lines) + void SkipComments(std::ifstream& stream) + { + while (stream.peek() == '#' || stream.peek() == '\n' || stream.peek() == ' ' || stream.peek() == '\r') + { + std::string skipped; + std::getline(stream, skipped); + } + } + + } \ No newline at end of file diff --git a/lib/local/FaceAnalyser/src/PAW.cpp b/lib/local/FaceAnalyser/src/PAW.cpp new file mode 100644 index 0000000..4c5e397 --- /dev/null +++ b/lib/local/FaceAnalyser/src/PAW.cpp @@ -0,0 +1,500 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + + +#include "PAW.h" + +// OpenCV includes +#include +#include + +#include "Face_utils.h" + +using namespace FaceAnalysis; + +// Copy constructor +PAW::PAW(const PAW& other) : destination_landmarks(other.destination_landmarks.clone()), source_landmarks(other.source_landmarks.clone()), triangulation(other.triangulation.clone()), +triangle_id(other.triangle_id.clone()), pixel_mask(other.pixel_mask.clone()), coefficients(other.coefficients.clone()), alpha(other.alpha.clone()), beta(other.beta.clone()), map_x(other.map_x.clone()), map_y(other.map_y.clone()) +{ + this->number_of_pixels = other.number_of_pixels; + this->min_x = other.min_x; + this->min_y = other.min_y; +} + +// A constructor from destination shape and triangulation +PAW::PAW(const cv::Mat_& destination_shape, const cv::Mat_& triangulation) +{ + // Initialise some variables directly + this->destination_landmarks = destination_shape; + this->triangulation = triangulation; + + int num_points = destination_shape.rows/2; + + int num_tris = triangulation.rows; + + // Pre-compute the rest + alpha = cv::Mat_(num_tris, 3); + beta = cv::Mat_(num_tris, 3); + + cv::Mat_ xs = destination_shape(cv::Rect(0, 0, 1, num_points)); + cv::Mat_ ys = destination_shape(cv::Rect(0, num_points, 1, num_points)); + + // Create a vector representation of the control points + std::vector> destination_points; + + for (int tri = 0; tri < num_tris; ++tri) + { + int j = triangulation.at(tri, 0); + int k = triangulation.at(tri, 1); + int l = triangulation.at(tri, 2); + + double c1 = ys.at(l) - ys.at(j); + double c2 = xs.at(l) - xs.at(j); + double c4 = ys.at(k) - ys.at(j); + double c3 = xs.at(k) - xs.at(j); + + double c5 = c3*c1 - c2*c4; + + alpha.at(tri, 0) = (ys.at(j) * c2 - xs.at(j) * c1) / c5; + alpha.at(tri, 1) = c1/c5; + alpha.at(tri, 2) = -c2/c5; + + beta.at(tri, 0) = (xs.at(j) * c4 - ys.at(j) * c3)/c5; + beta.at(tri, 1) = -c4/c5; + beta.at(tri, 2) = c3/c5; + + // Add points corresponding to triangles as optimisation + std::vector triangle_points(10); + + triangle_points[0] = xs.at(j); + triangle_points[1] = ys.at(j); + triangle_points[2] = xs.at(k); + triangle_points[3] = ys.at(k); + triangle_points[4] = xs.at(l); + triangle_points[5] = ys.at(l); + + cv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]); + cv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]); + + double min_x, max_x, min_y, max_y; + cv::minMaxIdx(xs_three, &min_x, &max_x); + cv::minMaxIdx(ys_three, &min_y, &max_y); + + triangle_points[6] = max_x; + triangle_points[7] = max_y; + + triangle_points[8] = min_x; + triangle_points[9] = min_y; + + destination_points.push_back(triangle_points); + + } + + double max_x; + double max_y; + + minMaxLoc(xs, &min_x, &max_x); + minMaxLoc(ys, &min_y, &max_y); + + int w = (int)(max_x - min_x + 1.5); + int h = (int)(max_y - min_y + 1.5); + + // Round the min_x and min_y for simplicity? + + pixel_mask = cv::Mat_(h, w, (uchar)0); + triangle_id = cv::Mat_(h, w, -1); + + int curr_tri = -1; + + for(int y = 0; y < pixel_mask.rows; y++) + { + for(int x = 0; x < pixel_mask.cols; x++) + { + curr_tri = findTriangle(cv::Point_(x + min_x, y + min_y), destination_points, curr_tri); + // If there is a triangle at this location + if(curr_tri != -1) + { + triangle_id.at(y, x) = curr_tri; + pixel_mask.at(y, x) = 1; + } + } + } + + // Preallocate maps and coefficients + coefficients.create(num_tris, 6); + map_x.create(pixel_mask.rows,pixel_mask.cols); + map_y.create(pixel_mask.rows,pixel_mask.cols); + + +} + +// Manually define min and max values +PAW::PAW(const cv::Mat_& destination_shape, const cv::Mat_& triangulation, double in_min_x, double in_min_y, double in_max_x, double in_max_y) +{ + // Initialise some variables directly + this->destination_landmarks = destination_shape; + this->triangulation = triangulation; + + int num_points = destination_shape.rows/2; + + int num_tris = triangulation.rows; + + // Pre-compute the rest + alpha = cv::Mat_(num_tris, 3); + beta = cv::Mat_(num_tris, 3); + + cv::Mat_ xs = destination_shape(cv::Rect(0, 0, 1, num_points)); + cv::Mat_ ys = destination_shape(cv::Rect(0, num_points, 1, num_points)); + + // Create a vector representation of the control points + std::vector> destination_points; + + for (int tri = 0; tri < num_tris; ++tri) + { + int j = triangulation.at(tri, 0); + int k = triangulation.at(tri, 1); + int l = triangulation.at(tri, 2); + + double c1 = ys.at(l) - ys.at(j); + double c2 = xs.at(l) - xs.at(j); + double c4 = ys.at(k) - ys.at(j); + double c3 = xs.at(k) - xs.at(j); + + double c5 = c3*c1 - c2*c4; + + alpha.at(tri, 0) = (ys.at(j) * c2 - xs.at(j) * c1) / c5; + alpha.at(tri, 1) = c1/c5; + alpha.at(tri, 2) = -c2/c5; + + beta.at(tri, 0) = (xs.at(j) * c4 - ys.at(j) * c3)/c5; + beta.at(tri, 1) = -c4/c5; + beta.at(tri, 2) = c3/c5; + + // Add points corresponding to triangles as optimisation + std::vector triangle_points(10); + + triangle_points[0] = xs.at(j); + triangle_points[1] = ys.at(j); + triangle_points[2] = xs.at(k); + triangle_points[3] = ys.at(k); + triangle_points[4] = xs.at(l); + triangle_points[5] = ys.at(l); + + cv::Vec3d xs_three(triangle_points[0], triangle_points[2], triangle_points[4]); + cv::Vec3d ys_three(triangle_points[1], triangle_points[3], triangle_points[5]); + + double min_x, max_x, min_y, max_y; + cv::minMaxIdx(xs_three, &min_x, &max_x); + cv::minMaxIdx(ys_three, &min_y, &max_y); + + triangle_points[6] = max_x; + triangle_points[7] = max_y; + + triangle_points[8] = min_x; + triangle_points[9] = min_y; + + destination_points.push_back(triangle_points); + + } + + double max_x; + double max_y; + + min_x = in_min_x; + min_y = in_min_y; + + max_x = in_max_x; + max_y = in_max_y; + + int w = (int)(max_x - min_x + 1.5); + int h = (int)(max_y - min_y + 1.5); + + // Round the min_x and min_y for simplicity? + + pixel_mask = cv::Mat_(h, w, (uchar)0); + triangle_id = cv::Mat_(h, w, -1); + + int curr_tri = -1; + + for(int y = 0; y < pixel_mask.rows; y++) + { + for(int x = 0; x < pixel_mask.cols; x++) + { + curr_tri = findTriangle(cv::Point_(x + min_x, y + min_y), destination_points, curr_tri); + // If there is a triangle at this location + if(curr_tri != -1) + { + triangle_id.at(y, x) = curr_tri; + pixel_mask.at(y, x) = 1; + } + } + } + + // Preallocate maps and coefficients + coefficients.create(num_tris, 6); + map_x.create(pixel_mask.rows,pixel_mask.cols); + map_y.create(pixel_mask.rows,pixel_mask.cols); + +} + +//=========================================================================== +void PAW::Read(std::ifstream& stream) +{ + + stream.read ((char*)&number_of_pixels, 4); + stream.read ((char*)&min_x, 8); + stream.read ((char*)&min_y, 8); + + ReadMatBin(stream, destination_landmarks); + + ReadMatBin(stream, triangulation); + + ReadMatBin(stream, triangle_id); + + cv::Mat tmpMask; + ReadMatBin(stream, tmpMask); + tmpMask.convertTo(pixel_mask, CV_8U); + + ReadMatBin(stream, alpha); + + ReadMatBin(stream, beta); + + map_x.create(pixel_mask.rows,pixel_mask.cols); + map_y.create(pixel_mask.rows,pixel_mask.cols); + + coefficients.create(this->NumberOfTriangles(),6); + + source_landmarks = destination_landmarks; +} + +//============================================================================= +// cropping from the source image to the destination image using the shape in s, used to determine if shape fitting converged successfully +void PAW::Warp(const cv::Mat& image_to_warp, cv::Mat& destination_image, const cv::Mat_& landmarks_to_warp) +{ + + // set the current shape + source_landmarks = landmarks_to_warp.clone(); + + // prepare the mapping coefficients using the current shape + this->CalcCoeff(); + + // Do the actual mapping computation (where to warp from) + this->WarpRegion(map_x, map_y); + + // Do the actual warp (with bi-linear interpolation) + remap(image_to_warp, destination_image, map_x, map_y, CV_INTER_LINEAR); + +} + + +//============================================================================= +// Calculate the warping coefficients +void PAW::CalcCoeff() +{ + int p = this->NumberOfLandmarks(); + + for(int l = 0; l < this->NumberOfTriangles(); l++) + { + + int i = triangulation.at(l,0); + int j = triangulation.at(l,1); + int k = triangulation.at(l,2); + + double c1 = source_landmarks.at(i , 0); + double c2 = source_landmarks.at(j , 0) - c1; + double c3 = source_landmarks.at(k , 0) - c1; + double c4 = source_landmarks.at(i + p, 0); + double c5 = source_landmarks.at(j + p, 0) - c4; + double c6 = source_landmarks.at(k + p, 0) - c4; + + // Get a pointer to the coefficient we will be precomputing + double *coeff = coefficients.ptr(l); + + // Extract the relevant alphas and betas + double *c_alpha = alpha.ptr(l); + double *c_beta = beta.ptr(l); + + coeff[0] = c1 + c2 * c_alpha[0] + c3 * c_beta[0]; + coeff[1] = c2 * c_alpha[1] + c3 * c_beta[1]; + coeff[2] = c2 * c_alpha[2] + c3 * c_beta[2]; + coeff[3] = c4 + c5 * c_alpha[0] + c6 * c_beta[0]; + coeff[4] = c5 * c_alpha[1] + c6 * c_beta[1]; + coeff[5] = c5 * c_alpha[2] + c6 * c_beta[2]; + } +} + +//====================================================================== +// Compute the mapping coefficients +void PAW::WarpRegion(cv::Mat_& mapx, cv::Mat_& mapy) +{ + + cv::MatIterator_ xp = mapx.begin(); + cv::MatIterator_ yp = mapy.begin(); + cv::MatIterator_ mp = pixel_mask.begin(); + cv::MatIterator_ tp = triangle_id.begin(); + + // The coefficients corresponding to the current triangle + double * a; + + // Current triangle being processed + int k=-1; + + for(int y = 0; y < pixel_mask.rows; y++) + { + double yi = double(y) + min_y; + + for(int x = 0; x < pixel_mask.cols; x++) + { + double xi = double(x) + min_x; + + if(*mp == 0) + { + *xp = -1; + *yp = -1; + } + else + { + // triangle corresponding to the current pixel + int j = *tp; + + // If it is different from the previous triangle point to new coefficients + // This will always be the case in the first iteration, hence a will not point to nothing + if(j != k) + { + // Update the coefficient pointer if a new triangle is being processed + a = coefficients.ptr(j); + k = j; + } + + //ap is now the pointer to the coefficients + double *ap = a; + + //look at the first coefficient (and increment). first coefficient is an x offset + double xo = *ap++; + //second coefficient is an x scale as a function of x + xo += *ap++ * xi; + //third coefficient ap(2) is an x scale as a function of y + *xp = float(xo + *ap++ * yi); + + //then fourth coefficient ap(3) is a y offset + double yo = *ap++; + //fifth coeff adds coeff[4]*x to y + yo += *ap++ * xi; + //final coeff adds coeff[5]*y to y + *yp = float(yo + *ap++ * yi); + + } + mp++; tp++; xp++; yp++; + } + } +} + +// ============================================================ +// Helper functions to determine which point a triangle lies in +// ============================================================ + +// Is the point (x0,y0) on same side as a half-plane defined by (x1,y1), (x2, y2), and (x3, y3) +bool PAW::sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) +{ + + double x = (x3-x2)*(y0-y2) - (x0-x2)*(y3-y2); + double y = (x3-x2)*(y1-y2) - (x1-x2)*(y3-y2); + + return x*y >= 0; + +} + +// if point (x0, y0) is on same side for all three half-planes it is in a triangle +bool PAW::pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) +{ + bool same_1 = sameSide(x0, y0, x1, y1, x2, y2, x3, y3); + bool same_2 = sameSide(x0, y0, x2, y2, x1, y1, x3, y3); + bool same_3 = sameSide(x0, y0, x3, y3, x1, y1, x2, y2); + + return same_1 && same_2 && same_3; + +} + +// Find if a given point lies in the triangles +int PAW::findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess) +{ + + int num_tris = control_points.size(); + + int tri = -1; + + double x0 = point.x; + double y0 = point.y; + + // Allow a guess for speed (so as not to go through all triangles) + if(guess != -1) + { + + bool in_triangle = pointInTriangle(x0, y0, control_points[guess][0], control_points[guess][1], control_points[guess][2], control_points[guess][3], control_points[guess][4], control_points[guess][5]); + if(in_triangle) + { + return guess; + } + } + + + for (int i = 0; i < num_tris; ++i) + { + + double max_x = control_points[i][6]; + double max_y = control_points[i][7]; + + double min_x = control_points[i][8]; + double min_y = control_points[i][9]; + + // Skip the check if the point is outside the bounding box of the triangle + + if( max_x < x0 || min_x > x0 || max_y < y0 || min_y > y0) + { + continue; + } + + bool in_triangle = pointInTriangle(x0, y0, + control_points[i][0], control_points[i][1], + control_points[i][2], control_points[i][3], + control_points[i][4], control_points[i][5]); + + if(in_triangle) + { + tri = i; + break; + } + } + return tri; +} \ No newline at end of file diff --git a/lib/local/FaceAnalyser/src/PDM.cpp b/lib/local/FaceAnalyser/src/PDM.cpp new file mode 100644 index 0000000..29945ae --- /dev/null +++ b/lib/local/FaceAnalyser/src/PDM.cpp @@ -0,0 +1,613 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY +// +// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. +// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. +// +// License can be found in OpenFace-license.txt +// +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + + +#include + +// OpenCV include +#include +#include + +// Math includes +#define _USE_MATH_DEFINES +#include + +#ifndef M_PI + #define M_PI 3.14159265358979323846 +#endif + +#include + +using namespace FaceAnalysis; +//=========================================================================== + +//============================================================================= +// Orthonormalising the 3x3 rotation matrix +void PDM::Orthonormalise(cv::Matx33d &R) +{ + + cv::SVD svd(R,cv::SVD::MODIFY_A); + + // get the orthogonal matrix from the initial rotation matrix + cv::Mat_ X = svd.u*svd.vt; + + // This makes sure that the handedness is preserved and no reflection happened + // by making sure the determinant is 1 and not -1 + cv::Mat_ W = cv::Mat_::eye(3,3); + double d = determinant(X); + W(2,2) = determinant(X); + cv::Mat Rt = svd.u*W*svd.vt; + + Rt.copyTo(R); + +} + +// A copy constructor +PDM::PDM(const PDM& other) { + + // Make sure the matrices are allocated properly + this->mean_shape = other.mean_shape.clone(); + this->princ_comp = other.princ_comp.clone(); + this->eigen_values = other.eigen_values.clone(); +} + +//=========================================================================== +// Compute the 3D representation of shape (in object space) using the local parameters +void PDM::CalcShape3D(cv::Mat_& out_shape, const cv::Mat_& p_local) const +{ + out_shape.create(mean_shape.rows, mean_shape.cols); + out_shape = mean_shape + princ_comp*p_local; +} + +//=========================================================================== +// Get the 2D shape (in image space) from global and local parameters +void PDM::CalcShape2D(cv::Mat_& out_shape, const cv::Mat_& params_local, const cv::Vec6d& params_global) const +{ + + int n = this->NumberOfPoints(); + + double s = params_global[0]; // scaling factor + double tx = params_global[4]; // x offset + double ty = params_global[5]; // y offset + + // get the rotation matrix from the euler angles + cv::Vec3d euler(params_global[1], params_global[2], params_global[3]); + cv::Matx33d currRot = Euler2RotationMatrix(euler); + + // get the 3D shape of the object + cv::Mat_ Shape_3D = mean_shape + princ_comp * params_local; + + // create the 2D shape matrix (if it has not been defined yet) + if((out_shape.rows != mean_shape.rows) || (out_shape.cols != 1)) + { + out_shape.create(2*n,1); + } + // for every vertex + for(int i = 0; i < n; i++) + { + // Transform this using the weak-perspective mapping to 2D from 3D + out_shape.at(i ,0) = s * ( currRot(0,0) * Shape_3D.at(i, 0) + currRot(0,1) * Shape_3D.at(i+n ,0) + currRot(0,2) * Shape_3D.at(i+n*2,0) ) + tx; + out_shape.at(i+n,0) = s * ( currRot(1,0) * Shape_3D.at(i, 0) + currRot(1,1) * Shape_3D.at(i+n ,0) + currRot(1,2) * Shape_3D.at(i+n*2,0) ) + ty; + } +} + +//=========================================================================== +// provided the bounding box of a face and the local parameters (with optional rotation), generates the global parameters that can generate the face with the provided bounding box +// This all assumes that the bounding box describes face from left outline to right outline of the face and chin to eyebrows +void PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Rect_& bounding_box, const cv::Mat_& params_local, const cv::Vec3d rotation) const +{ + + // get the shape instance based on local params + cv::Mat_ current_shape(mean_shape.size()); + + CalcShape3D(current_shape, params_local); + + // rotate the shape + cv::Matx33d rotation_matrix = Euler2RotationMatrix(rotation); + + cv::Mat_ reshaped = current_shape.reshape(1, 3); + + cv::Mat rotated_shape = (cv::Mat(rotation_matrix) * reshaped); + + // Get the width of expected shape + double min_x; + double max_x; + cv::minMaxLoc(rotated_shape.row(0), &min_x, &max_x); + + double min_y; + double max_y; + cv::minMaxLoc(rotated_shape.row(1), &min_y, &max_y); + + double width = abs(min_x - max_x); + double height = abs(min_y - max_y); + + double scaling = ((bounding_box.width / width) + (bounding_box.height / height)) / 2; + + // The estimate of face center also needs some correction + double tx = bounding_box.x + bounding_box.width / 2; + double ty = bounding_box.y + bounding_box.height / 2; + + // Correct it so that the bounding box is just around the minimum and maximum point in the initialised face + tx = tx - scaling * (min_x + max_x)/2; + ty = ty - scaling * (min_y + max_y)/2; + + out_params_global = cv::Vec6d(scaling, rotation[0], rotation[1], rotation[2], tx, ty); +} + +//=========================================================================== +// provided the model parameters, compute the bounding box of a face +// The bounding box describes face from left outline to right outline of the face and chin to eyebrows +void PDM::CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_& params_local) const +{ + + // get the shape instance based on local params + cv::Mat_ current_shape; + CalcShape2D(current_shape, params_local, params_global); + + // Get the width of expected shape + double min_x; + double max_x; + cv::minMaxLoc(current_shape(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x); + + double min_y; + double max_y; + cv::minMaxLoc(current_shape(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y); + + double width = abs(min_x - max_x); + double height = abs(min_y - max_y); + + out_bounding_box = cv::Rect((int)min_x, (int)min_y, (int)width, (int)height); +} + +//=========================================================================== +// Calculate the PDM's Jacobian over rigid parameters (rotation, translation and scaling), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS +void PDM::ComputeRigidJacobian(const cv::Mat_& p_local, const cv::Vec6d& params_global, cv::Mat_ &Jacob, const cv::Mat_ W, cv::Mat_ &Jacob_t_w) const +{ + + // number of verts + int n = this->NumberOfPoints(); + + Jacob.create(n * 2, 6); + + float X,Y,Z; + + float s = (float)params_global[0]; + + cv::Mat_ shape_3D_d; + cv::Mat_ p_local_d; + p_local.convertTo(p_local_d, CV_64F); + this->CalcShape3D(shape_3D_d, p_local_d); + + cv::Mat_ shape_3D; + shape_3D_d.convertTo(shape_3D, CV_32F); + + // Get the rotation matrix + cv::Vec3d euler(params_global[1], params_global[2], params_global[3]); + cv::Matx33d currRot = Euler2RotationMatrix(euler); + + float r11 = (float) currRot(0,0); + float r12 = (float) currRot(0,1); + float r13 = (float) currRot(0,2); + float r21 = (float) currRot(1,0); + float r22 = (float) currRot(1,1); + float r23 = (float) currRot(1,2); + float r31 = (float) currRot(2,0); + float r32 = (float) currRot(2,1); + float r33 = (float) currRot(2,2); + + cv::MatIterator_ Jx = Jacob.begin(); + cv::MatIterator_ Jy = Jx + n * 6; + + for(int i = 0; i < n; i++) + { + + X = shape_3D.at(i,0); + Y = shape_3D.at(i+n,0); + Z = shape_3D.at(i+n*2,0); + + // The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R') + // where R' = [1, -wz, wy + // wz, 1, -wx + // -wy, wx, 1] + // And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation + + // scaling term + *Jx++ = (X * r11 + Y * r12 + Z * r13); + *Jy++ = (X * r21 + Y * r22 + Z * r23); + + // rotation terms + *Jx++ = (s * (Y * r13 - Z * r12) ); + *Jy++ = (s * (Y * r23 - Z * r22) ); + *Jx++ = (-s * (X * r13 - Z * r11)); + *Jy++ = (-s * (X * r23 - Z * r21)); + *Jx++ = (s * (X * r12 - Y * r11) ); + *Jy++ = (s * (X * r22 - Y * r21) ); + + // translation terms + *Jx++ = 1.0f; + *Jy++ = 0.0f; + *Jx++ = 0.0f; + *Jy++ = 1.0f; + + } + + cv::Mat Jacob_w = cv::Mat::zeros(Jacob.rows, Jacob.cols, Jacob.type()); + + Jx = Jacob.begin(); + Jy = Jx + n*6; + + cv::MatIterator_ Jx_w = Jacob_w.begin(); + cv::MatIterator_ Jy_w = Jx_w + n*6; + + // Iterate over all Jacobian values and multiply them by the weight in diagonal of W + for(int i = 0; i < n; i++) + { + float w_x = W.at(i, i); + float w_y = W.at(i+n, i+n); + + for(int j = 0; j < Jacob.cols; ++j) + { + *Jx_w++ = *Jx++ * w_x; + *Jy_w++ = *Jy++ * w_y; + } + } + + Jacob_t_w = Jacob_w.t(); +} + +//=========================================================================== +// Calculate the PDM's Jacobian over all parameters (rigid and non-rigid), the additional input W represents trust for each of the landmarks and is part of Non-Uniform RLMS +void PDM::ComputeJacobian(const cv::Mat_& params_local, const cv::Vec6d& params_global, cv::Mat_ &Jacobian, const cv::Mat_ W, cv::Mat_ &Jacob_t_w) const +{ + + // number of vertices + int n = this->NumberOfPoints(); + + // number of non-rigid parameters + int m = this->NumberOfModes(); + + Jacobian.create(n * 2, 6 + m); + + float X,Y,Z; + + float s = (float) params_global[0]; + + cv::Mat_ shape_3D_d; + cv::Mat_ p_local_d; + params_local.convertTo(p_local_d, CV_64F); + this->CalcShape3D(shape_3D_d, p_local_d); + + cv::Mat_ shape_3D; + shape_3D_d.convertTo(shape_3D, CV_32F); + + cv::Vec3d euler(params_global[1], params_global[2], params_global[3]); + cv::Matx33d currRot = Euler2RotationMatrix(euler); + + float r11 = (float) currRot(0,0); + float r12 = (float) currRot(0,1); + float r13 = (float) currRot(0,2); + float r21 = (float) currRot(1,0); + float r22 = (float) currRot(1,1); + float r23 = (float) currRot(1,2); + float r31 = (float) currRot(2,0); + float r32 = (float) currRot(2,1); + float r33 = (float) currRot(2,2); + + cv::MatIterator_ Jx = Jacobian.begin(); + cv::MatIterator_ Jy = Jx + n * (6 + m); + cv::MatConstIterator_ Vx = this->princ_comp.begin(); + cv::MatConstIterator_ Vy = Vx + n*m; + cv::MatConstIterator_ Vz = Vy + n*m; + + for(int i = 0; i < n; i++) + { + + X = shape_3D.at(i,0); + Y = shape_3D.at(i+n,0); + Z = shape_3D.at(i+n*2,0); + + // The rigid jacobian from the axis angle rotation matrix approximation using small angle assumption (R * R') + // where R' = [1, -wz, wy + // wz, 1, -wx + // -wy, wx, 1] + // And this is derived using the small angle assumption on the axis angle rotation matrix parametrisation + + // scaling term + *Jx++ = (X * r11 + Y * r12 + Z * r13); + *Jy++ = (X * r21 + Y * r22 + Z * r23); + + // rotation terms + *Jx++ = (s * (Y * r13 - Z * r12) ); + *Jy++ = (s * (Y * r23 - Z * r22) ); + *Jx++ = (-s * (X * r13 - Z * r11)); + *Jy++ = (-s * (X * r23 - Z * r21)); + *Jx++ = (s * (X * r12 - Y * r11) ); + *Jy++ = (s * (X * r22 - Y * r21) ); + + // translation terms + *Jx++ = 1.0f; + *Jy++ = 0.0f; + *Jx++ = 0.0f; + *Jy++ = 1.0f; + + for(int j = 0; j < m; j++,++Vx,++Vy,++Vz) + { + // How much the change of the non-rigid parameters (when object is rotated) affect 2D motion + *Jx++ = (float) ( s*(r11*(*Vx) + r12*(*Vy) + r13*(*Vz)) ); + *Jy++ = (float) ( s*(r21*(*Vx) + r22*(*Vy) + r23*(*Vz)) ); + } + } + + // Adding the weights here + cv::Mat Jacob_w = Jacobian.clone(); + + if(cv::trace(W)[0] != W.rows) + { + Jx = Jacobian.begin(); + Jy = Jx + n*(6+m); + + cv::MatIterator_ Jx_w = Jacob_w.begin(); + cv::MatIterator_ Jy_w = Jx_w + n*(6+m); + + // Iterate over all Jacobian values and multiply them by the weight in diagonal of W + for(int i = 0; i < n; i++) + { + float w_x = W.at(i, i); + float w_y = W.at(i+n, i+n); + + for(int j = 0; j < Jacobian.cols; ++j) + { + *Jx_w++ = *Jx++ * w_x; + *Jy_w++ = *Jy++ * w_y; + } + } + } + Jacob_t_w = Jacob_w.t(); + +} + +//=========================================================================== +// Updating the parameters (more details in my thesis) +void PDM::UpdateModelParameters(const cv::Mat_& delta_p, cv::Mat_& params_local, cv::Vec6d& params_global) const +{ + + // The scaling and translation parameters can be just added + params_global[0] += (double)delta_p.at(0,0); + params_global[4] += (double)delta_p.at(4,0); + params_global[5] += (double)delta_p.at(5,0); + + // get the original rotation matrix + cv::Vec3d eulerGlobal(params_global[1], params_global[2], params_global[3]); + cv::Matx33d R1 = Euler2RotationMatrix(eulerGlobal); + + // construct R' = [1, -wz, wy + // wz, 1, -wx + // -wy, wx, 1] + cv::Matx33d R2 = cv::Matx33d::eye(); + + R2(1,2) = -1.0*(R2(2,1) = (double)delta_p.at(1,0)); + R2(2,0) = -1.0*(R2(0,2) = (double)delta_p.at(2,0)); + R2(0,1) = -1.0*(R2(1,0) = (double)delta_p.at(3,0)); + + // Make sure it's orthonormal + Orthonormalise(R2); + + // Combine rotations + cv::Matx33d R3 = R1 *R2; + + // Extract euler angle (through axis angle first to make sure it's legal) + cv::Vec3d axis_angle = RotationMatrix2AxisAngle(R3); + cv::Vec3d euler = AxisAngle2Euler(axis_angle); + + params_global[1] = euler[0]; + params_global[2] = euler[1]; + params_global[3] = euler[2]; + + // Local parameter update, just simple addition + if(delta_p.rows > 6) + { + params_local = params_local + delta_p(cv::Rect(0,6,1, this->NumberOfModes())); + } + +} + +void PDM::CalcParams(cv::Vec6d& out_params_global, cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation) const +{ + + int m = this->NumberOfModes(); + int n = this->NumberOfPoints(); + + // The new number of points + n = this->mean_shape.rows / 3; + + // Compute the initial global parameters + double min_x; + double max_x; + cv::minMaxLoc(landmark_locations(cv::Rect(0, 0, 1, this->NumberOfPoints())), &min_x, &max_x); + + double min_y; + double max_y; + cv::minMaxLoc(landmark_locations(cv::Rect(0, this->NumberOfPoints(), 1, this->NumberOfPoints())), &min_y, &max_y); + + double width = abs(min_x - max_x); + double height = abs(min_y - max_y); + + cv::Rect model_bbox; + CalcBoundingBox(model_bbox, cv::Vec6d(1.0, 0.0, 0.0, 0.0, 0.0, 0.0), cv::Mat_(this->NumberOfModes(), 1, 0.0)); + + cv::Rect bbox((int)min_x, (int)min_y, (int)width, (int)height); + + double scaling = ((width / model_bbox.width) + (height / model_bbox.height)) / 2; + + cv::Vec3d rotation_init = rotation; + cv::Matx33d R = Euler2RotationMatrix(rotation_init); + cv::Vec2d translation((min_x + max_x) / 2.0, (min_y + max_y) / 2.0); + + cv::Mat_ loc_params(this->NumberOfModes(),1, 0.0); + cv::Vec6d glob_params(scaling, rotation_init[0], rotation_init[1], rotation_init[2], translation[0], translation[1]); + + // get the 3D shape of the object + cv::Mat_ loc_params_d; + loc_params.convertTo(loc_params_d, CV_64F); + cv::Mat_ shape_3D = mean_shape + princ_comp * loc_params_d; + + cv::Mat_ curr_shape(2*n, 1); + + // for every vertex + for(int i = 0; i < n; i++) + { + // Transform this using the weak-perspective mapping to 2D from 3D + curr_shape.at(i ,0) = scaling * ( R(0,0) * shape_3D.at(i, 0) + R(0,1) * shape_3D.at(i+n ,0) + R(0,2) * shape_3D.at(i+n*2,0) ) + translation[0]; + curr_shape.at(i+n,0) = scaling * ( R(1,0) * shape_3D.at(i, 0) + R(1,1) * shape_3D.at(i+n ,0) + R(1,2) * shape_3D.at(i+n*2,0) ) + translation[1]; + } + + double currError = cv::norm(curr_shape - landmark_locations); + + cv::Mat_ regularisations = cv::Mat_::zeros(1, 6 + m); + + double reg_factor = 1; + + // Setting the regularisation to the inverse of eigenvalues + cv::Mat(reg_factor / this->eigen_values).copyTo(regularisations(cv::Rect(6, 0, m, 1))); + cv::Mat_ regTerm_d = cv::Mat::diag(regularisations.t()); + regTerm_d.convertTo(regularisations, CV_32F); + + cv::Mat_ WeightMatrix = cv::Mat_::eye(n*2, n*2); + + int not_improved_in = 0; + + for (size_t i = 0; i < 1000; ++i) + { + // get the 3D shape of the object + cv::Mat_ loc_params_d; + loc_params.convertTo(loc_params_d, CV_64F); + shape_3D = mean_shape + princ_comp * loc_params_d; + + shape_3D = shape_3D.reshape(1, 3); + + cv::Matx23d R_2D(R(0,0), R(0,1), R(0,2), R(1,0), R(1,1), R(1,2)); + + cv::Mat_ curr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t(); + curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0); + curr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1); + + curr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2); + + cv::Mat_ error_resid; + cv::Mat(landmark_locations - curr_shape_2D).convertTo(error_resid, CV_32F); + + cv::Mat_ J, J_w_t; + this->ComputeJacobian(loc_params, glob_params, J, WeightMatrix, J_w_t); + + // projection of the meanshifts onto the jacobians (using the weighted Jacobian, see Baltrusaitis 2013) + cv::Mat_ J_w_t_m = J_w_t * error_resid; + + // Add the regularisation term + J_w_t_m(cv::Rect(0,6,1, m)) = J_w_t_m(cv::Rect(0,6,1, m)) - regularisations(cv::Rect(6,6, m, m)) * loc_params; + + cv::Mat_ Hessian = J_w_t * J; + + // Add the Tikhonov regularisation + Hessian = Hessian + regularisations; + + // Solve for the parameter update (from Baltrusaitis 2013 based on eq (36) Saragih 2011) + cv::Mat_ param_update; + cv::solve(Hessian, J_w_t_m, param_update, CV_CHOLESKY); + + // To not overshoot, have the gradient decent rate a bit smaller + param_update = 0.5 * param_update; + + UpdateModelParameters(param_update, loc_params, glob_params); + + scaling = glob_params[0]; + rotation_init[0] = glob_params[1]; + rotation_init[1] = glob_params[2]; + rotation_init[2] = glob_params[3]; + + translation[0] = glob_params[4]; + translation[1] = glob_params[5]; + + R = Euler2RotationMatrix(rotation_init); + + R_2D(0,0) = R(0,0);R_2D(0,1) = R(0,1); R_2D(0,2) = R(0,2); + R_2D(1,0) = R(1,0);R_2D(1,1) = R(1,1); R_2D(1,2) = R(1,2); + + curr_shape_2D = scaling * shape_3D.t() * cv::Mat(R_2D).t(); + curr_shape_2D.col(0) = curr_shape_2D.col(0) + translation(0); + curr_shape_2D.col(1) = curr_shape_2D.col(1) + translation(1); + + curr_shape_2D = cv::Mat(curr_shape_2D.t()).reshape(1, n * 2); + + double error = cv::norm(curr_shape_2D - landmark_locations); + + if(0.999 * currError < error) + { + not_improved_in++; + if (not_improved_in == 5) + { + break; + } + } + + currError = error; + + } + + out_params_global = glob_params; + loc_params.convertTo(out_params_local, CV_64F); + + +} + +void PDM::Read(std::string location) +{ + + std::ifstream pdmLoc(location, std::ios_base::in); + + SkipComments(pdmLoc); + + // Reading mean values + ReadMat(pdmLoc,mean_shape); + + SkipComments(pdmLoc); + + // Reading principal components + ReadMat(pdmLoc,princ_comp); + + SkipComments(pdmLoc); + + // Reading eigenvalues + ReadMat(pdmLoc,eigen_values); + +} diff --git a/lib/local/FaceAnalyser/src/SVM_dynamic_lin.cpp b/lib/local/FaceAnalyser/src/SVM_dynamic_lin.cpp index edf4ac4..9c224c0 100644 --- a/lib/local/FaceAnalyser/src/SVM_dynamic_lin.cpp +++ b/lib/local/FaceAnalyser/src/SVM_dynamic_lin.cpp @@ -31,11 +31,10 @@ // in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. // /////////////////////////////////////////////////////////////////////////////// +#include "Face_utils.h" #include "SVM_dynamic_lin.h" -#include "LandmarkCoreIncludes.h" - using namespace FaceAnalysis; void SVM_dynamic_lin::Read(std::ifstream& stream, const std::vector& au_names) @@ -43,20 +42,20 @@ void SVM_dynamic_lin::Read(std::ifstream& stream, const std::vector if(this->means.empty()) { - LandmarkDetector::ReadMatBin(stream, this->means); + ReadMatBin(stream, this->means); } else { cv::Mat_ m_tmp; - LandmarkDetector::ReadMatBin(stream, m_tmp); + ReadMatBin(stream, m_tmp); if(cv::norm(m_tmp - this->means > 0.00001)) { - cout << "Something went wrong with the SVM dynamic classifiers" << endl; + std::cout << "Something went wrong with the SVM dynamic classifiers" << std::endl; } } cv::Mat_ support_vectors_curr; - LandmarkDetector::ReadMatBin(stream, support_vectors_curr); + ReadMatBin(stream, support_vectors_curr); double bias; stream.read((char *)&bias, 8); diff --git a/lib/local/FaceAnalyser/src/SVM_static_lin.cpp b/lib/local/FaceAnalyser/src/SVM_static_lin.cpp index d125dd1..89b04ad 100644 --- a/lib/local/FaceAnalyser/src/SVM_static_lin.cpp +++ b/lib/local/FaceAnalyser/src/SVM_static_lin.cpp @@ -31,11 +31,10 @@ // in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. // /////////////////////////////////////////////////////////////////////////////// +#include "Face_utils.h" #include "SVM_static_lin.h" -#include "LandmarkCoreIncludes.h" - using namespace FaceAnalysis; void SVM_static_lin::Read(std::ifstream& stream, const std::vector& au_names) @@ -43,20 +42,20 @@ void SVM_static_lin::Read(std::ifstream& stream, const std::vector& if(this->means.empty()) { - LandmarkDetector::ReadMatBin(stream, this->means); + ReadMatBin(stream, this->means); } else { cv::Mat_ m_tmp; - LandmarkDetector::ReadMatBin(stream, m_tmp); + ReadMatBin(stream, m_tmp); if(cv::norm(m_tmp - this->means > 0.00001)) { - cout << "Something went wrong with the SVM static classifiers" << endl; + std::cout << "Something went wrong with the SVM static classifiers" << std::endl; } } cv::Mat_ support_vectors_curr; - LandmarkDetector::ReadMatBin(stream, support_vectors_curr); + ReadMatBin(stream, support_vectors_curr); double bias; stream.read((char *)&bias, 8); diff --git a/lib/local/FaceAnalyser/src/SVR_dynamic_lin_regressors.cpp b/lib/local/FaceAnalyser/src/SVR_dynamic_lin_regressors.cpp index 5f9cd71..1255b3d 100644 --- a/lib/local/FaceAnalyser/src/SVR_dynamic_lin_regressors.cpp +++ b/lib/local/FaceAnalyser/src/SVR_dynamic_lin_regressors.cpp @@ -32,9 +32,9 @@ // /////////////////////////////////////////////////////////////////////////////// -#include "SVR_dynamic_lin_regressors.h" +#include "Face_utils.h" -#include "LandmarkCoreIncludes.h" +#include "SVR_dynamic_lin_regressors.h" using namespace FaceAnalysis; @@ -49,20 +49,20 @@ void SVR_dynamic_lin_regressors::Read(std::ifstream& stream, const std::vectormeans.empty()) { - LandmarkDetector::ReadMatBin(stream, this->means); + ReadMatBin(stream, this->means); } else { cv::Mat_ m_tmp; - LandmarkDetector::ReadMatBin(stream, m_tmp); + ReadMatBin(stream, m_tmp); if(cv::norm(m_tmp - this->means > 0.00001)) { - cout << "Something went wrong with the SVR dynamic regressors" << endl; + std::cout << "Something went wrong with the SVR dynamic regressors" << std::endl; } } cv::Mat_ support_vectors_curr; - LandmarkDetector::ReadMatBin(stream, support_vectors_curr); + ReadMatBin(stream, support_vectors_curr); double bias; stream.read((char *)&bias, 8); diff --git a/lib/local/FaceAnalyser/src/SVR_static_lin_regressors.cpp b/lib/local/FaceAnalyser/src/SVR_static_lin_regressors.cpp index 697d3a7..71e26b7 100644 --- a/lib/local/FaceAnalyser/src/SVR_static_lin_regressors.cpp +++ b/lib/local/FaceAnalyser/src/SVR_static_lin_regressors.cpp @@ -32,9 +32,9 @@ // /////////////////////////////////////////////////////////////////////////////// -#include "SVR_static_lin_regressors.h" +#include "Face_utils.h" -#include "LandmarkCoreIncludes.h" +#include "SVR_static_lin_regressors.h" using namespace FaceAnalysis; @@ -43,20 +43,20 @@ void SVR_static_lin_regressors::Read(std::ifstream& stream, const std::vectormeans.empty()) { - LandmarkDetector::ReadMatBin(stream, this->means); + ReadMatBin(stream, this->means); } else { cv::Mat_ m_tmp; - LandmarkDetector::ReadMatBin(stream, m_tmp); + ReadMatBin(stream, m_tmp); if(cv::norm(m_tmp - this->means > 0.00001)) { - cout << "Something went wrong with the SVR static regressors" << endl; + std::cout << "Something went wrong with the SVR static regressors" << std::endl; } } cv::Mat_ support_vectors_curr; - LandmarkDetector::ReadMatBin(stream, support_vectors_curr); + ReadMatBin(stream, support_vectors_curr); double bias; stream.read((char *)&bias, 8); diff --git a/lib/local/GazeAnalyser/GazeAnalyser.vcxproj b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj new file mode 100644 index 0000000..9b22cad --- /dev/null +++ b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj @@ -0,0 +1,158 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {5F915541-F531-434F-9C81-79F5DB58012B} + GazeAnalyser + 8.1 + + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ProjectDir)$(Configuration)\ + + + $(ProjectDir)$(Configuration)\ + + + + Level3 + Disabled + true + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + StreamingSIMDExtensions2 + + + + + Level3 + Disabled + true + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_LIB;EIGEN_MPL2_ONLY;%(PreprocessorDefinitions) + AdvancedVectorExtensions + + + + + Level3 + MaxSpeed + true + true + + + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + true + true + + + + + Level3 + MaxSpeed + true + true + + + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + true + WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions) + AdvancedVectorExtensions + + + true + true + + + + + + + + + + + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} + + + + + + \ No newline at end of file diff --git a/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters new file mode 100644 index 0000000..e15fb02 --- /dev/null +++ b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters @@ -0,0 +1,23 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/lib/local/FaceAnalyser/include/GazeEstimation.h b/lib/local/GazeAnalyser/include/GazeEstimation.h similarity index 97% rename from lib/local/FaceAnalyser/include/GazeEstimation.h rename to lib/local/GazeAnalyser/include/GazeEstimation.h index 4cbf550..2f30282 100644 --- a/lib/local/FaceAnalyser/include/GazeEstimation.h +++ b/lib/local/GazeAnalyser/include/GazeEstimation.h @@ -35,10 +35,11 @@ #ifndef __GAZEESTIMATION_h_ #define __GAZEESTIMATION_h_ -#include "opencv2/core/core.hpp" -#include "LandmarkCoreIncludes.h" +#include "LandmarkDetectorModel.h" -namespace FaceAnalysis +#include "opencv2/core/core.hpp" + +namespace GazeAnalysis { void EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye); diff --git a/lib/local/FaceAnalyser/src/GazeEstimation.cpp b/lib/local/GazeAnalyser/src/GazeEstimation.cpp similarity index 95% rename from lib/local/FaceAnalyser/src/GazeEstimation.cpp rename to lib/local/GazeAnalyser/src/GazeEstimation.cpp index a8d2f4b..b0889f6 100644 --- a/lib/local/FaceAnalyser/src/GazeEstimation.cpp +++ b/lib/local/GazeAnalyser/src/GazeEstimation.cpp @@ -40,9 +40,12 @@ #include "GazeEstimation.h" +#include "LandmarkDetectorUtils.h" +#include "LandmarkDetectorFunc.h" + using namespace std; -using namespace FaceAnalysis; +using namespace GazeAnalysis; // For subpixel accuracy drawing const int gaze_draw_shiftbits = 4; @@ -76,7 +79,7 @@ cv::Point3f RaySphereIntersect(cv::Point3f rayOrigin, cv::Point3f rayDir, cv::Po return rayOrigin + rayDir * t; } -cv::Point3f FaceAnalysis::GetPupilPosition(cv::Mat_ eyeLdmks3d){ +cv::Point3f GazeAnalysis::GetPupilPosition(cv::Mat_ eyeLdmks3d){ eyeLdmks3d = eyeLdmks3d.t(); @@ -86,7 +89,7 @@ cv::Point3f FaceAnalysis::GetPupilPosition(cv::Mat_ eyeLdmks3d){ return p; } -void FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye) +void GazeAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye) { cv::Vec6d headPose = LandmarkDetector::GetPose(clnf_model, fx, fy, cx, cy); cv::Vec3d eulerAngles(headPose(3), headPose(4), headPose(5)); @@ -133,7 +136,7 @@ void FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Po gaze_absolute = gazeVecAxis / norm(gazeVecAxis); } -cv::Vec2d FaceAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& gaze_vector_2, cv::Vec6d head_pose) +cv::Vec2d GazeAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& gaze_vector_2, cv::Vec6d head_pose) { cv::Vec3d eulerAngles(head_pose(3), head_pose(4), head_pose(5)); @@ -149,7 +152,7 @@ cv::Vec2d FaceAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& ga return cv::Vec2d(x_angle, y_angle); } -void FaceAnalysis::DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy) +void GazeAnalysis::DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy) { cv::Mat cameraMat = (cv::Mat_(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 0); diff --git a/lib/local/LandmarkDetector/include/LandmarkDetectorUtils.h b/lib/local/LandmarkDetector/include/LandmarkDetectorUtils.h index 39671e7..00e0a9d 100644 --- a/lib/local/LandmarkDetector/include/LandmarkDetectorUtils.h +++ b/lib/local/LandmarkDetector/include/LandmarkDetectorUtils.h @@ -89,9 +89,14 @@ namespace LandmarkDetector vector> CalculateBox(cv::Vec6d pose, float fx, float fy, float cx, float cy); void DrawBox(vector> lines, cv::Mat image, cv::Scalar color, int thickness); - vector CalculateLandmarks(const cv::Mat_& shape2D, const cv::Mat_& visibilities); - vector CalculateLandmarks(const CLNF& clnf_model); - vector CalculateEyeLandmarks(const CLNF& clnf_model); + vector CalculateVisibleLandmarks(const cv::Mat_& shape2D, const cv::Mat_& visibilities); + vector CalculateVisibleLandmarks(const CLNF& clnf_model); + vector CalculateVisibleEyeLandmarks(const CLNF& clnf_model); + + vector CalculateAllLandmarks(const cv::Mat_& shape2D); + vector CalculateAllLandmarks(const CLNF& clnf_model); + vector CalculateAllEyeLandmarks(const CLNF& clnf_model); + void DrawLandmarks(cv::Mat img, vector landmarks); void Draw(cv::Mat img, const cv::Mat_& shape2D, const cv::Mat_& visibilities); diff --git a/lib/local/LandmarkDetector/include/PAW.h b/lib/local/LandmarkDetector/include/PAW.h index f9ac33b..bf11c47 100644 --- a/lib/local/LandmarkDetector/include/PAW.h +++ b/lib/local/LandmarkDetector/include/PAW.h @@ -127,7 +127,10 @@ public: private: - int findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess = -1) const; + // Helper functions for dealing with triangles + static bool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); + static bool pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); + static int findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess = -1); }; //=========================================================================== diff --git a/lib/local/LandmarkDetector/include/PDM.h b/lib/local/LandmarkDetector/include/PDM.h index 4608787..2b03f51 100644 --- a/lib/local/LandmarkDetector/include/PDM.h +++ b/lib/local/LandmarkDetector/include/PDM.h @@ -84,7 +84,7 @@ class PDM{ void CalcParams(cv::Vec6d& out_params_global, const cv::Rect_& bounding_box, const cv::Mat_& params_local, const cv::Vec3d rotation = cv::Vec3d(0.0)); // Provided the landmark location compute global and local parameters best fitting it (can provide optional rotation for potentially better results) - void CalcParams(cv::Vec6d& out_params_global, const cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation = cv::Vec3d(0.0)); + void CalcParams(cv::Vec6d& out_params_global, cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation = cv::Vec3d(0.0)); // provided the model parameters, compute the bounding box of a face void CalcBoundingBox(cv::Rect& out_bounding_box, const cv::Vec6d& params_global, const cv::Mat_& params_local); @@ -95,6 +95,10 @@ class PDM{ // Given the current parameters, and the computed delta_p compute the updated parameters void UpdateModelParameters(const cv::Mat_& delta_p, cv::Mat_& params_local, cv::Vec6d& params_global); + + // Helper utilities + private: + static void Orthonormalise(cv::Matx33d &R); }; //=========================================================================== diff --git a/lib/local/LandmarkDetector/model/main_clnf_demos.txt b/lib/local/LandmarkDetector/model/main_clnf_demos.txt index 22e365e..87a5f7b 100644 --- a/lib/local/LandmarkDetector/model/main_clnf_demos.txt +++ b/lib/local/LandmarkDetector/model/main_clnf_demos.txt @@ -1,4 +1,4 @@ -LandmarkDetector clnf_general.txt +LandmarkDetector AU_all_best.txt LandmarkDetector_part model_eye/main_clnf_synth_left.txt left_eye_28 36 8 37 10 38 12 39 14 40 16 41 18 LandmarkDetector_part model_eye/main_clnf_synth_right.txt right_eye_28 42 8 43 10 44 12 45 14 46 16 47 18 DetectionValidator detection_validation/validator_general_68.txt diff --git a/lib/local/LandmarkDetector/src/LandmarkDetectorUtils.cpp b/lib/local/LandmarkDetector/src/LandmarkDetectorUtils.cpp index 1f58b5e..4bb3b23 100644 --- a/lib/local/LandmarkDetector/src/LandmarkDetectorUtils.cpp +++ b/lib/local/LandmarkDetector/src/LandmarkDetectorUtils.cpp @@ -977,7 +977,7 @@ void DrawBox(vector> lines, cv::Mat image, cv::Scalar } // Computing landmarks (to be drawn later possibly) -vector CalculateLandmarks(const cv::Mat_& shape2D, const cv::Mat_& visibilities) +vector CalculateVisibleLandmarks(const cv::Mat_& shape2D, const cv::Mat_& visibilities) { int n = shape2D.rows/2; vector landmarks; @@ -996,7 +996,7 @@ vector CalculateLandmarks(const cv::Mat_& shape2D, const cv } // Computing landmarks (to be drawn later possibly) -vector CalculateLandmarks(const cv::Mat_& shape2D) +vector CalculateAllLandmarks(const cv::Mat_& shape2D) { int n; @@ -1030,18 +1030,29 @@ vector CalculateLandmarks(const cv::Mat_& shape2D) } // Computing landmarks (to be drawn later possibly) -vector CalculateLandmarks(const CLNF& clnf_model) +vector CalculateAllLandmarks(const CLNF& clnf_model) { + return CalculateAllLandmarks(clnf_model.detected_landmarks); +} - int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0); - - // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation - return CalculateLandmarks(clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]); - +// Computing landmarks (to be drawn later possibly) +vector CalculateVisibleLandmarks(const CLNF& clnf_model) +{ + // If the detection was not successful no landmarks are visible + if(clnf_model.detection_success) + { + int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0); + // Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation + return CalculateVisibleLandmarks(clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]); + } + else + { + return vector(); + } } // Computing eye landmarks (to be drawn later or in different interfaces) -vector CalculateEyeLandmarks(const CLNF& clnf_model) +vector CalculateVisibleEyeLandmarks(const CLNF& clnf_model) { vector to_return; @@ -1053,7 +1064,7 @@ vector CalculateEyeLandmarks(const CLNF& clnf_model) clnf_model.hierarchical_model_names[i].compare("right_eye_28") == 0) { - auto lmks = CalculateLandmarks(clnf_model.hierarchical_models[i]); + auto lmks = CalculateVisibleLandmarks(clnf_model.hierarchical_models[i]); for (auto lmk : lmks) { to_return.push_back(lmk); @@ -1063,6 +1074,28 @@ vector CalculateEyeLandmarks(const CLNF& clnf_model) return to_return; } +// Computing eye landmarks (to be drawn later or in different interfaces) +vector CalculateAllEyeLandmarks(const CLNF& clnf_model) +{ + + vector to_return; + // If the model has hierarchical updates draw those too + for (size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i) + { + + if (clnf_model.hierarchical_model_names[i].compare("left_eye_28") == 0 || + clnf_model.hierarchical_model_names[i].compare("right_eye_28") == 0) + { + + auto lmks = CalculateAllLandmarks(clnf_model.hierarchical_models[i]); + for (auto lmk : lmks) + { + to_return.push_back(lmk); + } + } + } + return to_return; +} // Drawing landmarks on a face image void Draw(cv::Mat img, const cv::Mat_& shape2D, const cv::Mat_& visibilities) diff --git a/lib/local/LandmarkDetector/src/PAW.cpp b/lib/local/LandmarkDetector/src/PAW.cpp index d07c6fc..fa5e105 100644 --- a/lib/local/LandmarkDetector/src/PAW.cpp +++ b/lib/local/LandmarkDetector/src/PAW.cpp @@ -426,7 +426,7 @@ void PAW::WarpRegion(cv::Mat_& mapx, cv::Mat_& mapy) // ============================================================ // Is the point (x0,y0) on same side as a half-plane defined by (x1,y1), (x2, y2), and (x3, y3) -bool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) +bool PAW::sameSide(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) { double x = (x3-x2)*(y0-y2) - (x0-x2)*(y3-y2); @@ -437,7 +437,7 @@ bool sameSide(double x0, double y0, double x1, double y1, double x2, double y2, } // if point (x0, y0) is on same side for all three half-planes it is in a triangle -bool pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) +bool PAW::pointInTriangle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) { bool same_1 = sameSide(x0, y0, x1, y1, x2, y2, x3, y3); bool same_2 = sameSide(x0, y0, x2, y2, x1, y1, x3, y3); @@ -448,7 +448,7 @@ bool pointInTriangle(double x0, double y0, double x1, double y1, double x2, doub } // Find if a given point lies in the triangles -int PAW::findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess) const +int PAW::findTriangle(const cv::Point_& point, const std::vector>& control_points, int guess) { int num_tris = control_points.size(); diff --git a/lib/local/LandmarkDetector/src/PDM.cpp b/lib/local/LandmarkDetector/src/PDM.cpp index f51f029..74b0eef 100644 --- a/lib/local/LandmarkDetector/src/PDM.cpp +++ b/lib/local/LandmarkDetector/src/PDM.cpp @@ -55,7 +55,7 @@ using namespace LandmarkDetector; //============================================================================= // Orthonormalising the 3x3 rotation matrix -void Orthonormalise(cv::Matx33d &R) +void PDM::Orthonormalise(cv::Matx33d &R) { cv::SVD svd(R,cv::SVD::MODIFY_A); @@ -493,7 +493,7 @@ void PDM::UpdateModelParameters(const cv::Mat_& delta_p, cv::Mat_& } -void PDM::CalcParams(cv::Vec6d& out_params_global, const cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation) +void PDM::CalcParams(cv::Vec6d& out_params_global, cv::Mat_& out_params_local, const cv::Mat_& landmark_locations, const cv::Vec3d rotation) { int m = this->NumberOfModes(); diff --git a/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_class.txt b/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_class.txt index ceee815..e603e76 100644 --- a/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_class.txt +++ b/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_class.txt @@ -1,11 +1,11 @@ -AU1 class, Precision - 0.500, Recall - 0.522, F1 - 0.511 -AU2 class, Precision - 0.380, Recall - 0.450, F1 - 0.412 -AU4 class, Precision - 0.459, Recall - 0.503, F1 - 0.480 -AU6 class, Precision - 0.738, Recall - 0.774, F1 - 0.755 -AU7 class, Precision - 0.762, Recall - 0.732, F1 - 0.747 -AU10 class, Precision - 0.847, Recall - 0.842, F1 - 0.844 -AU12 class, Precision - 0.888, Recall - 0.816, F1 - 0.850 -AU14 class, Precision - 0.547, Recall - 0.807, F1 - 0.652 -AU15 class, Precision - 0.396, Recall - 0.419, F1 - 0.407 -AU17 class, Precision - 0.630, Recall - 0.593, F1 - 0.611 -AU23 class, Precision - 0.338, Recall - 0.597, F1 - 0.431 +AU1 class, Precision - 0.503, Recall - 0.518, F1 - 0.511 +AU2 class, Precision - 0.377, Recall - 0.445, F1 - 0.408 +AU4 class, Precision - 0.456, Recall - 0.514, F1 - 0.484 +AU6 class, Precision - 0.735, Recall - 0.780, F1 - 0.757 +AU7 class, Precision - 0.762, Recall - 0.731, F1 - 0.746 +AU10 class, Precision - 0.846, Recall - 0.842, F1 - 0.844 +AU12 class, Precision - 0.887, Recall - 0.816, F1 - 0.850 +AU14 class, Precision - 0.544, Recall - 0.809, F1 - 0.650 +AU15 class, Precision - 0.400, Recall - 0.418, F1 - 0.409 +AU17 class, Precision - 0.627, Recall - 0.595, F1 - 0.611 +AU23 class, Precision - 0.332, Recall - 0.604, F1 - 0.428 diff --git a/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_int.txt b/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_int.txt index 270d61d..c7fde2b 100644 --- a/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_int.txt +++ b/matlab_runners/Action Unit Experiments/results/BP4D_valid_res_int.txt @@ -1,5 +1,5 @@ -AU6 results - rms 0.863, corr 0.780, ccc - 0.735 -AU10 results - rms 1.035, corr 0.738, ccc - 0.684 -AU12 results - rms 0.814, corr 0.867, ccc - 0.834 -AU14 results - rms 1.107, corr 0.531, ccc - 0.486 -AU17 results - rms 0.834, corr 0.592, ccc - 0.488 +AU6 results - rms 0.866, corr 0.779, ccc - 0.732 +AU10 results - rms 1.044, corr 0.736, ccc - 0.678 +AU12 results - rms 0.828, corr 0.867, ccc - 0.827 +AU14 results - rms 1.103, corr 0.534, ccc - 0.487 +AU17 results - rms 0.835, corr 0.591, ccc - 0.486 diff --git a/matlab_runners/Action Unit Experiments/results/Bosphorus_res_class.txt b/matlab_runners/Action Unit Experiments/results/Bosphorus_res_class.txt index a15af3a..9d5c0e9 100644 --- a/matlab_runners/Action Unit Experiments/results/Bosphorus_res_class.txt +++ b/matlab_runners/Action Unit Experiments/results/Bosphorus_res_class.txt @@ -1,17 +1,17 @@ -AU1 class, Precision - 0.396, Recall - 0.724, F1 - 0.512 +AU1 class, Precision - 0.393, Recall - 0.727, F1 - 0.510 AU2 class, Precision - 0.266, Recall - 0.850, F1 - 0.405 -AU4 class, Precision - 0.513, Recall - 0.877, F1 - 0.648 -AU5 class, Precision - 0.293, Recall - 0.968, F1 - 0.450 -AU6 class, Precision - 0.343, Recall - 0.823, F1 - 0.484 +AU4 class, Precision - 0.512, Recall - 0.874, F1 - 0.646 +AU5 class, Precision - 0.294, Recall - 0.968, F1 - 0.450 +AU6 class, Precision - 0.346, Recall - 0.833, F1 - 0.489 AU7 class, Precision - 0.793, Recall - 0.750, F1 - 0.771 -AU9 class, Precision - 0.318, Recall - 0.960, F1 - 0.478 -AU10 class, Precision - 0.349, Recall - 0.769, F1 - 0.480 -AU12 class, Precision - 0.671, Recall - 0.863, F1 - 0.755 -AU14 class, Precision - 0.184, Recall - 0.872, F1 - 0.304 -AU15 class, Precision - 0.184, Recall - 0.858, F1 - 0.302 -AU17 class, Precision - 0.295, Recall - 0.886, F1 - 0.443 -AU20 class, Precision - 0.115, Recall - 0.930, F1 - 0.205 -AU23 class, Precision - 0.106, Recall - 0.874, F1 - 0.189 -AU25 class, Precision - 0.855, Recall - 0.871, F1 - 0.863 -AU26 class, Precision - 0.360, Recall - 0.813, F1 - 0.499 -AU45 class, Precision - 0.321, Recall - 0.768, F1 - 0.453 +AU9 class, Precision - 0.315, Recall - 0.960, F1 - 0.474 +AU10 class, Precision - 0.349, Recall - 0.773, F1 - 0.481 +AU12 class, Precision - 0.674, Recall - 0.864, F1 - 0.757 +AU14 class, Precision - 0.183, Recall - 0.863, F1 - 0.302 +AU15 class, Precision - 0.183, Recall - 0.851, F1 - 0.302 +AU17 class, Precision - 0.293, Recall - 0.889, F1 - 0.441 +AU20 class, Precision - 0.114, Recall - 0.930, F1 - 0.203 +AU23 class, Precision - 0.107, Recall - 0.889, F1 - 0.190 +AU25 class, Precision - 0.860, Recall - 0.873, F1 - 0.866 +AU26 class, Precision - 0.359, Recall - 0.811, F1 - 0.497 +AU45 class, Precision - 0.318, Recall - 0.771, F1 - 0.450 diff --git a/matlab_runners/Action Unit Experiments/results/Bosphorus_res_int.txt b/matlab_runners/Action Unit Experiments/results/Bosphorus_res_int.txt index f4ff4c4..3c1d0aa 100644 --- a/matlab_runners/Action Unit Experiments/results/Bosphorus_res_int.txt +++ b/matlab_runners/Action Unit Experiments/results/Bosphorus_res_int.txt @@ -1,17 +1,17 @@ -AU1 intensity, Corr - 0.717, RMS - 0.894, CCC - 0.667 +AU1 intensity, Corr - 0.717, RMS - 0.892, CCC - 0.668 AU2 intensity, Corr - 0.696, RMS - 0.774, CCC - 0.625 -AU4 intensity, Corr - 0.802, RMS - 0.603, CCC - 0.775 -AU5 intensity, Corr - 0.746, RMS - 0.835, CCC - 0.639 -AU6 intensity, Corr - 0.556, RMS - 0.736, CCC - 0.532 +AU4 intensity, Corr - 0.802, RMS - 0.602, CCC - 0.776 +AU5 intensity, Corr - 0.747, RMS - 0.831, CCC - 0.640 +AU6 intensity, Corr - 0.556, RMS - 0.735, CCC - 0.533 AU7 intensity, Corr - 0.831, RMS - 0.757, CCC - 0.804 AU9 intensity, Corr - 0.779, RMS - 0.551, CCC - 0.738 -AU10 intensity, Corr - 0.494, RMS - 0.721, CCC - 0.473 -AU12 intensity, Corr - 0.807, RMS - 0.717, CCC - 0.751 -AU14 intensity, Corr - 0.347, RMS - 0.905, CCC - 0.278 -AU15 intensity, Corr - 0.526, RMS - 0.539, CCC - 0.447 +AU10 intensity, Corr - 0.495, RMS - 0.719, CCC - 0.475 +AU12 intensity, Corr - 0.810, RMS - 0.714, CCC - 0.753 +AU14 intensity, Corr - 0.348, RMS - 0.896, CCC - 0.280 +AU15 intensity, Corr - 0.527, RMS - 0.538, CCC - 0.448 AU17 intensity, Corr - 0.561, RMS - 0.882, CCC - 0.484 -AU20 intensity, Corr - 0.411, RMS - 0.885, CCC - 0.282 -AU23 intensity, Corr - 0.354, RMS - 0.754, CCC - 0.268 -AU25 intensity, Corr - 0.846, RMS - 0.816, CCC - 0.813 -AU26 intensity, Corr - 0.513, RMS - 0.958, CCC - 0.464 +AU20 intensity, Corr - 0.413, RMS - 0.880, CCC - 0.285 +AU23 intensity, Corr - 0.354, RMS - 0.753, CCC - 0.268 +AU25 intensity, Corr - 0.847, RMS - 0.818, CCC - 0.811 +AU26 intensity, Corr - 0.514, RMS - 0.955, CCC - 0.465 AU45 intensity, Corr - 0.867, RMS - 0.550, CCC - 0.848 diff --git a/matlab_runners/Action Unit Experiments/results/DISFA_valid_res.txt b/matlab_runners/Action Unit Experiments/results/DISFA_valid_res.txt index bcc0751..b0e8949 100644 --- a/matlab_runners/Action Unit Experiments/results/DISFA_valid_res.txt +++ b/matlab_runners/Action Unit Experiments/results/DISFA_valid_res.txt @@ -1,12 +1,12 @@ -AU1 results - corr 0.825, rms 0.413, ccc - 0.803 -AU2 results - corr 0.765, rms 0.444, ccc - 0.659 -AU4 results - corr 0.863, rms 0.583, ccc - 0.838 -AU5 results - corr 0.749, rms 0.179, ccc - 0.717 -AU6 results - corr 0.702, rms 0.604, ccc - 0.657 -AU9 results - corr 0.742, rms 0.384, ccc - 0.689 -AU12 results - corr 0.865, rms 0.510, ccc - 0.850 +AU1 results - corr 0.825, rms 0.414, ccc - 0.802 +AU2 results - corr 0.766, rms 0.444, ccc - 0.659 +AU4 results - corr 0.863, rms 0.583, ccc - 0.837 +AU5 results - corr 0.748, rms 0.179, ccc - 0.713 +AU6 results - corr 0.706, rms 0.591, ccc - 0.665 +AU9 results - corr 0.741, rms 0.384, ccc - 0.688 +AU12 results - corr 0.869, rms 0.494, ccc - 0.857 AU15 results - corr 0.747, rms 0.268, ccc - 0.714 -AU17 results - corr 0.646, rms 0.515, ccc - 0.578 -AU20 results - corr 0.637, rms 0.304, ccc - 0.595 -AU25 results - corr 0.926, rms 0.499, ccc - 0.920 -AU26 results - corr 0.805, rms 0.447, ccc - 0.764 +AU17 results - corr 0.648, rms 0.512, ccc - 0.580 +AU20 results - corr 0.638, rms 0.303, ccc - 0.595 +AU25 results - corr 0.927, rms 0.499, ccc - 0.920 +AU26 results - corr 0.804, rms 0.448, ccc - 0.763 diff --git a/matlab_runners/Action Unit Experiments/results/FERA2011_res_class.txt b/matlab_runners/Action Unit Experiments/results/FERA2011_res_class.txt index 3ee062d..20fac0f 100644 --- a/matlab_runners/Action Unit Experiments/results/FERA2011_res_class.txt +++ b/matlab_runners/Action Unit Experiments/results/FERA2011_res_class.txt @@ -1,11 +1,11 @@ -AU1 class, Precision - 0.588, Recall - 0.708, F1 - 0.643 -AU2 class, Precision - 0.473, Recall - 0.749, F1 - 0.580 -AU4 class, Precision - 0.509, Recall - 0.745, F1 - 0.605 -AU6 class, Precision - 0.834, Recall - 0.667, F1 - 0.741 -AU7 class, Precision - 0.685, Recall - 0.792, F1 - 0.735 -AU10 class, Precision - 0.520, Recall - 0.737, F1 - 0.610 +AU1 class, Precision - 0.587, Recall - 0.715, F1 - 0.644 +AU2 class, Precision - 0.470, Recall - 0.794, F1 - 0.590 +AU4 class, Precision - 0.500, Recall - 0.753, F1 - 0.601 +AU6 class, Precision - 0.835, Recall - 0.674, F1 - 0.746 +AU7 class, Precision - 0.683, Recall - 0.791, F1 - 0.733 +AU10 class, Precision - 0.523, Recall - 0.748, F1 - 0.616 AU12 class, Precision - 0.919, Recall - 0.654, F1 - 0.764 -AU15 class, Precision - 0.362, Recall - 0.634, F1 - 0.461 -AU17 class, Precision - 0.230, Recall - 0.279, F1 - 0.252 -AU25 class, Precision - 0.205, Recall - 0.871, F1 - 0.332 -AU26 class, Precision - 0.122, Recall - 0.974, F1 - 0.217 +AU15 class, Precision - 0.359, Recall - 0.635, F1 - 0.458 +AU17 class, Precision - 0.229, Recall - 0.286, F1 - 0.254 +AU25 class, Precision - 0.205, Recall - 0.869, F1 - 0.332 +AU26 class, Precision - 0.122, Recall - 0.972, F1 - 0.216 diff --git a/matlab_runners/Action Unit Experiments/results/SEMAINE_valid_res.txt b/matlab_runners/Action Unit Experiments/results/SEMAINE_valid_res.txt index 61d76d1..e3d1091 100644 --- a/matlab_runners/Action Unit Experiments/results/SEMAINE_valid_res.txt +++ b/matlab_runners/Action Unit Experiments/results/SEMAINE_valid_res.txt @@ -1,6 +1,6 @@ -AU2 class, Precision - 0.369, Recall - 0.744, F1 - 0.493 -AU12 class, Precision - 0.427, Recall - 0.782, F1 - 0.553 -AU17 class, Precision - 0.126, Recall - 0.815, F1 - 0.219 -AU25 class, Precision - 0.344, Recall - 0.574, F1 - 0.430 -AU28 class, Precision - 0.486, Recall - 0.475, F1 - 0.481 -AU45 class, Precision - 0.289, Recall - 0.621, F1 - 0.394 +AU2 class, Precision - 0.371, Recall - 0.749, F1 - 0.497 +AU12 class, Precision - 0.425, Recall - 0.782, F1 - 0.550 +AU17 class, Precision - 0.126, Recall - 0.810, F1 - 0.218 +AU25 class, Precision - 0.345, Recall - 0.577, F1 - 0.432 +AU28 class, Precision - 0.479, Recall - 0.476, F1 - 0.478 +AU45 class, Precision - 0.290, Recall - 0.621, F1 - 0.395 diff --git a/matlab_runners/Action Unit Experiments/results/UNBC_valid_res_int.txt b/matlab_runners/Action Unit Experiments/results/UNBC_valid_res_int.txt index cfac00f..c16daf0 100644 --- a/matlab_runners/Action Unit Experiments/results/UNBC_valid_res_int.txt +++ b/matlab_runners/Action Unit Experiments/results/UNBC_valid_res_int.txt @@ -1,6 +1,6 @@ -AU6 results - rms 0.889, corr 0.510, ccc - 0.447 -AU7 results - rms 0.632, corr 0.583, ccc - 0.524 -AU10 results - rms 1.264, corr 0.074, ccc - 0.018 -AU12 results - rms 0.740, corr 0.636, ccc - 0.580 +AU6 results - rms 0.885, corr 0.511, ccc - 0.448 +AU7 results - rms 0.626, corr 0.584, ccc - 0.527 +AU10 results - rms 1.258, corr 0.073, ccc - 0.018 +AU12 results - rms 0.734, corr 0.639, ccc - 0.583 AU25 results - rms 0.519, corr 0.513, ccc - 0.466 -AU26 results - rms 0.563, corr 0.411, ccc - 0.365 +AU26 results - rms 0.562, corr 0.412, ccc - 0.366 diff --git a/matlab_runners/Feature Point Experiments/results/fps_yt.mat b/matlab_runners/Feature Point Experiments/results/fps_yt.mat index 05e38fc..8cee010 100644 Binary files a/matlab_runners/Feature Point Experiments/results/fps_yt.mat and b/matlab_runners/Feature Point Experiments/results/fps_yt.mat differ diff --git a/matlab_runners/Feature Point Experiments/results/in-the-wild-res-no-outline.pdf b/matlab_runners/Feature Point Experiments/results/in-the-wild-res-no-outline.pdf index f2d4b93..2885919 100644 Binary files a/matlab_runners/Feature Point Experiments/results/in-the-wild-res-no-outline.pdf and b/matlab_runners/Feature Point Experiments/results/in-the-wild-res-no-outline.pdf differ diff --git a/matlab_runners/Feature Point Experiments/results/landmark_detections.mat b/matlab_runners/Feature Point Experiments/results/landmark_detections.mat index 5db098d..6a6cf2c 100644 Binary files a/matlab_runners/Feature Point Experiments/results/landmark_detections.mat and b/matlab_runners/Feature Point Experiments/results/landmark_detections.mat differ diff --git a/matlab_runners/Gaze Experiments/mpii_1500_errs.mat b/matlab_runners/Gaze Experiments/mpii_1500_errs.mat index 855d36b..c8d485b 100644 Binary files a/matlab_runners/Gaze Experiments/mpii_1500_errs.mat and b/matlab_runners/Gaze Experiments/mpii_1500_errs.mat differ diff --git a/matlab_runners/Head Pose Experiments/results/Pose_OF.mat b/matlab_runners/Head Pose Experiments/results/Pose_OF.mat index b559d2f..f2af4ad 100644 Binary files a/matlab_runners/Head Pose Experiments/results/Pose_OF.mat and b/matlab_runners/Head Pose Experiments/results/Pose_OF.mat differ